{"version":3,"sources":["assets/img/icon-report-high-score-a.svg","assets/img/icon-report-high-score-b.svg","assets/img/icon-report-high-score-c.svg","assets/img/icon-report-high-score-d.svg","assets/img/icon-report-high-score-incomplete.svg","assets/img/icon-factual-fluency.png","assets/img/report/report_icon_1.png","assets/img/report/report_icon_2.png","assets/img/report/report_icon_3.png","assets/img/report/report_icon_4.png","assets/img/report/report_icon_5.png","assets/img/report/report_icon_6.png","assets/img/report/report_icon_7.png","assets/img/report/report_icon_8.png","assets/img/report/report_icon_9.png","assets/img/report/report_icon_10.png","assets/img/report/report_icon_11.png","assets/img/report/report_icon_12.png","assets/img/report/report_icon_no_1.png","assets/img/report/report_icon_no_2.png","assets/img/report/report_icon_no_3.png","assets/img/report/report_icon_no_4.png","assets/img/report/report_icon_no_5.png","assets/img/report/report_icon_no_6.png","assets/img/report/report_icon_no_7.png","assets/img/report/report_icon_no_8.png","assets/img/report/report_icon_no_9.png","assets/img/report/report_icon_no_10.png","assets/img/report/report_icon_no_11.png","assets/img/report/report_icon_no_12.png","services/refreshToken.js","config/index.js","helpers/history.js","helpers/logout.js","services/api.js","services/login.js","services/user.js","stores/login/actions.js","stores/login/actionTypes.js","services/globalFeatures.js","sagas/login.js","sagas/startup.js","stores/startup/actionTypes.js","services/skills.js","sagas/skills.js","stores/skills/actions.js","stores/skills/actionTypes.js","services/variations.js","stores/variations/actions.js","stores/variations/actionTypes.js","sagas/variations.js","stores/levels/actions.js","stores/levels/actionTypes.js","services/levels.js","stores/curriculums/actions.js","stores/curriculums/actionTypes.js","stores/report/actions.js","stores/report/actionTypes.js","services/curriculums.js","helpers/isNilOrEmpty.js","helpers/questionParser.js","constants/index.js","helpers/singleClassReport.js","sagas/curriculums.js","sagas/levels.js","services/syllabus.js","stores/topics/actions.js","stores/topics/actionTypes.js","sagas/syllabus.js","stores/syllabus/actions.js","stores/syllabus/actionTypes.js","services/questions.js","services/cart.js","stores/questions/actions.js","stores/questions/actionTypes.js","stores/worksheet/actions.js","stores/worksheet/actionTypes.js","sagas/questions.js","services/worksheet.js","stores/worksheet/schedule/actions.js","stores/worksheet/schedule/actionTypes.js","stores/worksheet/assign/actions.js","stores/worksheet/assign/actionTypes.js","helpers/hasProp.js","sagas/worksheet.js","stores/utils/lookup/actionTypes.js","services/lookup.js","stores/utils/lookup/actions.js","sagas/lookup.js","stores/assignments/actionTypes.js","services/assignments.js","stores/assignments/actions.js","sagas/assignments.js","stores/manage-class/actionTypes.js","services/manage-class.js","stores/manage-class/actions.js","sagas/manage-class.js","services/reports.js","sagas/reports.js","stores/privateGroup/actionTypes.js","services/privateGroup.js","stores/privateGroup/actions.js","sagas/privateGroup.js","stores/profileSettings/actionTypes.js","services/profileSettings.js","stores/profileSettings/actions.js","sagas/profileSettings.js","stores/createGroup/actionTypes.js","services/createGroup.js","stores/createGroup/actions.js","sagas/createGroup.js","stores/topical-worksheet/actionTypes.js","stores/topical-worksheet/actions.js","services/topical-worksheet.js","sagas/topical-worksheet.js","stores/factual-fluency/actionTypes.js","stores/factual-fluency/actions.js","services/factual-fluency.js","sagas/factual-fluency.js","services/userPreferences.js","stores/userPreferences/actions.js","stores/userPreferences/actionTypes.js","sagas/userPreferences.js","services/gameAccessSetting.js","stores/gameSetting/actions.js","stores/gameSetting/actionTypes.js","sagas/gameAccessSetting.js","sagas/index.js","stores/createStore.js","stores/curriculums/reducer.js","stores/filters/actionTypes.js","stores/filters/reducer.js","stores/levels/reducer.js","stores/login/reducer.js","stores/questions/reducer.js","stores/skills/reducer.js","stores/syllabus/reducer.js","stores/topics/reducer.js","stores/variations/reducer.js","stores/utils/step/actionTypes.js","stores/utils/step/reducer.js","stores/worksheet/reducer.js","stores/utils/lookup/reducer.js","stores/privateGroup/reducer.js","stores/worksheet/schedule/reducer.js","stores/worksheet/assign/reducer.js","stores/assignments/reducer.js","stores/manage-class/reducer.js","helpers/reportLevels.js","stores/report/reducer.js","stores/createGroup/reducer.js","stores/profileSettings/reducer.js","stores/topical-worksheet/reducer.js","stores/factual-fluency/reducer.js","stores/gameSetting/reducer.js","stores/userPreferences/reducer.js","stores/index.js","hooks/useSecret.js","components/SelectTopic.js","helpers/openIVM.js","components/Content/ContentType.js","components/Content/Subbar.js","constants/hotsCurr.js","components/Shared/PopupModal.styles.js","components/Shared/PopupModal.js","components/TrialAccount/TrialAccountModalBody.styles.js","components/TrialAccount/TrialAccountModalBody.js","components/Content/VideoOverlay.styles.js","components/Content/VideoOverlay.js","components/Content/NoVideo.styles.js","components/Content/NoVideoFound.js","components/Content/SkillsResult.styles.js","components/Content/SkillsResult.js","pages/BrowseContent/TrialAccount/ProblemSumsTrial.styles.js","pages/BrowseContent/TrialAccount/ProblemSumsTrial.js","helpers/useWindowSize.js","helpers/parseKeys.js","components/Content/ItemWrap.js","components/Content/SimilarQuestions.js","components/Level/DifficultyChillis.js","helpers/text/convertTagsToHTML.js","components/Question/QuestionContent.styles.js","components/Question/QuestionContent.js","components/Content/QuestionCardView.js","components/Shared/Collapse.js","components/Loader/SpinnerOverlay.js","components/Content/QuestionModalView.js","components/Content/SkillItem.js","components/Loader/QuestionLoader.js","components/Content/QuestionsView.js","helpers/filterQuestions.js","components/Loader/SkillsLoader.js","components/Content/SkillsList.js","components/Content/ContentWrap.styles.js","components/Content/ContentWrap.js","helpers/text/slugify.js","stores/filters/actions.js","components/Shared/Checkbox.js","components/Content/DropdownFilter.js","components/Content/QuestionsFilter.js","pages/BrowseContent/QuestionList.js","components/Content/Content.js","components/Content/Overlay.js","components/Sidebar/Sidebar.js","helpers/text/shortenLevel.js","components/Sidebar/SidebarLevels.js","components/Loader/TopicsLoader.js","components/ManageClass/EditClassIconSelector.styles.js","components/MultipleCurriculum/MultipleCurriculumModalBody.styles.js","components/MultipleCurriculum/CurriculumCard.styles.js","components/MultipleCurriculum/CurriculumCard.js","components/MultipleCurriculum/MultipleCurriculumModalBody.js","components/Sidebar/SidebarMultipleCurriculum/SidebarMultipleCurriculum.styles.js","components/Sidebar/SidebarMultipleCurriculum/SidebarMultipleCurriculum.js","components/Sidebar/SidebarTopics.js","components/Header/navs.js","services/switchStudentAccount.js","helpers/localizationNames.js","components/Header/LanguageModal.styles.js","components/Header/LanguageModal.js","components/Header/NavbarNav.js","components/Header/NavItem.js","components/Header/NavbarCollapse.js","components/Header/Header.styles.js","components/Header/Header.js","pages/BrowseContent/BrowseContent.js","components/Level/Radio.js","pages/ChooseLevel.js","components/Sidebar/SidebarNavLink.js","components/Sidebar/SidebarCreateAssign.js","stores/utils/step/actions.js","components/CreateAndAssign/EmptyCartQuestion.js","components/Question/EditPanel.styles.js","components/Question/EditPanel.js","components/CreateAndAssign/QuestionCart/RemoveQuestionModal.styles.js","components/CreateAndAssign/QuestionCart/RemoveQuestionModal.js","components/CreateAndAssign/QuestionCart/WorksheetQuestion.styles.js","components/CreateAndAssign/QuestionCart/WorksheetQuestion.js","components/CreateAndAssign/QuestionCart/WorksheetQuestionModal.js","components/CreateAndAssign/HeaderBox.js","components/Shared/ButtonStepNext.js","components/CreateAndAssign/NavigationWizard.js","components/CreateAndAssign/CheckAllCard.js","components/CreateAndAssign/ValidationMessage.styles.js","components/CreateAndAssign/ValidationMessage.js","pages/CreateAndAssign/QuestionCart/WorksheetQuestions.js","components/Shared/ButtonStepPrev.js","components/CreateAndAssign/QuestionCart/WorksheetForm.js","pages/CreateAndAssign/QuestionCart/WorksheetEdit.js","components/Shared/Stepper.js","components/Shared/StepperWizard.js","components/CreateAndAssign/QuestionCart/WorksheetAssignTitle.js","components/Shared/NewBorder.styles.js","components/Shared/NewBorder.js","components/Question/QuestionHeader.js","components/CreateAndAssign/DateTimeRangePicker.js","components/CreateAndAssign/DateTimePicker.js","components/Sidebar/SidebarRight.js","components/Alert/AlertModal.js","components/Alert/ConfirmModal.js","components/Shared/Spinner.styles.js","components/Shared/Spinner.js","components/Alert/InfoSavedWorksheetModal.js","components/Alert/InfoAssignedWorksheetModal.js","components/Alert/InfoLinkWorksheetModal.js","components/Alert/CartResetModal.js","components/CreateAndAssign/CheckboxClassGroup.js","components/CreateAndAssign/AssignClass.js","components/CreateAndAssign/AssignIndividual.js","components/CreateAndAssign/CheckboxPrivateGroup.js","components/CreateAndAssign/AssignPrivate.js","components/CreateAndAssign/AssignAdmin.js","components/CreateAndAssign/AssignGroup.js","components/CreateAndAssign/AssignRadio.js","components/CreateAndAssign/AssignResult.js","components/CreateAndAssign/AssignModal.js","components/CreateAndAssign/AssignSidebar.styles.js","components/CreateAndAssign/AssignSidebar.js","pages/CreateAndAssign/QuestionCart/WorksheetAssign.js","components/CreateAndAssign/ChooseWorkSheetType.styles.js","components/CreateAndAssign/ChooseWorkSheetType.js","pages/CreateAndAssign/QuestionCart/WorksheetPreviewNew.js","pages/CreateAndAssign/QuestionCart.js","components/CreateAndAssign/SavedWorksheet/SavedWorksheetRowSubMenu.js","helpers/factualFluency.js","components/CreateAndAssign/CircleType.js","components/CreateAndAssign/SavedWorksheet/SavedWorksheetRow.js","components/CreateAndAssign/SavedWorksheet/SavedWorksheetList.js","components/CreateAndAssign/EmptySavedWorksheet.js","components/Shared/Pagination.js","pages/CreateAndAssign/SavedWorksheet.js","components/Shared/DropdownMenu.styles.js","components/Shared/DropdownMenu.js","components/CreateAndAssign/SelectNumberQuestions.styles.js","components/CreateAndAssign/SelectNumberQuestions.js","pages/CreateAndAssign/TopicalWorksheet/TopicalWorksheet.styles.js","pages/CreateAndAssign/TopicalWorksheet/NoSyllabus.js","pages/CreateAndAssign/TopicalWorksheet/TopicalWorksheet.js","components/CreateAndAssign/FactualFluency/TopicItem.style.js","components/CreateAndAssign/FactualFluency/TopicItem.js","components/CreateAndAssign/FactualFluency/TopicList.style.js","components/CreateAndAssign/FactualFluency/TopicList.js","pages/CreateAndAssign/FactualFluency/FactualFluency.styles.js","pages/CreateAndAssign/FactualFluency/NoTopicSkill.js","pages/CreateAndAssign/FactualFluency/FactualFluency.js","components/Search/SearchResult.js","pages/CreateAndAssign/ImportQuestionList.js","components/CreateAndAssign/HeaderFull.js","components/Shared/Border.js","pages/CreateAndAssign/Schedule/ScheduleTime.js","components/CreateAndAssign/Schedule/CheckboxClassGroup.js","components/CreateAndAssign/Schedule/AssignClass.js","components/CreateAndAssign/Schedule/AssignIndividual.js","components/CreateAndAssign/Schedule/CheckboxPrivateGroup.js","components/CreateAndAssign/Schedule/AssignPrivate.js","components/CreateAndAssign/Schedule/AssignAdmin.js","components/CreateAndAssign/Schedule/AssignGroup.js","components/CreateAndAssign/Schedule/AssignRadio.js","components/CreateAndAssign/Schedule/AssignResult.js","pages/CreateAndAssign/Schedule/ScheduleClass.js","components/Shared/PlainText.js","components/Shared/PopoverItems.js","components/Alert/InfoScheduledWorksheetModal.js","components/Alert/InfoLinkScheduledModal.js","pages/CreateAndAssign/Schedule/SchedulePreview.js","pages/CreateAndAssign/Schedule/ScheduleView.js","pages/CreateAndAssign/Assign/AssignTime.js","components/CreateAndAssign/Assign/CheckboxClassGroup.js","components/CreateAndAssign/Assign/AssignClass.js","components/CreateAndAssign/Assign/AssignIndividual.js","components/CreateAndAssign/Assign/CheckboxPrivateGroup.js","components/CreateAndAssign/Assign/AssignPrivate.js","components/CreateAndAssign/Assign/AssignAdmin.js","components/CreateAndAssign/Assign/AssignGroup.js","components/CreateAndAssign/Assign/AssignRadio.js","components/CreateAndAssign/Assign/AssignResult.js","pages/CreateAndAssign/Assign/AssignClass.js","pages/CreateAndAssign/Assign/AssignPreview.js","pages/CreateAndAssign/Assign/AssignView.js","pages/CreateAndAssign/Edit/EditSavedWorksheet.styles.js","pages/CreateAndAssign/Edit/EditSavedWorksheet.js","pages/CreateAndAssign/Edit/AssignSavedWorksheet.styles.js","pages/CreateAndAssign/Edit/AssignSavedWorksheet.js","pages/CreateAndAssign/Edit/EditView.styles.js","pages/CreateAndAssign/Edit/EditView.js","pages/CreateAndAssign/CreateHomework/CreateHomeworkWorksheet.styles.js","pages/CreateAndAssign/CreateHomework/CreateHomeworkWorksheet.js","pages/CreateAndAssign/CreateHomework/AssignSavedWorksheet.styles.js","pages/CreateAndAssign/CreateHomework/AssignSavedWorksheet.js","pages/CreateAndAssign/CreateHomework/CreateHomework.styles.js","pages/CreateAndAssign/CreateHomework/CreateHomework.js","pages/CreateAndAssign/CreateFactualFluency/CreateFactualFluencyWorksheet.styles.js","pages/CreateAndAssign/CreateFactualFluency/CreateFactualFluencyWorksheet.js","helpers/timesParser.js","pages/CreateAndAssign/CreateFactualFluency/AssignSavedFactualFluency.styles.js","pages/CreateAndAssign/CreateFactualFluency/AssignSavedFactualFluency.js","helpers/useClickOutside.js","components/CreateAndAssign/FactualFluency/ChooseWorkSheetTimeType.styles.js","components/CreateAndAssign/FactualFluency/ChooseWorkSheetTimeType.js","pages/CreateAndAssign/CreateFactualFluency/WorksheetTimer.styles.js","pages/CreateAndAssign/CreateFactualFluency/WorksheetTimer.js","pages/CreateAndAssign/CreateFactualFluency/CreateFactualFluency.styles.js","pages/CreateAndAssign/CreateFactualFluency/CreateFactualFluency.js","pages/CreateAndAssign/CreateAndAssign.js","components/Sidebar/SidebarTrackAssignment.js","components/TrackAssignment/MenuSvgIcon.js","components/TrackAssignment/PopoverMenuItem.js","components/TrackAssignment/PopoverMenu.styles.js","components/TrackAssignment/PopoverMenu.js","components/TrackAssignment/AssignmentCard.styles.js","components/TrackAssignment/AssignmentCard.js","components/TrackAssignment/Pagination.styles.js","components/TrackAssignment/Pagination.js","components/TrackAssignment/EmptyAssignment.styles.js","components/TrackAssignment/EmptyAssignment.js","components/TrackAssignment/CustomModal.styles.js","components/TrackAssignment/CustomModal.js","components/TrackAssignment/AssignmentCardDeleteModalBody.styles.js","components/TrackAssignment/AssignmentCardDeleteModalBody.js","components/TrackAssignment/DateTimeRangePicker.js","components/TrackAssignment/DatePicker.styles.js","components/TrackAssignment/DatePicker.js","components/TrackAssignment/ChangeTitleDateModal.styles.js","components/TrackAssignment/ChangeTitleDateModal.js","pages/TrackAssignment/AssignmentSummary.styles.js","pages/TrackAssignment/AssignmentSummary.js","pages/TrackAssignment/OtherAssignments.styles.js","pages/TrackAssignment/OtherAssignments.js","components/TrackAssignment/SubmissionsBarChart.js","components/TrackAssignment/HomeworkQuestionsModal.js","components/ManageClass/PopupModal.styles.js","components/ManageClass/PopupModal.js","components/TrackAssignment/DownloadCSVModalBody.styles.js","components/TrackAssignment/DownloadCSVModalBody.js","pages/TrackAssignment/MultiClassReport.styles.js","pages/TrackAssignment/MultiClassReport.js","components/TrackAssignment/QuestionPagination.styles.js","components/TrackAssignment/QuestionPagination.js","components/TrackAssignment/QuestionResultIcon.styles.js","components/TrackAssignment/QuestionResultIcon.js","components/TrackAssignment/ScoreCount/ScoreCount.styles.js","components/TrackAssignment/ScoreCount/ScoreCount.js","components/TrackAssignment/QuestionSummaryModal.styles.js","components/TrackAssignment/QuestionSummaryModal.js","components/TrackAssignment/ScorePieChart.js","components/TrackAssignment/MarkRightPopover.js","components/TrackAssignment/StudentSummaryModal.js","pages/TrackAssignment/SingleClassReport.styles.js","pages/TrackAssignment/SingleClassReport.js","pages/TrackAssignment/TrackAssignment.styles.js","pages/TrackAssignment/TrackAssignment.js","components/Sidebar/SidebarManageClass.js","helpers/optionsParser.js","components/ManageClass/StudentsList.styles.js","components/ManageClass/StudentsList.js","pages/ManageClass/GroupAdd.styles.js","pages/ManageClass/GroupAdd.js","pages/ManageClass/GroupsList.styles.js","pages/ManageClass/GroupsList.js","components/ManageClass/EditClassIconSelector.js","components/ManageClass/EditClassModalBody.styles.js","components/ManageClass/EditClassModalBody.js","helpers/parseStudentSearchResults.js","components/ManageClass/ResetPwModalBody.styles.js","components/ManageClass/ResetPwModalBody.js","components/ManageClass/StudentDetailsModalBody.styles.js","components/ManageClass/StudentDetailsModalBody.js","components/ManageClass/Pagination.styles.js","components/ManageClass/PaginationSearch.js","components/ManageClass/MatchedResult.styles.js","components/ManageClass/MatchedResult.js","components/ManageClass/SearchResults.styles.js","components/ManageClass/SearchResults.js","helpers/parseClassList.js","components/ManageClass/ClassCard.styles.js","components/ManageClass/ClassCard.js","components/ManageClass/ClassCardCollection.styles.js","components/ManageClass/ClassCardCollection.js","pages/ManageClass/DisplayClass.styles.js","pages/ManageClass/DisplayClass.js","components/ManageClass/StudentTable.styles.js","components/ManageClass/StudentTable.js","components/ManageClass/ChangeClassModalBody.styles.js","components/ManageClass/ChangeClassModalBody.js","components/ManageClass/ActionButtons.styles.js","components/ManageClass/ActionButtons.js","components/ManageClass/Pagination.js","pages/ManageClass/StudentList.styles.js","pages/ManageClass/StudentList.js","components/ManageClass/GroupPopoverMenu.styles.js","components/ManageClass/GroupPopoverMenu.js","components/ManageClass/GroupDeleteModal.styles.js","components/ManageClass/GroupDeleteModal.js","pages/ManageClass/ShowGroup/triangle.svg","pages/ManageClass/ShowGroup/GroupList.styles.js","pages/ManageClass/ShowGroup/GroupList.js","pages/ManageClass/ShowGroup/ShowGroup.styles.js","pages/ManageClass/ShowGroup/ShowGroup.js","pages/ManageClass/CreateGroup/CreateGroup.styles.js","pages/ManageClass/CreateGroup/CreateGroupHeader.js","pages/ManageClass/CreateGroup/CreateGroupLevels.styles.js","pages/ManageClass/CreateGroup/CreateGroupLevels.js","pages/ManageClass/CreateGroup/CreateGroupStudents.styles.js","pages/ManageClass/CreateGroup/CreateGroupStudents.js","pages/ManageClass/CreateGroup/CreateGroupLists.styles.js","pages/ManageClass/CreateGroup/CreateGroupLists.js","pages/ManageClass/CreateGroup/CreateGroup.js","components/ManageClass/GameSettingStudentList.styles.js","components/ManageClass/GameSettingStudentList.js","pages/ManageClass/GameSetting.styles.js","pages/ManageClass/GameSetting.js","pages/ManageClass/ManageClass.js","pages/ProfileSetting/ProfileForm/ProfileImage.style.js","pages/ProfileSetting/ProfileForm/ProfileImageModal.js","pages/ProfileSetting/ProfileForm/ProfileImage.js","pages/ProfileSetting/ProfileForm/ProfileForm.style.js","pages/ProfileSetting/ProfileForm/ProfileSuccessModal.styles.js","pages/ProfileSetting/ProfileForm/ProfileSuccessModal.js","pages/ProfileSetting/ProfileForm/ProfileForm.js","pages/ProfileSetting/ProfileSettings.style.js","pages/ProfileSetting/ProfileSetting.js","components/Login/CPSection/CPSection.styles.js","components/Login/CPSection/CPSectionFallback.js","components/Login/CPSection/CPSection.js","components/Login/LoginButton/LoginButton.styles.js","components/Login/LoginButton/LoginButton.js","components/Login/LoginForm/LoginForm.styles.js","components/Login/LoginForm/LoginForm.js","components/Login/LoginSection/LoginSection.styles.js","components/Login/LoginSection/homeIcon.svg","components/Login/LoginSection/Koobits Logo.svg","components/Login/LoginSection/stars.svg","components/Login/LoginSection/mascot-mobile.svg","components/Login/LoginSection/LoginSection.js","pages/LoginNew.styles.js","pages/LoginNew.js","pages/TrackAssignment/PrintAssignment.styles.js","pages/TrackAssignment/PrintAssignment.js","pages/Forbidden.js","components/Utils/AuthenticatedRoute.js","components/Sidebar/SidebarReport/AllReports.styles.js","components/Sidebar/SidebarReport/StudentReport-Sidebar.js","components/Sidebar/SidebarReport/SchoolReport-Sidebar.js","components/Sidebar/SidebarReport/ClassReport-Sidebar.js","components/Sidebar/SidebarReport/SidebarReport.js","components/Report/TopBar.styles.js","components/Report/TopBar.js","pages/Report/ProficiencyReport.styles.js","pages/Report/ReportPage.styles.js","assets/img/report/icon-triangle.svg","helpers/calculatePercentageString.js","components/Report/ProgressBar.styles.js","components/Report/ProgressBar.js","components/Report/StudentTableReport.styles.js","components/Report/StudentTableReport.js","components/Report/NoReport.styles.js","components/Report/NoReport.js","pages/Report/ProficiencyReportByStudent.js","assets/img/report/icon-skill-select.svg","components/Report/SkillTableReport.styles.js","components/Report/SkillTableReport.js","pages/Report/ProficiencyReportBySkills.styles.js","pages/Report/ProficiencyReportBySkills.js","pages/Report/ProficiencyReport.js","pages/Report/HighScoreReportByStudent.js","pages/Report/HighScoreReportBySkills.js","pages/Report/HighScoreReport.js","components/Report/HighScoreStars.js","components/Report/SkillDetails.styles.js","components/Report/SkillDetails.js","components/Report/StudentReport.styles.js","components/Report/StudentReport.js","components/Report/ToggleReport.style.js","components/Report/ToggleReport.js","pages/Report/StudentHighScoreReport.styles.js","pages/Report/StudentHighScoreReport.js","pages/Report/StudentProficiencyReport.js","components/Report/LoginReportPDF.js","components/Report/LoginReportTable.styles.js","components/Report/LoginReportTable.js","pages/Report/LoginReport.styles.js","pages/Report/LoginReport.js","components/Report/MonthlyReport.styles.js","components/Report/MonthlyReport.js","pages/Report/TeacherMonthlyReport.styles.js","pages/Report/TeacherMonthlyReport.js","components/Report/MonthlyReportChart.styles.js","components/Report/MonthlyReportChart.js","pages/Report/SpecificMonthlyReport.styles.js","pages/Report/SpecificMonthlyReport.js","components/Report/SkillReportDetail/SkillTopbar.styles.js","components/Report/SkillReportDetail/SkillTopbar.js","components/Report/SkillReportDetail/SkillDetailContent.styles.js","components/Report/SkillReportDetail/SkillDetailContent.js","pages/Report/SkillProficiencyReport.styles.js","pages/Report/SkillProficiencyReport.js","pages/Report/SkillHighScoreReport.js","pages/Report/Report.js","helpers/aggregateLoginReportData.js","components/Dashboard/LoginReportCard.styles.js","components/Dashboard/LoginReportCard.js","pages/DashboardV2/components/EmptyAssignment/EmptyAssignment.styles.js","pages/DashboardV2/components/EmptyAssignment/EmptyAssignment.jsx","pages/DashboardV2/components/AssignmentTrackingCard/AssignmentTrackingCard.styles.js","pages/DashboardV2/components/AssignmentTrackingCard/AssignmentTrackingCard.jsx","pages/DashboardV2/constants/dashboardCards.js","pages/DashboardV2/DashboardV2.styled.js","pages/DashboardV2/DashboardV2.jsx","pages/CreateAndAssign/FactualFluency/Leaderboard.styles.js","components/Leaderboard/LeaderboardHeader.styles.js","components/Leaderboard/LeaderboardHeader.js","components/Leaderboard/StudentList.styles.js","components/Leaderboard/StudentList.js","pages/CreateAndAssign/FactualFluency/Leaderboard.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyHeader.style.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyTimer.style.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyTimer.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyHeader.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyQuestion.style.js","components/CreateAndAssign/FactualFluency/Preview/FactualFluencyQuestion.js","pages/CreateAndAssign/FactualFluency/FactualFluencyPreview.styles.js","pages/CreateAndAssign/FactualFluency/FactualFluencyPreview.js","pages/CreateAndAssign/FactualFluency/FactualFluencyReady.styles.js","pages/CreateAndAssign/FactualFluency/FactualFluencyReady.js","pages/CreateAndAssign/FactualFluency/FactualFluencyResult.styles.js","pages/CreateAndAssign/FactualFluency/FactualFluencyResult.js","pages/CreateAndAssign/FactualFluency/FactualFluencyGame.js","components/Print/QuestionContentPrint.styles.js","components/Print/QuestionContentPrint.js","components/Print/SolutionContentPrint.styles.js","components/Print/SolutionContentPrint.js","pages/CreateAndAssign/Print/WorksheetPrint.styles.js","pages/CreateAndAssign/Print/WorksheetPrint.js","Routes.js","stores/startup/actions.js","App.js","serviceWorker.js","i18n.js","index.js","assets/img/icon-error.svg","assets/img/icon-manage-class-student-list-plan-school.svg","assets/img/icon-manage-class-student-list-plan-standard.svg","assets/img/icons8-trash.svg","assets/img/icon-track-assignment-print-active.svg","assets/img/icon-track-assignment-download.svg","assets/img/icon-track-assignment-wrong-ans.svg","assets/img/icon-report-collapse-show.svg","assets/img/icon-report-sidebar-insight.svg","assets/img/icon-manage-class-group.svg","assets/img/icon-play.svg","assets/img/icon-topical-worksheet-white.svg","assets/img/icon-no-syllabus.svg","assets/img/icon-calendar-white.svg","assets/img/icon-track-assignment-leaderboard.svg","assets/img/icon-track-assignment-open-hw.svg","assets/img/empty-search-results.svg","assets/img/icon-manage-class-lup.svg","components/Login/CPSection/mascot.svg","assets/img/icon-report-sidebar-milestone.svg","assets/img/icon-report-print.svg","assets/img/icon-report-print-arrow.svg","assets/img/print-icon.svg","assets/img/logo.svg","assets/img/icon-topic-revision.svg","assets/img/icon-check-orange.svg","assets/img/icon-show-pswd.svg","assets/img/icon-hide-pswd.svg","assets/img/report/download-csv.svg","assets/img/avatar.png","assets/img/dashboardv2/cube.svg","assets/img/dashboardv2/question.svg","assets/img/dashboardv2/video.svg","assets/img/dashboardv2/worksheet.svg","assets/img/dashboardv2/no-track-assignment.svg","assets/img/dashboardv2/icon-factual-fluency.png","assets/img/Icon Select.svg","assets/img/icon-ivm.svg","assets/img/icon-questions.svg","assets/img/icon-trial-account.png","assets/img/icon-trial-account-expired.png","assets/img/icon-play-video.svg","assets/img/no-videos-found.svg","components/MultipleCurriculum/icon-c1.svg","assets/img/logoTeacher.svg","assets/img/logoAdmin.svg","assets/img/arrow.svg","assets/img/locale/icon-tick-red.svg","assets/img/icon-question-cart.svg","assets/img/icon-topical-worksheet.svg","assets/img/icon-factual-fluency-white.png","assets/img/empty-cart.svg","assets/img/icon-question-card-kebab.svg","assets/img/icon-question-card-kebab-active.svg","assets/img/icon-menu-list.svg","assets/img/icon-menu-list-active.svg","assets/img/icon-menu-up.svg","assets/img/icon-menu-up-active.svg","assets/img/icon-menu-up-end.svg","assets/img/icon-menu-up-end-active.svg","assets/img/icon-menu-down.svg","assets/img/icon-menu-down-active.svg","assets/img/icon-menu-down-end.svg","assets/img/icon-menu-down-end-active.svg","assets/img/worksheet-type.svg","assets/img/icon-schedule-orange.svg","assets/img/icon-assigned.svg","assets/img/icon-assign-now.svg","assets/img/icon-saved-worksheet-grey.svg","assets/img/empty-worksheet.svg","assets/img/empty-worksheet-navigator.svg","assets/img/icon-push-cart.svg","assets/img/icon-right-purple.svg","assets/img/factual-fluency/interval-time.gif","assets/img/factual-fluency/total-time.png","assets/img/factual-fluency/no-time.png","assets/img/icon-track-assignment-assigned-by-me.svg","assets/img/icon-track-assignment-assigned-by-others.svg","assets/img/icon-track-assignment-assigned-by-me-active.svg","assets/img/icon-track-assignment-assigned-by-others-active.svg","assets/img/empty-assignment.svg","assets/img/icon-track-assignment-summary.svg","assets/img/icon-tick.svg","assets/img/other-assignments-splash.svg","assets/img/icon-manage-class-success-check.svg","assets/img/icon-manage-class-class.svg","assets/img/icon-game-setting.svg","assets/img/icon-manage-class-student-list-plan-premium.svg","assets/img/icon-manage-class-linked-active.svg","assets/img/icon-manage-class-report.svg","assets/img/icon-manage-class-edit.svg","assets/img/icon-manage-class-student.svg","assets/img/icon-manage-class-student-list-link.svg","assets/img/icon-manage-class-remove.svg","assets/img/icon-manage-class-mail.svg","assets/img/icon-manage-class-change-class.svg","assets/img/icon-manage-class-notification.svg","assets/img/Group_icon.svg","assets/img/group-logo-white.svg","assets/img/icon-small-group.svg","assets/img/icon-right-arrow.svg","assets/img/icon-toga.svg","assets/img/defaulticon.svg","assets/img/profile-camera.svg","components/Login/LoginSection/icon-login-partners.svg","components/Login/LoginSection/icon-login-school-signup.svg","components/Login/LoginSection/icon-login-parent-app.svg","components/Login/LoginSection/Shooting Star.png","assets/img/icon-warning.png","assets/img/icon-report-student-report.svg","assets/img/icon-report-sidebar-card.svg","assets/img/icon-report-school-report.svg","assets/img/icon-report-sidebar-monthly.svg","assets/img/icon-report-sidebar-yearly.svg","assets/img/icon-report-sidebar-progress.svg","assets/img/icon-report-class-report.svg","assets/img/icon-report-sidebar-proficiency.svg","assets/img/icon-report-sidebar-high-score.svg","assets/img/icon-report-sidebar-login.svg","assets/img/icon-report-sidebar-active.svg","assets/img/icon-closed.svg","assets/img/no-reports.svg","assets/img/icon-report-skill-star.svg","assets/img/icon-login-report-login-pdf.png","assets/img/icon-login-report-not-login-pdf.png","assets/img/icon-login-report-login-not-active-pdf.png","assets/fonts/Muli.ttf","assets/fonts/MuliB.ttf","assets/img/icon-login-report-active.svg","assets/img/icon-login-report-not-login.svg","assets/img/icon-login-report-not-active.svg","assets/img/leaderboard/leaderboard-bg.png","assets/img/back-icon.svg","assets/img/leaderboard/default-pos.svg","assets/img/leaderboard/first-pos.svg","assets/img/leaderboard/second-pos.svg","assets/img/leaderboard/third-pos.svg","assets/img/factual-fluency/bg-timer.png","assets/img/factual-fluency/bg-blue_hover.jpeg","assets/audio/bg-music.mp3"],"names":["module","exports","axiosInstance","process","createBrowserHistory","basename","localStorage","removeItem","loginRoute","REACT_APP_NETLIFY","hasFlutter","window","flutter_inappwebview","callHandler","history","push","refreshTokenApi","failedRequest","apiClient","post","qs","stringify","grant_type","refresh_token","getItem","client_id","client_secret","scope","headers","then","tokenRefreshResponse","isNil","data","access_token","Promise","reject","setItem","response","config","Authorization","resolve","catch","error","handleLogout","axios","create","baseURL","Config","interceptors","request","use","initialConfig","accessToken","createAuthRefreshInterceptor","username","password","result","err","error_description","setUserDefaultLevel","LevelID","Result","message","get","IsAccountExpired","ExpiryDate","moment","isAfter","Error","loginSuccess","user","isAdmin","mySecret","isTrialExpired","myLocale","userPreferences","type","loginFailed","setShowTrialPopup","show","getGlobalFeaturesSuccess","fetch","Date","now","Accept","json","myJson","refreshToken","logout","login","fetchGlobalFeatureConfig","call","String","UserAccountExpired","toLowerCase","put","decoded","jwt_decode","IsAdmin","userName","user_name","userID","user_id","role","getUserDefaultLevel","UserPreferences","UserId","UserName","Role","loginApi","GlobalFeaturesService","startup","TopicID","skills","refreshSkills","select","state","topics","selectedTopic","topic","fetchSkillsApi","ID","SIOID","fetchVariationsSuccess","variations","fetchVariationsFailed","fetchVariationsComplete","value","selectVariation","selectedVariation","fetchSingleVariation","skill","callGetVariations","callSelectedSkill","fetchVariationsApi","variationsPerSkill","selectedSkill","selectLevel","selectedLevel","setVideosRequest","setVideosSuccess","CurriculumID","selectCurriculum","selectedCurriculum","fetchClassProficiencyReportFailed","fetchClassHighScoreReportFailed","fetchStudentProficiencyReportRequest","params","fetchStudentProficiencyReportFailed","fetchSampleQnFailed","setSelectedClass","classObject","setReportLevel","reportLevel","setSyllabus","syllabus","setClassLevel","level","fetchLoginReportRequest","fetchLoginReportFailed","fetchWeekItemsRequest","fetchWeekItemsFailed","toggleReport","val","fetchTeacherReportMonthRequest","fetchTeacherReportMonthFailed","fetchTeacherReportSpecificMonthFailed","fetchSyllabusRequest","fetchSyllabusSuccess","fetchProficiencySkillReportRequest","fetchProficiencySkillReportSuccess","fetchProficiencySkillReportFailed","fetchHighScoreSkillReportRequest","fetchHighScoreSkillReportSuccess","fetchHighScoreSkillReportFailed","fetchSkillProficiencyDetailReportFailed","fetchSkillHighScoreDetailReportFailed","GetCurriculumForCurrentUser","isNilOrEmpty","anyPass","isEmpty","question","title","mcqOptions","solution","questionAnswer","correctMCQOptions","correctMCQAnswers","Payload","parseString","_error","Question","Body","Content","Options","options","Option","map","option","filter","$","Iscorrect","RefId","flatMap","Solution","Answers","Answer","Submissions","optionAnswered","Submission","length","parseInt","image","match","RegExp","imageUri","homeworkLink","worksheetStatus","assignmentTypes","homework","mocktest","test","total","interval","notime","assignmentTypeNames","assignmentTypeColors","assignmentTypeInitials","presentationTypes","classType","class","group","assignReferenceType","questionStatus","1","2","3","assignmentVisibilities","4","LevelColors","5","6","7","8","9","10","11","12","LevelHoverColors","proficiencyColors","mastery","color","borderColor","tableOddColor","tableEvenColor","tableBorderColor","competent","developing","beginning","incomplete","masteryColors","A","B","C","D","Incomplete","ProficiencyStatus","0","MasteryLevel","MasteryLevelRange","icon","AStar","noQn","BStar","CStar","DStar","IncompleteStar","subjectTypes","homeworkTypes","bgColor","logo","13","featureToggle","questionTypeIDs","timeSettingTypes","intervalTime","name","totalTime","noTime","getClass","targetClassID","find","ClassID","parseQnAnswer","ans","Value","join","parseQuestionResultToString","questionResult","questionType","answerString","questionParser","console","log","parseSubmittedAnswersToString","answers","Key","compareValues","key","order","a","b","hasOwnProperty","varA","toUpperCase","varB","comparison","parseCSVReport","report","Questions","HomeWorkTitle","HomeWorkId","TrackingGroup","TrackingIndividual","maxScore","assignedClass","className","ClassName","classID","studentHashmap","students","Students","i","studentName","FullName","homeworkTitle","homeworkID","score","submissionDate","QuestionResult","studentIndex","SubmittedBy","SubmissionResult","SubmissionDate","format","currentDate","unix","parseQuestionResult","questions","questionsHashmap","scoresByQuestion","questionIndex","Id","correct","wrong","scoresByStudent","hasSubmitted","wrongAnsString","SubmissionKeyValuePairs","QuestionType","isCorrect","questionPayload","questionDifficulty","Difficulty","studentAnswer","submissionId","SubmissionID","num","ansString","byQuestion","byStudent","getUserCurriculums","setDefaultCurriculum","curriculumsArray","sortedCurriculums","sort","feature6DefaultCurriculum","curr","Feature","defaultCurriculumIndex","findIndex","IsDefault","curriculums","setDefaultLevel","getVideos","levels","levelId","Levels","item","checkLevelId","setUser","curriculumId","LevelService","DefaultLevel","lvl","fetchTopicsSuccess","selectTopic","checkLevelAvailable","fetchSyllabusApi","Topics","handleResponseObjectSuccess","IsSuccessful","Message","handleResponseSuccess","fetchQuestionByID","questionID","includeAnswer","includeSolution","searchQuestionByIDs","questionIDs","Items","topicId","questionId","delete","QuestionIDs","CartModel","addQuestion","deleteQuestion","id","fetchCartQuestionsSuccess","cartQuestions","fetchCartQuestionsFailed","selectQuestion","selectedQuestion","selectQuestionSuccess","selectQuestions","selectedQuestions","fetchSearchQuestionSuccess","questionsResult","assignWorksheet","isPublish","setSelectedQuestions","setEditSavedWorksheetQuestions","setWorksheetTitle","fetchWorksheetsRequest","page","limit","selectWorksheet","selectedWorksheet","withCart","savedWorksheet","assignmentType","selectWorksheetSuccess","selectWorksheetFailed","assignClass","classes","assignGroup","groups","assignStudent","assignAdminGroup","adminGroups","assignLevel","resetAssignment","setAssigmentType","setPresentationType","presentationType","setSettingTimeValue","timeLimit","addQuestionToCart","removeQuestionFromCart","fetchCartQuestions","getQuestionDetail","fetchSearchQuestions","resetCart","addQuestionsToCart","worksheet","temporaryCartQuestion","QuestionId","SkillId","TopicId","TopicName","Name","SkillName","AliasSkillName","CartQuestion","CartService","newData","propEq","updatedData","cq","searchIDs","isReset","QuestionIds","query","publish","isEdit","pageindex","pagesize","setStartEndDate","startDate","endDate","setReleaseDate","releaseDate","setAssignmentVisibility","assignmentVisibility","setKokoCredit","kokoCredit","hasProp","obj","prop","Object","prototype","saveWorksheet","fetchWorksheets","getWorksheetDetail","scheduledWorksheet","deleteWorksheet","getWorksheet","editSavedWorksheetQuestions","topicalWorksheet","createWorksheetItems","factualFluency","createFactualFluencyItems","NumberOfKokoCredits","Title","Instructions","WorksheetStatus","AssignmentTypeID","PresentationTypeID","TimeLimit","isEditSavedWorksheet","isCreateHomework","isCreateFactualFluency","defaultParams","PresentationType","PresentationParameters","NewParams","NewPresentationType","Params","merge","WorksheetService","saveParams","assignParams","assignments","homeWorkID","resultDate","model","DuplicatedHWID","saveWorkSheetError","worksheets","kokoCredits","startOf","add","set","hour","minute","setAssignKokoCredit","setAssignStartEndDate","setAssignReleaseDate","scheduleParams","rewards","worksheetId","LevelId","ClassId","keyword","SrchName","fetchClassRequest","fetchStudentsRequest","fetchStudentsSearchRequest","fetchStudentsSuccess","fetchStudentsFailed","fetchClassByLevel","fetchStudentsByClass","fetchStudentsByKeyword","fetchMyGroups","LookupService","reports","selectedClass","selectedClassLevel","filteredClasses","Type","date","pageSize","pageIndex","teacherID","year","fetchAssignmentsRequest","fetchAssignmentsSuccess","fetchSingleClassReportRequest","fetchCSVClassReportSuccess","fetchTeachersRequest","setNumOfPages","number","setLatestYear","setAssignmentSummaryHistory","changeTitleDateSuccess","fetchAssignments","fetchTeacherAssignments","fetchTeachers","fetchMultiClassReport","fetchSingleClassReport","fetchCSVClassReport","deleteAssignedHw","markAnswerRight","changeTitleDate","queryParams","AssignmentService","AssignedDate","TotalPage","toString","dataFromLatestYear","assignment","assignmentsForYear","teachers","pageNum","apiUrl","SchoolId","studentId","studentID","isUpdateIcon","body","iconID","IconId","StudentIds","StudentIDs","fetchClassesRequest","fetchClassesSuccess","fetchClassesFailed","editClassFailed","changeClassFailed","searchStudentRequest","resetPwFailed","setStudentPages","pageTotal","setSearchPages","fetchClasses","fetchStudents","searchStudents","fetchStudentDetails","editClass","changeClass","resetPassword","fetchIcons","ManageClassService","TotalCount","Math","ceil","schoolID","searchName","searchID","results","details","icons","handleResponseSuccessWithoutResult","handleDownloadResponse","fileName","fileDownload","syllabusID","curriculumID","qnID","weekID","numberOfPreviousWeek","month","topicID","skillID","responseType","res","fetchClassProficiencyReport","fetchClassHighScoreReport","fetchStudentProficiencyReport","fetchProficiencySkillReport","fetchHighScoreSkillReport","fetchSampleQn","fetchLoginReport","fetchWeekItems","fetchTeacherMonthReport","fetchTeacherSpecificMonthReport","fetchReportSyllabus","fetchSkillProficiencyDetailReport","fetchSkillHighScoreDetailReport","ReportsService","weeks","SyllabusApi","fetchPrivateGroupsRequest","groupName","selectStudents","savePrivateGroup","fetchPrivateGroups","privateGroup","selectedStudents","kids","pluck","privateGroupService","privateGroups","updatePassword","fetchProfileDataSuccess","fetchAvatarsSuccess","updateProfileSuccess","updateProfileData","fetchProfileData","fetchAvatars","updateProfile","profileSettingsService","fetchMyGroupSuccess","createMyGroupRequest","createMyGroupSuccess","updateGroupSuccess","getClassByLevelSuccess","getStudentByClassSuccess","createGroupData","fetchMyGroup","updateGroup","deleteGroupById","getClassesByLevel","getStudentsByClass","createGroupService","List","pushToCartSuccess","createWorkSheetSuccess","createWorkSheetError","setCreateHomeworkQuestions","easy","medium","difficult","fetchSyllabus","pushToCart","createWorkSheet","TopicalService","createFactualFluencySuccess","createFactualFluencyFailed","setCreateFactualFluencyQuestions","fetchTopicSkill","createFactualFluency","fetchLeaderboard","FactualFluencyService","Skills","TopicSkill","leaderboard","setUserPreferencesSuccess","setUserPreferences","rawBody","userPreferencesService","GroupID","fetchGameSettingClassFailed","fetchGameSettingStudentFailed","saveGameSettingFailed","fetchGameSettingClass","fetchGameSettingStudentByGroup","saveGameSetting","GameAccessSettingService","root","all","takeLatest","persistConfig","storage","storageSession","blacklist","initialState","isLoading","sortCurriculums","tempCurriculum","action","filters","isActive","A01","A02","A03","MCQ","videos","isSchoolAdmin","isTrial","showTrialPopup","redirectString","language","localePreferences","globalFeatureConfig","findTrialRoleID","roles","findSchoolAdminRoleID","roleID","checkIfSchoolAdmin","findTeacherRoleID","parsePreferences","JSON","parse","getLocalePref","trim","isTeacher","searchedQuestions","VariationId","showSideBar","isTitleLoading","activeStep","startStep","lastStep","step","prevStep","nextStep","allWorksheets","instructions","assignedGroup","assignedStudent","assignedPrivateGroup","assignedAdminGroup","assignedLevel","deleteWorkSheet","worksheetSearchPage","updatedSelectedQuestions","timeSettingType","PageIndex","presentationTypeID","lookup","selectedPrivateGroup","timezone","isSingleClassReportLoading","isCSVClassReportLoading","deleteHwIsLoading","years","yearsArray","currentYear","generateYears","numOfPages","multiClassReport","singleClassReport","CSVClassReport","parsedCSVClassReport","latestYearWithAssignments","assignmentSummaryHistory","selectedTeacher","deleteHwResult","changeTitleIsLoading","isIconsLoading","isStudentDetailsLoading","searchResults","maxStudentPages","maxSearchPages","studentDetails","resetPwResult","changeClassResult","editClassResult","iconsLevel","manageClasses","range","start","end","generateLevels","Array","from","classProficiencyReport","classHighScoreReport","studentProficiencyReport","qnIsLoading","sampleQn","reportError","sortOrder","selectedSyllabus","loginReport","weekItems","teacherMonthReport","teacherSpecificMonthReport","activeToggle","proficiencySkill","highScoreSkill","skillDetailReport","Display","allGroups","deleteGroup","createGroup","getClasses","getStudents","isDelLoading","createGroups","profileData","avatars","updateData","profileSettings","pushCart","createWorksheet","pushCartLoading","createWorksheetLoading","updatedQuestions","topicSkill","createFactualFluencyLoading","saveSettingResult","gameSetting","isUpdating","updatePreferences","updateError","appReducer","combineReducers","schedule","assign","rootReducer","rootSaga","sagaMiddleware","createSagaMiddleware","persistedReducer","persistReducer","store","createStore","composeWithDevTools","applyMiddleware","persistor","persistStore","run","configureStore","undefined","useSecret","secret","Proxy","URLSearchParams","location","search","searchParams","useSelector","isSecretLinkEnabled","secretlink","parameters","IsEnabled","useState","contingencySecret","setContingencySecret","useEffect","sessionSecret","sessionStorage","pathname","href","supportUrl","SelectTopic","props","textClass","t","useTranslation","src","finger","alt","openIVM","open","ContentType","dispatch","useDispatch","sortedTopics","useHistory","contentTypes","url","IconQuestion","IconPlay","IconIvm","contentType","setContentType","isOpen","setIsOpen","showVideo","channel","youtube","autoplay","mute","videoId","onClose","index","target","rel","onClick","e","preventDefault","Subbar","React","forwardRef","_","ref","AGE_GROUP","StyledModal","styled","Modal","width","PopupModal","children","hide","keyboard","onHide","TrialModalBodyContainer","div","TrialAccountModalBody","TrialIcon","ExpiredIcon","VideoOverlayContainer","VideoOverlay","showTrialAccount","setShowTrialAccount","hideTrialAccount","PlayVideoIcon","NoVideoStyle","memo","noVideo","SkillsResultContainer","SkillsResult","isVideo","totalVideos","ProblemsumsTrialContainer","VideoListContainer","ProblemsumsTrial","isRun","setIsRun","videoData","setVideoData","isHOTS","tempVideo","vid","videoLists","video","style","marginRight","skillId","videoCode","fontWeight","SkillDescription","useWindowSize","innerWidth","height","innerHeight","windowSize","setWindowSize","resizeHandler","addEventListener","removeEventListener","keyMaps","newObj","forEach","new","old","ItemWrap","sio","timer","observer","IntersectionObserver","isIntersecting","clearTimeout","setTimeout","threshold","currentRef","current","observe","unobserve","scrollMarginTop","SimilarQuestions","align","button","onSelectedQuestion","variation","hoverButton","setHoverButton","hoverMenu","setHoverMenu","getQuestionClassNames","q","isAssignedQuestion","isSelectedQuestion","dropdownClassNames","data-toggle","aria-haspopup","aria-expanded","data-cy","onMouseEnter","onMouseLeave","DifficultyChillis","Chillis","filteredValue","str","showImage","htmlText","replace","fractionHtmlStart","fractionHtmlMiddle","fractionHtmlEnd","numOfUnders","currentNumOfUnders","MediaBody","McqOptionsList","ul","TableModal","QuestionContent","onShowModal","onShowSolution","isFactualFluencyView","renderOptions","HTMLReactParser","convertTagsToHTML","domNode","attribs","renderQuestion","cellspacing","cellpadding","includes","maxWidth","isArray","onClickCapture","QuestionCardView","v","isAdded","btnClassNames","questionSelector","slice","tagName","Max","Collapse","collapsed","hideText","showText","setShow","showStyles","Button","variant","SpinnerOverlay","backgroundColor","opacity","pointerEvents","transition","WebkitTransition","animation","QuestionModalView","handleSlideTo","skillTitle","onCloseModal","showSolution","questionTitle","setQuestionTitle","questionSolution","setQuestionSolution","setMCQOptions","uniqueid","data-dismiss","aria-label","aria-hidden","SkillItem","QuestionLoader","x","y","rx","ry","QuestionsView","slider","createRef","unsortedSkills","setShowSolution","filteredQuestions","setFilteredQuestions","initialSlide","setInitialSlide","handleShowSolution","getSkillTitle","handleClose","handleShow","slickGoTo","skillRefs","reduce","acc","element","scrollContainer","document","getElementsByClassName","elementRect","getBoundingClientRect","containerRect","targetScrollTop","top","scrollTop","scrollTo","behavior","scrollToSkill","newFilteredQuestion","f","filterQuestions","parseKeys","max","afterChange","fade","infinite","slidesToScroll","slidesToShow","speed","filterArr","variationQuestions","SkillsLoader","randomWidth","floor","random","paddingTop","SkillsList","sortedSkills","ContentWrapContainer","ContentWrap","text","setFilters","Checkbox","checked","disabled","onChange","htmlFor","DropdownFilter","onCheckFilter","position","willChange","left","transform","data-filtergroup","keys","QuestionFilter","newFilters","update","$set","checkActive","onCheckOption","filterOption","slugify","QuestionList","subbarRef","useWindows","subbarHeight","setSubbarHeight","clientHeight","exact","path","component","Overlay","isVisible","toggleVisible","onKeyPress","tabIndex","Sidebar","expanded","toggleNavigation","shortenLevel","startsWith","SidebarLevels","currLevels","onSelectLevel","onBlur","TopicsLoader","EditClassIconSelectorContainer","PaginationContainer","MultipleCurriculumModalBodyContainer","CurriculumNav","Nav","Curriculums","Pagination","CurriculumCardContainer","CurriculumCard","curriculumName","curriculumIcon","curriculum","setSelectedModalCurriculum","selectedModalCurriculum","currentLevel","setSelectedModalLevel","selectCurr","onError","C1","MultipleCurriculumModalBody","uniqueSubjectIDs","Set","SubjectID","selectedSubjectID","setSubjectID","selectedModalLevel","currentPage","setCurrentPage","maxPage","subjectID","aria-controls","aria-selected","aria-labelledby","CurriculumIconUrl","ButtonContainer","ChangeBtn","SidebarMultipleCurriculums","showMultipleCurriculumModal","setShowMultipleCurriculumModal","hideMultipleCurriculumModal","SidebarTopics","useLocation","SidebarMultipleCurriculum","maxHeight","nameKey","to","externalLink","getStudentToken","simplifiedChineseLocaleNames","traditionalChineseLocaleNames","defaultLang","lang","localeName","nativeName","code","isSimplifiedChinese","isTraditionalChinese","StyledLanguageModal","Item","isSelected","Tick","LanguageModal","setModal","i18n","selectedLang","setSelectedLang","TwoLetterIsolanguageName","LocaleName","NativeName","changeLanguage","ProfileAvatar","ProfileImage","Avatar","NavbarNav","showLangModal","setShowLangModal","switchToStudentHandler","Cookies","AccessToken","domain","RefreshToken","Dropdown","Toggle","as","Menu","eventKey","Divider","NavItem","withRouter","NavbarCollapse","showArrow","trialAccount","navs","nav","forAdmin","arrowImage","HeaderTrial","span","Header","headerVisibility","DefaultLogo","AdminLogo","TeacherLogo","BrowseContent","setExpanded","Radio","defaultValue","ChooseLevel","onSubmit","event","SidebarNavLink","subPagePath","split","SidebarCreateAssign","questionCartIcon","topicalWorksheetIcon","factualFluencyIcon","topicRevisionIcon","setStep","EmptyCartQuestion","emptyCartImage","EditPanelStyle","MenuSection","activeIcon","content","MenuUp","MenuEnd","MenuDown","MenuDownEnd","EditPanel","cardIndex","iconMenu","iconMenuActive","unshift","splice","iconEnd","iconEndActive","move","tmp","iconUp","iconUpActive","lastIndex","iconDown","iconDownActive","iconDownEnd","iconDownEndActive","ModalContainerStyle","RemoveQuestionModal","remove","QuestionNumber","p","active","QuestionBox","WorksheetQuestion","isSelectable","isChecked","isShowEditPanel","selectedCard","confirmation","setConfirmation","closeConfirmation","removeCreateHomeworkQuestion","removeCreateFactualFluencyQuestion","removeSelectedQuestion","marginLeft","cursor","KebabActiveIcon","KebabIcon","iconTrash","WorksheetQuestionModal","HeaderBox","ButtonStepNext","handlePrevStep","totalQuestions","showtotalQuestions","CheckAllCard","Container","ValidationMessage","Trans","i18nKey","WorksheetQuestions","isAllQuestionsSelected","every","selected","indexOf","questionPopup","setQuestionPopup","handleChecked","Col","md","display","paddingRight","ButtonStepPrev","WorksheetForm","placeholder","isError","alertMsg","placeholderTitle","setPlaceholderTitle","formik","useFormik","initialValues","worksheetTitle","showBackBtn","touched","onFocus","setFieldTouched","WorksheetEdit","setSelectedCard","setAlertMsg","toggleShowSolution","xl","Stepper","steps","showNumber","onSelect","backButton","lastIndexOfSteps","handleChangeClass","Fragment","bind","StepperWizard","componentChildrens","handleOnClickStepper","Children","child","WorksheetAssignTitle","onPreview","NewBorderStyle","NewBorder","styles","QuestionHeader","DateTimeRangePicker","applyCallback","leftMode","noMobileMode","ranges","local","sundayFirst","autoApply","DateTimePicker","selectedDate","minDateVal","minDate","showDropdowns","singleDatePicker","onApply","onHideCalendar","timePicker","onEvent","SidebarRight","AlertModal","isShow","buttons","ConfirmModal","onConfirm","loading","size","SpinnerContainer","small","gridColumn","Spinner","InfoSavedWorksheetModal","onCloseError","errorTitle","textAlign","ErrorIcon","marginBottom","marginTop","InfoAssignedWorksheetModal","InfoLinkWorksheetModal","readOnly","CartResetModal","ClassGroupCheckbox","items","classData","assignedData","assignData","checkChecked","Form","Group","controlId","Check","label","AssignClass","globalSelectedLevel","setSelectedLevel","Control","AssignIndividual","availableStudents","student","selectedAvailableStudentIds","setSelectedAvailableStudentIds","selectedAssignedStudentIds","setSelectedAssignedStudentIds","classItem","multiple","l","fontSize","CheckboxPrivateGroup","setGroupName","adminGroupsHash","premium","retail","koobits","AssignAdmin","selectedUserGroup","setSelectedUserGroup","onChangeUserGroup","Label","AssignRadio","typeAssign","setTypeAssign","param","renderSwitch","AssignResult","hasAssignees","groupedStudents","groupBy","entries","studentClass","classOfStudents","singleStudent","AssignModal","AssignSidebarStyle","AssignSidebar","showConfirm","setShowConfirm","showSave","setShowSave","showAssign","setShowAssign","showLink","setShowLink","showResetCart","setShowResetCart","tempAssignedClass","setTempAssignedClass","tempAssignedGroup","setTempAssignedGroup","tempAssignedStudent","setTempAssignedStudent","tempAssignedPrivateGroup","setTempAssignedPrivateGroup","tempAssignedAdminGroup","setTempAssignedAdminGroup","tempAssignedLevel","setTempAssignedLevel","showModal","renderAssigneeItem","setStartDate","setEndDate","newAssignedClass","newAssignedGroup","newAssignedStudent","newAssignedPrivateGroup","assignedClassData","referenceId","assignedGroupData","groupData","assignedPrivateGroupData","privateGroupData","assignedStudentData","studentData","assignedAdminData","isPremium","isRetail","assignmentsArray","startDateValue","endDateValue","picker","WorksheetAssign","WorksheetTypeStyled","ChooseWorkSheetType","assignmentTypeID","handleOnChange","worksheetType","WorksheetPreviewNew","sm","QuestionCart","valid","SavedWorksheetRowSubMenu","handlePrint","focus","isFactualFluency","typeId","assignmentTypeName","invertObj","CircleType","iconFactualFluency","toUpper","substr","SavedWorksheetRow","ModifiedDate","handleEdit","scheduleIcon","assignNow","IsAssigned","assignedIcon","Files","file","SavedWorksheetList","dataWorksheets","EmptySavedWorksheet","emptyWorksheetImage","numVisiblePages","onPageChange","onSearchPageChange","searchPage","pages","pageNumbers","firstIndex","numPagesOnLeft","numPagesOnRight","getPaginationNumbers","pageNumber","evt","defaultProps","SavedWorksheet","initialPage","setPage","setSearchPage","useDebounce","debouncedSearchPage","totalWorksheets","totalData","pageNo","savedWorksheetIcon","StyledDropdown","DropdownMenu","selectedValue","valueKey","values","setValue","valueTemplate","SelectNumberWrapper","SelectNumberQuestions","count","changeCount","changeControl","TopicalWorksheetContainer","NoSyllabusContainer","NoSyllabus","noSyllabus","TopicalWorksheet","setLevelId","setCurriculumId","setCurriculumName","isShowModal","setIsShowModal","isShowMsg","setIsShowMsg","levellessCurr","sortedArray","arrVal","elem","counts","setCounts","setCurriculum","tempCounts","clone","getSyllabus","currId","save","pushToCartRequest","createWorkSheetRequest","onChangeHandler","difficultyLevel","objVal","Number","onControlsHandler","onModalClose","topicalWorksheetWhiteIcon","cartIcon","TopicWrap","ArrowImage","img","TopicItemContainer","allOpen","setAllOpen","showSkill","setShowSkill","useCallback","indexSkill","numberOfQuestion","sum","prev","iconRight","Skill","TopicContainer","Topic","FactualFluencyContainer","NoTopicsContainer","NoTopicSkill","totalQn","getTopics","flatten","createFactualFluencyRequest","SearchResult","validSearchedQuestions","Status","questionIds","bsPrefix","ImportQuestionList","searchIds","setSearchIds","emptyCart","setEmptyCart","debouncedSearchTerm","isEnglish","self","Row","rows","qn","HeaderFull","Border","ScheduleTime","kokoCreditVal","setKokoCreditVal","visibilityVal","setVisibilityVal","startDateVal","endDateVal","releaseDateVal","onChangeKoko","onChangeVisibility","kokoItem","ScheduleClass","PlainText","PopoverItems","Props","placement","useRef","Tooltip","InfoScheduledWorksheetModal","InfoLinkScheduledModal","SchedulePreview","showScheduled","setShowScheduled","renderShowAssigne","itemsShow","itemsPopOver","renderShowIndividual","scheduleWorksheet","renderAssigneeItemIndividual","ScheduleView","BackButton","AssignTime","AssignPreview","AssignView","EditSavedWorksheetContainer","HeaderContainer","HeaderContent","EditSavedWorksheet","AssignContent","AssignSavedWorksheet","EditViewContainer","EditView","CreateHomeworkWorksheetContainer","CreateHomeworkWorksheet","CreateHomeworkContainer","CreateHomework","CreateFactualFluencyWorksheetContainer","secondsToTime","secs","divisor_for_minutes","divisor_for_seconds","h","m","s","renderTimes","times","translation","names","time","parsedTime","getTimeType","assigmentId","FatualFluencyInfo","method","win","timeType","renderInfo","useClickOutside","callback","handleClick","contains","WorksheetTimeStyled","SettingCard","CardTop","CardBottom","setMinute","second","setSecond","toggleInfo","setToggleInfo","showInfo","setShowInfo","clickRef","currentSelected","getElementById","currentSecond","selectedOptions","images","intervalTimeImg","totalTimeImg","noTimeImg","stopPropagation","infoHandler","ContentBox","WorksheetTimer","handleOnNext","CreateFactualFluencyContainer","CreateAndAssign","SidebarTrackAssignment","AssignedByMeActiveIcon","AssignedByMeIcon","AssignedByOthersActiveIcon","AssignedByOthersIcon","MenuSvgIcon","fill","xmlns","viewBox","d","PopoverMenuItem","setIsActive","ActionsMenu","MenuContent","PopoverMenu","openDeleteModal","setSelectedHomeworkID","AssignmentDate","StyledCard","AssignmentCard","homeworkName","homeworkType","homeworkStatus","visibleDate","homeworkQnCount","assignedDate","deadline","individuals","isOthers","openChangeTitleModal","tz","background","getIcon","TotalAssignee","printIcon","TotalSubmission","margin","checkIcon","useDebouncedCallback","debouncedCallback","min","EmptyAssignmentContainer","EmptyAssignment","emptyAssignmentImage","CustomModal","wrapperRef","handleClickOutside","DeleteModalBodyContnainer","DeleteModalBody","successIcon","calendarIcon","DatePickerStyle","DatePicker","dateFormat","ChangeTitleDateContainer","ChangeTitleDateModal","setTitle","setDate","StartDate","Deadline","setDeadline","ResultDate","setResultDate","AssignmentVisibilty","Visibility","setVisibility","deadLine","compareDate","resDate","deadLineDate","getTime","required","HomeWorkStatus","tickIcon","HomeWorkType","Buttons","HomeworkId","disableBtn","AssignmentSummaryPage","AssignmentSummary","selectedYear","setSelectedYear","selectedHomeworkID","showDeleteModal","setShowDeleteModal","showChangeTitleModal","setShowChangeTitleModal","changeData","setChangeData","hideDeleteModal","closeChangeTitleModal","setSelectedTeacher","assignmentIcon","teacher","VisibleDate","TotalQuestion","OtherAssignmentsPage","OtherAssignments","splash","colors","CustomYAxisTick","payload","dy","textAnchor","SubmissionsBarChart","right","bottom","strokeDasharray","dataKey","offset","allowDecimals","tick","maxBarSize","entry","qnNumber","questionAnswerParsed","setQuestionAnswerParsed","mcqOptionsParsed","setMCQOptionsParsed","HomeworkQuestionsModal","hwTitle","isSingleClassReportPage","dialogClassName","closeButton","DownloadCSVModalContainer","DownloadCSVModalBody","selectedClassID","setSelectedClassID","downloadSucces","setDownloadSuccess","classList","individualList","combineList","concat","filteredData","columns","downloadIcon","sth","filename","MultiClassReportPage","MultiClassReport","showQuestionsModal","setShowQuestionsModal","showDownloadCSVModal","setShowDownloadCSVModal","hideDownloadCSVModal","classGroup","ButtonGroup","scrollLeft","TeacherName","leaderboardIcon","openHWIcon","CloseAfterDeadline","data-clipboard-text","checkforSubmissions","QuestionPaginationContainer","QuestionPagination","QuestionResultContainer","QuestionResultIcon","wrongAnsIcon","StyledContainer","ScoreCount","ModalStyled","StudentAnswers","QuestionSummaryModal","border","DisplayOrder","ScorePieChart","submissions","notSubmitted","startAngle","strokeWidth","viewBoxSize","MarkRightPopover","showConfirmation","setShowConfirmation","TickIcon","data-name","stroke","strokeLinecap","Test","hideModal","hwID","questionMcqOptions","setQuestionMCQOptions","StudentSummaryModal","selectedStudent","studentScore","SingleClassReportPage","StyledSwitchContainer","StyledSwitch","css","createStudentSummaryData","studentByScores","TYPES","SingleClassReport","studentScores","setType","setInitialClassID","setClassID","sortingOrderHashmap","scoresOrder","setScoresOrder","questionsPage","setQuestionsPage","showQuestionSummary","setShowQuestionSummary","questionSummaryData","setQuestionSummaryData","showStudentSummary","setShowStudentSummary","setSelectedStudent","classDetails","classInfo","setClassInfo","Table","hover","borderless","TrackAssignmentPage","main","TrackAssignment","SidebarManageClass","isActivePath","manageClass","myGroup","keyValue","keyLabel","StudentsListContainer","StudentList","dontHaveData","studentIds","DisplayName","SchoolName","next","GroupAdd","optionsParser","setKeyword","searchTerm","setSearchTerm","showSuccess","setShowSuccess","showFailed","setShowFailed","studentSchool","schoolOfStudents","userId","onRemove","GroupsListPage","GroupList","padding","EditClassIconSelector","selectedIconID","setSelectedIconID","IconUrl","EditClassModalBodyContainer","EditClassModalBody","setClassName","currentIconIndex","alignItems","sortStudentsByClass","sortedStudents","hasClass","ResetPwContainer","Sample","ResetPwModalBody","StudentDetailsModalContainer","getPlanIcon","planID","SchoolPlanIcon","StandardPlanIcon","PremiumPlanIcon","StudentDetailsModalBody","parents","Parents","parentTypes","parent","ParentName","ParentEmail","PhoneNumber","RelationshipType","email","phone","hasLinked","parseParents","avatarPlaceholder","borderRadius","ActivationDate","PlanId","PlanName","ValidStartDate","ValidEndDate","LinkedIcon","MatchedResultSpan","MatchedResult","lowercaseResult","lowercaseSearchTerm","stringArray","output","originalStringIndex","SearchResultContainer","SearchResults","searchType","showStudentDetailsModal","setShowStudentDetailsModal","selectedStudentID","setSelectedStudentID","hideStudentDetailsModal","sortedSearch","showResetPwModal","setShowResetPwModal","hideResetPwModal","pass","ParentAppLinkingStatus","EmptySearchResults","sortClasses","sortedClasses","hasLevel","CardContainer","CardTopSection","ClassCard","card","edit","ClassCollection","ClassCardCollection","filterLevel","sortData","ClassList","cardList","levelObject","singleCard","DisplayClassPage","searchIcon","LevelMenuOption","DisplayClass","searchTypes","showEditClassModal","setEditClassModal","setFilterLevel","filterYear","setFilterYear","filterType","setFilterType","hideEditClassModal","schoolInfo","SchoolLogo","SearchIcon","Year","StudentTableContainer","setCheckboxesToChecked","check","checkboxes","StudentTable","selectedStudentIDs","setSelectedStudentIDs","studentIDsArray","borderTop","borderLeft","borderBottom","LinkApp","borderRight","ChangeClassModalContainer","ChangeClassModalBody","currentClassID","selectedLevelIndex","newLevelIndex","sortedObject","ActionButtonsContainer","ActionButtons","showChangeClassModal","setShowChangeClassModal","hideChangeClassModal","RemoveIcon","MailIcon","ChangeClassIcon","Notification","StudentListPage","currentClass","sameLevelClasses","zIndex","justifyContent","GroupPopoverMenu","setIdNameForDelete","editGroup","GroupDeleteModalContnainer","GroupDeleteModal","groupId","deleteSuccess","deleteGroupSuccess","_extends","arguments","source","apply","this","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","_ref","svgRef","ForwardRef","NoGroupList","GroupLists","GroupCard","StyledSortingBtnGroup","StyledSortingBtn","list","setShowModal","selectedGroupID","setSelectedGroupID","selectedGroupName","setSelectedGroupName","selectSorting","setSelectSorting","createSelectedList","finalObj","keyName","classname","goToCreateGroup","groupLogo","toSorted","localeCompare","CreateDate","isBefore","smallGrpIcon","NoGroupFound","groupIcon","ShowList","ShowGroupWrapper","ShowGroup","CreateGroupWrapper","CreateGroupHeaderStyle","CreateGroupBody","StyledCreateSuccessModal","changeNameHandler","callCreateGroup","showErr","buttonName","goBack","CreateGroupLevelWrapper","CreateGroupLevels","selectClass","callStudents","classId","setClassId","setClassData","tempClass","temp","CreateGroupStudentsWrapper","GroupStudentsContainer","CreateGroupStudents","classSelected","classIdSelected","selectedList","changeStudents","changeSelectedList","showStudents","setShowStudents","setSelectedStudents","isStudentSelected","some","changeList","tempList","tempListIndex","searchedStudents","searchStudent","autoComplete","tempStudents","stuIndex","selectStudent","CreateGroupListsWrapper","grpName","deleteStudent","CreateGroup","getSelectedStudents","getSelectedList","groupID","setGrpName","setStudents","setSelectedList","setClassSelected","setClassIdSelected","setShowErr","resetStates","actionType","reqObj","hidePopup","CreateGroupHeader","listIndex","GameSettingStudentTable","allowedStudentIDs","setAllowedStudentIDs","ProfilePictureUrl","GameSettingContainer","alertMessage","setAlertMessage","allowed","Access","handleOnSave","disallowed","Groupid","AllowedUsers","DeniedUsers","saveGameSettingRequest","iconToga","ManageClass","GroupsList","GameSetting","ProfileImageStyle","ProfileModal","ProfileImageModal","avatarId","saveImage","resultImages","selectedId","setSelectedId","altImg","profileImage","profileAvatarId","setProfileAvatarId","removeDisableButton","mainImage","setMainImage","defaultIcon","cameraIcon","ProfileFormContainer","ProfilSuccessModalContnainer","ProfileSuccessModal","ProfileForm","setName","nameInClass","setNameInClass","setEmail","setProfileImage","changePwd","setChangePwd","oldPassword","newPassword","confirmPassword","passwords","setPasswords","showPswd","setShowPswd","showConfirmPswd","setShowConfirmPswd","disableButton","setDisableButton","showSuccessModal","setShowSuccessModal","NameInClass","TeacherEmail","ProfileAvatarId","changePassword","tempPswd","cancelChangePswd","CurrentPassword","NewPassword","ConfirmPassword","HidePswd","ShowPswd","ProfileSettingHeader","ProfileFormWrapper","CPContainer","RealTimeContainer","CPErrorFallback","Mascot","CPSection","connectionStatus","setConnectionStatus","submissionsData","setSubmissionsData","batchedData","setBatchedData","connection","hub","logging","psHub","ProblemSumsBroadcast","done","server","getLatestSubmissions","client","prevState","fail","stop","broadCastLatestCP","setInterval","clearInterval","SchoolCode","School","Points","SDate","CountryId","LoginButton","CustomButton","otherProps","PasswordContainer","LoginFormContainer","StyledErrorMessageContainer","Password","handleChange","LoginErrors","errorTypes","LoginForm","setUsername","setPassword","loginRequest","LoginSectionContainer","LoginHeader","SignupContainer","filterUnits","input","stdDeviation","floodOpacity","operator","in2","in","cx","cy","r","clipPath","mixBlendMode","isolation","x1","y1","x2","y2","gradientUnits","stopColor","strokeMiterlimit","strokeLinejoin","_ref14","fontFamily","_ref15","_ref16","_ref17","_ref18","_ref19","_ref20","_ref21","LoginSection","isMobile","Partners","SchoolSignup","App","shootingStar","LoginPage","LoginNew","useMediaQuery","FallbackComponent","CPSectionFallback","PrintAssignmentPage","PrintAssignmentContent","Component","PrintAssignment","print","Forbidden","IconWarning","AuthenticatedRoute","rest","useCookies","cookies","env","isLoggedIn","sp_access_token","tp_access_token","tp_refresh_token","checkIfLoggedIn","v2Scope","render","SidebarContainer","StudentReportSidebar","data-target","studentReport","data-parent","cardReportIcon","insightsIcon","SchoolReportSidebar","schoolReport","milestoneIcon","monthlyIcon","yearlyIcon","progressIcon","ClassReportSidebar","classReport","proficiencyIcon","highScoreIcon","loginIcon","SidebarReport","TopBarContainer","PrintButton","DownloadCSV","DownloadCSVSuccessBody","TopBar","reportLevels","classLevels","detailType","openDownloadCsvModal","setOpenDownloadCsvModal","downloadIsLoading","setDownloadIsLoading","downloadSuccess","setErr","isLeveless","selectedClassName","handleDownloadCsv","reportServices","flip","findLevel","le","changeItemLevel","syl","syll","isSelectedLeveless","getLevel","downloadCSVIcon","Boolean","errIcon","CloseIcon","ReportPage","LoadingContainer","calculatePercentageString","toFixed","ProgressBarContainer","ProgressSection","singleWidth","isLastIndex","parseFloat","ProgressBar","visualParts","percentage","widths","setWidths","GradeACell","SortButtonContainer","SortButton","ProficiencySkills","proficiency","progressbarNumber","progressBarInput","proficiencyIndex","NeedImprove","Passed","Mastered","CompetencyDetails","percentageString","TotalNoOfSkills","parseHighScoreProgressBar","masteryIndex","MasteryLevels","PROFICIENCY_THEAD","proficiencyType","upperCaseTitle","upperCaseContent","columnName","HIGH_SCORE_THEAD","gradeType","GradeAIcon","fraction","GradeBIcon","GradeCIcon","GradeDIcon","HighScoreIncompleteIcon","StudentTableReport","sortClick","sortDetail","colSpan","sortType","Fullname","NoReportStyle","detail","noReport","ProficiencyReportByStudent","visible","reportsLoading","setSortDetail","sortedData","datum","cloneDeep","c","useDeepCompareEffect","handleSortClick","TotalNoOfStudents","TotalNoOfUsers","SkillTableReport","SkillList","ProficiencyReportBySkills","setSelectedSkill","isLevelLess","handleSkillClick","isInitial","ProficiencyReport","useDeepCompareEffectNoCheck","firstLevel","HighScoreReportByStudent","HighScoreReportBySkills","HighScoreReport","HighScoreStars","numOfStars","stars","StarIcon","generateStars","SkillDetailsContainer","SkillDetailsHeader","SkillBadge","QuestionContainer","SolutionContainer","SkillDetailsQuestion","SkillDetails","selectedSkillTopic","selectedSkillNumber","GradeIconMapping","IncompleteIcon","SampleQuestionID","charAt","round","Proficiency","ClassAverage","SkillSection","showSkillDetails","proficiencyFontColors","ProficiencyBadge","sortSkills","StudentReport","setShowSkillDetails","setSelectedSkillTopic","setSelectedSkillNumber","SkillMastered","TotalNoOfSkill","ToggleReportStyle","ReportButton","high","onToggle","StudentReportPage","StudentHighScoreReport","ProfilePictureURL","Username","PrintIcon","ArrowIcon","StudentProficiencyReport","LoginReportPDF","weekId","Font","register","family","fonts","Muli","MuliB","StyleSheet","paddingHorizontal","category","flexDirection","table","borderStyle","borderWidth","borderRightWidth","borderBottomWidth","tableRow","tableColHead","borderLeftWidth","borderTopWidth","tableCol","tableColDaysHead","tableColDays","tableCell","tableCellHead","tableCellDay","textTransform","tableCellDate","tableCellStu","days","first","getDate","getDay","day","wrap","fixed","subtract","Total","LoginStatus","status","cache","LoginIcon","NotLoginIcon","NotLoginYetIcon","totalPages","LoginReportTableStyle","LoginReportTable","Login","NotLogin","NotLoginYet","EmptyResult","LoginReportContainer","SeparationBar","LoginReport","setWeekId","isoWeek","MonthlyReportStyle","ava_1","require","ava_2","ava_3","ava_4","ava_5","ava_6","ava_7","ava_8","ava_9","ava_10","ava_11","ava_12","no_1","no_2","no_3","no_4","no_5","no_6","no_7","no_8","no_9","no_10","no_11","no_12","MONTHLY","MonthlyReport","handlePress","Month","IsAvailable","ReportName","MonthlyActivity","TeacherMonthlyReport","getFullYear","yearSelected","setYearSelected","dataYears","dateStart","dateEnd","diff","reverse","MonthlyReportChartStyle","MonthlyReportChart","reportName","barChart","setBarChart","polarChart","setPolarChart","horizontalChart","setHorizontalChart","tiltedChart","setTiltedChart","monthName","levelIndex","scrollIntoView","bar","totalLoginData","totalPercentLoginByMonthReportData","totallogindata","loginPercentageData","loginpercentageData","chartData","labels","datasets","yAxisID","lineTension","polar","loginComparisionByLevelReportData","horizontalBar","loginComparisionByLevelAndClassReportData","tiltedBar","averageHomeworkQuestionsPerStudentPerclassReportData","homeworkQuestionData","SDLQuestionData","sdlQuestionData","levelName","responsive","plugins","tooltips","mode","intersect","scales","yAxisLine","grid","drawOnChartArea","suggestedMin","suggestedMax","legend","scale","ticks","beginAtZero","stepSize","animateRotate","animateScale","indexAxis","yAxisBar","autoSkip","xAxes","maxRotation","minRotation","SpecificMonthlyReportStyle","MonthlyReportChartComponent","PureComponent","SpecificMonthlyReport","monthSelected","setMonthSelected","selectedName","printRef","useReactToPrint","handleChangeMonth","selectedMonth","currentUrlParams","MonthlyReportChartMemo","useMemo","SkillInfo","Topbar","progressBar","skillList","back","useParams","isLast","TableTitle","TableContent","sortBtn","MasterySkills","ProficiencyLegend","CompetencyLevel","MasteryLegend","MasteryLevelName","SkillDetailContent","reportType","isSorting","descSortHandler","descActive","ascSortHandler","ascActive","Counts","Data","SkillDetailPage","SkillProficiencyReport","pageLoading","parseProfSkill","findItem","sorted","clonedData","skillData","SkillTopbar","SkillHighScoreReport","parseHighScoreSkill","MasteryStatus","Report","aggregateLoginReportData","classSize","aggregatedLoginCountsTotal","accumulator","dayTotal","daysOfWeek","loggedIn","future","ClassAttendance","LoginReportCard","aggregatedData","currentDayOfWeek","selectedBarChartDay","setSelectedBarChartDay","barWidth","setBarWidth","handleResize","offsetWidth","week","barSize","stackId","NoAssignmentSVG","StyledLink","AssignmentTrackingCard","FactualFluencyPNG","dashboardCards","subTitle","QuestionSVG","urlType","VideoSVG","WorksheetSVG","CubeSVG","MainContent","StyledWelcomeText","StyledCardRow","Card","backgroundcolor","StyledInnerCardRow","BottomCard","DashboardV2","dashboardCard","redirectToPage","Text","Img","NoParticipant","HeaderBg","TitleHeading","TitleMeta","BackIcon","allBadge","default","bgImg","DefaultBadge","badgeColor","gradinet","borderCol","FirstBadge","SecondBadge","third","ThirdBadge","challengeMode","Headings","flex","Lists","currPos","isTopFifty","setList","showPosition","pos","CurrentScore","TotalScore","cpValue","timeMs","timeSecond","minutePadded","padStart","secondPadded","milisecondToString","TimeTaken","Leaderboard","fetchFactualFluencyLeaderboardRequest","TopBarFixed","LeftNav","RightNav","ButtonHeader","TimerWrap","TimerCountdown","ProgressWrap","ProgressTime","CountdownNumber","iconTimer","intervalActive","renderTime","onMute","close","QuestionWrap","QuestionText","QuestionAnswer","questionNumber","onSubmitAnswer","el","FactualFluencyBody","ButtonPrev","ButtonNext","Backdrop","Countdown","isStart","setIsStart","setIntervalActive","countdown","setCountdown","setTime","seconds","setSeconds","currentQuestion","setCurrentQuestion","inputValue","setInputValue","resetInterval","onSkip","onPrev","timeout","bgFactualFluency","CenterMiddle","InfoGroup","InfoGroupBtn","InfoLabel","InfoDesc","CloseButton","NavTitle","ResultBody","questionText","answerText","renderQuestionAnswer","setMute","useSound","bgAudio","interrupt","play","QuestionContentPrint","SolutionContentPrint","answer","renderSolutions","renderAnswer","correctAnswer","ContainerPrint","ContainerPaper","QuestionsList","SolutionsList","WorksheetPrintComponent","containerRef","Routes","Dashboard","ProfileSetting","updatedLocale","sameLocale","onChangeLanguage","Cypress","hostname","Backend","initReactI18next","init","fallbackLng","debug","lng","whitelist","interpolation","escapeValue","backend","loadPath","ReactDOM","StrictMode","fallback","CookiesProvider","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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4B,mBmD+NCzT,IAC7ByT,YnDnNoC,2BmDmNC/O,IACrC+O,Y1C3O+B,sB0C2OCrL,IAChCqL,Y1CxOkC,yB0CwOCpL,IACnCoL,Y1CxOyC,gC0CwOCnL,IAC1CmL,Y5B9O8B,qB4B8OClE,IAC/BkE,Y5B3OwC,+B4B2OCjE,IACzCiE,YxEhP+B,sBwEgPC3kB,IAChC2kB,YrD3N+B,sBqD2NCxR,IAChCwR,YrDjPiC,wBqDiPCtR,IAClCsR,YrD7OgC,uBqD6OCvR,IACjCuR,YnDxNiC,wBmDwNC3O,IAClC2O,YnDxN+B,sBmDwNC9O,IAChC8O,YnD1O4B,mBmD0OC5O,IAC7B4O,YnDtO8B,qBmDsOC7O,IAC/B6O,YtCzPqC,4BsCyPC5J,IACtC4J,YtCjPF,oCsCiPgD3J,IAC9C2J,YtCtPkC,yBsCsPC1J,IACnC0J,YtC7OF,mCsC6O+CzJ,IAC7CyJ,YtCxOF,oCsCwOgDxJ,IAC9CwJ,YtC3NsC,6BsC2NCtJ,IACvCsJ,YtCnNqC,4BsCmNCrJ,IACtCqJ,YlC7PuC,8BkC6PCpH,IACxCoH,YlC3PyC,gCkC2PClH,IAC1CkH,YlClQiC,wBkCkQCrH,IAClCqH,YlC7OkC,yBkC6OCnH,IACnCmH,YlCxPgC,uBkCwPChH,IACjCgH,YlC5P8B,qBkC4PCjH,IAC/BiH,YlCvP4B,mBkCuPC/G,IAC7B+G,YlC3O+B,sBkC2OC9G,IAChC8G,YtEvQF,yCsEyQIrF,IAEFqF,YtErQF,uCsEqQmDpF,IACjDoF,YtEhQF,2CsEkQInF,IAEFmF,YtE9NF,yCsEgOIlF,IAEFkF,YtE1NF,uCsE0NmDjF,IACjDiF,YtExOyC,gCsEwOC3E,IAC1C2E,YtErQmC,0BsEqQChF,IACpCgF,YtE3PsC,6BsE2PC/E,IACvC+E,YtE/PoC,2BsE+PC9E,IACrC8E,YtExPF,qCsEwPiD7E,IAC/C6E,YtEnPF,8CsEqPI5E,IAEF4E,YtE7NF,gDsE+NI1E,IAEF0E,YtE1NF,8CsE4NIzE,IAEFyE,YxBvSsC,6BwBuSCrD,IACvCqD,YxBrSiC,wBwBqSCpD,IAClCoD,YxBnSkC,yBwBmSCtD,IACnCsD,YtExRmC,0BsEwRChF,I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,2D,oBCA3CD,EAAOC,QAAU,IAA0B,+C,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,0CCA3CD,EAAOC,QAAU,IAA0B,iD,oBCA3CD,EAAOC,QAAU,IAA0B,+C,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,0C,mBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,sC,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,iD,kBCA3CD,EAAOC,QAAU,8/F,oBCAjBD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,sC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,gD,oBCA3CD,EAAOC,QAAU,IAA0B,wD,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,gD,oBCA3CD,EAAOC,QAAU,IAA0B,oD,kBCA3CD,EAAOC,QAAU,slE,oBCAjBD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,6D,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,mD,oBCA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,iD,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,mD,oBCA3CD,EAAOC,QAAU,IAA0B,gD,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,kD,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,+C,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,kE,oBCA3CD,EAAOC,QAAU,IAA0B,sE,oBCA3CD,EAAOC,QAAU,IAA0B,yE,oBCA3CD,EAAOC,QAAU,IAA0B,6E,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,2D,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,sD,mBCA3CD,EAAOC,QAAU,IAA0B,6D,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,+C,mBCA3CD,EAAOC,QAAU,IAA0B,yE,oBCA3CD,EAAOC,QAAU,IAA0B,6D,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,oD,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,iE,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,oD,oBCA3CD,EAAOC,QAAU,IAA0B,4D,oBCA3CD,EAAOC,QAAU,IAA0B,4D,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,8C,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,iD,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,mD,kBCA3CD,EAAOC,QAAU,0kC,kBCAjBD,EAAOC,QAAU,8yH,oBCAjBD,EAAOC,QAAU,IAA0B,wD,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,yD,oBCA3CD,EAAOC,QAAU,IAA0B,wD,oBCA3CD,EAAOC,QAAU,IAA0B,0D,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,6D,oBCA3CD,EAAOC,QAAU,IAA0B,4D,oBCA3CD,EAAOC,QAAU,IAA0B,uD,oBCA3CD,EAAOC,QAAU,IAA0B,wD,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,oD,kBCA3CD,EAAOC,QAAU,0iB,kBCAjBD,EAAOC,QAAU,8kB,kBCAjBD,EAAOC,QAAU,8iB,oBCAjBD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,sD,oBCA3CD,EAAOC,QAAU,IAA0B,yD,oBCA3CD,EAAOC,QAAU,IAA0B,0D,oBCA3CD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,kBCA3CD,EAAOC,QAAU,smH,oBCAjBD,EAAOC,QAAU,IAA0B,4C,oBCA3CD,EAAOC,QAAU,IAA0B,sC","file":"static/js/main.68ade6d5.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/icon-report-high-score-a.631bdc72.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-high-score-b.25e24c0f.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-high-score-c.14e515db.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-high-score-d.ca6633fe.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-high-score-incomplete.7c7b012e.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAMAAAC5dNAvAAAC4lBMVEXIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodzIodz//////v/+/v7+/f78+/77+v76+vr6+f77+fv5+P76+Pv4+Pv49/74+Pj49v339/f39Pn19fX08/318vf18ffz8Pzy8vLy8ffy7/zw7fzy7PTw6/zv6/zu7u7w6/Pr6vTq6Pvu5/Hq6urp5/vq5vvp5vvo5fvo6Ojr5O/n4/rr4+/m5ubl4/Dn4Prl4frs3vPl5Obl4Prl4+bo4O3o4Ozr3fPo3+zl3vnk4uXk4eXm3+rn3uvk4Obm3urk3Pnk3+bj2/ni2/nj3ebj3Ofm2O3f2fne3Ozc1fja1Pji0urX1OjRyfbQzOTJxeDGvPTIuPPEufTHt/PBvdzQs9/OsN7Or968tPO7svLNrN66sfK/rfK5tNe2p/HIody0pvCyrNOpo8+rmu+jl+6hmsqZkcaUhOuTg+uQh8JZ0cA/AAAAjnRSTlMAAQIDBQYICgsMDhASExUYGh8gIiMkJSYnKCkqMjM0NTc5Pj9CREVGR0hJTlBRUlNUVVlaX2BhYmVmaWpsb3FzdHV3eHl8fYCBgoSHjo+Sk5SXmZufoKOlp6irrLGys7S2t76/wcLDxMXGycrMzc/R0tPW2drb3t/k5ebp6uvs7e7v8PHy9PX29/n7/P3+hE/4ogAABDVJREFUeNqt2Gl4E0UABuBJkUKLIopQFDmKR0GhKGoLchQoUIQCHkC5D6FFJKBcUqDcpy2dUm6QQ4VGRQMoEUi4BAUFRa6CNcEaDyhlyOounf88u91sNpvM7Eya72eSfZ+Zze7szgcANZaGbdMGDhv9ttWaM3pwxivN64DI83i3sYtQcPKtmUmxkViPZMxA4bNsaFIMJ/bMuDWIkjlp8RzYs+8isyzuHcd6ysYjlsxLsTBgD2R8iBgzsbGpljAFsWdFRxMteRk6XgTpKf7tlgYOpV6IPQsRMmj7T+lySPno3Nm/NW9KffItMED+AYSf/3jWn0thOafOm/koQauVhaq5U04t5+FPF7RsUQd8zqn35jUNP7bBSOW+Ou/PhZ/h6ctB2VnN6b3cRuG4/sjPBWXLp/p8slblnN/9pXmzw5y/FBSeCxOFc54IeDm1jdqTq3g5vTfQoNWdidi5H9T/6cQ/2kHPB3OvIw5u0xE1V7SD8h7Sa80LeDgtRYGj3tRpMfoblYODgaPWtAxwnVCNOWTVlqvY3Chw6AU/1xlFg5umDi9mdlQ41Lqaa4NInBvjMghFLDFxo6q5ETTOC0swI5f/sKzFr6ZwkgjLsChBWImxYPdiF7TjSgKHuspcB0ThBFziFQUJusWtduxzYQ9041ISly1zWTTOg8tEryBBWOoRsQBFEfok0mRRwYMAgPk0rlTy4TJ5dLjShQXowS7sJXIoGYAEROV8GJcIEhQlWIIroQsL+rkauUwAXqJzbixCQYI+bHdjn3zRiJDMZQPQl87JkxMkaJewTxQh9ATN1cjlATCMwoVGvlTIHKoHpnFwLozdkMYlgoVco6PdFcqqUhhN7lWAosml83LFu202m207gevFy525LeePaHG/KtyfBK4LWMXHXaRyL4M8Pu4olUsmXsa/l5eXl9/Yy8clguEE7u5/cq7ycfWIS0AkXB55gVK54n8rKioqbn7MxGWTl0+V2/i/EgcTlwlAyF9bA649+dFj4A5Wybm3nsYpj54OTNxJhavaRuOyKY/tCDjlsQ1GsnDHzLn8Bgr3HAt32JwbRXshI0z2FzKnvpCBLmTuupEjL1DvWWgvs3cU7prKfa2eu83k0b1IfdX+7Bs5G+E+h8PhOFi87qScY3D9F3JsodzUQDNQa3rNHz1P6TYWrQpDuD1fUrIrhMsK2kS9EcIdcFLyrZFbELwHjZtl5DbsIOejDUbOsMUDzVbX5NwNCtkep/q/KmLX/Fu8SbXJm/fjzF7R9+TNu1YtcGduI1rxwRtC8eGvZThDrGUAAOmFvBqlNAIAtF/Op2WZdKsJVg5sZUfzOrAvcx2Y05ilrHwimmWlnCTzinFJnziuoreAhn3QPZ6zOW7Q432CtfStVpZIiu0mnUcsMJbk7/R7Ojby2t3yWLseg4aPnWC1Th4z5LXUFmYV/n0Xvx0dhvB7vAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAMAAAC5dNAvAAACzVBMVEWGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxquGxqv////+//7+/v78/v39/f77/f37/fz6/fz5/fz4/Pv6+vr3+/r3+vn1+/n4+Pj2+fj39/fy+ffx+ffw+ffy9/X19fXu+Pbw9fPr9/Pv9fLq9/Py8vLu9PLp9vLn9fHm9fDl9fLl9fHj9PDp8e7u7u7h8+/n8Ozf8+3l7uvc8ezq6urb8erj7eno6Ojf6+bm5ube6uXj5eTi5ePR7eXb6OLV6+Lh5OPU6+Hg5OLa5+Hf5OLa5uHd5OHc5ODY5uDZ5eDc4+DZ497X497H6d/O5dzS4t3E6N7D5+DC59/A59rH4da+5di95di65NvI3NW14ta04dS+1s6q3tCo3cu00MaY18OX18OfzrqbzbiZzLeVy7SewraGxquHtaZ5rp1sp5RdoIvP4597AAAAjnRSTlMAAQIDBQYICgsMDhASExUYGh8gIiMkJSYnKCkqMjM0NTc5Pj9CREVGR0hJTlBRUlNUVVlaX2BhYmVmaWpsb3FzdHV3eHl8fYCBgoSHjo+Sk5SXmZufoKOlp6irrLGys7S2t76/wcLDxMXGycrMzc/R0tPW2drb3t/k5ebp6uvs7e7v8PHy9PX29/n7/P3+hE/4ogAAA7tJREFUeNqt2Odb00AABvArKgq4B7i34kRFxYGKGweKG5y4iqvi3rg3SKooimi1KipaFfeuAzfiBFfdW842f4NP0rRN0t7lrub91Kdwvye9Nne5FwBsNBWaRQyMHTtRp4sfOyyybc3iwPtU6RK3EkqTpIsK9vXGKhc5F3rO2hHBPpRYg/FbICaLIvwpsIbToVJW9fIjnbIJkCRLwzQEWNHIzZAwkwMVtaAZkDzr2ytoIWshVUZgf4jdUyC8p2fw2fb2j8ubURp9Cwzg/kGmXc0R5Tr/Vt79Xy5vXnmEViSG/zvDnHl415FnHjnzXZG3tJrnaxsGBS7H7Ewu8+ixMxnCBeeZJd7iSp64/tDBnc915OkTJue5JAftnMRb4GH+wqCTkyTjqDiHtwqc+dZPlxdfTK5V34jgPITnzDdF3kCZVmIepOUkXlMpNwhScA+E7+nmb+egxFJirWYyDZdxQ8hL16ghIs1HfKMy5NG7Rm2p7eI6QO84RjRM51yufBerwMGWDi4cqsElCJfns0AVDjayc42hOtwYOzcKx+Wz3xwvC1kDlksqw2n+m1TiYGeOC4UKnIH9yzA2mzKn5bgY1bjkkgCAZapxMASAIKjAfSbnogBojeaOs4V2zsoYWBJOC0AfzNVZrYZv7EXGajN8IOISAYjFcBetrO0Dw+Tb2EKiDwsDQAJ+7ijuCghhHbBCTa4lSFGT6wigmlwPdbmetFzqfqPRaNytFnf6PZdXCK4T2EjHneO51wiuDUhUkwuh/RmfwnJ1wEgEd7ugoKDgRSYdF4BcAj594XKBiktEL1DecFr08ilwqW8sFovl3R4iLgoAt69WyqV95WMi4lqgtx4vOH7rCSXisn5w+b4Dx2kx27aMy+a5H7twHL9tg9EqcUllea4JCXdSmRuDeyCTcSeUOeGBDHSi+LDoJWCWBvcwa+eukHOtsI/aH3nuksAdEeZuJ5Kb6WoGisxx5w5kcUljjphMJlNW6vZsLieZHZlcjO5cPdHBom7K/249MZJD1GA37thZTA7JueXSM6jffDl32YzJNTknO+KBGptkXPo+dPamy7hot+Nxu/+YuynF0Id3PbmmRx/endXCHWJPf48fsKQSrvigDaL4cNQylEHWMgCAHim0GqY0AgC0WEenxSh0q0E6CmxDe+U6sA9xHRgfSFJWVlWzrOQSrFwxru7tR1X0JuOwhV39KZvjst1mI6w1Q+tqvCm2K4ePWi4vyaf2q+/rfe2uqdi8W/TIuEk63bRxw/u2q6VU4f8DievsZSH4n78AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzVGMzUzMzYwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzVGMzUzMzUwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzVGMzUzM0EwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzVGMzUzMzkwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzYxMDkxMDAwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzYxMDkwRkYwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzYxMDkxMDQwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzYxMDkxMDMwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzYxMDkxMDgwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzYxMDkxMDcwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzY0QTA2REUwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzY0QTA2REQwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzZGRkQzQTAwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzZGRkQzOUYwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzczMzhBNzEwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzczMzhBNzAwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzczMzhBNzUwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzczMzhBNzQwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mzc1NEEwOEEwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzczMzhBNzgwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mzc1NEEwOEUwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mzc1NEEwOEQwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABOCAYAAACOqiAdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjg2MTNlZi05Y2U4LTUwNDgtYTE4OC03OTcyYTE4M2U3YjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mzc1NEEwOTIwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mzc1NEEwOTEwNUExMTFFODg5QjNBMDc5NkIyNkRENzQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NWE0ZGY1NTAtYmQ5YS1iNDQzLTg0MjQtNzk5YWUxN2JiNmE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmI2ODYxM2VmLTljZTgtNTA0OC1hMTg4LTc5NzJhMTgzZTdiMCIv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\"","import createAuthRefreshInterceptor from 'axios-auth-refresh';\nimport { isNil } from 'ramda';\nimport qs from 'qs';\nimport apiClient from 'services/api';\nimport handleLogout from 'helpers/logout';\n\n// Function that will be called to refresh authorization\nexport const refreshTokenApi = failedRequest => {\n const options = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n };\n return apiClient\n .post(\n process.env.REACT_APP_TOKEN_ENDPOINT,\n qs.stringify({\n grant_type: 'refresh_token',\n refresh_token: localStorage.getItem('refresh_token'),\n client_id: process.env.REACT_APP_CLIENT_ID,\n client_secret: process.env.REACT_APP_CLIENT_SECRET,\n scope: process.env.REACT_APP_CLIENT_SCOPE\n }),\n options\n )\n .then(tokenRefreshResponse => {\n // eslint-disable-next-line\n if (isNil(tokenRefreshResponse?.data?.access_token)) {\n // reject refresh when no access_token available, safe\n return Promise.reject(failedRequest);\n }\n // update access_token & refresh_token in localStorage\n localStorage.setItem(\n 'access_token',\n tokenRefreshResponse.data.access_token\n );\n // Api does not return refresh token in response\n if (!isNil(tokenRefreshResponse.data.refresh_token)) {\n localStorage.setItem(\n 'refresh_token',\n tokenRefreshResponse.data.refresh_token\n );\n }\n\n if (!isNil(failedRequest)) {\n // use updated access_token to refresh the request\n failedRequest.response.config.headers.Authorization = `Bearer ${tokenRefreshResponse.data.access_token}`; // eslint-disable-line\n }\n return Promise.resolve(tokenRefreshResponse?.data);\n })\n .catch(error => {\n handleLogout();\n return error?.response?.data ?? { error: 'Failed to refresh the tokens' };\n });\n};\n\n// Instantiate the interceptor (you can chain it as it returns the axios instance)\nexport default axiosInstance =>\n createAuthRefreshInterceptor(axiosInstance, refreshTokenApi);\n","export default {\n API_URL: process.env.REACT_APP_API_DOMAIN\n};\n","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory({\n basename: process.env.REACT_APP_SUBDOMAIN\n});\n","import history from 'helpers/history';\n\nexport default () => {\n // clear tokens from localStorage\n localStorage.removeItem('access_token');\n localStorage.removeItem('refresh_token');\n localStorage.removeItem('current_locale');\n // logout by navigate to login page\n const loginRoute =\n process.env.NODE_ENV === 'development' ||\n process.env.REACT_APP_NETLIFY === 'true'\n ? '/login'\n : '/members-login';\n // add callback for flutter app logout\n const hasFlutter = window.flutter_inappwebview;\n if (hasFlutter) hasFlutter.callHandler('logOutFunc');\n history.push(loginRoute);\n};\n","import axios from 'axios';\nimport Config from 'config';\nimport refreshTokenInterceptor from 'services/refreshToken';\n\n/**\n * Interceptor to automatically set access token to axios instance.\n */\nconst requestInterceptor = initialConfig => {\n const config = { ...initialConfig };\n // Don't intercept for queries to non backend servers.\n if (config.baseURL !== Config.API_URL) {\n return config;\n }\n\n const accessToken = localStorage.getItem('access_token');\n\n if (accessToken) {\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${accessToken}`\n };\n }\n\n return config;\n};\n\n/**\n * Interceptor for handling request errors.\n */\nconst requestErrorInterceptor = error => {\n // Request shouldn't be errorneous, capture in Sentry for future diagnosis.\n // console.log('%cAPI ERROR', 'color: #E35F5F;font-weight: bold;', error);\n return Promise.reject(error);\n};\n\n/**\n * Interceptor for logging request.\n */\nconst requestLoggerInterceptor = request => {\n // console.log('%cAPI REQUEST', 'color: #17B5E2;font-weight: bold;', request);\n return request;\n};\n\n/**\n * Interceptor for logging response.\n */\nconst responseLoggerInterceptor = response => {\n // console.log('%cAPI RESPONSE', 'color: #42AD3E;font-weight: bold;', response);\n return response;\n};\n\nconst axiosInstance = axios.create({\n baseURL: Config.API_URL\n});\n\naxiosInstance.interceptors.request.use(\n requestInterceptor,\n requestErrorInterceptor\n);\n\nif (process.env.NODE_ENV !== 'production') {\n axiosInstance.interceptors.request.use(requestLoggerInterceptor);\n axiosInstance.interceptors.response.use(responseLoggerInterceptor);\n}\n\nrefreshTokenInterceptor(axiosInstance);\n\nexport default axiosInstance;\n","import qs from 'qs';\nimport apiClient from 'services/api';\n\nexport default (username, password) => {\n const options = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n };\n return apiClient\n .post(\n process.env.REACT_APP_TOKEN_ENDPOINT,\n qs.stringify({\n grant_type: 'password',\n username,\n password,\n client_id: process.env.REACT_APP_CLIENT_ID,\n client_secret: process.env.REACT_APP_CLIENT_SECRET,\n scope: process.env.REACT_APP_CLIENT_SCOPE\n }),\n options\n )\n .then(result => {\n return result.data;\n })\n .catch(err => {\n return {\n error: err?.response?.data?.error_description ?? 'Login failed' // eslint-disable-line\n };\n });\n};\n","import apiClient from 'services/api';\nimport moment from 'moment';\nimport handleLogout from 'helpers/logout';\n\nexport const setUserDefaultLevel = LevelID => {\n return apiClient\n .post(`User/SetDefaultLevel/${LevelID}`)\n .then(result => {\n return result.data?.Result ?? {};\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Set user default level failed' // eslint-disable-line\n };\n });\n};\n\nexport default () => {\n return apiClient\n .get(`User/GetUserDefaultLevel`)\n .then(result => {\n if (result?.data?.Result) {\n const { IsAccountExpired, ExpiryDate } = result.data.Result;\n if (IsAccountExpired || moment().isAfter(moment(ExpiryDate))) {\n handleLogout();\n throw new Error('account expired');\n }\n }\n return result.data?.Result ?? {};\n })\n .catch(err => {\n if (err.message) {\n return { error: err.message };\n }\n return {\n error: err?.response?.data?.message ?? 'Fetch user default level failed' // eslint-disable-line\n };\n });\n};\n","import {\n LOGIN_REQUEST,\n LOGIN_SUCCESS,\n LOGIN_FAILED,\n LOGIN_RESET,\n REFRESH_TOKEN_REQUEST,\n SET_SHOW_TRIAL_POPUP,\n SET_USER_DATA,\n GET_GLOBAL_FEATURES_REQUEST,\n GET_GLOBAL_FEATURES_SUCCESS\n} from './actionTypes';\n\nexport const loginRequest = (username, password) => {\n return { type: LOGIN_REQUEST, username, password };\n};\n\nexport const loginSuccess = (\n user,\n isAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n userPreferences\n) => {\n return {\n type: LOGIN_SUCCESS,\n user,\n isAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n userPreferences\n };\n};\n\nexport const loginFailed = error => {\n return { type: LOGIN_FAILED, error };\n};\n\nexport const logout = () => {\n return { type: LOGIN_RESET };\n};\n\nexport const refreshTokenRequest = () => {\n return { type: REFRESH_TOKEN_REQUEST };\n};\n\nexport const setUserData = user => {\n return { type: SET_USER_DATA, user };\n};\n\nexport const setShowTrialPopup = show => {\n return {\n type: SET_SHOW_TRIAL_POPUP,\n show\n };\n};\n\nexport const getGlobalFeaturesRequest = () => {\n return {\n type: GET_GLOBAL_FEATURES_REQUEST\n };\n};\n\nexport const getGlobalFeaturesSuccess = data => {\n return {\n type: GET_GLOBAL_FEATURES_SUCCESS,\n data\n };\n};\n","export const LOGIN_REQUEST = 'LOGIN_REQUEST';\nexport const LOGIN_SUCCESS = 'LOGIN_SUCCESS';\nexport const LOGIN_FAILED = 'LOGIN_FAILED';\nexport const LOGIN_RESET = 'LOGIN_RESET';\nexport const REFRESH_TOKEN_REQUEST = 'REFRESH_TOKEN_REQUEST';\nexport const SET_USER_DATA = 'SET_USER_DATA';\nexport const SET_SHOW_TRIAL_POPUP = 'SET_SHOW_TRIAL_POPUP';\nexport const GET_GLOBAL_FEATURES_REQUEST = 'GET_GLOBAL_FEATURES_REQUEST';\nexport const GET_GLOBAL_FEATURES_SUCCESS = 'GET_GLOBAL_FEATURES_SUCCESS';\n","const fetchGlobalFeatureConfig = () => {\n return fetch(\n `${process.env.REACT_APP_CONTINGENCY_CONFIG_URL}?hash=${Date.now()}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n }\n )\n .then(response => {\n return response.json();\n })\n .then(myJson => {\n return myJson;\n });\n};\n\nexport default {\n fetchGlobalFeatureConfig\n};\n","import { call, put } from 'redux-saga/effects';\nimport loginApi from 'services/login';\nimport { refreshTokenApi } from 'services/refreshToken';\nimport getUserDefaultLevel from 'services/user';\nimport { isNil } from 'ramda';\nimport history from 'helpers/history';\nimport {\n loginFailed,\n loginSuccess,\n getGlobalFeaturesSuccess\n} from 'stores/login/actions';\nimport jwt_decode from 'jwt-decode';\nimport GlobalFeaturesService from 'services/globalFeatures';\n\n/**\n * The saga for refreshing token, to implement on startup saga\n */\nexport function* refreshToken() {\n const data = yield call(refreshTokenApi);\n // Server API can only have string instead of boolean for IsAdmin\n // so we convert to boolean here.\n // TODO: Check with Chat on missing property in new identity service\n const isTrialExpired =\n String(data.UserAccountExpired).toLowerCase() === 'true';\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(loginFailed(data.error));\n } else {\n // save access_token & refresh_token on localStorage, in future maybe put in secure storage?\n localStorage.setItem('access_token', data.access_token ?? '');\n // Api does not return refresh token in response\n if (!isNil(data.refresh_token)) {\n localStorage.setItem('refresh_token', data.refresh_token);\n }\n const decoded = jwt_decode(data.access_token);\n let { IsAdmin } = decoded;\n IsAdmin = String(IsAdmin).toLowerCase() === 'true';\n const {\n mySecret,\n myLocale,\n user_name: userName,\n user_id: userID,\n role\n } = decoded;\n // if the user data is successfully fetched\n try {\n const user = yield call(getUserDefaultLevel);\n if (!isNil(user)) {\n if (isNil(user.error)) {\n yield put(\n loginSuccess(\n user,\n IsAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n data.UserPreferences\n )\n );\n }\n }\n } catch (e) {\n const user = {\n UserId: userID,\n UserName: userName,\n Role: role\n };\n yield put(\n loginSuccess(\n user,\n IsAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n data.UserPreferences\n )\n );\n }\n }\n }\n}\n\n/**\n * The saga for logout, clearing tokens, redirect to login screen\n */\nexport function* logout() {\n localStorage.removeItem('access_token');\n localStorage.removeItem('refresh_token');\n localStorage.removeItem('current_locale');\n const loginRoute =\n process.env.NODE_ENV === 'development' ||\n process.env.REACT_APP_NETLIFY === 'true'\n ? '/login'\n : '/members-login';\n\n const hasFlutter = window.flutter_inappwebview;\n if (hasFlutter) hasFlutter.callHandler('logOutFunc');\n yield call([history, history.push], loginRoute);\n}\n\n/**\n * The saga for login by username and password\n */\nexport default function* login({ username, password }) {\n const data = yield call(loginApi, username, password);\n // Server API can only have string instead of boolean for IsAdmin\n // so we convert to boolean here.\n // TODO: Check with Chat on missing property in new identity service\n const isTrialExpired =\n String(data.UserAccountExpired).toLowerCase() === 'true';\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(loginFailed(data.error));\n } else {\n // save access_token & refresh_token on localStorage, in future maybe put in secure storage?\n localStorage.setItem('access_token', data.access_token ?? '');\n localStorage.setItem('refresh_token', data.refresh_token ?? '');\n const decoded = jwt_decode(data.access_token);\n let { IsAdmin } = decoded;\n IsAdmin = String(IsAdmin).toLowerCase() === 'true';\n const {\n mySecret,\n myLocale,\n user_name: userName,\n user_id: userID,\n role\n } = decoded;\n // if the user data is successfully fetched\n try {\n const user = yield call(getUserDefaultLevel);\n if (!isNil(user)) {\n if (isNil(user.error)) {\n yield put(\n loginSuccess(\n user,\n IsAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n data.UserPreferences\n )\n );\n yield call([history, history.push], '/dashboard');\n } else if (user.error === 'account expired') {\n yield put(loginFailed(user.error));\n }\n }\n } catch (e) {\n const user = {\n UserId: userID,\n UserName: userName,\n Role: role\n };\n yield put(\n loginSuccess(\n user,\n IsAdmin,\n mySecret,\n isTrialExpired,\n myLocale,\n data.UserPreferences\n )\n );\n yield call([history, history.push], '/dashboard');\n }\n }\n }\n}\n\n// Saga for fetching global config json\nexport function* fetchGlobalFeatureConfig() {\n const data = yield call(GlobalFeaturesService.fetchGlobalFeatureConfig);\n if (!isNil(data)) {\n yield put(getGlobalFeaturesSuccess(data));\n }\n}\n","import { isNil } from 'ramda';\nimport { put } from 'redux-saga/effects';\nimport { refreshTokenRequest } from 'stores/login/actions';\n/**\n * The startup saga is the place to define behavior to execute when the application starts.\n */\nexport default function* startup() {\n // calling refresh token action when startup, to get lates tokens and user data\n const refreshToken = localStorage.getItem('refresh_token');\n if (!isNil(refreshToken)) {\n yield put(refreshTokenRequest());\n }\n}\n","export default 'APP_STARTUP';\n","import apiClient from 'services/api';\n\nexport default TopicID => {\n return apiClient\n .get(`Topic/GetAssignedSkills/${TopicID}`)\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Skills fetch failed' // eslint-disable-line\n };\n });\n};\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport fetchSkillsApi from 'services/skills';\nimport {\n fetchSkillsRequest,\n fetchSkillsSuccess,\n fetchSkillsFailed,\n resetSelectedSkill\n} from 'stores/skills/actions';\n\n/**\n * The startup saga is the place to define behavior to execute when the application starts.\n */\nexport default function* skills() {\n yield put(fetchSkillsRequest());\n const topic = yield select(state => state.topics.selectedTopic);\n const data = yield call(fetchSkillsApi, topic.ID);\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(fetchSkillsFailed(data.error));\n } else {\n yield put(fetchSkillsSuccess(data));\n }\n }\n}\n\nexport function* refreshSkills() {\n yield put(resetSelectedSkill());\n yield call(skills);\n}\n","import {\n FETCH_SKILLS_REQUEST,\n FETCH_SKILLS_SUCCESS,\n FETCH_SKILLS_FAILED,\n SELECTED_SKILL,\n RESET_SELECTED_SKILL\n} from './actionTypes';\n\nexport const fetchSkillsRequest = () => {\n return { type: FETCH_SKILLS_REQUEST };\n};\n\nexport const fetchSkillsSuccess = skills => {\n return { type: FETCH_SKILLS_SUCCESS, skills };\n};\n\nexport const fetchSkillsFailed = error => {\n return { type: FETCH_SKILLS_FAILED, error };\n};\n\nexport const selectSkill = selectedSkill => {\n return { type: SELECTED_SKILL, selectedSkill };\n};\n\nexport const resetSelectedSkill = () => {\n return { type: RESET_SELECTED_SKILL };\n};\n","export const FETCH_SKILLS_REQUEST = 'FETCH_SKILLS_REQUEST';\nexport const FETCH_SKILLS_SUCCESS = 'FETCH_SKILLS_SUCCESS';\nexport const FETCH_SKILLS_FAILED = 'FETCH_SKILLS_FAILED';\nexport const SELECTED_SKILL = 'SELECTED_SKILL';\nexport const RESET_SELECTED_SKILL = 'RESET_SELECTED_SKILL';\n","import apiClient from 'services/api';\n\nexport default SIOID => {\n return apiClient\n .get(`Variation/GetVariationWithQuestionsBySIOId/${SIOID}`)\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch variations failed' // eslint-disable-line\n };\n });\n};\n","import {\n FETCH_VARIATIONS_FAILED,\n FETCH_VARIATIONS_REQUEST,\n FETCH_VARIATIONS_SUCCESS,\n FETCH_VARIATIONS_COMPLETE,\n RESET_SELECTED_VARIATION,\n SELECTED_VARIATION,\n FETCH_SINGLE_VARIATION\n} from './actionTypes';\n\nexport const fetchVariationsRequest = () => {\n return { type: FETCH_VARIATIONS_REQUEST };\n};\n\nexport const fetchVariationsSuccess = variations => {\n return { type: FETCH_VARIATIONS_SUCCESS, variations };\n};\n\nexport const fetchVariationsFailed = error => {\n return { type: FETCH_VARIATIONS_FAILED, error };\n};\n\nexport const fetchVariationsComplete = value => {\n return { type: FETCH_VARIATIONS_COMPLETE, value };\n};\n\nexport const selectVariation = selectedVariation => {\n return { type: SELECTED_VARIATION, selectedVariation };\n};\n\nexport const resetSelectedVariation = () => {\n return { type: RESET_SELECTED_VARIATION };\n};\nexport const fetchSingleVariation = skill => {\n return { type: FETCH_SINGLE_VARIATION, skill };\n};\n","export const FETCH_VARIATIONS_FAILED = 'FETCH_VARIATIONS_FAILED';\nexport const FETCH_VARIATIONS_REQUEST = 'FETCH_VARIATIONS_REQUEST';\nexport const FETCH_VARIATIONS_SUCCESS = 'FETCH_VARIATIONS_SUCCESS';\nexport const FETCH_VARIATIONS_COMPLETE = 'FETCH_VARIATIONS_COMPLETE';\nexport const RESET_SELECTED_VARIATION = 'RESET_SELECTED_VARIATION';\nexport const SELECTED_VARIATION = 'SELECTED_VARIATION';\nexport const FETCH_SINGLE_VARIATION = 'FETCH_SINGLE_VARIATION';\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport fetchVariationsApi from 'services/variations';\nimport {\n fetchVariationsRequest,\n fetchVariationsSuccess,\n fetchVariationsFailed,\n fetchVariationsComplete,\n fetchSingleVariation,\n resetSelectedVariation\n} from 'stores/variations/actions';\n\n/**\n * The startup saga is the place to define behavior to execute when the application starts.\n */\nexport default function* getAllVariations(selectedSkillId) {\n const { skills } = yield select(state => state.skills);\n // const variations = [];\n // eslint-disable-next-line\n for (let index = 0; index < skills.length; index++) {\n const variations = [];\n const skill = skills[index];\n if (selectedSkillId !== skill.SIOID) {\n const variationsPerSkill = yield call(fetchVariationsApi, skill.SIOID);\n if (!isNil(variationsPerSkill)) {\n if (isNil(variationsPerSkill.error)) {\n yield variations.push(...variationsPerSkill);\n yield put(fetchVariationsSuccess(variations));\n } else {\n yield put(fetchVariationsFailed(variationsPerSkill.error));\n }\n }\n }\n }\n yield put(fetchVariationsComplete(true));\n}\n\nexport function* refreshVariations() {\n yield put(resetSelectedVariation());\n yield call(getAllVariations);\n}\n\nexport function* callGetVariations({ skill }) {\n const variationsPerSkill = yield call(fetchVariationsApi, skill.skill.SIOID);\n const variations = [];\n if (!isNil(variationsPerSkill)) {\n if (isNil(variationsPerSkill.error)) {\n yield variations.push(...variationsPerSkill);\n yield put(fetchVariationsSuccess(variations));\n yield put(fetchVariationsComplete(false));\n } else {\n yield put(fetchVariationsFailed(variationsPerSkill.error));\n }\n }\n}\n\nexport function* callSelectedSkill({ selectedSkill }) {\n yield put(resetSelectedVariation());\n yield put(fetchVariationsRequest());\n yield put(fetchSingleVariation({ skill: selectedSkill }));\n}\n","import {\n FETCH_LEVELS_REQUEST,\n FETCH_LEVELS_SUCCESS,\n FETCH_LEVELS_FAILED,\n FETCH_VIDEOS_REQUEST,\n FETCH_VIDEOS_SUCCESS,\n FETCH_VIDEOS_FAILED,\n SELECTED_LEVEL\n} from './actionTypes';\n\nexport const fetchLevelsRequest = () => {\n return { type: FETCH_LEVELS_REQUEST };\n};\n\nexport const fetchLevelsSuccess = levels => {\n return { type: FETCH_LEVELS_SUCCESS, levels };\n};\n\nexport const fetchLevelsFailed = error => {\n return { type: FETCH_LEVELS_FAILED, error };\n};\n\nexport const selectLevel = selectedLevel => {\n return { type: SELECTED_LEVEL, selectedLevel };\n};\n\nexport const setVideosRequest = selectedLevel => {\n return { type: FETCH_VIDEOS_REQUEST, selectedLevel };\n};\n\nexport const setVideosSuccess = data => {\n return { type: FETCH_VIDEOS_SUCCESS, data };\n};\n\nexport const setVideosFailed = error => {\n return { type: FETCH_VIDEOS_FAILED, error };\n};\n","export const FETCH_LEVELS_REQUEST = 'FETCH_LEVELS_REQUEST';\nexport const FETCH_LEVELS_SUCCESS = 'FETCH_LEVELS_SUCCESS';\nexport const FETCH_LEVELS_FAILED = 'FETCH_LEVELS_FAILED';\nexport const FETCH_VIDEOS_REQUEST = 'FETCH_VIDEOS_REQUEST';\nexport const FETCH_VIDEOS_SUCCESS = 'FETCH_VIDEOS_SUCCESS';\nexport const FETCH_VIDEOS_FAILED = 'FETCH_VIDEOS_FAILED';\nexport const SELECTED_LEVEL = 'SELECTED_LEVEL';\n","import apiClient from 'services/api';\n\nexport const fetchLevelsApi = () => {\n return apiClient\n .get(`Lookup/Levels`)\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Levels fetch failed' // eslint-disable-line\n };\n });\n};\n\nexport const getLevelVideos = (CurriculumID, LevelID) => {\n return apiClient\n .get(`video/GetVideo/${CurriculumID}/${LevelID}`)\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Levels videos fetch failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchLevelsApi,\n getLevelVideos\n};\n","import {\n FETCH_USER_CURRICULUMS_REQUEST,\n FETCH_USER_CURRICULUMS_SUCCESS,\n FETCH_USER_CURRICULUMS_FAILED,\n SELECTED_CURRICULUM\n} from './actionTypes';\n\n// Fetch curriculums for current user\nexport const fetchUserCurriculumsRequest = () => {\n return { type: FETCH_USER_CURRICULUMS_REQUEST };\n};\n\nexport const fetchUserCurriculumsSuccess = curriculums => {\n return { type: FETCH_USER_CURRICULUMS_SUCCESS, curriculums };\n};\n\nexport const fetchUserCurriculumsFailed = error => {\n return { type: FETCH_USER_CURRICULUMS_FAILED, error };\n};\n\nexport const selectCurriculum = selectedCurriculum => {\n return { type: SELECTED_CURRICULUM, selectedCurriculum };\n};\n","// select a curriculum\nexport const SELECTED_CURRICULUM = 'SELECTED_CURRICULUM';\n\n// Fetch current user Curriculum\nexport const FETCH_USER_CURRICULUMS_REQUEST = 'FETCH_USER_CURRICULUMS_REQUEST';\nexport const FETCH_USER_CURRICULUMS_SUCCESS = 'FETCH_USER_CURRICULUMS_SUCCESS';\nexport const FETCH_USER_CURRICULUMS_FAILED = 'FETCH_USER_CURRICULUMS_FAILED';\n","import * as actionTypes from './actionTypes';\n\nexport const fetchClassProficiencyReportRequest = params => {\n return {\n type: actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchClassProficiencyReportSuccess = report => {\n return {\n type: actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchClassProficiencyReportFailed = error => {\n return {\n type: actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchClassHighScoreReportRequest = params => {\n return {\n type: actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchClassHighScoreReportSuccess = report => {\n return {\n type: actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchClassHighScoreReportFailed = error => {\n return {\n type: actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchStudentProficiencyReportRequest = params => {\n return {\n type: actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchStudentProficiencyReportSuccess = report => {\n return {\n type: actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchStudentProficiencyReportFailed = error => {\n return {\n type: actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchSampleQnRequest = params => {\n return {\n type: actionTypes.FETCH_SAMPLE_QN_REQUEST,\n params\n };\n};\n\nexport const fetchSampleQnSuccess = question => {\n return {\n type: actionTypes.FETCH_SAMPLE_QN_SUCCESS,\n question\n };\n};\n\nexport const fetchSampleQnFailed = error => {\n return {\n type: actionTypes.FETCH_SAMPLE_QN_FAILED,\n error\n };\n};\n\nexport const setSelectedClass = classObject => {\n return {\n type: actionTypes.SET_SELECTED_CLASS,\n classObject\n };\n};\n\nexport const setSortOrder = sortOrder => {\n return {\n type: actionTypes.SET_SORT_ORDER,\n sortOrder\n };\n};\n\nexport const setReportLevel = reportLevel => {\n return {\n type: actionTypes.SET_REPORT_LEVEL,\n reportLevel\n };\n};\n\nexport const setSyllabus = syllabus => {\n return {\n type: actionTypes.SET_SYLLABUS,\n syllabus\n };\n};\n\nexport const setClassLevel = level => {\n return {\n type: actionTypes.SET_CLASS_LEVEL,\n level\n };\n};\n\nexport const fetchLoginReportRequest = params => {\n return {\n type: actionTypes.FETCH_LOGIN_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchLoginReportSuccess = report => {\n return {\n type: actionTypes.FETCH_LOGIN_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchLoginReportFailed = error => {\n return {\n type: actionTypes.FETCH_LOGIN_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchWeekItemsRequest = params => {\n return {\n type: actionTypes.FETCH_WEEK_ITEMS_REQUEST,\n params\n };\n};\n\nexport const fetchWeekItemsSuccess = weeks => {\n return {\n type: actionTypes.FETCH_WEEK_ITEMS_SUCCESS,\n weeks\n };\n};\n\nexport const fetchWeekItemsFailed = error => {\n return {\n type: actionTypes.FETCH_WEEK_ITEMS_FAILED,\n error\n };\n};\n\nexport const toggleReport = val => {\n return {\n type: actionTypes.TOGGLE_REPORTS,\n val\n };\n};\n\nexport const fetchTeacherReportMonthRequest = params => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_MONTH_REQUEST,\n params\n };\n};\n\nexport const fetchTeacherReportMonthSuccess = report => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_MONTH_SUCCESS,\n report\n };\n};\n\nexport const fetchTeacherReportMonthFailed = error => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_MONTH_FAILED,\n error\n };\n};\n\nexport const fetchTeacherReportSpecificMonthRequest = params => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST,\n params\n };\n};\n\nexport const fetchTeacherReportSpecificMonthSuccess = report => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_SUCCESS,\n report\n };\n};\n\nexport const fetchTeacherReportSpecificMonthFailed = error => {\n return {\n type: actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_FAILED,\n error\n };\n};\n\nexport const fetchSyllabusRequest = params => {\n return {\n type: actionTypes.FETCH_REPORT_SYLLABUS_REQUEST,\n params\n };\n};\n\nexport const fetchSyllabusSuccess = data => {\n return {\n type: actionTypes.FETCH_REPORT_SYLLABUS_SUCCESS,\n data\n };\n};\n\nexport const fetchSyllabusFailed = error => {\n return {\n type: actionTypes.FETCH_REPORT_SYLLABUS_FAILED,\n error\n };\n};\n\nexport const fetchProficiencySkillReportRequest = params => {\n return {\n type: actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_REQUEST,\n params\n };\n};\nexport const fetchProficiencySkillReportSuccess = data => {\n return {\n type: actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_SUCCESS,\n data\n };\n};\nexport const fetchProficiencySkillReportFailed = error => {\n return {\n type: actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_FAILED,\n error\n };\n};\nexport const cleanProficiencySkillReport = () => {\n return {\n type: actionTypes.CLEAN_REPORT_PROFICIENCY_SKILL\n };\n};\n\nexport const fetchHighScoreSkillReportRequest = params => {\n return {\n type: actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_REQUEST,\n params\n };\n};\nexport const fetchHighScoreSkillReportSuccess = data => {\n return {\n type: actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_SUCCESS,\n data\n };\n};\nexport const fetchHighScoreSkillReportFailed = error => {\n return {\n type: actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_FAILED,\n error\n };\n};\n\nexport const fetchSkillProficiencyDetailReportRequest = params => {\n return {\n type: actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchSkillProficiencyDetailReportSuccess = report => {\n return {\n type: actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchSkillProficiencyDetailReportFailed = error => {\n return {\n type: actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchSkillHighScoreDetailReportRequest = params => {\n return {\n type: actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchSkillHighScoreDetailReportSuccess = report => {\n return {\n type: actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchSkillHighScoreDetailReportFailed = error => {\n return {\n type: actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_FAILED,\n error\n };\n};\nexport const cleanHighScoreSkillReport = () => {\n return {\n type: actionTypes.CLEAN_REPORT_HIGHSCORE_SKILL\n };\n};\n","export const FETCH_CLASS_PROFICIENCY_REPORT_REQUEST =\n 'FETCH_CLASS_PROFICIENCY_REPORT_REQUEST';\nexport const FETCH_CLASS_PROFICIENCY_REPORT_SUCCESS =\n 'FETCH_CLASS_PROFICIENCY_REPORT_SUCCESS';\nexport const FETCH_CLASS_PROFICIENCY_REPORT_FAILED =\n 'FETCH_CLASS_PROFICIENCY_REPORT_FAILED';\nexport const FETCH_CLASS_HIGHSCORE_REPORT_REQUEST =\n 'FETCH_CLASS_HIGHSCORE_REPORT_REQUEST';\nexport const FETCH_CLASS_HIGHSCORE_REPORT_SUCCESS =\n 'FETCH_CLASS_HIGHSCORE_REPORT_SUCCESS';\nexport const FETCH_CLASS_HIGHSCORE_REPORT_FAILED =\n 'FETCH_CLASS_HIGHSCORE_REPORT_FAILED';\nexport const FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST =\n 'FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST';\nexport const FETCH_STUDENT_PROFICIENCY_REPORT_SUCCESS =\n 'FETCH_STUDENT_PROFICIENCY_REPORT_SUCCESS';\nexport const FETCH_STUDENT_PROFICIENCY_REPORT_FAILED =\n 'FETCH_STUDENT_PROFICIENCY_REPORT_FAILED';\nexport const FETCH_SAMPLE_QN_REQUEST = 'FETCH_SAMPLE_QN_REQUEST';\nexport const FETCH_SAMPLE_QN_SUCCESS = 'FETCH_SAMPLE_QN_SUCCESS';\nexport const FETCH_SAMPLE_QN_FAILED = 'FETCH_SAMPLE_QN_FAILED';\nexport const SET_SELECTED_CLASS = 'SET_SELECTED_CLASS';\nexport const SET_SORT_ORDER = 'SET_SORT_ORDER';\nexport const SET_REPORT_LEVEL = 'SET_REPORT_LEVEL';\nexport const SET_SYLLABUS = 'SET_SYLLABUS';\nexport const SET_CLASS_LEVEL = 'SET_CLASS_LEVEL';\nexport const FETCH_WEEK_ITEMS_REQUEST = 'FETCH_WEEK_ITEMS_REQUEST';\nexport const FETCH_WEEK_ITEMS_SUCCESS = 'FETCH_WEEK_ITEMS_SUCCESS';\nexport const FETCH_WEEK_ITEMS_FAILED = 'FETCH_WEEK_ITEMS_FAILED';\nexport const FETCH_LOGIN_REPORT_REQUEST = 'FETCH_LOGIN_REPORT_REQUEST';\nexport const FETCH_LOGIN_REPORT_SUCCESS = 'FETCH_LOGIN_REPORT_SUCCESS';\nexport const FETCH_LOGIN_REPORT_FAILED = 'FETCH_LOGIN_REPORT_FAILED';\nexport const TOGGLE_REPORTS = 'TOGGLE_REPORTS';\nexport const FETCH_TEACHER_REPORT_MONTH_REQUEST =\n 'FETCH_TEACHER_REPORT_MONTH_REQUEST';\nexport const FETCH_TEACHER_REPORT_MONTH_SUCCESS =\n 'FETCH_TEACHER_REPORT_MONTH_SUCCESS';\nexport const FETCH_TEACHER_REPORT_MONTH_FAILED =\n 'FETCH_TEACHER_REPORT_MONTH_FAILED';\nexport const FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST =\n 'FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST';\nexport const FETCH_TEACHER_REPORT_SPECIFIC_MONTH_SUCCESS =\n 'FETCH_TEACHER_REPORT_SPECIFIC_MONTH_SUCCESS';\nexport const FETCH_TEACHER_REPORT_SPECIFIC_MONTH_FAILED =\n 'FETCH_TEACHER_REPORT_SPECIFIC_MONTH_FAILED';\n\nexport const FETCH_REPORT_SYLLABUS_REQUEST = 'FETCH_REPORT_SYLLABUS_REQUEST';\nexport const FETCH_REPORT_SYLLABUS_SUCCESS = 'FETCH_REPORT_SYLLABUS_SUCCESS';\nexport const FETCH_REPORT_SYLLABUS_FAILED = 'FETCH_REPORT_SYLLABUS_FAILED';\n\nexport const FETCH_REPORT_PROFICIENCY_SKILL_REQUEST =\n 'FETCH_REPORT_PROFICIENCY_SKILL_REQUEST';\nexport const FETCH_REPORT_PROFICIENCY_SKILL_SUCCESS =\n 'FETCH_REPORT_PROFICIENCY_SKILL_SUCCESS';\nexport const FETCH_REPORT_PROFICIENCY_SKILL_FAILED =\n 'FETCH_REPORT_PROFICIENCY_SKILL_FAILED';\nexport const CLEAN_REPORT_PROFICIENCY_SKILL = 'CLEAN_REPORT_PROFICIENCY_SKILL';\n\nexport const FETCH_REPORT_HIGHSCORE_SKILL_REQUEST =\n 'FETCH_REPORT_HIGHSCORE_SKILL_REQUEST';\nexport const FETCH_REPORT_HIGHSCORE_SKILL_SUCCESS =\n 'FETCH_REPORT_HIGHSCORE_SKILL_SUCCESS';\nexport const FETCH_REPORT_HIGHSCORE_SKILL_FAILED =\n 'FETCH_REPORT_HIGHSCORE_SKILL_FAILED';\n\nexport const FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST =\n 'FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST';\nexport const FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_SUCCESS =\n 'FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_SUCCESS';\nexport const FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_FAILED =\n 'FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_FAILED';\n\nexport const FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST =\n 'FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST';\nexport const FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_SUCCESS =\n 'FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_SUCCESS';\nexport const FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_FAILED =\n 'FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_FAILED';\nexport const CLEAN_REPORT_HIGHSCORE_SKILL = 'CLEAN_REPORT_HIGHSCORE_SKILL';\n","import apiClient from 'services/api';\n\n// `Curriculum/GetCurriculumForCurrentUser`\nconst GetCurriculumForCurrentUser = () => {\n return apiClient\n .get('MultiCurriculum/GetSelfPracticeCurriculums')\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch user curriculum failed' // eslint-disable-line\n };\n });\n};\n\nexport default GetCurriculumForCurrentUser;\n","import { anyPass, isNil, isEmpty } from 'ramda';\n\n/**\n * Checks if something is null, undefined or R.isEmpty\n *\n * @since v1.0.0\n * @param {*} (*) The thing to check.\n * @return {Boolean} True if it is null or empty; false otherwise.\n * @example\n * RS.isNilOrEmpty() //=> true\n */\nconst isNilOrEmpty = anyPass([isNil, isEmpty]);\n\nexport default isNilOrEmpty;\n","import { parseString } from 'xml2js';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\n\nexport default question => {\n let title = '';\n let mcqOptions = [];\n let solution = '';\n let questionAnswer = '';\n let correctMCQOptions = [];\n let correctMCQAnswers = [];\n if (!isNilOrEmpty(question?.Payload)) {\n parseString(question.Payload, (_error, result) => {\n if (result.Question?.Body) {\n title = result.Question?.Body[0]?.Content[0] ?? '';\n }\n if (result.Question?.Options) {\n const options = result.Question?.Options[0]?.Option ?? '';\n mcqOptions = options.map(option => option.Content[0]);\n correctMCQOptions = options\n .filter(option => option.$.Iscorrect === 'True')\n .map(option => option.$.RefId);\n\n correctMCQAnswers = options\n .filter(option => option.$.Iscorrect === 'True')\n .flatMap(option => option.Content);\n }\n if (result.Question?.Solution) {\n solution = result.Question?.Solution[0]?.Content[0] ?? '';\n }\n if (result.Question?.Answers) {\n questionAnswer = result.Question?.Answers[0]?.Answer ?? '';\n } else if (result.Question?.Submissions) {\n let optionAnswered;\n if (result.Question?.Submissions[0]?.Submission[0]?.Options) {\n optionAnswered =\n result.Question?.Submissions[0]?.Submission[0]?.Options[0]\n ?.Option[0] ?? '';\n } else {\n optionAnswered = '';\n }\n if (optionAnswered.length > 0) {\n optionAnswered = parseInt(optionAnswered.$.RefId, 10) - 1;\n questionAnswer = mcqOptions[optionAnswered];\n }\n }\n });\n }\n const image = title.match(new RegExp(`url=\"(.*?)\">`)) ?? [];\n return {\n title,\n imageUri: image[1] ?? '',\n mcqOptions,\n solution,\n questionAnswer,\n correctMCQOptions,\n correctMCQAnswers\n };\n};\n","import AStar from 'assets/img/icon-report-high-score-a.svg';\nimport BStar from 'assets/img/icon-report-high-score-b.svg';\nimport CStar from 'assets/img/icon-report-high-score-c.svg';\nimport DStar from 'assets/img/icon-report-high-score-d.svg';\nimport IncompleteStar from 'assets/img/icon-report-high-score-incomplete.svg';\n\nexport const homeworkLink =\n process.env.NODE_ENV === 'development' ||\n process.env.REACT_APP_NETLIFY === 'true'\n ? 'https://student-portal.netlify.app/assignment/start/'\n : 'https://student.koobits.com/assignment/start/';\n\nexport const worksheetStatus = {\n draft: 1,\n publish: 3\n};\n\nexport const assignmentTypes = {\n homework: 1,\n mocktest: 2,\n test: 3,\n total: 4,\n interval: 5,\n notime: 6\n};\n\nexport const assignmentTypeNames = {\n homework: 'homework',\n mocktest: 'mockTest',\n test: 'test'\n};\n\nexport const assignmentTypeColors = {\n homework: '#49C8AA',\n mocktest: '#FFD016',\n test: '#FF6E1D'\n};\n\nexport const assignmentTypeInitials = {\n homework: 'H',\n mocktest: 'M',\n test: 'T'\n};\n\nexport const presentationTypes = {\n standard: 1,\n kooQuiz: 2\n};\n\nexport const classType = {\n class: 1,\n group: 3\n};\n\nexport const assignReferenceType = {\n class: 5,\n group: 5, // same as class\n student: 6,\n level: 4\n};\n\nexport const questionStatus = {\n 1: 'Valid',\n 2: 'Invalid',\n 3: 'Already Exists In Users Cart'\n};\n\nexport const assignmentVisibilities = {\n 1: 'dayAdvnc',\n 2: 'onSameDay',\n 3: 'hourAdvnc',\n 4: 'minAdvnc'\n};\n\n// export const assignmentVisibilities = {\n// 1: '1 day in advance',\n// 2: 'on the same day',\n// 3: '1 hour in advance',\n// 4: '30 min in advance'\n// };\n\nexport const LevelColors = {\n 1: '#FFCB51',\n 2: '#C1E141',\n 3: '#86DFD3',\n 4: '#DBACF6',\n 5: '#FFB388',\n 6: '#F398BA',\n 7: '#FFCB51',\n 8: '#C1E141',\n 9: '#86DFD3',\n 10: '#DBACF6',\n 11: '#FFB388',\n 12: '#F398BA'\n};\n\nexport const LevelHoverColors = {\n 1: '#ffe5a8',\n 2: '#e0f0a0',\n 3: '#c3efe9',\n 4: '#edd6fb',\n 5: '#ffd9c4',\n 6: '#f9ccdd',\n 7: '#ffe5a8',\n 8: '#e0f0a0',\n 9: '#c3efe9',\n 10: '#edd6fb',\n 11: '#ffd9c4',\n 12: '#f9ccdd'\n};\n\nexport const proficiencyColors = {\n mastery: {\n color: '#FBDA38',\n borderColor: '#CBAA0A',\n tableOddColor: '#FFFCD5',\n tableEvenColor: '#FFFDE4',\n tableBorderColor: '#D1CEA9'\n },\n competent: {\n color: '#A9E9A4',\n borderColor: '#58BE51',\n tableOddColor: '#EEFBE9',\n tableEvenColor: '#F8FFF4',\n tableBorderColor: '#C4CEC3'\n },\n developing: {\n color: '#7DD3FF',\n borderColor: '#299AD4',\n tableOddColor: '#FFFAEB',\n tableEvenColor: '#FFFCF2',\n tableBorderColor: '#FFFCF2'\n },\n beginning: {\n color: '#FF8282',\n borderColor: '#B93A3A',\n tableOddColor: '#FDF2F2',\n tableEvenColor: '#FFFAFA',\n tableBorderColor: '#E0D0D0'\n },\n incomplete: {\n color: '#EFEFEF',\n borderColor: '#B3CCD6',\n tableOddColor: '#F4F4F4',\n tableEvenColor: '#FAFAFA',\n tableBorderColor: '#CCCCCC'\n }\n};\n\nexport const masteryColors = {\n A: {\n tableOddColor: '#FFFCD9',\n tableEvenColor: '#FFFDE6',\n tableBorderColor: '#D1CEA9'\n },\n B: {\n tableOddColor: '#F0F6FA',\n tableEvenColor: '#F7F9FA',\n tableBorderColor: '#C5D3E2'\n },\n C: {\n tableOddColor: '#FFFAEB',\n tableEvenColor: '#FFFCF2',\n tableBorderColor: '#E0D0D0'\n },\n D: {\n tableOddColor: '#FFFDF7',\n tableEvenColor: '#FFFFFD',\n tableBorderColor: '#EBE0D0'\n },\n Incomplete: {\n tableOddColor: '#F4F4F4',\n tableEvenColor: '#FAFAFA',\n tableBorderColor: '#CCCCCC'\n }\n};\n\n// For Proficiency Report\nconst negativeOne = -1;\nexport const ProficiencyStatus = {\n 1: 'beginning',\n 2: 'developing',\n 3: 'competent',\n 4: 'mastery',\n 0: 'incomplete'\n};\n\nexport const proficiencyScoreRange = {\n mastery: '80-100',\n competent: '60-79',\n beginning: '0-59',\n incomplete: 'Question < 10'\n};\n\n// Grade for High Score Report\nexport const MasteryLevel = {\n 0: 'D',\n 1: 'C',\n 2: 'B',\n 3: 'A',\n [negativeOne]: 'incomplete'\n};\n\nexport const MasteryLevelRange = {\n A: {\n icon: AStar,\n noQn: '9-10'\n },\n B: {\n icon: BStar,\n noQn: '6-8'\n },\n C: {\n icon: CStar,\n noQn: '4-5'\n },\n D: {\n icon: DStar,\n noQn: '1-3'\n },\n Incomplete: {\n icon: IncompleteStar,\n noQn: null\n }\n};\n\n// Subject IDs representing Math, Science etc.\n// TODO: Update when subject ids for other subjects like Science is available\nexport const subjectTypes = {\n 1: 'Math'\n};\n\n// Login Report Status\nexport const LoginStatus = {\n 0: 'Not log in',\n 1: 'Logged in',\n 2: 'In progress'\n};\n\n// Submission Status\nexport const SubmissionStatus = {\n 1: 'Correct',\n 2: 'Wrong',\n 3: 'Unknown',\n 4: 'Skipped'\n};\n\nexport const homeworkTypes = {\n 3: {\n bgColor: '#49C8AA',\n logo: 'H'\n },\n 6: {\n bgColor: '#49C8AA',\n logo: 'H'\n },\n 11: {\n bgColor: '#FFC043',\n logo: 'M'\n },\n 12: {\n bgColor: '#FF7121',\n logo: 'T'\n },\n 13: {\n bgColor: '#fff',\n logo: 'T'\n }\n};\n\n// Feature toggle for some features not ready for Teacher Portal demo\nexport const featureToggle = {\n // NavbarNav.js\n languageDropdown: true,\n // NavbarCollapse.js\n notificationBell: false,\n // SidebarCreateAssign.js\n topicRevision: false,\n // QuestionCardView.js\n videoPlayButton: false,\n // ClassReport-Sidebar.js, SidebarReport.js\n reportSidebarOptions: false,\n // SidebarManageClass.js\n myGroups: false,\n // ActionButtons.js\n classListActions: false,\n // AssignmentCard.js\n assignAgainButton: false,\n popoverMenu: false,\n // SavedWorksheetList.js, SavedWorksheetRow.js\n previewButton: false,\n // SavedWorksheetRowSubMenu.js\n printButton: true,\n // MultiClassReport.js, SingleClassReport.js\n reportActionButtons: true,\n // TopBar.js\n reportPrintButton: false\n};\n\nexport const questionTypeIDs = {\n 1: 'mcq',\n 2: 'fillInTheBlanks',\n 3: 'longAnswer'\n};\n\nexport const timeSettingTypes = {\n intervalTime: {\n name: 'Interval Time',\n value: 5\n },\n totalTime: {\n name: 'Total Time',\n value: 4\n },\n noTime: {\n name: 'Do not time me',\n value: 6\n }\n};\n","import questionParser from 'helpers/questionParser';\nimport moment from 'moment';\nimport { isNil } from 'ramda';\nimport { questionTypeIDs } from 'constants/index';\n\n// HELPERS\n// Gets a specific class' details from fetchSingleClassReport API response\nexport const getClass = (group, targetClassID) => {\n return group.find(classObject => classObject.ClassID === targetClassID);\n};\n\nexport const parseQnAnswer = questionAnswer => {\n let answerString;\n if (questionAnswer.length > 0 && typeof questionAnswer !== 'string') {\n answerString = questionAnswer.map(ans => ans.$.Value).join(', ');\n } else {\n answerString = questionAnswer;\n }\n return answerString;\n};\n\n// Parse QuestionResult payload to return a answer string delimited by |\nexport const parseQuestionResultToString = (questionResult, questionType) => {\n const result = questionParser(questionResult);\n const { questionAnswer, correctMCQOptions } = result;\n\n let answerString;\n if (questionType === 'mcq') {\n answerString = correctMCQOptions\n .map(option => `Option ${option}`)\n .join(', ');\n } else {\n try {\n if (questionAnswer.length > 0 && typeof questionAnswer !== 'string') {\n answerString = questionAnswer.map(ans => ans.$.Value).join(', ');\n } else {\n answerString = questionAnswer;\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n return answerString;\n};\n\n// Parses SubmissionKeyValuePairs property in QuestionResult object to return a answer string delimited by |\nexport const parseSubmittedAnswersToString = (answers, questionType) => {\n let answerString;\n if (questionType === 'mcq') {\n answerString = answers\n .map(ans => {\n if (!isNil(ans.Key)) {\n return `Option ${ans.Key}`;\n }\n return '';\n })\n .filter(ans => ans.length > 0)\n .join(', ');\n } else {\n answerString = answers\n .map(ans => {\n if (!isNil(ans.Value)) {\n return ans.Value;\n }\n return '';\n })\n .filter(ans => ans.length > 0)\n .join(', ');\n }\n if (answerString.length === 0) {\n return 'No answer submitted';\n }\n return answerString;\n};\n\n// Sorts an array of objects by given key\nexport function compareValues(key, order = 'asc') {\n return function innerSort(a, b) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\n // property doesn't exist on either object\n return 0;\n }\n\n const varA = typeof a[key] === 'string' ? a[key].toUpperCase() : a[key];\n const varB = typeof b[key] === 'string' ? b[key].toUpperCase() : b[key];\n\n let comparison = 0;\n if (varA > varB) {\n comparison = 1;\n } else if (varA < varB) {\n comparison = -1;\n }\n return order === 'desc' ? comparison * -1 : comparison;\n };\n}\n\n// Parse QuestionResult array from fetchSingleClassReport API response into format for CSV report\nexport const parseCSVReport = data => {\n let report = [];\n const {\n Questions,\n HomeWorkTitle,\n HomeWorkId,\n TrackingGroup,\n TrackingIndividual\n } = data[0];\n const maxScore = Questions.length;\n // Check if there are classes assigned for this homework\n if (TrackingGroup.length > 0) {\n // Loops through each class\n for (const assignedClass of TrackingGroup) {\n const className = assignedClass.ClassName;\n const classID = assignedClass.ClassID;\n // Stores a hashmap of studentID to index position in students\n const studentHashmap = {};\n const students = [...assignedClass.Students];\n // Setup students array\n for (let i = 0; i < students.length; i++) {\n students[i].type = 'class';\n students[i].class = className;\n students[i].classID = classID;\n students[i].studentName = students[i].FullName;\n students[i].homeworkTitle = HomeWorkTitle;\n students[i].homeworkID = HomeWorkId;\n students[i].score = '-';\n students[i].maxScore = maxScore;\n students[i].submissionDate = '-';\n // Update studentHashmap\n studentHashmap[students[i].ID] = i;\n }\n // Loops through QuestionResult array\n for (const result of assignedClass.QuestionResult) {\n const studentIndex = studentHashmap[result.SubmittedBy];\n // If question was answered correctly\n if (result.SubmissionResult === 1) {\n // Update student score\n if (students[studentIndex].score === '-') {\n students[studentIndex].score = 1;\n } else {\n students[studentIndex].score += 1;\n }\n // Update submission date\n if (students[studentIndex].submissionDate === '-') {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n } else {\n const currentDate = moment(\n students[studentIndex].submissionDate,\n 'DD/MM/YYYY HH:mm'\n ).unix();\n const newDate = moment(result.SubmissionDate).unix();\n if (newDate > currentDate) {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n }\n }\n }\n // Question result !== correct\n else {\n // Update student score\n if (students[studentIndex].score === '-') {\n students[studentIndex].score = 0;\n }\n // Update submission date\n if (students[studentIndex].submissionDate === '-') {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n } else {\n const currentDate = moment(\n students[studentIndex].submissionDate,\n 'DD/MM/YYYY HH:mm'\n ).unix();\n const newDate = moment(result.SubmissionDate).unix();\n if (newDate > currentDate) {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n }\n }\n }\n }\n report = [...report, ...students];\n }\n }\n // Check if there are individual students assigned for this homework\n if (TrackingIndividual !== null) {\n // Stores a hashmap of studentID to index position in students\n const studentHashmap = {};\n const students = [...TrackingIndividual.Students];\n // Setup students array\n for (let i = 0; i < students.length; i++) {\n students[i].type = 'individual';\n students[i].class = '-';\n students[i].studentName = students[i].FullName;\n students[i].homeworkTitle = HomeWorkTitle;\n students[i].homeworkID = HomeWorkId;\n students[i].score = '-';\n students[i].maxScore = maxScore;\n students[i].submissionDate = '-';\n // Update studentHashmap\n studentHashmap[students[i].ID] = i;\n }\n // Loops through QuestionResult array\n for (const result of TrackingIndividual.QuestionResult) {\n const studentIndex = studentHashmap[result.SubmittedBy];\n // If question was answered correctly\n if (result.SubmissionResult === 1) {\n // Update student score\n if (students[studentIndex].score === '-') {\n students[studentIndex].score = 1;\n } else {\n students[studentIndex].score += 1;\n }\n // Update submission date\n if (students[studentIndex].submissionDate === '-') {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n } else {\n const currentDate = moment(\n students[studentIndex].submissionDate,\n 'DD/MM/YYYY HH:mm'\n ).unix();\n const newDate = moment(result.SubmissionDate).unix();\n if (newDate > currentDate) {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n }\n }\n }\n // Question result !== correct\n else {\n // Update student score\n if (students[studentIndex].score === '-') {\n students[studentIndex].score = 0;\n }\n // Update submission date\n if (students[studentIndex].submissionDate === '-') {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n } else {\n const currentDate = moment(\n students[studentIndex].submissionDate,\n 'DD/MM/YYYY HH:mm'\n ).unix();\n const newDate = moment(result.SubmissionDate).unix();\n if (newDate > currentDate) {\n students[studentIndex].submissionDate = moment(\n result.SubmissionDate\n ).format('DD/MM/YYYY HH:mm');\n }\n }\n }\n }\n report = [...report, ...students];\n }\n return report;\n};\n\n// Parse QuestionResult array from fetchSingleClassReport API response into an array of scores by student\nexport const parseQuestionResult = (questionResult, questions, students) => {\n const questionsHashmap = {};\n const scoresByQuestion = [];\n // Setup scoresByQuestion array\n let questionIndex = 1;\n for (const question of questions) {\n questionsHashmap[question.Id] = questionIndex;\n scoresByQuestion[questionIndex] = {\n correct: {},\n wrong: {}\n };\n questionIndex += 1;\n }\n\n const scoresByStudent = students;\n // Stores a hashmap of studentID to index position in scoresByStudent\n const studentHashmap = {};\n // Add properties to student objects\n for (let i = 0; i < scoresByStudent.length; i++) {\n scoresByStudent[i].score = 0;\n scoresByStudent[i].hasSubmitted = false;\n scoresByStudent[i].questions = [];\n scoresByStudent[i].answers = [];\n // Update studentHashmap\n studentHashmap[scoresByStudent[i].ID] = i;\n }\n // Loops through array of question results\n for (const result of questionResult) {\n if (studentHashmap.hasOwnProperty(result.SubmittedBy)) {\n scoresByStudent[studentHashmap[result.SubmittedBy]].hasSubmitted = true;\n // Check if question was answered correctly\n if (result.SubmissionResult === 1) {\n scoresByStudent[studentHashmap[result.SubmittedBy]].score += 1;\n scoresByStudent[studentHashmap[result.SubmittedBy]].questions[\n questionsHashmap[result.Id]\n ] = true;\n // Parse the answer from payload, questionAnswer is an array of objects\n // The answer can be found in the key $\n const wrongAnsString = parseSubmittedAnswersToString(\n result.SubmissionKeyValuePairs,\n questionTypeIDs[result.QuestionType]\n );\n\n // Add to answers array\n scoresByStudent[studentHashmap[result.SubmittedBy]].answers[\n questionsHashmap[result.Id]\n ] = {\n isCorrect: true,\n questionPayload: result.Payload,\n questionDifficulty: result.Difficulty,\n studentAnswer: wrongAnsString,\n submissionId: result.SubmissionID\n };\n // Check if answer already exists in correct hashmap\n if (\n scoresByQuestion[questionsHashmap[result.Id]].correct.hasOwnProperty(\n wrongAnsString\n )\n ) {\n scoresByQuestion[questionsHashmap[result.Id]].correct[\n wrongAnsString\n ].num += 1;\n scoresByQuestion[questionsHashmap[result.Id]].correct[\n wrongAnsString\n ].students.push(\n scoresByStudent[studentHashmap[result.SubmittedBy]].FullName\n );\n } else {\n scoresByQuestion[questionsHashmap[result.Id]].correct[\n wrongAnsString\n ] = {\n num: 1,\n students: [\n scoresByStudent[studentHashmap[result.SubmittedBy]].FullName\n ]\n };\n }\n } else if (\n result.SubmissionResult === 2 ||\n result.SubmissionResult === 3\n ) {\n scoresByStudent[studentHashmap[result.SubmittedBy]].questions[\n questionsHashmap[result.Id]\n ] = false;\n const ansString = parseQuestionResultToString(\n result,\n questionTypeIDs[result.QuestionType]\n );\n\n // Add correct answer to scoresByQuestion\n if (\n !scoresByQuestion[questionsHashmap[result.Id]].correct.hasOwnProperty(\n ansString\n )\n ) {\n scoresByQuestion[questionsHashmap[result.Id]].correct[ansString] = {\n num: 0,\n students: []\n };\n }\n const wrongAnsString = parseSubmittedAnswersToString(\n result.SubmissionKeyValuePairs,\n questionTypeIDs[result.QuestionType]\n );\n // Add to answers array\n scoresByStudent[studentHashmap[result.SubmittedBy]].answers[\n questionsHashmap[result.Id]\n ] = {\n isCorrect: false,\n questionPayload: result.Payload,\n questionDifficulty: result.Difficulty,\n studentAnswer: wrongAnsString,\n submissionId: result.SubmissionID\n };\n if (\n scoresByQuestion[questionsHashmap[result.Id]].wrong.hasOwnProperty(\n wrongAnsString\n )\n ) {\n scoresByQuestion[questionsHashmap[result.Id]].wrong[\n wrongAnsString\n ].num += 1;\n scoresByQuestion[questionsHashmap[result.Id]].wrong[\n wrongAnsString\n ].students.push(\n scoresByStudent[studentHashmap[result.SubmittedBy]].FullName\n );\n } else {\n scoresByQuestion[questionsHashmap[result.Id]].wrong[\n wrongAnsString\n ] = {\n num: 1,\n students: [\n scoresByStudent[studentHashmap[result.SubmittedBy]].FullName\n ]\n };\n }\n }\n }\n }\n return {\n byQuestion: scoresByQuestion,\n byStudent: scoresByStudent\n };\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport {\n fetchUserCurriculumsRequest,\n fetchUserCurriculumsSuccess,\n fetchUserCurriculumsFailed\n} from 'stores/curriculums/actions';\nimport { setSyllabus } from 'stores/report/actions';\nimport GetCurriculumForCurrentUser from 'services/curriculums';\nimport { compareValues } from 'helpers/singleClassReport';\n\n// Helper to set default curriculum\nconst setDefaultCurriculum = curriculumsArray => {\n const sortedCurriculums = curriculumsArray.sort(\n compareValues('CurriculumName', 'asc')\n );\n const feature6DefaultCurriculum = sortedCurriculums.find(\n curr => curr.Feature === 6\n );\n if (feature6DefaultCurriculum) {\n return feature6DefaultCurriculum;\n }\n const defaultCurriculumIndex = sortedCurriculums.findIndex(\n curr => curr.IsDefault === true\n );\n if (defaultCurriculumIndex !== -1) {\n return sortedCurriculums[defaultCurriculumIndex];\n }\n return sortedCurriculums[0];\n};\n\n/**\n * The saga to get user curriculum\n */\nfunction* getUserCurriculums() {\n yield put(fetchUserCurriculumsRequest());\n const data = yield call(GetCurriculumForCurrentUser);\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(fetchUserCurriculumsFailed(data.error));\n } else {\n yield put(fetchUserCurriculumsSuccess(data));\n yield put(setSyllabus(setDefaultCurriculum(data)));\n }\n }\n}\n\nexport default getUserCurriculums;\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil, isEmpty } from 'ramda';\nimport {\n fetchLevelsRequest,\n fetchLevelsSuccess,\n fetchLevelsFailed,\n selectLevel,\n setVideosRequest,\n setVideosFailed,\n setVideosSuccess\n} from 'stores/levels/actions';\nimport { setUserData } from 'stores/login/actions';\n\nimport LevelService from 'services/levels';\nimport { setUserDefaultLevel } from 'services/user';\nimport getUserCurriculums from 'sagas/curriculums';\n\nexport function* setDefaultLevel({ selectedLevel }) {\n const { selectedCurriculum } = yield select(state => state.curriculums);\n // eslint-disable-next-line no-nested-ternary\n const checkLevelId = () => {\n if (isEmpty(selectedCurriculum?.Levels)) {\n return -1;\n } else if (\n !isEmpty(selectedCurriculum?.Levels) &&\n selectedCurriculum.Levels.find(item => item.ID === selectedLevel.ID)\n ) {\n return selectedLevel.ID;\n }\n return selectedCurriculum.Levels[0].ID;\n };\n const levelId = checkLevelId();\n\n const setUser = yield call(setUserDefaultLevel, levelId);\n if (!isNil(setUser)) {\n if (!isNil(setUser.error)) {\n // nothing\n } else {\n yield put(setUserData(setUser));\n yield put(setVideosRequest(selectedLevel));\n }\n }\n}\n\nexport function* getVideos({ selectedLevel }) {\n // let curriculumId = '';\n // if (isNil(curriculum)) {\n // const { selectedCurriculum } = yield select(state => state.curriculums);\n // curriculumId = selectedCurriculum.CurriculumID;\n // } else {\n // curriculumId = curriculum;\n // }\n const { selectedCurriculum } = yield select(state => state.curriculums);\n const curriculumId = selectedCurriculum.CurriculumID;\n // eslint-disable-next-line no-nested-ternary\n const checkLevelId = () => {\n if (isEmpty(selectedCurriculum?.Levels)) {\n return -1;\n } else if (\n !isEmpty(selectedCurriculum?.Levels) &&\n selectedCurriculum.Levels.find(item => item.ID === selectedLevel.ID)\n ) {\n return selectedLevel.ID;\n }\n return selectedCurriculum.Levels[0].ID;\n };\n const levelId = checkLevelId();\n const data = yield call(\n LevelService.getLevelVideos,\n curriculumId,\n // selectedCurriculum.CurriculumID,\n levelId\n );\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n console.log('Handle err', data);\n yield put(setVideosFailed(data));\n } else {\n yield put(setVideosSuccess(data));\n }\n }\n}\n\n/**\n * The startup saga is the place to define behavior to execute when the application starts.\n */\nexport default function* levels({ user }) {\n yield put(fetchLevelsRequest());\n const data = yield call(LevelService.fetchLevelsApi);\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(fetchLevelsFailed(data.error));\n } else {\n yield put(fetchLevelsSuccess(data));\n yield call(getUserCurriculums);\n if (isNil(user.DefaultLevel) || user.DefaultLevel < 1) {\n // yield call([history, history.push], '/');\n } else {\n const level = data.find(lvl => lvl.ID === user.DefaultLevel) ?? {};\n yield put(selectLevel(level));\n // only when current location is homescreen, redirect to browse-content\n // if (['/'].includes(history.location.pathname)) {\n // yield call([history, history.push], '/dashboard');\n // }\n }\n }\n }\n}\n","import apiClient from 'services/api';\n\nexport default (CurriculumID, LevelID) => {\n return apiClient\n .get(\n `Curriculum/GetSyllabusByCurriculumIDandLevelID/${CurriculumID}/${LevelID}`\n )\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch syllabus failed' // eslint-disable-line\n };\n });\n};\n","import {\n FETCH_TOPICS_REQUEST,\n FETCH_TOPICS_SUCCESS,\n FETCH_TOPICS_FAILED,\n SELECTED_TOPIC,\n RESET_SELECTED_TOPIC,\n UNSELECT_TOPIC\n} from './actionTypes';\n\nexport const fetchTopicsRequest = () => {\n return { type: FETCH_TOPICS_REQUEST };\n};\n\nexport const fetchTopicsSuccess = topics => {\n return { type: FETCH_TOPICS_SUCCESS, topics };\n};\n\nexport const fetchTopicsFailed = error => {\n return { type: FETCH_TOPICS_FAILED, error };\n};\n\nexport const selectTopic = selectedTopic => {\n return { type: SELECTED_TOPIC, selectedTopic };\n};\n\nexport const resetSelectedTopic = () => {\n return { type: RESET_SELECTED_TOPIC };\n};\n\nexport const unSelectTopic = () => {\n return { type: UNSELECT_TOPIC };\n};\n","export const FETCH_TOPICS_REQUEST = 'FETCH_TOPICS_REQUEST';\nexport const FETCH_TOPICS_SUCCESS = 'FETCH_TOPICS_SUCCESS';\nexport const FETCH_TOPICS_FAILED = 'FETCH_TOPICS_FAILED';\nexport const SELECTED_TOPIC = 'SELECTED_TOPIC';\nexport const RESET_SELECTED_TOPIC = 'RESET_SELECTED_TOPIC';\nexport const UNSELECT_TOPIC = 'UNSELECT_TOPIC';\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil, isEmpty } from 'ramda';\nimport getUserCurriculums from 'sagas/curriculums';\nimport fetchSyllabusApi from 'services/syllabus';\nimport {\n // fetchSyllabusRequest,\n fetchSyllabusSuccess,\n fetchSyllabusFailed\n} from 'stores/syllabus/actions';\nimport { setVideosRequest } from 'stores/levels/actions';\nimport { fetchTopicsSuccess, resetSelectedTopic } from 'stores/topics/actions';\n\n/**\n * The startup saga is the place to define behavior to execute when the application starts.\n */\nexport default function* syllabus() {\n // yield put(fetchSyllabusRequest());\n let { selectedCurriculum } = yield select(state => state.curriculums);\n const { selectedLevel } = yield select(state => state.levels);\n const { selectedTopic } = yield select(state => state.topics);\n // If there's no selected curriculum, fetch user's curriculums first and\n // select the first from the results\n if (!selectedCurriculum.CurriculumID) {\n yield call(getUserCurriculums);\n ({ selectedCurriculum } = yield select(state => state.curriculums));\n }\n const checkLevelAvailable =\n !isEmpty(selectedCurriculum?.Levels) &&\n selectedCurriculum.Levels.find(item => item.ID === selectedLevel.ID);\n // eslint-disable-next-line no-nested-ternary\n const levelId = isEmpty(selectedCurriculum?.Levels)\n ? -1\n : !isNil(checkLevelAvailable)\n ? selectedLevel.ID\n : selectedCurriculum.Levels[0].ID;\n const data = yield call(\n fetchSyllabusApi,\n selectedCurriculum.CurriculumID,\n levelId\n );\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n // if the API return error message\n yield put(fetchSyllabusFailed(data.error));\n } else {\n yield put(\n setVideosRequest(selectedLevel, selectedCurriculum.CurriculumID)\n );\n yield put(fetchSyllabusSuccess(data));\n // set topics from syllabus and reset selectedTopic if the level change\n const topics = data.Topics ?? [];\n yield put(fetchTopicsSuccess(topics));\n // if selectedTopic isn't in the new topics, reset selected topic\n const topicIndex = topics.findIndex(\n topic => topic.ID === selectedTopic?.ID\n );\n if (topicIndex === -1) {\n yield put(resetSelectedTopic());\n }\n }\n }\n}\n","import {\n FETCH_SYLLABUS_REQUEST,\n FETCH_SYLLABUS_SUCCESS,\n FETCH_SYLLABUS_FAILED\n} from './actionTypes';\n\nexport const fetchSyllabusRequest = () => {\n return { type: FETCH_SYLLABUS_REQUEST };\n};\n\nexport const fetchSyllabusSuccess = syllabus => {\n return { type: FETCH_SYLLABUS_SUCCESS, syllabus };\n};\n\nexport const fetchSyllabusFailed = error => {\n return { type: FETCH_SYLLABUS_FAILED, error };\n};\n","export const FETCH_SYLLABUS_REQUEST = 'FETCH_SYLLABUS_REQUEST';\nexport const FETCH_SYLLABUS_SUCCESS = 'FETCH_SYLLABUS_SUCCESS';\nexport const FETCH_SYLLABUS_FAILED = 'FETCH_SYLLABUS_FAILED';\n","import apiClient from 'services/api';\n\nconst handleResponseObjectSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch question failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? {};\n};\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch questions failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n/**\n * Fetch question by ID\n */\nexport const fetchQuestionByID = questionID => {\n const options = {\n params: {\n includeAnswer: true,\n includeSolution: true\n }\n };\n return apiClient\n .get(`Question/GetById/${questionID}`, options)\n .then(handleResponseObjectSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch question failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch questions by skill id\n */\nexport default SIOID => {\n const options = {\n params: {\n includeAnswer: true,\n includeSolution: true\n }\n };\n return apiClient\n .get(`NewQuestion/GetAllBySkillId/${SIOID}`, options)\n .then(result => {\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Questions fetch failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Search question by ID\n */\nexport const searchQuestionByIDs = questionIDs => {\n const options = {\n params: {\n includeAnswer: true,\n includeSolution: true\n }\n };\n return apiClient\n .get(`Question/ValidateQuestions/${questionIDs}`, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Search question failed' // eslint-disable-line\n };\n });\n};\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch cart questions failed' // eslint-disable-line\n };\n }\n return result.data?.Result?.Items ?? [];\n};\n\n/**\n * Add a question into Cart, I put the all data into the params\n * is because they are only 3 data, it is clearer then only single params object\n * @param {string} ID\n * @param {string} topicId\n * @param {number} order, I still don't know what is the order for\n */\nconst addQuestionToCart = (ID, topicId, order) => {\n return apiClient\n .post(`Cart/AddItem`, {\n ID,\n topicId,\n order\n })\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Add question to cart failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Remove a question from Cart\n * @param {string} questionId\n */\nconst removeQuestionFromCart = questionId => {\n return apiClient\n .delete(`Cart/RemoveItem/${questionId}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ?? 'Remove question from cart failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch all questions in the Cart\n */\nconst getMyCart = () => {\n return apiClient\n .get(`Cart/GetMyCart`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch cart questions failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Reset cart question\n */\nconst resetCart = () => {\n return apiClient\n .delete(`Cart/RemoveAllItems`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Reset cart failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * add cart questions\n */\nconst addQuestionsToCart = QuestionIDs => {\n return apiClient\n .post(`Cart/AddItems`, QuestionIDs)\n .then(result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch cart questions failed' // eslint-disable-line\n };\n }\n return result.data?.Result?.CartModel?.Items ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Add questions to cart failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n addQuestionToCart,\n getMyCart,\n removeQuestionFromCart,\n resetCart,\n addQuestionsToCart\n};\n","import {\n ADD_QUESTION_TO_CART,\n DELETE_QUESTION_FROM_CART,\n FETCH_CART_QUESTIONS_FAILED,\n FETCH_CART_QUESTIONS_REQUEST,\n FETCH_CART_QUESTIONS_SUCCESS,\n FETCH_QUESTIONS_FAILED,\n FETCH_QUESTIONS_REQUEST,\n FETCH_QUESTIONS_SUCCESS,\n RESET_SELECTED_QUESTION,\n SELECTED_QUESTION,\n SELECTING_QUESTION,\n RESET_SELECTED_QUESTIONS,\n SELECTING_QUESTIONS,\n SEARCHING_QUESTIONS,\n SEARCH_QUESTIONS_SUCCESS,\n SEARCH_QUESTIONS_FAILED,\n RESET_SEARCH_QUESTIONS,\n ADD_QUESTIONS_TO_CART,\n RESET_CART_QUESTIONS\n} from './actionTypes';\n\nexport const addQuestion = question => {\n return { type: ADD_QUESTION_TO_CART, question };\n};\n\nexport const deleteQuestion = id => {\n return { type: DELETE_QUESTION_FROM_CART, id };\n};\n\nexport const resetCartQuestions = () => {\n return { type: RESET_CART_QUESTIONS };\n};\n\nexport const fetchCartQuestionsRequest = () => {\n return { type: FETCH_CART_QUESTIONS_REQUEST };\n};\n\nexport const fetchCartQuestionsSuccess = cartQuestions => {\n return { type: FETCH_CART_QUESTIONS_SUCCESS, cartQuestions };\n};\n\nexport const fetchCartQuestionsFailed = error => {\n return { type: FETCH_CART_QUESTIONS_FAILED, error };\n};\n\nexport const fetchQuestionsRequest = () => {\n return { type: FETCH_QUESTIONS_REQUEST };\n};\n\nexport const fetchQuestionsSuccess = questions => {\n return { type: FETCH_QUESTIONS_SUCCESS, questions };\n};\n\nexport const fetchQuestionsFailed = error => {\n return { type: FETCH_QUESTIONS_FAILED, error };\n};\n\nexport const selectQuestion = selectedQuestion => {\n return { type: SELECTING_QUESTION, selectedQuestion };\n};\n\nexport const selectQuestionSuccess = selectedQuestion => {\n return { type: SELECTED_QUESTION, selectedQuestion };\n};\n\nexport const resetSelectedQuestion = () => {\n return { type: RESET_SELECTED_QUESTION };\n};\n\n//\nexport const selectQuestions = selectedQuestions => {\n return { type: SELECTING_QUESTIONS, selectedQuestions };\n};\n\nexport const resetSelectedQuestions = () => {\n return { type: RESET_SELECTED_QUESTIONS };\n};\n\nexport const searchingQuestions = searchIDs => {\n return { type: SEARCHING_QUESTIONS, searchIDs };\n};\n\nexport const fetchSearchQuestionSuccess = questionsResult => {\n return { type: SEARCH_QUESTIONS_SUCCESS, questionsResult };\n};\n\nexport const fetchSearchQuestionFailed = error => {\n return { type: SEARCH_QUESTIONS_FAILED, error };\n};\n\nexport const resetSearchQuestions = () => {\n return { type: RESET_SEARCH_QUESTIONS };\n};\n\nexport const addQuestions = isReset => {\n return { type: ADD_QUESTIONS_TO_CART, isReset };\n};\n","// Cart questions\nexport const ADD_QUESTION_TO_CART = 'ADD_QUESTION_TO_CART';\nexport const ADD_QUESTIONS_TO_CART = 'ADD_QUESTIONS_TO_CART';\nexport const DELETE_QUESTION_FROM_CART = 'DELETE_QUESTION_FROM_CART';\nexport const FETCH_CART_QUESTIONS_FAILED = 'FETCH_CART_QUESTIONS_FAILED';\nexport const FETCH_CART_QUESTIONS_REQUEST = 'FETCH_CART_QUESTIONS_REQUEST';\nexport const FETCH_CART_QUESTIONS_SUCCESS = 'FETCH_CART_QUESTIONS_SUCCESS';\nexport const RESET_CART_QUESTIONS = 'RESET_CART_QUESTIONS';\n\n// questions lists\nexport const FETCH_QUESTIONS_FAILED = 'FETCH_QUESTIONS_FAILED';\nexport const FETCH_QUESTIONS_REQUEST = 'FETCH_QUESTIONS_REQUEST';\nexport const FETCH_QUESTIONS_SUCCESS = 'FETCH_QUESTIONS_SUCCESS';\n\n// selecting question, usefull when load question detail as active question for variation\nexport const RESET_SELECTED_QUESTION = 'RESET_SELECTED_QUESTION';\nexport const SELECTED_QUESTION = 'SELECTED_QUESTION';\nexport const SELECTING_QUESTION = 'SELECTING_QUESTION';\n\n// selecting questions result search\nexport const RESET_SELECTED_QUESTIONS = 'RESET_SELECTED_QUESTION';\nexport const SELECTING_QUESTIONS = 'SELECTING_QUESTIONS';\n\nexport const SEARCHING_QUESTIONS = 'SEARCHING_QUESTIONS';\nexport const SEARCH_QUESTIONS_SUCCESS = 'SEARCH_QUESTIONS_SUCCESS';\nexport const SEARCH_QUESTIONS_FAILED = 'SEARCH_QUESTIONS_FAILED';\nexport const RESET_SEARCH_QUESTIONS = 'RESET_SEARCH_QUESTIONS';\n","import {\n SET_SELECTED_QUESTIONS,\n REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION,\n SET_EDIT_SAVED_WORKSHEET_QUESTIONS,\n SET_WORKSHEET_TITLE,\n SET_INSTRUCTION,\n SET_ASSIGMENT_TYPE,\n SET_PRESENTATION_TYPE,\n REMOVE_SELECTED_QUESTION,\n ASSIGN_WORKSHEET,\n SAVE_WORKSHEET,\n DELETE_WORKSHEET,\n DELETE_WORKSHEET_SUCCESS,\n DELETE_WORKSHEET_FAILED,\n DELETE_WORKSHEET_RESET,\n SELECTING_WORKSHEET,\n SELECTED_WORKSHEET,\n SELECTED_WORKSHEET_FAILED,\n RESET_SELECTED_WORKSHEET,\n FETCH_WORKSHEETS_SUCCESS,\n FETCH_WORKSHEETS_REQUEST,\n FETCH_WORKSHEETS_FAILED,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_ASSIGNMENT,\n RESET_WORKSHEET,\n FETCH_ALL_WORKSHEETS_REQUEST,\n FETCH_ALL_WORKSHEETS_SUCCESS,\n FETCH_ALL_WORKSHEETS_FAILED,\n SCHEDULE_WORKSHEET,\n SET_SETTING_TIME_TYPE,\n SET_SETTING_TIME_LIMIT,\n GET_WORKSHEET_REQUEST,\n RESET_WORKSHEET_SEARCH_PAGE\n} from './actionTypes';\n\nexport const assignWorksheet = (data, isPublish) => {\n return { type: ASSIGN_WORKSHEET, data, isPublish };\n};\n\nexport const saveWorksheet = worksheet => {\n return { type: SAVE_WORKSHEET, worksheet };\n};\n\nexport const setSelectedQuestions = selectedQuestions => {\n return { type: SET_SELECTED_QUESTIONS, selectedQuestions };\n};\n\nexport const setEditSavedWorksheetQuestions = questions => {\n return {\n type: SET_EDIT_SAVED_WORKSHEET_QUESTIONS,\n questions\n };\n};\n\nexport const setWorksheetTitle = title => {\n return { type: SET_WORKSHEET_TITLE, title };\n};\n\nexport const setIntruction = intruction => {\n return { type: SET_INSTRUCTION, intruction };\n};\n\nexport const removeSelectedQuestion = Id => {\n return { type: REMOVE_SELECTED_QUESTION, Id };\n};\n\nexport const removeSelectedSavedWorksheetQuestion = Id => {\n return { type: REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION, Id };\n};\nexport const fetchWorksheetsRequest = (page, limit) => {\n return { type: FETCH_WORKSHEETS_REQUEST, page, limit };\n};\n\nexport const fetchWorksheetsSuccess = worksheets => {\n return { type: FETCH_WORKSHEETS_SUCCESS, worksheets };\n};\n\nexport const fetchWorksheetsFailed = error => {\n return { type: FETCH_WORKSHEETS_FAILED, error };\n};\n\n// detail worksheet\nexport const selectWorksheet = (\n selectedWorksheet,\n withCart,\n savedWorksheet,\n assignmentType\n) => {\n return {\n type: SELECTING_WORKSHEET,\n selectedWorksheet,\n withCart,\n savedWorksheet,\n assignmentType\n };\n};\n\n// detail worksheet\nexport const getWorksheet = worksheetId => {\n return {\n type: GET_WORKSHEET_REQUEST,\n worksheetId\n };\n};\n\nexport const selectWorksheetSuccess = selectedWorksheet => {\n return { type: SELECTED_WORKSHEET, selectedWorksheet };\n};\n\nexport const selectWorksheetFailed = error => {\n return { type: SELECTED_WORKSHEET_FAILED, error };\n};\n\nexport const resetSelectedWorksheet = () => {\n return { type: RESET_SELECTED_WORKSHEET };\n};\n\nexport const assignClass = classes => {\n return { type: ASSIGN_CLASS, classes };\n};\n\nexport const assignGroup = groups => {\n return { type: ASSIGN_GROUP, groups };\n};\n\nexport const assignStudent = students => {\n return { type: ASSIGN_STUDENT, students };\n};\n\nexport const assignPrivateGroup = privateGroups => {\n return { type: ASSIGN_PRIVATE_GROUP, privateGroups };\n};\n\nexport const assignAdminGroup = adminGroups => {\n return { type: ASSIGN_ADMIN_GROUP, adminGroups };\n};\n\nexport const assignLevel = level => {\n return { type: ASSIGN_LEVEL, level };\n};\n\nexport const resetAssignment = assignmentType => {\n return {\n type: RESET_ASSIGNMENT,\n assignmentType\n };\n};\n\nexport const resetWorksheet = () => {\n return { type: RESET_WORKSHEET };\n};\n\nexport const fetchAllWorksheetsRequest = () => {\n return { type: FETCH_ALL_WORKSHEETS_REQUEST };\n};\n\nexport const fetchAllWorksheetsSuccess = allWorksheets => {\n return { type: FETCH_ALL_WORKSHEETS_SUCCESS, allWorksheets };\n};\n\nexport const fetchAllWorksheetsFailed = error => {\n return { type: FETCH_ALL_WORKSHEETS_FAILED, error };\n};\n\nexport const deleteWorksheet = worksheetId => {\n return { type: DELETE_WORKSHEET, worksheetId };\n};\n\nexport const deleteWorksheetSuccess = () => {\n return { type: DELETE_WORKSHEET_SUCCESS };\n};\n\nexport const deleteWorksheetFailed = () => {\n return { type: DELETE_WORKSHEET_FAILED };\n};\n\nexport const deleteWorksheetReset = () => {\n return { type: DELETE_WORKSHEET_RESET };\n};\n\nexport const scheduleWorksheet = data => {\n return { type: SCHEDULE_WORKSHEET, data };\n};\n\nexport const setAssigmentType = assignmentType => {\n return { type: SET_ASSIGMENT_TYPE, assignmentType };\n};\n\nexport const setPresentationType = presentationType => {\n return { type: SET_PRESENTATION_TYPE, presentationType };\n};\n\nexport const setSettingTimeType = timeSettingType => {\n return { type: SET_SETTING_TIME_TYPE, timeSettingType };\n};\n\nexport const setSettingTimeValue = timeLimit => {\n return { type: SET_SETTING_TIME_LIMIT, timeLimit };\n};\nexport const resetWorksheetSearchPage = () => {\n return { type: RESET_WORKSHEET_SEARCH_PAGE };\n};\n","// select\nexport const SET_SELECTED_QUESTIONS = 'SET_SELECTED_QUESTIONS';\nexport const SET_WORKSHEET_TITLE = 'SET_WORKSHEET_TITLE';\nexport const SET_INSTRUCTION = 'SET_INSTRUCTION';\nexport const SET_ASSIGMENT_TYPE = 'SET_ASSIGMENT_TYPE';\nexport const SET_PRESENTATION_TYPE = 'SET_PRESENTATION_TYPE';\nexport const SET_SETTING_TIME_TYPE = 'SET_SETTING_TIME_TYPE';\nexport const SET_SETTING_TIME_LIMIT = 'SET_SETTING_TIME_LIMIT';\n\nexport const REMOVE_SELECTED_QUESTION = 'REMOVE_SELECTED_QUESTION';\n\nexport const ASSIGN_WORKSHEET = 'ASSIGN_WORKSHEET';\nexport const SAVE_WORKSHEET = 'SAVE_WORKSHEET';\nexport const DELETE_WORKSHEET = 'DELETE_WORKSHEET';\nexport const DELETE_WORKSHEET_SUCCESS = 'DELETE_WORKSHEET_SUCCESS';\nexport const DELETE_WORKSHEET_FAILED = 'DELETE_WORKSHEET_FAILED';\nexport const DELETE_WORKSHEET_RESET = 'DELETE_WORKSHEET_RESET';\n\nexport const SCHEDULE_WORKSHEET = 'SCHEDULE_WORKSHEET';\n\nexport const FETCH_ALL_WORKSHEETS_REQUEST = 'FETCH_ALL_WORKSHEETS_REQUEST';\nexport const FETCH_ALL_WORKSHEETS_SUCCESS = 'FETCH_ALL_WORKSHEETS_SUCCESS';\nexport const FETCH_ALL_WORKSHEETS_FAILED = 'FETCH_ALL_WORKSHEETS_FAILED';\n\nexport const FETCH_WORKSHEETS_REQUEST = 'FETCH_WORKSHEETS_REQUEST';\nexport const FETCH_WORKSHEETS_SUCCESS = 'FETCH_WORKSHEETS_SUCCESS';\nexport const FETCH_WORKSHEETS_FAILED = 'FETCH_WORKSHEETS_FAILED';\nexport const RESET_WORKSHEET = 'RESET_WORKSHEET';\n\nexport const GET_WORKSHEET_REQUEST = 'GET_WORKSHEET_REQUEST';\nexport const SELECTING_WORKSHEET = 'SELECTING_WORKSHEET';\nexport const SELECTED_WORKSHEET = 'SELECTED_WORKSHEET';\nexport const SELECTED_WORKSHEET_FAILED = 'SELECTED_WORKSHEET_FAILED';\nexport const RESET_SELECTED_WORKSHEET = 'RESET_SELECTED_WORKSHEET';\n\nexport const ASSIGN_CLASS = 'ASSIGN_CLASS';\nexport const ASSIGN_GROUP = 'ASSIGN_GROUP';\nexport const ASSIGN_STUDENT = 'ASSIGN_STUDENT';\nexport const ASSIGN_PRIVATE_GROUP = 'ASSIGN_PRIVATE_GROUP';\nexport const ASSIGN_ADMIN_GROUP = 'ASSIGN_ADMIN_GROUP';\nexport const ASSIGN_LEVEL = 'ASSIGN_LEVEL';\nexport const RESET_ASSIGNMENT = 'RESET_ASSIGNMENT';\n\nexport const SET_EDIT_SAVED_WORKSHEET_QUESTIONS =\n 'SET_EDIT_SAVED_WORKSHEET_QUESTIONS';\nexport const REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION =\n 'REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION';\nexport const RESET_WORKSHEET_SEARCH_PAGE = 'RESET_WORKSHEET_SEARCH_PAGE';\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil, find, propEq } from 'ramda';\nimport { fetchQuestionByID, searchQuestionByIDs } from 'services/questions';\nimport CartService from 'services/cart';\nimport {\n fetchCartQuestionsFailed,\n fetchCartQuestionsSuccess,\n resetSelectedQuestion,\n selectQuestionSuccess,\n fetchSearchQuestionSuccess,\n fetchSearchQuestionFailed,\n selectQuestions,\n resetCartQuestions\n} from 'stores/questions/actions';\nimport { setSelectedQuestions } from 'stores/worksheet/actions';\nimport history from 'helpers/history';\n\n/**\n * The saga for add question to the Cart\n */\nexport function* addQuestionToCart({ question }) {\n const { selectedTopic } = yield select(state => state.topics);\n const { selectedSkill } = yield select(state => state.skills);\n const { cartQuestions } = yield select(state => state.questions);\n const { selectedQuestions } = yield select(state => state.worksheet);\n const temporaryCartQuestion = {\n QuestionId: question.Id,\n SkillId: selectedSkill.ID,\n TopicId: selectedTopic.ID,\n TopicName: selectedTopic.Name,\n SkillName: selectedSkill.AliasSkillName,\n CartQuestion: question // the data not exactly same, it's because backend inconsistency\n };\n /**\n * Add temporary cart question before the addQuestionToCart service done,\n * Reason: if the cartQuestions length the time will be long enough and look laggy and buggy\n */\n yield put(\n fetchCartQuestionsSuccess([temporaryCartQuestion, ...cartQuestions])\n );\n const data = yield call(\n CartService.addQuestionToCart,\n question.Id,\n selectedTopic.ID,\n cartQuestions.length ?? 0\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchCartQuestionsSuccess(data));\n\n const newData = find(propEq('ID', parseInt(question.Id, 10)))(data);\n const updatedData = [...selectedQuestions, newData];\n yield put(setSelectedQuestions(updatedData));\n } else {\n yield put(fetchCartQuestionsFailed(data.error));\n // if error remove the temporary cart question\n yield put(\n fetchCartQuestionsSuccess(\n cartQuestions.filter(\n cq => cq.QuestionId !== temporaryCartQuestion.QuestionId\n )\n )\n );\n }\n }\n}\n\n/**\n * The saga for add question to the Cart\n */\nexport function* removeQuestionFromCart({ id }) {\n const { cartQuestions } = yield select(state => state.questions);\n\n /**\n * Delete cart question from state before the removeQuestionFromCart service done,\n * Reason: if the cartQuestions length the time will be long enough and look laggy and buggy\n */\n yield put(\n fetchCartQuestionsSuccess(cartQuestions.filter(cq => cq.QuestionId !== id))\n );\n const data = yield call(CartService.removeQuestionFromCart, id);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchCartQuestionsSuccess(data));\n } else {\n yield put(fetchCartQuestionsFailed(data.error));\n // if failed use the previous cartQuestions, no cart question deleted\n yield put(fetchCartQuestionsSuccess(cartQuestions));\n }\n }\n}\n\n/**\n * The saga for fetch cart questions, useful when load user cart questions when the app render\n */\nexport function* fetchCartQuestions() {\n const data = yield call(CartService.getMyCart);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchCartQuestionsSuccess(data));\n yield put(setSelectedQuestions(data));\n } else {\n yield put(fetchCartQuestionsFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for select question\n */\nexport default function* getQuestionDetail({ selectedQuestion }) {\n if (isNil(selectedQuestion.Payload)) {\n const data = yield call(fetchQuestionByID, selectedQuestion.Id);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(selectQuestionSuccess(data));\n }\n }\n } else {\n yield put(selectQuestionSuccess(selectedQuestion));\n }\n}\n\nexport function* refreshQuestions() {\n yield put(resetSelectedQuestion());\n}\n\nexport function* fetchSearchQuestions({ searchIDs }) {\n yield put(selectQuestions([]));\n const data = yield call(searchQuestionByIDs, searchIDs);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSearchQuestionSuccess(data));\n } else {\n yield put(fetchSearchQuestionFailed(data.error));\n }\n }\n}\n\nexport function* resetCart() {\n const data = yield call(CartService.resetCart);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchCartQuestionsSuccess(data));\n yield put(setSelectedQuestions(data));\n } else {\n yield put(fetchCartQuestionsFailed(data.error));\n }\n }\n}\n\nexport function* addQuestionsToCart({ isReset }) {\n if (isReset) {\n yield put(resetCartQuestions());\n }\n const { selectedQuestions } = yield select(state => state.questions);\n\n const QuestionIds = selectedQuestions.map(question => {\n return question.ID;\n });\n\n const data = yield call(CartService.addQuestionsToCart, QuestionIds);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchCartQuestionsSuccess(data));\n yield put(setSelectedQuestions(data));\n yield put(selectQuestions([]));\n yield put(fetchSearchQuestionSuccess([]));\n yield call([history, history.push], '/create-and-assign');\n } else {\n yield put(fetchCartQuestionsFailed(data.error));\n }\n }\n}\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch worksheet questions failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n/**\n * Assign a worksheet to classes / groups / individuals\n */\nconst assignWorksheet = (params, isPublish) => {\n const query = {};\n if (isPublish) {\n query.publish = isPublish;\n }\n return apiClient\n .post('Worksheet/Assign', params, { params: query })\n .then(result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Assign worksheet failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Assign Worksheet failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Add a question into Cart, I put the all data into the params\n * is because they are only 3 data, it is clearer then only single params object\n\n */\nconst saveWorksheet = (params, isEdit) => {\n const query = {};\n if (isEdit) {\n query.isEdit = isEdit;\n }\n return apiClient\n .post(`Worksheet/Save`, params, { params: query })\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Save Worksheet failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch all worksheet\n */\nconst getMyWorksheets = () => {\n return apiClient\n .get(`Worksheet/GetMyWorksheets`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch worksheet failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch pagination worksheet\n */\nconst getSavedWorksheets = (page, limit) => {\n const params = {\n pageindex: page || 0,\n pagesize: limit || 5\n };\n return apiClient\n .get(`Worksheet/GetSavedWorksheets/${params.pagesize}/${params.pageindex}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch worksheet failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch worksheet by ID\n */\nconst getMyWorksheetById = ID => {\n return apiClient\n .get(`Worksheet/GetMyWorksheetById/${ID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch worksheet failed' // eslint-disable-line\n };\n });\n};\n\nconst deleteWorksheet = ID => {\n return apiClient\n .delete(`Worksheet/DeleteHomework/${ID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'delete worksheet failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Schedule a worksheet to classes / groups / individuals\n */\nconst scheduledWorksheet = params => {\n return apiClient\n .post('Worksheet/ScheduleWorksheet', params)\n .then(result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Scheduled worksheet failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Scheduled Worksheet failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n assignWorksheet,\n saveWorksheet,\n getMyWorksheetById,\n getMyWorksheets,\n getSavedWorksheets,\n deleteWorksheet,\n scheduledWorksheet\n};\n","import {\n SET_START_END_DATE,\n SET_RELEASE_DATE,\n SET_TIMEZONE,\n SET_VISIBILITY,\n SET_KOKO_CREDIT,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_SCHEDULE,\n RESET_ASSIGNMENT\n} from './actionTypes';\n\nexport const setStartEndDate = (startDate, endDate) => {\n return { type: SET_START_END_DATE, startDate, endDate };\n};\n\nexport const setReleaseDate = releaseDate => {\n return { type: SET_RELEASE_DATE, releaseDate };\n};\n\nexport const setTimeZone = timezone => {\n return { type: SET_TIMEZONE, timezone };\n};\n\nexport const setAssignmentVisibility = assignmentVisibility => {\n return { type: SET_VISIBILITY, assignmentVisibility };\n};\n\nexport const setKokoCredit = kokoCredit => {\n return { type: SET_KOKO_CREDIT, kokoCredit };\n};\n\nexport const assignClass = classes => {\n return { type: ASSIGN_CLASS, classes };\n};\n\nexport const assignGroup = groups => {\n return { type: ASSIGN_GROUP, groups };\n};\n\nexport const assignStudent = students => {\n return { type: ASSIGN_STUDENT, students };\n};\n\nexport const assignPrivateGroup = privateGroups => {\n return { type: ASSIGN_PRIVATE_GROUP, privateGroups };\n};\n\nexport const assignAdminGroup = adminGroups => {\n return { type: ASSIGN_ADMIN_GROUP, adminGroups };\n};\n\nexport const assignLevel = level => {\n return { type: ASSIGN_LEVEL, level };\n};\n\nexport const resetSchedule = () => {\n return { type: RESET_SCHEDULE };\n};\n\nexport const resetAssignment = assignmentType => {\n return {\n type: RESET_ASSIGNMENT,\n assignmentType\n };\n};\n","// select\nexport const SET_START_END_DATE = '@SCHEDULE/SET_START_END_DATE';\nexport const SET_RELEASE_DATE = '@SCHEDULE/SET_RELEASE_DATE';\nexport const SET_TIMEZONE = '@SCHEDULE/SET_TIMEZONE';\nexport const SET_VISIBILITY = '@SCHEDULE/SET_VISIBILITY';\nexport const SET_KOKO_CREDIT = '@SCHEDULE/SET_KOKO_CREDIT';\n\nexport const ASSIGN_CLASS = '@SCHEDULE/ASSIGN_CLASS';\nexport const ASSIGN_GROUP = '@SCHEDULE/ASSIGN_GROUP';\nexport const ASSIGN_STUDENT = '@SCHEDULE/ASSIGN_STUDENT';\nexport const ASSIGN_PRIVATE_GROUP = '@SCHEDULE/ASSIGN_PRIVATE_GROUP';\nexport const ASSIGN_ADMIN_GROUP = '@SCHEDULE/ASSIGN_ADMIN_GROUP';\nexport const ASSIGN_LEVEL = '@SCHEDULE/ASSIGN_LEVEL';\nexport const RESET_SCHEDULE = '@SCHEDULE/RESET_SCHEDULE';\nexport const RESET_ASSIGNMENT = '@SCHEDULE/RESET_ASSIGNMENT';\n","import {\n SET_START_END_DATE,\n SET_RELEASE_DATE,\n SET_KOKO_CREDIT,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_ASSIGN,\n RESET_ASSIGNMENT\n} from './actionTypes';\n\nexport const setStartEndDate = (startDate, endDate) => {\n return { type: SET_START_END_DATE, startDate, endDate };\n};\n\nexport const setReleaseDate = releaseDate => {\n return { type: SET_RELEASE_DATE, releaseDate };\n};\n\nexport const setKokoCredit = kokoCredit => {\n return { type: SET_KOKO_CREDIT, kokoCredit };\n};\n\nexport const assignClass = classes => {\n return { type: ASSIGN_CLASS, classes };\n};\n\nexport const assignGroup = groups => {\n return { type: ASSIGN_GROUP, groups };\n};\n\nexport const assignStudent = students => {\n return { type: ASSIGN_STUDENT, students };\n};\n\nexport const assignPrivateGroup = privateGroups => {\n return { type: ASSIGN_PRIVATE_GROUP, privateGroups };\n};\n\nexport const assignAdminGroup = adminGroups => {\n return { type: ASSIGN_ADMIN_GROUP, adminGroups };\n};\n\nexport const assignLevel = level => {\n return { type: ASSIGN_LEVEL, level };\n};\n\nexport const resetAssign = () => {\n return { type: RESET_ASSIGN };\n};\n\nexport const resetAssignment = assignmentType => {\n return {\n type: RESET_ASSIGNMENT,\n assignmentType\n };\n};\n","// select\nexport const SET_START_END_DATE = '@ASSIGN/SET_START_END_DATE';\nexport const SET_RELEASE_DATE = '@ASSIGN/SET_RELEASE_DATE';\nexport const SET_KOKO_CREDIT = '@ASSIGN/SET_KOKO_CREDIT';\n\nexport const ASSIGN_CLASS = '@ASSIGN/ASSIGN_CLASS';\nexport const ASSIGN_GROUP = '@ASSIGN/ASSIGN_GROUP';\nexport const ASSIGN_STUDENT = '@ASSIGN/ASSIGN_STUDENT';\nexport const ASSIGN_PRIVATE_GROUP = '@ASSIGN/ASSIGN_PRIVATE_GROUP';\nexport const ASSIGN_ADMIN_GROUP = '@ASSIGN/ASSIGN_ADMIN_GROUP';\nexport const ASSIGN_LEVEL = '@ASSIGN/ASSIGN_LEVEL';\nexport const RESET_ASSIGN = '@ASSIGN/RESET_ASSIGN';\nexport const RESET_ASSIGNMENT = '@ASSIGN/RESET_ASSIGNMENT';\n","export default function hasProp(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil, reject, merge } from 'ramda';\nimport WorksheetService from 'services/worksheet';\nimport CartService from 'services/cart';\nimport {\n fetchWorksheetsSuccess,\n fetchWorksheetsFailed,\n selectWorksheetSuccess,\n selectWorksheetFailed,\n setSelectedQuestions,\n fetchAllWorksheetsSuccess,\n fetchAllWorksheetsFailed,\n setEditSavedWorksheetQuestions,\n deleteWorksheetSuccess,\n deleteWorksheetFailed\n} from 'stores/worksheet/actions';\nimport { fetchCartQuestionsSuccess } from 'stores/questions/actions';\nimport {\n setKokoCredit,\n setStartEndDate,\n setReleaseDate\n} from 'stores/worksheet/schedule/actions';\nimport {\n setKokoCredit as setAssignKokoCredit,\n setStartEndDate as setAssignStartEndDate,\n setReleaseDate as setAssignReleaseDate\n} from 'stores/worksheet/assign/actions';\nimport hasProp from 'helpers/hasProp';\nimport moment from 'moment-timezone';\nimport { assignmentTypes } from 'constants/index';\n\n/**\n * The saga for add question to the Cart\n */\nexport function* saveWorksheet({ worksheet }) {\n const {\n selectedWorksheet,\n selectedQuestions,\n editSavedWorksheetQuestions\n } = yield select(state => state.worksheet);\n const { createWorksheetItems } = yield select(\n state => state.topicalWorksheet\n );\n\n const { createFactualFluencyItems } = yield select(\n state => state.factualFluency\n );\n\n const {\n NumberOfKokoCredits,\n Title,\n Instructions,\n WorksheetStatus,\n AssignmentTypeID,\n PresentationTypeID,\n TimeLimit,\n isEditSavedWorksheet,\n isCreateHomework,\n isCreateFactualFluency\n } = worksheet;\n\n let Questions;\n if (isEditSavedWorksheet === true) {\n Questions = editSavedWorksheetQuestions.map(question => {\n return {\n ID: question.ID,\n TopicId: question.TopicId\n };\n });\n } else if (isCreateHomework === true) {\n Questions = createWorksheetItems.map(question => {\n return {\n ID: question.ID,\n TopicId: question.TopicId\n };\n });\n } else if (isCreateFactualFluency === true) {\n Questions = createFactualFluencyItems.map(question => {\n return {\n ID: question.ID,\n TopicId: question.TopicId\n };\n });\n } else {\n Questions = selectedQuestions.map(question => {\n return {\n ID: question.ID,\n TopicId: question.TopicId\n };\n });\n }\n\n let defaultParams = {};\n\n if (!isNil(selectedWorksheet.ID)) {\n defaultParams = {\n ID: selectedWorksheet.ID,\n Questions,\n NumberOfKokoCredits: selectedWorksheet.NumberOfKokoCredits,\n Title: selectedWorksheet.Title,\n Instructions: selectedWorksheet.Instructions,\n WorksheetStatus: selectedWorksheet.WorksheetStatus,\n PresentationType: {\n AssignmentTypeID: selectedWorksheet.AssignmentTypeID,\n PresentationTypeID: selectedWorksheet.PresentationTypeID,\n PresentationParameters: selectedWorksheet.PresentationParameters,\n TimeLimit: selectedWorksheet.TimeLimit\n }\n };\n }\n\n let NewParams = {\n Questions,\n NumberOfKokoCredits,\n Title,\n Instructions,\n WorksheetStatus\n };\n\n let NewPresentationType = {\n AssignmentTypeID,\n PresentationTypeID,\n TimeLimit\n };\n\n NewPresentationType = reject(isNil())(NewPresentationType);\n NewParams.PresentationType = NewPresentationType;\n NewParams = reject(isNil())(NewParams);\n\n const Params = merge(defaultParams, NewParams);\n\n const isEdit = hasProp(Params, 'ID');\n\n const data = yield call(WorksheetService.saveWorksheet, Params, isEdit);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(selectWorksheetSuccess(data));\n } else {\n yield put(selectWorksheetFailed(data.error));\n }\n }\n}\n\n/**\n * The saga to assign worksheet to classes / groups / students\n */\nexport function* assignWorksheet({ data, isPublish }) {\n // First save the worksheet (in blocking request) before assigning\n\n if (isPublish) {\n const saveParams = {\n Title: data.Title,\n Instructions: data.Title,\n WorksheetStatus: data.WorksheetStatus,\n PresentationTypeID: data.PresentationTypeID,\n AssignmentTypeID: data.AssignmentTypeID,\n TimeLimit: data.TimeLimit,\n NumberOfKokoCredits: data.NumberOfKokoCredits,\n isCreateHomework: data.isCreateHomework,\n isCreateFactualFluency: data.isCreateFactualFluency,\n isEditSavedWorksheet: data.isEditSavedWorksheet\n };\n // Save worksheet\n yield call(saveWorksheet, { worksheet: saveParams });\n }\n\n const { selectedWorksheet } = yield select(state => state.worksheet);\n if (hasProp(selectedWorksheet, 'ID')) {\n const assignParams = {\n startDate: data.startDate,\n endDate: data.endDate,\n assignments: data.assignments,\n homeWorkID: selectedWorksheet.ID,\n resultDate: data.resultDate\n };\n const response = yield call(\n WorksheetService.assignWorksheet,\n assignParams,\n isPublish\n );\n\n if (!isNil(response)) {\n if (isNil(response.error)) {\n // Backend duplicates the worksheet but returns a different ID\n // Replace the ID here for generation of worksheet sharing URL\n const worksheet = response.model;\n worksheet.ID = response.DuplicatedHWID;\n yield put(selectWorksheetSuccess(worksheet));\n } else {\n yield put(selectWorksheetFailed(data.error));\n }\n }\n } else {\n const saveWorkSheetError = yield select(state => state.worksheet.error);\n yield put(\n selectWorksheetFailed(saveWorkSheetError ?? 'Assign Worksheet Failed')\n );\n }\n}\n\n/**\n * The saga for fetch all\n */\nexport function* fetchAllWorksheets() {\n const data = yield call(WorksheetService.getMyWorksheets);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchAllWorksheetsSuccess(data));\n } else {\n yield put(fetchAllWorksheetsFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for fetch worksheet pagination\n */\nexport function* fetchWorksheets({ page, limit }) {\n const data = yield call(WorksheetService.getSavedWorksheets, page, limit);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchWorksheetsSuccess(data));\n } else {\n yield put(fetchWorksheetsFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for select question\n */\n// assignmentType\n// 1 - Schedule\n// 2 - Assign Now\nexport default function* getWorksheetDetail({\n selectedWorksheet,\n withCart,\n savedWorksheet,\n assignmentType\n}) {\n const data = yield call(\n WorksheetService.getMyWorksheetById,\n selectedWorksheet.ID\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n if (assignmentType === 1) {\n const kokoCredits = !isNil(data.NumberOfKokoCredits)\n ? data.NumberOfKokoCredits\n : 5;\n yield put(setKokoCredit(kokoCredits));\n yield put(\n setStartEndDate(\n moment()\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n moment()\n .add(3, 'day')\n .set({ hour: 23, minute: 59 })\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n const releaseDate =\n data.PresentationType.AssignmentTypeID === assignmentTypes.test\n ? moment()\n .add(4, 'day')\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n : '';\n yield put(setReleaseDate(releaseDate));\n } else if (assignmentType === 2) {\n const kokoCredits = !isNil(data.NumberOfKokoCredits)\n ? data.NumberOfKokoCredits\n : 5;\n yield put(setAssignKokoCredit(kokoCredits));\n yield put(\n setAssignStartEndDate(\n moment()\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n moment()\n .add(3, 'day')\n .set({ hour: 23, minute: 59 })\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n const releaseDate =\n data.PresentationType.AssignmentTypeID === assignmentTypes.test\n ? moment()\n .add(4, 'day')\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n : '';\n yield put(setAssignReleaseDate(releaseDate));\n }\n if (withCart) {\n const QuestionIds = data.Questions.map(question => {\n return question.ID;\n });\n yield call(CartService.addQuestionsToCart, QuestionIds);\n yield put(fetchCartQuestionsSuccess(data.Questions));\n yield put(setSelectedQuestions(data.Questions));\n }\n if (savedWorksheet) {\n yield put(setEditSavedWorksheetQuestions(data.Questions));\n }\n yield put(selectWorksheetSuccess(data));\n } else {\n yield put(selectWorksheetFailed(data.error));\n }\n }\n}\n\n/**\n * The saga to assign worksheet to classes / groups / students\n */\nexport function* scheduledWorksheet({ data }) {\n const { selectedWorksheet } = yield select(state => state.worksheet);\n\n const scheduleParams = {\n assignmentVisibility: data.assignmentVisibility,\n rewards: data.rewards,\n startDate: data.startDate,\n endDate: data.endDate,\n assignments: data.assignments,\n homeWorkID: data.homeWorkID,\n resultDate: data.resultDate\n };\n const response = yield call(\n WorksheetService.scheduledWorksheet,\n scheduleParams\n );\n\n if (!isNil(response)) {\n if (isNil(response.error)) {\n // Backend duplicates the worksheet but returns a different ID\n // Replace the ID here for generation of worksheet sharing URL\n selectedWorksheet.ID = response.DuplicatedHWID;\n yield put(selectWorksheetSuccess(selectedWorksheet));\n } else {\n yield put(selectWorksheetFailed(data.error));\n }\n }\n}\n\nexport function* deleteWorksheet({ worksheetId }) {\n const data = yield call(WorksheetService.deleteWorksheet, worksheetId);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(deleteWorksheetSuccess());\n } else {\n yield put(deleteWorksheetFailed());\n }\n }\n}\n\nexport function* getWorksheet({ worksheetId }) {\n const data = yield call(WorksheetService.getMyWorksheetById, worksheetId);\n if (!isNil(data)) {\n yield put(selectWorksheetSuccess(data));\n } else {\n yield put(selectWorksheetFailed(data.error));\n }\n}\n","export const FETCH_CLASS_FAILED = 'FETCH_CLASS_FAILED';\nexport const FETCH_CLASS_REQUEST = 'FETCH_CLASS_REQUEST';\nexport const FETCH_CLASS_SUCCESS = 'FETCH_CLASS_SUCCESS';\n\nexport const FETCH_STUDENTS_FAILED = 'FETCH_STUDENTS_FAILED';\nexport const FETCH_STUDENTS_REQUEST = 'FETCH_STUDENTS_REQUEST';\nexport const FETCH_STUDENTS_SEARCH_REQUEST = 'FETCH_STUDENTS_SEARCH_REQUEST';\nexport const FETCH_STUDENTS_SUCCESS = 'FETCH_STUDENTS_SUCCESS';\n\nexport const FETCH_MY_GROUP_REQUEST = 'FETCH_MY_GROUP_REQUEST';\nexport const FETCH_MY_GROUP_SUCCESS = 'FETCH_MY_GROUP_SUCCESS';\nexport const FETCH_MY_GROUP_FAILED = 'FETCH_MY_GROUP_FAILED';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch data failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n/**\n * Fetch class by Level ID\n */\nconst getClassByLevel = LevelId => {\n return apiClient\n .get(`Lookup/Classes/${LevelId}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch class failed' // eslint-disable-line\n };\n });\n};\n\nconst getStudentsByClass = ClassId => {\n return apiClient\n .get(`Lookup/Students/${ClassId}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch students failed' // eslint-disable-line\n };\n });\n};\n\nconst getStudentsByKeyword = (keyword, page, limit) => {\n const options = {\n params: {\n SrchName: keyword,\n pageindex: page || 0,\n pagesize: limit || 10\n }\n };\n return apiClient\n .get(`Lookup/SearchStudent`, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch students failed' // eslint-disable-line\n };\n });\n};\n\nconst getMyGroups = () => {\n return apiClient\n .get(`lookup/GetMygroups/`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch group failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n getClassByLevel,\n getStudentsByClass,\n getStudentsByKeyword,\n getMyGroups\n};\n","import {\n FETCH_CLASS_REQUEST,\n FETCH_CLASS_SUCCESS,\n FETCH_CLASS_FAILED,\n FETCH_STUDENTS_REQUEST,\n FETCH_STUDENTS_SEARCH_REQUEST,\n FETCH_STUDENTS_SUCCESS,\n FETCH_STUDENTS_FAILED,\n FETCH_MY_GROUP_FAILED,\n FETCH_MY_GROUP_REQUEST,\n FETCH_MY_GROUP_SUCCESS\n} from './actionTypes';\n\nexport const fetchClassRequest = LevelId => {\n return { type: FETCH_CLASS_REQUEST, LevelId };\n};\n\nexport const fetchClassSuccess = classes => {\n return { type: FETCH_CLASS_SUCCESS, classes };\n};\n\nexport const fetchClassFailed = error => {\n return { type: FETCH_CLASS_FAILED, error };\n};\n\nexport const fetchStudentsRequest = ClassId => {\n return { type: FETCH_STUDENTS_REQUEST, ClassId };\n};\n\nexport const fetchStudentsSearchRequest = (keyword, page, limit) => {\n return { type: FETCH_STUDENTS_SEARCH_REQUEST, keyword, page, limit };\n};\n\nexport const fetchStudentsSuccess = students => {\n return { type: FETCH_STUDENTS_SUCCESS, students };\n};\n\nexport const fetchStudentsFailed = error => {\n return { type: FETCH_STUDENTS_FAILED, error };\n};\n\nexport const fetchMyGroupsRequest = () => {\n return { type: FETCH_MY_GROUP_REQUEST };\n};\n\nexport const fetchMyGroupsSuccess = groups => {\n return { type: FETCH_MY_GROUP_SUCCESS, groups };\n};\n\nexport const fetchMyGroupsFailed = error => {\n return { type: FETCH_MY_GROUP_FAILED, error };\n};\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport LookupService from 'services/lookup';\nimport {\n fetchClassSuccess,\n fetchClassFailed,\n fetchStudentsSuccess,\n fetchStudentsFailed,\n fetchMyGroupsSuccess,\n fetchMyGroupsFailed\n} from 'stores/utils/lookup/actions';\nimport { setSelectedClass } from 'stores/report/actions';\n\nexport function* fetchClassByLevel({ LevelId }) {\n const data = yield call(LookupService.getClassByLevel, LevelId);\n let { selectedClass, selectedClassLevel } = yield select(\n state => state.reports\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchClassSuccess(data));\n const filteredClasses = data.filter(\n classObject => classObject.Type === 1\n );\n if (isNil(selectedClass) || selectedClass.LevelId !== selectedClassLevel)\n yield put(setSelectedClass(filteredClasses[0]));\n } else {\n yield put(fetchClassFailed(data.error));\n }\n }\n}\n\nexport function* fetchStudentsByClass({ ClassId }) {\n const data = yield call(LookupService.getStudentsByClass, ClassId);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchStudentsSuccess(data));\n } else {\n yield put(fetchStudentsFailed(data.error));\n }\n }\n}\n\nexport function* fetchStudentsByKeyword({ keyword, page, limit }) {\n const data = yield call(\n LookupService.getStudentsByKeyword,\n keyword,\n page,\n limit\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchStudentsSuccess(data));\n } else {\n yield put(fetchStudentsFailed(data.error));\n }\n }\n}\n\nexport function* fetchMyGroups() {\n const data = yield call(LookupService.getMyGroups);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchMyGroupsSuccess(data));\n } else {\n yield put(fetchMyGroupsFailed(data.error));\n }\n }\n}\n","export const FETCH_ASSIGNMENTS_REQUEST = 'FETCH_ASSIGNMENTS_REQUEST';\nexport const FETCH_ASSIGNMENTS_SUCCESS = 'FETCH_ASSIGNMENTS_SUCCESS';\nexport const FETCH_ASSIGNMENTS_FAILED = 'FETCH_ASSIGNMENTS_FAILED';\nexport const SET_YEARS = 'SET_YEARS';\nexport const SET_NUMBER_OF_PAGES = 'SET_NUMBER_OF_PAGES';\nexport const FETCH_TEACHERS_REQUEST = 'FETCH_TEACHERS_REQUEST';\nexport const FETCH_TEACHERS_SUCCESS = 'FETCH_TEACHERS_SUCCESS';\nexport const FETCH_TEACHERS_FAILED = 'FETCH_TEACHERS_FAILED';\nexport const FETCH_TEACHER_ASSIGNMENTS_REQUEST =\n 'FETCH_TEACHER_ASSIGNMENTS_REQUEST';\nexport const FETCH_TEACHER_ASSIGNMENTS_SUCCESS =\n 'FETCH_TEACHER_ASSIGNMENTS_SUCCESS';\nexport const FETCH_TEACHER_ASSIGNMENTS_FAILED =\n 'FETCH_TEACHER_ASSIGNMENTS_FAILED';\nexport const FETCH_MULTI_CLASS_REPORT_REQUEST =\n 'FETCH_MULTI_CLASS_REPORT_REQUEST';\nexport const FETCH_MULTI_CLASS_REPORT_SUCCESS =\n 'FETCH_MULTI_CLASS_REPORT_SUCCESS';\nexport const FETCH_MULTI_CLASS_REPORT_FAILED =\n 'FETCH_MULTI_CLASS_REPORT_FAILED';\nexport const FETCH_SINGLE_CLASS_REPORT_REQUEST =\n 'FETCH_SINGLE_CLASS_REPORT_REQUEST';\nexport const FETCH_SINGLE_CLASS_REPORT_SUCCESS =\n 'FETCH_SINGLE_CLASS_REPORT_SUCCESS';\nexport const FETCH_SINGLE_CLASS_REPORT_FAILED =\n 'FETCH_SINGLE_CLASS_REPORT_FAILED';\nexport const FETCH_CSV_CLASS_REPORT_REQUEST = 'FETCH_CSV_CLASS_REPORT_REQUEST';\nexport const FETCH_CSV_CLASS_REPORT_SUCCESS = 'FETCH_CSV_CLASS_REPORT_SUCCESS';\nexport const FETCH_CSV_CLASS_REPORT_FAILED = 'FETCH_CSV_CLASS_REPORT_FAILED';\nexport const SET_LATEST_YEAR = 'SET_LATEST_YEAR';\nexport const SET_ASSIGNMENT_SUMMARY_HISTORY = 'SET_ASSIGNMENT_SUMMARY_HISTORY';\nexport const SET_SELECTED_TEACHER = 'SET_SELECTED_TEACHER';\nexport const CLEAR_ASSIGNMENTS = 'CLEAR_ASSIGNMENTS';\nexport const CLEAR_SINGLE_CLASS_REPORT = 'CLEAR_SINGLE_CLASS_REPORT';\nexport const CLEAR_MULTI_CLASS_REPORT = 'CLEAR_MULTI_CLASS_REPORT';\nexport const DELETE_ASSIGNED_HW_REQUEST = 'DELETE_ASSIGNED_HW_REQUEST';\nexport const DELETE_ASSIGNED_HW_SUCCESS = 'DELETE_ASSIGNED_HW_SUCCESS';\nexport const DELETE_ASSIGNED_HW_FAILED = 'DELETE_ASSIGNED_HW_FAILED';\nexport const RESET_ERROR = 'RESET_ERROR';\nexport const RESET_DELETE_HW_RESULT = 'RESET_DELETE_HW_RESULT';\nexport const CHANGE_TITLE_DATE_REQUEST = 'CHANGE_TITLE_DATE_REQUEST';\nexport const CHANGE_TITLE_DATE_SUCCESS = 'CHANGE_TITLE_DATE_SUCCESS';\nexport const CHANGE_TITLE_DATE_FAILED = 'CHANGE_TITLE_DATE_FAILED';\nexport const CHANGE_TITLE_DATE_RESET = 'CHANGE_TITLE_DATE_RESET';\nexport const MARK_ANSWER_RIGHT_REQUEST = 'MARK_ANSWER_RIGHT_REQUEST';\nexport const MARK_ANSWER_RIGHT_SUCCESS = 'MARK_ANSWER_RIGHT_SUCCESS';\nexport const MARK_ANSWER_RIGHT_FAILED = 'MARK_ANSWER_RIGHT_FAILED';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch worksheet questions failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n// Fetch list of latest assignments of logged in user\nconst fetchAssignments = params => {\n const { date, pageSize, pageIndex } = params;\n return apiClient\n .get(\n `AssignmentTracker/GetMyAssignment/${date}?pageSize=${pageSize}&pageIndex=${pageIndex}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch assignments failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch list of assignments specified by teacherID\nconst fetchTeacherAssignments = params => {\n const { teacherID, pageSize, pageIndex, year } = params;\n return apiClient\n .get(\n `AssignmentTracker/GetAssignmentByUserId/${teacherID}/${year}?pageSize=${pageSize}&pageIndex=${pageIndex}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch assignments failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchTeachers = () => {\n return apiClient\n .get(`user/GetAllTeachers`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch teachers failed' // eslint-disable-line\n };\n });\n};\n\nconst checkTeacherAssignments = params => {\n const { teacherID, year } = params;\n return apiClient\n .get(\n `AssignmentTracker/GetAssignmentByUserId/${teacherID}/${year}?pageSize=1&pageIndex=1`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ?? 'Fetch assignments for teacher failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchMultiClassReport = params => {\n const { homeworkID } = params;\n return apiClient\n .get(`AssignmentTracker/GetMyBlockChartDataByHomeworkId/${homeworkID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch multi-class report failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchSingleClassReport = params => {\n const { homeworkID } = params;\n return apiClient\n .get(`AssignmentTracker/GetChartStatistic/${homeworkID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch multi-class report failed' // eslint-disable-line\n };\n });\n};\n\nconst deleteAssignedHw = params => {\n const { homeworkID } = params;\n return apiClient\n .delete(`AssignmentTracker/DeleteAssignedHomework/${homeworkID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Delete assigned homework failed' // eslint-disable-line\n };\n });\n};\n\nconst changeTitleDate = params => {\n return apiClient\n .put(`AssignmentTracker/UpdateAssignment`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Change title & date failed' // eslint-disable-line\n };\n });\n};\n\nconst markAnswerRight = params => {\n const { submissionId } = params;\n return apiClient\n .post(`submission/MarkSubmissionRight/${submissionId}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Failed to mark answer right' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchAssignments,\n fetchTeacherAssignments,\n fetchTeachers,\n checkTeacherAssignments,\n fetchMultiClassReport,\n fetchSingleClassReport,\n deleteAssignedHw,\n changeTitleDate,\n markAnswerRight\n};\n","import {\n FETCH_ASSIGNMENTS_REQUEST,\n FETCH_ASSIGNMENTS_SUCCESS,\n FETCH_ASSIGNMENTS_FAILED,\n SET_YEARS,\n SET_NUMBER_OF_PAGES,\n FETCH_TEACHERS_REQUEST,\n FETCH_TEACHERS_SUCCESS,\n FETCH_TEACHERS_FAILED,\n FETCH_TEACHER_ASSIGNMENTS_REQUEST,\n FETCH_TEACHER_ASSIGNMENTS_SUCCESS,\n FETCH_TEACHER_ASSIGNMENTS_FAILED,\n FETCH_MULTI_CLASS_REPORT_REQUEST,\n FETCH_MULTI_CLASS_REPORT_SUCCESS,\n FETCH_MULTI_CLASS_REPORT_FAILED,\n FETCH_SINGLE_CLASS_REPORT_REQUEST,\n FETCH_SINGLE_CLASS_REPORT_SUCCESS,\n FETCH_SINGLE_CLASS_REPORT_FAILED,\n FETCH_CSV_CLASS_REPORT_REQUEST,\n FETCH_CSV_CLASS_REPORT_SUCCESS,\n FETCH_CSV_CLASS_REPORT_FAILED,\n DELETE_ASSIGNED_HW_REQUEST,\n DELETE_ASSIGNED_HW_SUCCESS,\n DELETE_ASSIGNED_HW_FAILED,\n SET_LATEST_YEAR,\n SET_ASSIGNMENT_SUMMARY_HISTORY,\n SET_SELECTED_TEACHER,\n CLEAR_ASSIGNMENTS,\n CLEAR_SINGLE_CLASS_REPORT,\n CLEAR_MULTI_CLASS_REPORT,\n RESET_ERROR,\n RESET_DELETE_HW_RESULT,\n MARK_ANSWER_RIGHT_REQUEST,\n MARK_ANSWER_RIGHT_SUCCESS,\n MARK_ANSWER_RIGHT_FAILED,\n CHANGE_TITLE_DATE_RESET,\n CHANGE_TITLE_DATE_REQUEST,\n CHANGE_TITLE_DATE_SUCCESS,\n CHANGE_TITLE_DATE_FAILED\n} from './actionTypes';\n\nexport const fetchAssignmentsRequest = params => {\n return { type: FETCH_ASSIGNMENTS_REQUEST, params };\n};\n\nexport const fetchAssignmentsSuccess = assignments => {\n return { type: FETCH_ASSIGNMENTS_SUCCESS, assignments };\n};\n\nexport const fetchAssignmentsFailed = error => {\n return {\n type: FETCH_ASSIGNMENTS_FAILED,\n error\n };\n};\n\nexport const fetchTeacherAssignmentsRequest = params => {\n return {\n type: FETCH_TEACHER_ASSIGNMENTS_REQUEST,\n params\n };\n};\n\nexport const fetchTeacherAssignmentsSuccess = assignments => {\n return {\n type: FETCH_TEACHER_ASSIGNMENTS_SUCCESS,\n assignments\n };\n};\n\nexport const fetchTeacherAssignmentsFailed = error => {\n return {\n type: FETCH_TEACHER_ASSIGNMENTS_FAILED,\n error\n };\n};\n\nexport const fetchMultiClassReportRequest = params => {\n return {\n type: FETCH_MULTI_CLASS_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchMultiClassReportSuccess = report => {\n return {\n type: FETCH_MULTI_CLASS_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchMultiClassReportFailed = error => {\n return {\n type: FETCH_MULTI_CLASS_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchSingleClassReportRequest = params => {\n return {\n type: FETCH_SINGLE_CLASS_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchSingleClassReportSuccess = report => {\n return {\n type: FETCH_SINGLE_CLASS_REPORT_SUCCESS,\n report\n };\n};\n\nexport const fetchSingleClassReportFailed = error => {\n return {\n type: FETCH_SINGLE_CLASS_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchCSVClassReportRequest = params => {\n return {\n type: FETCH_CSV_CLASS_REPORT_REQUEST,\n params\n };\n};\n\nexport const fetchCSVClassReportSuccess = (data, report) => {\n return {\n type: FETCH_CSV_CLASS_REPORT_SUCCESS,\n data,\n report\n };\n};\n\nexport const fetchCSVClassReportFailed = error => {\n return {\n type: FETCH_CSV_CLASS_REPORT_FAILED,\n error\n };\n};\n\nexport const fetchTeachersRequest = params => {\n return { type: FETCH_TEACHERS_REQUEST, params };\n};\n\nexport const fetchTeachersSuccess = teachers => {\n return { type: FETCH_TEACHERS_SUCCESS, teachers };\n};\n\nexport const fetchTeachersFailed = error => {\n return {\n type: FETCH_TEACHERS_FAILED,\n error\n };\n};\n\nexport const deleteAssignedHwRequest = params => {\n return {\n type: DELETE_ASSIGNED_HW_REQUEST,\n params\n };\n};\n\nexport const deleteAssignedHwSuccess = () => {\n return {\n type: DELETE_ASSIGNED_HW_SUCCESS\n };\n};\n\nexport const deleteAssignedHwFailed = error => {\n return {\n type: DELETE_ASSIGNED_HW_FAILED,\n error\n };\n};\n\nexport const setYears = years => {\n return {\n type: SET_YEARS,\n years\n };\n};\n\nexport const setNumOfPages = number => {\n return {\n type: SET_NUMBER_OF_PAGES,\n number\n };\n};\n\nexport const setLatestYear = year => {\n return {\n type: SET_LATEST_YEAR,\n year\n };\n};\n\nexport const setAssignmentSummaryHistory = page => {\n return {\n type: SET_ASSIGNMENT_SUMMARY_HISTORY,\n page\n };\n};\n\nexport const setSelectedTeacher = teacherID => {\n return {\n type: SET_SELECTED_TEACHER,\n teacherID\n };\n};\n\nexport const clearAssignments = () => {\n return {\n type: CLEAR_ASSIGNMENTS\n };\n};\n\nexport const clearSingleClassReport = () => {\n return {\n type: CLEAR_SINGLE_CLASS_REPORT\n };\n};\n\nexport const clearMultiClassReport = () => {\n return {\n type: CLEAR_MULTI_CLASS_REPORT\n };\n};\n\nexport const resetError = () => {\n return {\n type: RESET_ERROR\n };\n};\n\nexport const resetDeleteHwResult = () => {\n return {\n type: RESET_DELETE_HW_RESULT\n };\n};\n\nexport const markAnswerRightRequest = params => {\n return {\n type: MARK_ANSWER_RIGHT_REQUEST,\n params\n };\n};\n\nexport const markAnswerRightSuccess = () => {\n return {\n type: MARK_ANSWER_RIGHT_SUCCESS\n };\n};\n\nexport const markAnswerRightFailed = error => {\n return {\n type: MARK_ANSWER_RIGHT_FAILED,\n error\n };\n};\n\nexport const changeTitleDateReset = () => {\n return { type: CHANGE_TITLE_DATE_RESET };\n};\n\nexport const changeTitleDateRequest = params => {\n return {\n type: CHANGE_TITLE_DATE_REQUEST,\n params\n };\n};\n\nexport const changeTitleDateSuccess = data => {\n return {\n type: CHANGE_TITLE_DATE_SUCCESS,\n data\n };\n};\n\nexport const changeTitleDateFailed = error => {\n return {\n type: CHANGE_TITLE_DATE_FAILED,\n error\n };\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport moment from 'moment';\nimport AssignmentService from 'services/assignments';\nimport {\n fetchAssignmentsSuccess,\n fetchAssignmentsFailed,\n fetchTeacherAssignmentsSuccess,\n fetchTeacherAssignmentsFailed,\n fetchTeachersSuccess,\n fetchTeachersFailed,\n fetchMultiClassReportSuccess,\n fetchMultiClassReportFailed,\n fetchSingleClassReportSuccess,\n fetchSingleClassReportFailed,\n fetchCSVClassReportSuccess,\n fetchCSVClassReportFailed,\n setLatestYear,\n setNumOfPages,\n clearAssignments,\n deleteAssignedHwSuccess,\n deleteAssignedHwFailed,\n markAnswerRightSuccess,\n markAnswerRightFailed,\n changeTitleDateSuccess,\n changeTitleDateFailed\n} from 'stores/assignments/actions';\nimport { parseCSVReport } from 'helpers/singleClassReport';\n\n// Saga for fetching assignments summary (Assigned by me)\n// Params for API endpoint\n// date: 2020\n// pageSize: 20 (Max number of results to return, optional can be null)\n// pageIndex: 1 (Returns error if no more results on this pageIndex, optional can be null)\n// *pageSize & pageIndex params must be passed together\n// This function fetches the latest 21 assignments assigned by logged in user\nexport function* fetchAssignments({ params }) {\n const queryParams = {\n date: params.date,\n pageSize: params.pageSize,\n pageIndex: params.pageIndex\n };\n const data = yield call(AssignmentService.fetchAssignments, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchAssignmentsSuccess(data));\n // Set available years if date = null (first load)\n yield put(setLatestYear(moment(data[0].AssignedDate).year()));\n // Set number of pages available\n if (params.date !== null) {\n yield put(setNumOfPages(data[0].TotalPage));\n } else {\n const year = moment(data[0].AssignedDate)\n .year()\n .toString();\n // Check if results list has 20 results from the latest year\n const dataFromLatestYear = data.filter(\n assignment =>\n moment(assignment.AssignedDate)\n .year()\n .toString() === year\n );\n if (dataFromLatestYear.length >= 20) {\n // Call API endpoint with latest year to check num of pages\n const assignmentsForYear = yield call(\n AssignmentService.fetchAssignments,\n {\n date: `${moment(data[0].AssignedDate)\n .year()\n .toString()}`,\n pageSize: 20,\n pageIndex: 1\n }\n );\n if (!isNil(assignmentsForYear) && isNil(assignmentsForYear.error)) {\n yield put(setNumOfPages(assignmentsForYear[0].TotalPage));\n }\n } else {\n yield put(fetchAssignmentsSuccess(dataFromLatestYear));\n yield put(setNumOfPages(1));\n }\n }\n } else {\n yield put(fetchAssignmentsFailed(data.error));\n yield put(clearAssignments());\n }\n }\n}\n\n// Saga for fetching assignment summary (Assigned by others)\nexport function* fetchTeacherAssignments({ params }) {\n const queryParams = {\n teacherID: params.teacherID,\n pageSize: params.pageSize,\n pageIndex: params.pageIndex,\n year: params.year\n };\n const data = yield call(\n AssignmentService.fetchTeacherAssignments,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchTeacherAssignmentsSuccess(data));\n yield put(setNumOfPages(data[0]?.TotalPage || 1));\n } else {\n yield put(fetchTeacherAssignmentsFailed(data.error));\n yield put(clearAssignments());\n }\n }\n}\n\n// Saga for fetching list of teachers (Assigned by others page)\nexport function* fetchTeachers() {\n const data = yield call(AssignmentService.fetchTeachers);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchTeachersSuccess(data));\n } else {\n yield put(fetchTeachersFailed(data.error));\n }\n }\n}\n\n// Saga for fetching multi-class report\nexport function* fetchMultiClassReport({ params }) {\n const queryParams = {\n homeworkID: params.homeworkID\n };\n const data = yield call(AssignmentService.fetchMultiClassReport, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchMultiClassReportSuccess(data));\n } else {\n yield put(fetchMultiClassReportFailed(data.error));\n }\n }\n}\n\n// Saga for fetching single-class report\nexport function* fetchSingleClassReport({ params }) {\n const queryParams = {\n homeworkID: params.homeworkID\n };\n const data = yield call(\n AssignmentService.fetchSingleClassReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSingleClassReportSuccess(data));\n } else {\n yield put(fetchSingleClassReportFailed(data.error));\n }\n }\n}\n\n// Saga for fetching csv class report\nexport function* fetchCSVClassReport({ params }) {\n const queryParams = {\n homeworkID: params.homeworkID\n };\n const data = yield call(\n AssignmentService.fetchSingleClassReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n // Parse api response\n const report = parseCSVReport(data);\n yield put(fetchCSVClassReportSuccess(data, report));\n } else {\n yield put(fetchCSVClassReportFailed(data.error));\n }\n }\n}\n\n// Saga for deleting assigned hw\nexport function* deleteAssignedHw({ params }) {\n const queryParams = {\n homeworkID: params.homeworkID\n };\n const data = yield call(AssignmentService.deleteAssignedHw, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(deleteAssignedHwSuccess());\n } else {\n yield put(deleteAssignedHwFailed(data.error));\n }\n }\n}\n\n// Saga for mark answer right\nexport function* markAnswerRight({ params }) {\n const queryParams = {\n submissionId: params.submissionId\n };\n const data = yield call(AssignmentService.markAnswerRight, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(markAnswerRightSuccess());\n } else {\n yield put(markAnswerRightFailed(data.error));\n }\n }\n}\n\nexport function* changeTitleDate({ params }) {\n const data = yield call(AssignmentService.changeTitleDate, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(changeTitleDateSuccess(data));\n } else {\n yield put(changeTitleDateFailed(data.error));\n }\n }\n}\n","export const FETCH_CLASSES_REQUEST = 'FETCH_CLASSES_REQUEST';\nexport const FETCH_CLASSES_SUCCESS = 'FETCH_CLASSES_SUCCESS';\nexport const FETCH_CLASSES_FAILED = 'FETCH_CLASSES_FAILED';\nexport const FETCH_STUDENTS_DATA_REQUEST = 'FETCH_STUDENTS_DATA_REQUEST';\nexport const FETCH_STUDENTS_CLASS_SUCCESS = 'FETCH_STUDENTS_CLASS_SUCCESS';\nexport const FETCH_STUDENTS_FAILED = 'FETCH_STUDENTS_FAILED';\nexport const FETCH_STUDENT_DETAILS_REQUEST = 'FETCH_STUDENT_DETAILS_REQUEST';\nexport const FETCH_STUDENT_DETAILS_SUCCESS = 'FETCH_STUDENT_DETAILS_SUCCESS';\nexport const FETCH_STUDENT_DETAILS_FAILED = 'FETCH_STUDENT_DETAILS_FAILED';\nexport const EDIT_CLASS_REQUEST = 'EDIT_CLASS_REQUEST';\nexport const EDIT_CLASS_SUCCESS = 'EDIT_CLASS_SUCCESS';\nexport const EDIT_CLASS_FAILED = 'EDIT_CLASS_FAILED';\nexport const CHANGE_CLASS_REQUEST = 'CHANGE_CLASS_REQUEST';\nexport const CHANGE_CLASS_SUCCESS = 'CHANGE_CLASS_SUCCESS';\nexport const CHANGE_CLASS_FAILED = 'CHANGE_CLASS_FAILED';\nexport const RESET_PW_REQUEST = 'RESET_PW_REQUEST';\nexport const RESET_PW_SUCCESS = 'RESET_PW_SUCCESS';\nexport const RESET_PW_FAILED = 'RESET_PW_FAILED';\nexport const RESET_STUDENTS = 'RESET_STUDENTS';\nexport const RESET_SEARCH_RESULTS = 'RESET_SEARCH_RESULTS';\nexport const SET_STUDENT_PAGES = 'SET_STUDENT_PAGES';\nexport const SET_SEARCH_PAGES = 'SET_SEARCH_PAGES';\nexport const SEARCH_STUDENT_REQUEST = 'SEARCH_STUDENT_REQUEST';\nexport const SEARCH_STUDENT_SUCCESS = 'SEARCH_STUDENT_SUCCESS';\nexport const SEARCH_STUDENT_FAILED = 'SEARCH_STUDENT_FAILED';\nexport const RESET_PW_RESULT = 'RESET_PW_RESULT';\nexport const RESET_ERROR = 'RESET_ERROR';\nexport const RESET_CHANGE_CLASS_RESULT = 'RESET_CHANGE_CLASS_RESULT';\nexport const FETCH_ICONS_REQUEST = 'FETCH_ICONS_REQUEST';\nexport const FETCH_ICONS_SUCCESS = 'FETCH_ICONS_SUCCESS';\nexport const FETCH_ICONS_FAILED = 'FETCH_ICONS_FAILED';\nexport const RESET_EDIT_CLASS_RESULT = 'RESET_EDIT_CLASS_RESULT';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n// Fetch list of classes\nconst fetchClasses = params => {\n const { year } = params;\n // update api endpoint\n return apiClient\n .get(`ManageClass/GetAllClassesByYear/${year}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch students failed' // eslint-disable-line\n };\n });\n};\n\n// TODO: Fetch list of students\nconst fetchStudents = params => {\n const { classID, pageNum } = params;\n const pageSize = 20;\n return apiClient\n .get(\n `lookup/SearchStudentWithDetails?ClassId=${classID}&pageSize=${pageSize}&pageIndex=${pageNum}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch students failed' // eslint-disable-line\n };\n });\n};\n\n// Search students by ID or name\nconst searchStudents = params => {\n const { pageNum, SchoolId, SrchName, studentId } = params;\n const pageSize = 20;\n let apiUrl;\n if (SrchName !== null) {\n apiUrl = `lookup/SearchStudentWithDetails?pageSize=${pageSize}&pageIndex=${pageNum}&SchoolId=${SchoolId}&SrchName=${SrchName}`;\n } else if (studentId !== null) {\n apiUrl = `lookup/SearchStudentWithDetails?pageSize=${pageSize}&pageIndex=${pageNum}&SchoolId=${SchoolId}&Studentid=${studentId}`;\n }\n return apiClient\n .get(apiUrl)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Search students failed' // eslint-disable-line\n };\n });\n};\n\n// TODO: Fetch student details\nconst fetchStudentDetails = params => {\n const { studentID } = params;\n return apiClient\n .get(`lookup/GetStudentDetailsByStudentId/${studentID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch student details failed' // eslint-disable-line\n };\n });\n};\n\n// TODO: Post request for Edit Class\nconst editClass = params => {\n const body = {\n Name: params.className\n };\n let isUpdateIcon;\n if (params.iconID !== 0) {\n body.IconId = params.iconID;\n isUpdateIcon = true;\n } else {\n isUpdateIcon = false;\n }\n const options = {\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n return apiClient\n .put(\n `ManageClass/EditClass/${params.classID}?UpdateIcon=${isUpdateIcon}`,\n body,\n options\n )\n .then(handleResponseSuccess)\n .catch(err => {\n // TODO: update error response format\n return {\n error: err?.response?.data?.error_description ?? 'Edit class failed' // eslint-disable-line\n };\n });\n};\n\n// TODO: Post request for Change Class\nconst changeClass = params => {\n const body = {\n StudentIds: params.StudentIDs,\n ClassId: params.classID\n };\n const options = {\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n return apiClient\n .post(`Student/MoveClass`, body, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.error_description ?? 'Change class failed' // eslint-disable-line\n };\n });\n};\n// TODO: Post request for Reset Password\nconst resetPassword = params => {\n return apiClient\n .put(`Student/ResetPassword/${params.studentID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.error_description ?? 'Reset password failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchIcons = params => {\n return apiClient\n .get(`ManageClass/GetClassIcons/${params.level}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.error_description ?? 'Fetch icons failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchClasses,\n fetchStudents,\n searchStudents,\n fetchStudentDetails,\n editClass,\n changeClass,\n resetPassword,\n fetchIcons\n};\n","import {\n FETCH_CLASSES_REQUEST,\n FETCH_CLASSES_SUCCESS,\n FETCH_CLASSES_FAILED,\n FETCH_STUDENTS_DATA_REQUEST,\n FETCH_STUDENTS_CLASS_SUCCESS,\n FETCH_STUDENTS_FAILED,\n FETCH_STUDENT_DETAILS_REQUEST,\n FETCH_STUDENT_DETAILS_SUCCESS,\n FETCH_STUDENT_DETAILS_FAILED,\n EDIT_CLASS_REQUEST,\n EDIT_CLASS_SUCCESS,\n EDIT_CLASS_FAILED,\n CHANGE_CLASS_REQUEST,\n CHANGE_CLASS_SUCCESS,\n CHANGE_CLASS_FAILED,\n SEARCH_STUDENT_REQUEST,\n SEARCH_STUDENT_SUCCESS,\n SEARCH_STUDENT_FAILED,\n SET_STUDENT_PAGES,\n SET_SEARCH_PAGES,\n RESET_PW_REQUEST,\n RESET_PW_SUCCESS,\n RESET_PW_FAILED,\n FETCH_ICONS_REQUEST,\n FETCH_ICONS_SUCCESS,\n FETCH_ICONS_FAILED,\n RESET_STUDENTS,\n RESET_SEARCH_RESULTS,\n RESET_PW_RESULT,\n RESET_EDIT_CLASS_RESULT,\n RESET_CHANGE_CLASS_RESULT,\n RESET_ERROR\n} from './actionTypes';\n\nexport const fetchClassesRequest = params => {\n return {\n type: FETCH_CLASSES_REQUEST,\n params\n };\n};\n\nexport const fetchClassesSuccess = classes => {\n return { type: FETCH_CLASSES_SUCCESS, classes };\n};\n\nexport const fetchClassesFailed = error => {\n return {\n type: FETCH_CLASSES_FAILED,\n error\n };\n};\n\nexport const fetchStudentsRequest = params => {\n return {\n type: FETCH_STUDENTS_DATA_REQUEST,\n params\n };\n};\nexport const fetchStudentsClassSuccess = students => {\n return { type: FETCH_STUDENTS_CLASS_SUCCESS, students };\n};\n\nexport const fetchStudentsFailed = error => {\n return {\n type: FETCH_STUDENTS_FAILED,\n error\n };\n};\n\nexport const fetchStudentDetailsRequest = params => {\n return {\n type: FETCH_STUDENT_DETAILS_REQUEST,\n params\n };\n};\nexport const fetchStudentDetailsSuccess = details => {\n return { type: FETCH_STUDENT_DETAILS_SUCCESS, details };\n};\n\nexport const fetchStudentDetailsFailed = error => {\n return {\n type: FETCH_STUDENT_DETAILS_FAILED,\n error\n };\n};\n\nexport const editClassRequest = params => {\n return {\n type: EDIT_CLASS_REQUEST,\n params\n };\n};\n\nexport const editClassSuccess = () => {\n return { type: EDIT_CLASS_SUCCESS };\n};\n\nexport const editClassFailed = error => {\n return {\n type: EDIT_CLASS_FAILED,\n error\n };\n};\n\nexport const changeClassRequest = params => {\n return {\n type: CHANGE_CLASS_REQUEST,\n params\n };\n};\n\nexport const changeClassSuccess = () => {\n return { type: CHANGE_CLASS_SUCCESS };\n};\n\nexport const changeClassFailed = error => {\n return {\n type: CHANGE_CLASS_FAILED,\n error\n };\n};\n\nexport const searchStudentRequest = params => {\n return {\n type: SEARCH_STUDENT_REQUEST,\n params\n };\n};\n\nexport const searchStudentSuccess = results => {\n return {\n type: SEARCH_STUDENT_SUCCESS,\n results\n };\n};\n\nexport const searchStudentFailed = error => {\n return {\n type: SEARCH_STUDENT_FAILED,\n error\n };\n};\n\nexport const resetPwRequest = params => {\n return {\n type: RESET_PW_REQUEST,\n params\n };\n};\n\nexport const resetPwSuccess = () => {\n return { type: RESET_PW_SUCCESS };\n};\n\nexport const resetPwFailed = error => {\n return {\n type: RESET_PW_FAILED,\n error\n };\n};\n\nexport const fetchIconsRequest = params => {\n return {\n type: FETCH_ICONS_REQUEST,\n params\n };\n};\n\nexport const fetchIconsSuccess = result => {\n return {\n type: FETCH_ICONS_SUCCESS,\n result\n };\n};\n\nexport const fetchIconsFailed = error => {\n return {\n type: FETCH_ICONS_FAILED,\n error\n };\n};\n\nexport const resetStudents = () => {\n return {\n type: RESET_STUDENTS\n };\n};\n\nexport const resetSearchResults = () => {\n return {\n type: RESET_SEARCH_RESULTS\n };\n};\n\nexport const setStudentPages = pageTotal => {\n return {\n type: SET_STUDENT_PAGES,\n pageTotal\n };\n};\n\nexport const setSearchPages = pageTotal => {\n return {\n type: SET_SEARCH_PAGES,\n pageTotal\n };\n};\n\nexport const resetPwResultAction = () => {\n return {\n type: RESET_PW_RESULT\n };\n};\n\nexport const resetEditClassResult = () => {\n return {\n type: RESET_EDIT_CLASS_RESULT\n };\n};\n\nexport const resetChangeClassResult = () => {\n return {\n type: RESET_CHANGE_CLASS_RESULT\n };\n};\n\nexport const resetError = () => {\n return {\n type: RESET_ERROR\n };\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport moment from 'moment';\nimport ManageClassService from 'services/manage-class';\nimport {\n fetchClassesSuccess,\n fetchClassesFailed,\n fetchStudentsClassSuccess,\n fetchStudentsFailed,\n searchStudentSuccess,\n searchStudentFailed,\n fetchStudentDetailsSuccess,\n fetchStudentDetailsFailed,\n editClassSuccess,\n editClassFailed,\n changeClassSuccess,\n changeClassFailed,\n resetPwSuccess,\n resetPwFailed,\n fetchIconsSuccess,\n fetchIconsFailed,\n resetStudents,\n resetSearchResults,\n setStudentPages,\n setSearchPages\n} from 'stores/manage-class/actions';\n\n// Saga for fetching classes data\nexport function* fetchClasses({ params }) {\n const queryParams = {\n year: params.year\n };\n const data = yield call(ManageClassService.fetchClasses, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchClassesSuccess(data));\n }\n } else {\n yield put(fetchClassesFailed(data.error));\n // TODO: set classes state to empty?\n }\n}\n\n// Saga for fetching classes data for current year\nexport function* fetchClassesForCurrentYear() {\n const queryParams = {\n year: moment().year()\n };\n const data = yield call(ManageClassService.fetchClasses, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchClassesSuccess(data));\n }\n } else {\n yield put(fetchClassesFailed(data.error));\n // TODO: set classes state to empty?\n }\n}\n\n// Saga for fetching students data\nexport function* fetchStudents({ params }) {\n const queryParams = {\n classID: params.classID,\n pageNum: params.pageNum\n };\n const data = yield call(ManageClassService.fetchStudents, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchStudentsClassSuccess(data));\n if (data.TotalCount > 20) {\n yield put(setStudentPages(Math.ceil(data.TotalCount / 20)));\n } else {\n yield put(setStudentPages(1));\n }\n }\n } else {\n yield put(fetchStudentsFailed(data.error));\n yield put(resetStudents());\n }\n}\n\n// Saga for searching student by name or id\nexport function* searchStudents({ params }) {\n const queryParams = {\n pageNum: params.pageNum,\n SchoolId: params.schoolID,\n SrchName: params.searchName,\n studentId: params.searchID\n };\n const data = yield call(ManageClassService.searchStudents, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(searchStudentSuccess(data));\n if (data.TotalCount > 20) {\n yield put(setSearchPages(Math.ceil(data.TotalCount / 20)));\n } else {\n yield put(setSearchPages(1));\n }\n }\n } else {\n yield put(searchStudentFailed(data.error));\n yield put(resetSearchResults());\n }\n}\n\n// Saga for fetching student details by student ID\nexport function* fetchStudentDetails({ params }) {\n const queryParams = {\n studentID: params.studentID\n };\n const data = yield call(ManageClassService.fetchStudentDetails, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchStudentDetailsSuccess(data));\n }\n } else {\n yield put(fetchStudentDetailsFailed(data.error));\n }\n}\n\n// Saga for posting edit class request\nexport function* editClass({ params }) {\n const queryParams = {\n classID: params.classID,\n className: params.className,\n iconID: params.iconID\n };\n const result = yield call(ManageClassService.editClass, queryParams);\n if (!isNil(result)) {\n if (isNil(result.error)) {\n yield put(editClassSuccess());\n } else {\n yield put(editClassFailed(result.error));\n }\n } else {\n yield put(editClassFailed(result.error));\n }\n}\n\n// Saga for posting change class request\nexport function* changeClass({ params }) {\n const queryParams = {\n StudentIDs: params.StudentIDs,\n classID: params.classID\n };\n const result = yield call(ManageClassService.changeClass, queryParams);\n if (!isNil(result)) {\n if (isNil(result.error)) {\n yield put(changeClassSuccess());\n } else {\n yield put(changeClassFailed(result.error));\n }\n } else {\n yield put(changeClassFailed(result.error));\n }\n}\n\n// Saga for posting reset password request\nexport function* resetPassword({ params }) {\n const queryParams = {\n studentID: params.studentID\n };\n const result = yield call(ManageClassService.resetPassword, queryParams);\n if (!isNil(result)) {\n if (isNil(result.error)) {\n yield put(resetPwSuccess());\n } else {\n yield put(resetPwFailed(result.error));\n }\n } else {\n yield put(resetPwFailed(result.error));\n }\n}\n\n// Saga for fetching class icons by level\nexport function* fetchIcons({ params }) {\n const queryParams = {\n level: params.level\n };\n const data = yield call(ManageClassService.fetchIcons, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(\n fetchIconsSuccess({\n level: params.level,\n icons: data\n })\n );\n }\n } else {\n yield put(fetchIconsFailed(data.error));\n }\n}\n","import apiClient from 'services/api';\nimport fileDownload from 'js-file-download';\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst handleResponseSuccessWithoutResult = result => {\n return result.data ?? [];\n};\nconst handleDownloadResponse = async (result, fileName) => {\n return fileDownload(result.data, fileName);\n};\n// Fetch proficiency report for class\nconst fetchClassProficiencyReport = params => {\n const { classID, reportLevel, syllabusID } = params;\n return apiClient\n .get(\n `Report/GetAllUserProficiencyReport/Student/${classID}/${reportLevel}/${syllabusID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch class proficiency report failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch highscore report for class\nconst fetchClassHighScoreReport = params => {\n const { classID, reportLevel, curriculumID } = params;\n return apiClient\n .get(\n `Report/GetAllUserMasteryLevelReport/Student/${classID}/${reportLevel}/${curriculumID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ?? 'Fetch class high score report failed' // eslint-disable-line\n };\n });\n};\n// Fetch proficiency report for skill\nconst fetchProficiencySkillReport = params => {\n const { classID, reportLevel, curriculumID, topicID } = params;\n return apiClient\n .get(\n `Report/GetAllUserProficiencyReport/Skill/${classID}/${reportLevel}/${curriculumID}/${topicID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch student proficiency skill report failed' // eslint-disable-line\n };\n });\n};\n// Fetch highscore report for skill\nconst fetchHighScoreSkillReport = params => {\n const { classID, reportLevel, curriculumID, topicID } = params;\n return apiClient\n .get(\n `Report/GetAllUserMasteryLevelReport/Skill/${classID}/${reportLevel}/${curriculumID}/${topicID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch student proficiency skill report failed' // eslint-disable-line\n };\n });\n};\n// Fetch proficiency/highscore report for student\nconst fetchStudentProficiencyReport = params => {\n const { studentID, classID, reportLevel, syllabusID } = params;\n return apiClient\n .get(\n `Report/GetUserProficiencyAndMasteryReport/${studentID}/${classID}/${reportLevel}/${syllabusID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch student proficiency/high score report failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch sample qn info by qn ID\nconst fetchSampleQn = params => {\n const { qnID } = params;\n const options = {\n params: {\n includeAnswer: false,\n includeSolution: true\n }\n };\n return apiClient\n .get(`Question/GetById/${qnID}`, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch sample question failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch Login Report\nconst fetchLoginReport = params => {\n const { classID, weekID } = params;\n return apiClient\n .get(`Report/GetLoginReport/${classID}/${weekID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch login report failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch Week Items\nconst fetchWeekItems = params => {\n const { numberOfPreviousWeek } = params;\n return apiClient\n .get(`Report/GetWeekItems/${numberOfPreviousWeek}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch week items failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch Teacher Report Month\nconst fetchTeacherMonthReport = params => {\n const { year } = params;\n return apiClient\n .get(`TeacherReport/GetReportMonths/${year}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ?? 'Fetch teacher report month failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch Teacher Report Specific Month\nconst fetchTeacherSpecificMonthReport = params => {\n const { year, month } = params;\n return apiClient\n .get(`TeacherReport/GetMonthlyReport?year=${year}&month=${month}`)\n .then(handleResponseSuccessWithoutResult)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch teacher report specific month failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch skill proficiency detail report for student\nconst fetchSkillProficiencyDetailReport = params => {\n const { classID, reportLevel, curriculumID, topicID, skillID } = params;\n return apiClient\n .get(\n `Report/GetAllUserProficiencyReport/Skill/${classID}/${reportLevel}/${curriculumID}/${topicID}/${skillID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch skill proficiency detail report failed' // eslint-disable-line\n };\n });\n};\n\n// Fetch skill highscore detail report for student\nconst fetchSkillHighScoreDetailReport = params => {\n const { classID, reportLevel, curriculumID, topicID, skillID } = params;\n return apiClient\n .get(\n `Report/GetAllUserMasteryLevelReport/Skill/${classID}/${reportLevel}/${curriculumID}/${topicID}/${skillID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error:\n err?.response?.data?.message ??\n 'Fetch skill high score detail report failed' // eslint-disable-line\n };\n });\n};\n// Fetch download high score report\nconst fetchDownloadHighScoreReport = params => {\n const { classID, reportLevel, curriculumID, fileName } = params;\n return apiClient\n .get(\n `Report/DownloadAllUserMasteryLevelReport/Skill/${classID}/${reportLevel}/${curriculumID}`,\n { responseType: 'blob' }\n )\n .then(res => handleDownloadResponse(res, fileName))\n .catch(err => {\n console.log(err);\n throw new Error('Download high score report failed');\n });\n};\n// Fetch download proficiency report\nconst fetchDownloadProficiencyReport = params => {\n const { classID, reportLevel, curriculumID, fileName } = params;\n return apiClient\n .get(\n `Report/DownloadAllUserProficiencyReport/Skill/${classID}/${reportLevel}/${curriculumID}`,\n { responseType: 'blob' }\n )\n .then(res => handleDownloadResponse(res, fileName))\n .catch(err => {\n console.log(err);\n throw new Error('Download proficiency report failed');\n });\n};\nexport default {\n fetchClassProficiencyReport,\n fetchClassHighScoreReport,\n fetchStudentProficiencyReport,\n fetchSampleQn,\n fetchLoginReport,\n fetchWeekItems,\n fetchTeacherMonthReport,\n fetchTeacherSpecificMonthReport,\n fetchProficiencySkillReport,\n fetchHighScoreSkillReport,\n fetchSkillProficiencyDetailReport,\n fetchSkillHighScoreDetailReport,\n fetchDownloadHighScoreReport,\n fetchDownloadProficiencyReport\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport ReportsService from 'services/reports';\nimport SyllabusApi from 'services/syllabus';\nimport {\n fetchClassProficiencyReportSuccess,\n fetchClassProficiencyReportFailed,\n fetchClassHighScoreReportSuccess,\n fetchClassHighScoreReportFailed,\n fetchStudentProficiencyReportSuccess,\n fetchStudentProficiencyReportFailed,\n fetchSampleQnSuccess,\n fetchSampleQnFailed,\n fetchWeekItemsSuccess,\n fetchWeekItemsFailed,\n fetchLoginReportSuccess,\n fetchLoginReportFailed,\n fetchTeacherReportMonthSuccess,\n fetchTeacherReportMonthFailed,\n fetchTeacherReportSpecificMonthSuccess,\n fetchTeacherReportSpecificMonthFailed,\n fetchSyllabusSuccess,\n fetchSyllabusFailed,\n fetchProficiencySkillReportSuccess,\n fetchProficiencySkillReportFailed,\n fetchHighScoreSkillReportSuccess,\n fetchHighScoreSkillReportFailed,\n fetchSkillProficiencyDetailReportSuccess,\n fetchSkillProficiencyDetailReportFailed,\n fetchSkillHighScoreDetailReportSuccess,\n fetchSkillHighScoreDetailReportFailed\n} from 'stores/report/actions';\n\n// Saga for fetching class proficiency report\nexport function* fetchClassProficiencyReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n syllabusID: params.syllabusID\n };\n const data = yield call(\n ReportsService.fetchClassProficiencyReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchClassProficiencyReportSuccess(data));\n } else {\n yield put(fetchClassProficiencyReportFailed(data.error));\n }\n } else {\n yield put(fetchClassProficiencyReportFailed(data.error));\n }\n}\n\n// Saga for fetching class highscore report\nexport function* fetchClassHighScoreReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n curriculumID: params.curriculumID\n };\n const data = yield call(\n ReportsService.fetchClassHighScoreReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchClassHighScoreReportSuccess(data));\n } else {\n yield put(fetchClassHighScoreReportFailed(data.error));\n }\n } else {\n yield put(fetchClassHighScoreReportFailed(data.error));\n }\n}\n\n// Saga for fetching student proficiency/highscore report\nexport function* fetchStudentProficiencyReport({ params }) {\n const queryParams = {\n studentID: params.studentID,\n classID: params.classID,\n reportLevel: params.reportLevel,\n syllabusID: params.syllabusID\n };\n const data = yield call(\n ReportsService.fetchStudentProficiencyReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchStudentProficiencyReportSuccess(data));\n } else {\n yield put(fetchStudentProficiencyReportFailed(data.error));\n }\n } else {\n yield put(fetchStudentProficiencyReportFailed(data.error));\n }\n}\n// Saga for fetching student proficiency/highscore report\nexport function* fetchProficiencySkillReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n curriculumID: params.curriculumID,\n topicID: params.topicID\n };\n const data = yield call(\n ReportsService.fetchProficiencySkillReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchProficiencySkillReportSuccess(data));\n } else {\n yield put(fetchProficiencySkillReportFailed(data.error));\n }\n } else {\n yield put(fetchProficiencySkillReportFailed(data.error));\n }\n}\n\n// Saga for fetching student proficiency/highscore report\nexport function* fetchHighScoreSkillReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n curriculumID: params.curriculumID,\n topicID: params.topicID\n };\n const data = yield call(\n ReportsService.fetchHighScoreSkillReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchHighScoreSkillReportSuccess(data));\n } else {\n yield put(fetchHighScoreSkillReportFailed(data.error));\n }\n } else {\n yield put(fetchHighScoreSkillReportFailed(data.error));\n }\n}\n\n// Saga for fetching sample qn\nexport function* fetchSampleQn({ params }) {\n const queryParams = {\n qnID: params.qnID\n };\n const data = yield call(ReportsService.fetchSampleQn, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSampleQnSuccess(data));\n } else {\n yield put(fetchSampleQnFailed(data.error));\n }\n } else {\n yield put(fetchSampleQnFailed(data.error));\n }\n}\n\n// Saga for fetching login report\nexport function* fetchLoginReport({ params }) {\n const queryParams = { classID: params.classID, weekID: params.weekID };\n const data = yield call(ReportsService.fetchLoginReport, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchLoginReportSuccess(data));\n } else {\n yield put(fetchLoginReportFailed(data.error));\n }\n } else {\n yield put(fetchLoginReportFailed(data.error));\n }\n}\n\n// Saga for fetching week items\nexport function* fetchWeekItems({ params }) {\n const queryParams = { numberOfPreviousWeek: params.numberOfPreviousWeek };\n const data = yield call(ReportsService.fetchWeekItems, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchWeekItemsSuccess(data));\n } else {\n yield put(fetchWeekItemsFailed(data.error));\n }\n } else {\n yield put(fetchWeekItemsFailed(data.error));\n }\n}\n\n// Saga for fetching teacher month report\nexport function* fetchTeacherMonthReport({ params }) {\n const queryParams = { year: params };\n const data = yield call(ReportsService.fetchTeacherMonthReport, queryParams);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchTeacherReportMonthSuccess(data));\n } else {\n yield put(fetchTeacherReportMonthFailed(data.error));\n }\n } else {\n yield put(fetchTeacherReportMonthFailed(data.error));\n }\n}\n\n// Saga for fetching teacher specific month report\nexport function* fetchTeacherSpecificMonthReport({ params }) {\n const queryParams = { year: params.year, month: params.month };\n const data = yield call(\n ReportsService.fetchTeacherSpecificMonthReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchTeacherReportSpecificMonthSuccess(data));\n } else {\n yield put(fetchTeacherReportSpecificMonthFailed(data.error));\n }\n } else {\n yield put(fetchTeacherReportSpecificMonthFailed(data.error));\n }\n}\n// Saga for fetching Syllabus report\nexport function* fetchReportSyllabus({ params }) {\n const data = yield call(SyllabusApi, params.CurriculumID, params.LevelID);\n if (!isNil(data)) {\n if (!isNil(data.error)) {\n yield put(fetchSyllabusFailed(data.error));\n } else {\n yield put(fetchSyllabusSuccess(data.Topics));\n }\n }\n}\n\n// Saga for fetching skill proficiency detail report\nexport function* fetchSkillProficiencyDetailReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n curriculumID: params.curriculumID,\n topicID: params.topicID,\n skillID: params.skillID\n };\n const data = yield call(\n ReportsService.fetchSkillProficiencyDetailReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSkillProficiencyDetailReportSuccess(data));\n } else {\n yield put(fetchSkillProficiencyDetailReportFailed(data.error));\n }\n } else {\n yield put(fetchSkillProficiencyDetailReportFailed(data.error));\n }\n}\n\n// Saga for fetching skill high score detail report\nexport function* fetchSkillHighScoreDetailReport({ params }) {\n const queryParams = {\n classID: params.classID,\n reportLevel: params.reportLevel,\n curriculumID: params.curriculumID,\n topicID: params.topicID,\n skillID: params.skillID\n };\n const data = yield call(\n ReportsService.fetchSkillHighScoreDetailReport,\n queryParams\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSkillHighScoreDetailReportSuccess(data));\n } else {\n yield put(fetchSkillHighScoreDetailReportFailed(data.error));\n }\n } else {\n yield put(fetchSkillHighScoreDetailReportFailed(data.error));\n }\n}\n","// select\nexport const SAVE_PRIVATE_GROUP = 'SAVE_PRIVATE_GROUP';\nexport const DELETE_PRIVATE_GROUP = 'DELETE_PRIVATE_GROUP';\n\nexport const FETCH_PRIVATE_GROUPS_FAILED = 'FETCH_PRIVATE_GROUPS_FAILED';\nexport const FETCH_PRIVATE_GROUPS_REQUEST = 'FETCH_PRIVATE_GROUPS_REQUEST';\nexport const FETCH_PRIVATE_GROUPS_SUCCESS = 'FETCH_PRIVATE_GROUPS_SUCCESS';\n\nexport const FETCH_PRIVATE_GROUP_SUCCESS = 'FETCH_PRIVATE_GROUP_SUCCESS';\nexport const FETCH_PRIVATE_GROUP_FAILED = 'FETCH_PRIVATE_GROUPS_FAILED';\nexport const FETCH_PRIVATE_GROUP_REQUEST = 'FETCH_PRIVATE_GROUPS_REQUEST';\n\nexport const SELECT_STUDENTS = 'SELECT_STUDENTS';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch data failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst savePrivateGroup = params => {\n return apiClient\n .post(`Group/Save`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Save Private Group failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch all worksheet\n */\nconst getPrivateGroups = keyword => {\n const options = {\n params: {\n SrchName: keyword\n }\n };\n return apiClient\n .get(`Group/Search`, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch Private Groups failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n savePrivateGroup,\n getPrivateGroups\n};\n","import {\n SAVE_PRIVATE_GROUP,\n DELETE_PRIVATE_GROUP,\n FETCH_PRIVATE_GROUPS_FAILED,\n FETCH_PRIVATE_GROUPS_REQUEST,\n FETCH_PRIVATE_GROUPS_SUCCESS,\n FETCH_PRIVATE_GROUP_SUCCESS,\n FETCH_PRIVATE_GROUP_FAILED,\n FETCH_PRIVATE_GROUP_REQUEST,\n SELECT_STUDENTS\n} from './actionTypes';\n\nexport const savePrivateGroup = name => {\n return { type: SAVE_PRIVATE_GROUP, name };\n};\n\nexport const detelePrivateGroup = privateGroupId => {\n return { type: DELETE_PRIVATE_GROUP, privateGroupId };\n};\n\nexport const fetchPrivateGroupsRequest = groupName => {\n return { type: FETCH_PRIVATE_GROUPS_REQUEST, groupName };\n};\n\nexport const fetchPrivateGroupsSuccess = privateGroups => {\n return { type: FETCH_PRIVATE_GROUPS_SUCCESS, privateGroups };\n};\n\nexport const fetchPrivateGroupsFailed = error => {\n return { type: FETCH_PRIVATE_GROUPS_FAILED, error };\n};\n\nexport const fetchPrivateGroupRequest = privateGroupId => {\n return { type: FETCH_PRIVATE_GROUP_REQUEST, privateGroupId };\n};\n\nexport const fetchPrivateGroupSuccess = privateGroup => {\n return { type: FETCH_PRIVATE_GROUP_SUCCESS, privateGroup };\n};\n\nexport const fetchPrivateGroupFailed = error => {\n return { type: FETCH_PRIVATE_GROUP_FAILED, error };\n};\n\nexport const selectStudents = students => {\n return { type: SELECT_STUDENTS, students };\n};\n","import { call, put, select } from 'redux-saga/effects';\nimport { isNil, pluck } from 'ramda';\nimport privateGroupService from 'services/privateGroup';\nimport {\n fetchPrivateGroupsSuccess,\n fetchPrivateGroupsFailed,\n fetchPrivateGroupSuccess,\n fetchPrivateGroupFailed\n} from 'stores/privateGroup/actions';\nimport { fetchStudentsSuccess } from 'stores/utils/lookup/actions';\n\n/**\n * The saga for add question to the Cart\n */\nexport function* savePrivateGroup({ name }) {\n const { selectedStudents } = yield select(state => state.privateGroup);\n\n const kids = pluck('UserId', selectedStudents);\n\n const params = {\n // id: !isNil(selectedPrivateGroup.ID) ? selectedPrivateGroup.ID : 0,\n name,\n kids\n };\n\n const data = yield call(privateGroupService.savePrivateGroup, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchPrivateGroupSuccess(data));\n yield put(fetchStudentsSuccess([]));\n } else {\n yield put(fetchPrivateGroupFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for fetch private group\n */\nexport function* fetchPrivateGroups({ groupName }) {\n const data = yield call(privateGroupService.getPrivateGroups, groupName);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchPrivateGroupsSuccess(data));\n } else {\n yield put(fetchPrivateGroupsFailed(data.error));\n }\n }\n}\n","export const FETCH_PROFILE_DATA_REQUEST = 'FETCH_PROFILE_DATA_REQUEST';\nexport const FETCH_PROFILE_DATA_SUCCESS = 'FETCH_PROFILE_DATA_SUCCESS';\nexport const FETCH_PROFILE_DATA_FAILED = 'FETCH_PROFILE_DATA_FAILED';\nexport const FETCH_AVATARS_REQUEST = 'FETCH_AVATARS_REQUEST';\nexport const FETCH_AVATARS_SUCCESS = 'FETCH_AVATARS_SUCCESS';\nexport const FETCH_AVATARS_FAILED = 'FETCH_AVATARS_FAILED';\nexport const UPDATE_PROFILE_REQUEST = 'UPDATE_PROFILE_REQUEST';\nexport const UPDATE_PROFILE_SUCCESS = 'UPDATE_PROFILE_SUCCESS';\nexport const UPDATE_PROFILE_FAILED = 'UPDATE_PROFILE_FAILED';\nexport const EMPTY_UPDATE_PROFILE = 'EMPTY_UPDATE_PROFILE';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch data failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n/**\n * Update profile\n */\nconst updateProfile = (params, updatePassword) => {\n return apiClient\n .put(`User/UpdateProfile?UpdatePassword=${updatePassword}`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Update profile failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch profile data\n */\nconst getProfileData = () => {\n return apiClient\n .get(`User/GetMyProfile`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch Profile Data failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Fetch avatars\n */\nconst getAvatars = () => {\n return apiClient\n .get(`User/GetAvatars`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch Avatars failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n getProfileData,\n getAvatars,\n updateProfile\n};\n","import {\n FETCH_PROFILE_DATA_REQUEST,\n FETCH_PROFILE_DATA_SUCCESS,\n FETCH_PROFILE_DATA_FAILED,\n FETCH_AVATARS_REQUEST,\n FETCH_AVATARS_SUCCESS,\n FETCH_AVATARS_FAILED,\n UPDATE_PROFILE_REQUEST,\n UPDATE_PROFILE_SUCCESS,\n UPDATE_PROFILE_FAILED,\n EMPTY_UPDATE_PROFILE\n} from './actionTypes';\n\nexport const fetchProfileDataRequest = () => {\n return {\n type: FETCH_PROFILE_DATA_REQUEST\n };\n};\n\nexport const fetchProfileDataSuccess = data => {\n return {\n type: FETCH_PROFILE_DATA_SUCCESS,\n data\n };\n};\n\nexport const fetchProfileDataFailed = error => {\n return {\n type: FETCH_PROFILE_DATA_FAILED,\n error\n };\n};\n\nexport const fetchAvatarsRequest = () => {\n return {\n type: FETCH_AVATARS_REQUEST\n };\n};\n\nexport const fetchAvatarsSuccess = data => {\n return {\n type: FETCH_AVATARS_SUCCESS,\n data\n };\n};\n\nexport const fetchAvatarsFailed = error => {\n return {\n type: FETCH_AVATARS_FAILED,\n error\n };\n};\n\nexport const updateProfileRequest = (params, updateProfile) => {\n return {\n type: UPDATE_PROFILE_REQUEST,\n params,\n updateProfile\n };\n};\n\nexport const updateProfileSuccess = data => {\n return {\n type: UPDATE_PROFILE_SUCCESS,\n data\n };\n};\n\nexport const updateProfileFailed = error => {\n return {\n type: UPDATE_PROFILE_FAILED,\n error\n };\n};\n\nexport const emptyUpdateProfile = () => {\n return {\n type: EMPTY_UPDATE_PROFILE\n };\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport profileSettingsService from 'services/profileSettings';\nimport {\n fetchProfileDataSuccess,\n fetchProfileDataFailed,\n fetchAvatarsSuccess,\n fetchAvatarsFailed,\n updateProfileSuccess,\n updateProfileFailed\n} from 'stores/profileSettings/actions';\n\n/**\n * The saga for add question to the Cart\n */\nexport function* updateProfileData({ params, updateProfile }) {\n const data = yield call(\n profileSettingsService.updateProfile,\n params,\n updateProfile\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(updateProfileSuccess(data));\n } else {\n yield put(updateProfileFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for fetch profile data\n */\nexport function* fetchProfileData() {\n const data = yield call(profileSettingsService.getProfileData);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchProfileDataSuccess(data));\n } else {\n yield put(fetchProfileDataFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for fetch avatars\n */\nexport function* fetchAvatars() {\n const data = yield call(profileSettingsService.getAvatars);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchAvatarsSuccess(data));\n } else {\n yield put(fetchAvatarsFailed(data.error));\n }\n }\n}\n","export const FETCH_MY_GROUPS_REQUEST = 'FETCH_MY_GROUPS_REQUEST';\nexport const FETCH_MY_GROUPS_SUCCESS = 'FETCH_MY_GROUPS_SUCCESS';\nexport const FETCH_MY_GROUPS_FAILED = 'FETCH_MY_GROUPS_FAILED';\nexport const DELETE_GROUP_REQUEST = 'DELETE_GROUP_REQUEST';\nexport const DELETE_GROUP_SUCCESS = 'DELETE_GROUP_SUCCESS';\nexport const DELETE_GROUP_FAILED = 'DELETE_GROUP_FAILED';\nexport const DELETE_GROUP_RESET = 'DELETE_GROUP_RESET';\nexport const CREATE_MY_GROUP_RESET = 'CREATE_MY_GROUP_RESET';\nexport const CREATE_MY_GROUP_REQUEST = 'CREATE_MY_GROUP_REQUEST';\nexport const CREATE_MY_GROUP_SUCCESS = 'CREATE_MY_GROUP_SUCCESS';\nexport const CREATE_MY_GROUP_FAILED = 'CREATE_MY_GROUP_FAILED';\nexport const UPDATE_GROUP_RESET = 'UPDATE_GROUP_RESET';\nexport const UPDATE_GROUP_REQUEST = 'UPDATE_GROUP_REQUEST';\nexport const UPDATE_GROUP_SUCCESS = 'UPDATE_GROUP_SUCCESS';\nexport const UPDATE_GROUP_FAILED = 'UPDATE_GROUP_FAILED';\nexport const GET_CLASS_BY_LEVEL_REQUEST = 'GET_CLASS_BY_LEVEL_REQUEST';\nexport const GET_CLASS_BY_LEVEL_SUCCESS = 'GET_CLASS_BY_LEVEL_SUCCESS';\nexport const GET_CLASS_BY_LEVEL_FAILED = 'GET_CLASS_BY_LEVEL_FAILED';\nexport const GET_STUDENT_BY_CLASS_RESET = 'GET_STUDENT_BY_CLASS_RESET';\nexport const GET_STUDENT_BY_CLASS_REQUEST = 'GET_STUDENT_BY_CLASS_REQUEST';\nexport const GET_STUDENT_BY_CLASS_SUCCESS = 'GET_STUDENT_BY_CLASS_SUCCESS';\nexport const GET_STUDENT_BY_CLASS_FAILED = 'GET_STUDENT_BY_CLASS_FAILED';\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Fetch data failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\n/**\n * Fetch all groups\n */\nconst fetchGroupData = () => {\n return apiClient\n .get(`ManageTeacherGroup/GetAll`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch Groups data failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Create group\n */\nconst createNewGroup = params => {\n return apiClient\n .post(`ManageTeacherGroup/AddGroup`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Create group failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Update group\n */\nconst updateGroup = params => {\n return apiClient\n .put(`ManageTeacherGroup/UpdateGroup`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Update Group failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Delete group\n */\nconst deleteGroupById = id => {\n return apiClient\n .put(`ManageTeacherGroup/DeleteGroup/${id}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Delete Groups data failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * NU Get classes\n */\nconst getClassByLevel = params => {\n return apiClient\n .get(`Lookup/Classes/${params}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Get class failed' // eslint-disable-line\n };\n });\n};\n\n/**\n * Get students\n */\nconst getStudentsByClass = params => {\n return apiClient\n .get(`lookup/SearchStudentWithDetails?classId=${params}&EnablePaging=false`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Get student failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchGroupData,\n updateGroup,\n deleteGroupById,\n createNewGroup,\n getClassByLevel,\n getStudentsByClass\n};\n","import {\n FETCH_MY_GROUPS_REQUEST,\n FETCH_MY_GROUPS_SUCCESS,\n FETCH_MY_GROUPS_FAILED,\n DELETE_GROUP_REQUEST,\n DELETE_GROUP_SUCCESS,\n DELETE_GROUP_FAILED,\n DELETE_GROUP_RESET,\n CREATE_MY_GROUP_RESET,\n CREATE_MY_GROUP_REQUEST,\n CREATE_MY_GROUP_SUCCESS,\n CREATE_MY_GROUP_FAILED,\n UPDATE_GROUP_RESET,\n UPDATE_GROUP_REQUEST,\n UPDATE_GROUP_SUCCESS,\n UPDATE_GROUP_FAILED,\n GET_CLASS_BY_LEVEL_REQUEST,\n GET_CLASS_BY_LEVEL_SUCCESS,\n GET_CLASS_BY_LEVEL_FAILED,\n GET_STUDENT_BY_CLASS_RESET,\n GET_STUDENT_BY_CLASS_REQUEST,\n GET_STUDENT_BY_CLASS_SUCCESS,\n GET_STUDENT_BY_CLASS_FAILED\n} from './actionTypes';\n\nexport const fetchMyGroupRequest = () => {\n return {\n type: FETCH_MY_GROUPS_REQUEST\n };\n};\n\nexport const fetchMyGroupSuccess = data => {\n return {\n type: FETCH_MY_GROUPS_SUCCESS,\n data\n };\n};\n\nexport const fetchMyGroupFailed = error => {\n return {\n type: FETCH_MY_GROUPS_FAILED,\n error\n };\n};\n\nexport const deleteGroupRequest = params => {\n return {\n type: DELETE_GROUP_REQUEST,\n params\n };\n};\nexport const deleteGroupSuccess = details => {\n return {\n type: DELETE_GROUP_SUCCESS,\n details\n };\n};\n\nexport const deleteGroupFailed = error => {\n return {\n type: DELETE_GROUP_FAILED,\n error\n };\n};\n\nexport const resetDeleteRequest = () => {\n return {\n type: DELETE_GROUP_RESET\n };\n};\n\nexport const createMyGroupReset = () => {\n return {\n type: CREATE_MY_GROUP_RESET\n };\n};\n\nexport const createMyGroupRequest = params => {\n return {\n type: CREATE_MY_GROUP_REQUEST,\n params\n };\n};\n\nexport const createMyGroupSuccess = data => {\n return {\n type: CREATE_MY_GROUP_SUCCESS,\n data\n };\n};\n\nexport const createMyGroupFailed = error => {\n return {\n type: CREATE_MY_GROUP_FAILED,\n error\n };\n};\n\nexport const updateGroupReset = () => {\n return {\n type: UPDATE_GROUP_RESET\n };\n};\n\nexport const updateGroupRequest = params => {\n return {\n type: UPDATE_GROUP_REQUEST,\n params\n };\n};\nexport const updateGroupSuccess = data => {\n return {\n type: UPDATE_GROUP_SUCCESS,\n data\n };\n};\n\nexport const updateGroupFailed = error => {\n return {\n type: UPDATE_GROUP_FAILED,\n error\n };\n};\n\nexport const getClassByLevelRequest = params => {\n return {\n type: GET_CLASS_BY_LEVEL_REQUEST,\n params\n };\n};\n\nexport const getClassByLevelSuccess = data => {\n return {\n type: GET_CLASS_BY_LEVEL_SUCCESS,\n data\n };\n};\n\nexport const getClassByLevelFailed = error => {\n return {\n type: GET_CLASS_BY_LEVEL_FAILED,\n error\n };\n};\n\nexport const getStudentByClassReset = () => {\n return {\n type: GET_STUDENT_BY_CLASS_RESET\n };\n};\n\nexport const getStudentByClassRequest = params => {\n return {\n type: GET_STUDENT_BY_CLASS_REQUEST,\n params\n };\n};\n\nexport const getStudentByClassSuccess = data => {\n return {\n type: GET_STUDENT_BY_CLASS_SUCCESS,\n data\n };\n};\n\nexport const getStudentByClassFailed = error => {\n return {\n type: GET_STUDENT_BY_CLASS_FAILED,\n error\n };\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport createGroupService from 'services/createGroup';\nimport {\n fetchMyGroupSuccess,\n fetchMyGroupFailed,\n updateGroupSuccess,\n updateGroupFailed,\n createMyGroupSuccess,\n createMyGroupFailed,\n deleteGroupSuccess,\n deleteGroupFailed,\n getClassByLevelSuccess,\n getClassByLevelFailed,\n getStudentByClassSuccess,\n getStudentByClassFailed\n} from 'stores/createGroup/actions';\n\n/**\n * The saga for create group\n */\nexport function* createGroupData({ params }) {\n const data = yield call(createGroupService.createNewGroup, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(createMyGroupSuccess(data));\n } else {\n yield put(createMyGroupFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for fetch group data\n */\nexport function* fetchMyGroup() {\n const data = yield call(createGroupService.fetchGroupData);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchMyGroupSuccess(data));\n } else {\n yield put(fetchMyGroupFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for get group by id\n */\nexport function* updateGroup({ params }) {\n const data = yield call(createGroupService.updateGroup, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(updateGroupSuccess(data));\n } else {\n yield put(updateGroupFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for delete group\n */\nexport function* deleteGroupById({ params }) {\n const data = yield call(createGroupService.deleteGroupById, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(deleteGroupSuccess(data));\n } else {\n yield put(deleteGroupFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for getting classes by level\n */\nexport function* getClassesByLevel() {\n const data = yield call(createGroupService.getClassByLevel);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(getClassByLevelSuccess(data));\n } else {\n yield put(getClassByLevelFailed(data.error));\n }\n }\n}\n\n/**\n * The saga for getting students by classes\n */\nexport function* getStudentsByClass({ params }) {\n const data = yield call(createGroupService.getStudentsByClass, params);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(getStudentByClassSuccess(data.List));\n } else {\n yield put(getStudentByClassFailed(data.error));\n }\n }\n}\n","export const FETCH_SYLLABUS_REQUEST = 'FETCH_SYLLABUS_REQUEST';\nexport const FETCH_SYLLABUS_SUCCESS = 'FETCH_SYLLABUS_SUCCESS';\nexport const FETCH_SYLLABUS_FAILED = 'FETCH_SYLLABUS_FAILED';\nexport const NO_SYLLABUS = 'NO_SYLLABUS';\nexport const PUSH_TO_CART_RESET = 'PUSH_TO_CART_RESET';\nexport const PUSH_TO_CART_REQUEST = 'PUSH_TO_CART_REQUEST';\nexport const PUSH_TO_CART_SUCCESS = 'PUSH_TO_CART_SUCCESS';\nexport const PUSH_TO_CART_FAILED = 'PUSH_TO_CART_FAILED';\nexport const CREATE_WORKSHEET_RESET = 'CREATE_WORKSHEET_RESET';\nexport const CREATE_WORKSHEET_REQUEST = 'CREATE_WORKSHEET_REQUEST';\nexport const CREATE_WORKSHEET_SUCCESS = 'CREATE_WORKSHEET_SUCCESS';\nexport const CREATE_WORKSHEET_FAILED = 'CREATE_WORKSHEET_FAILED';\nexport const CREATE_WORKSHEET_ERROR = 'CREATE_WORKSHEET_ERROR';\nexport const SET_CREATE_HOMEWORK_QUESTIONS = 'SET_CREATE_HOMEWORK_QUESTIONS';\nexport const REMOVE_CREATE_HOMEWORK_QUESTION =\n 'REMOVE_CREATE_HOMEWORK_QUESTION';\n","import {\n FETCH_SYLLABUS_REQUEST,\n FETCH_SYLLABUS_SUCCESS,\n FETCH_SYLLABUS_FAILED,\n NO_SYLLABUS,\n PUSH_TO_CART_RESET,\n PUSH_TO_CART_REQUEST,\n PUSH_TO_CART_SUCCESS,\n PUSH_TO_CART_FAILED,\n CREATE_WORKSHEET_RESET,\n CREATE_WORKSHEET_REQUEST,\n CREATE_WORKSHEET_SUCCESS,\n CREATE_WORKSHEET_FAILED,\n CREATE_WORKSHEET_ERROR,\n SET_CREATE_HOMEWORK_QUESTIONS,\n REMOVE_CREATE_HOMEWORK_QUESTION\n} from './actionTypes';\n\nexport const fetchSyllabusRequest = (CurriculumID, LevelID) => {\n return {\n type: FETCH_SYLLABUS_REQUEST,\n CurriculumID,\n LevelID\n };\n};\n\nexport const fetchSyllabusSuccess = syllabus => {\n return { type: FETCH_SYLLABUS_SUCCESS, syllabus };\n};\n\nexport const fetchSyllabusFailed = error => {\n return { type: FETCH_SYLLABUS_FAILED, error };\n};\n\nexport const noSyllabus = () => {\n return { type: NO_SYLLABUS };\n};\n\nexport const pushToCartReset = () => {\n return { type: PUSH_TO_CART_RESET };\n};\n\nexport const pushToCartRequest = obj => {\n return {\n type: PUSH_TO_CART_REQUEST,\n obj\n };\n};\n\nexport const pushToCartSuccess = data => {\n return { type: PUSH_TO_CART_SUCCESS, data };\n};\n\nexport const pushToCartFailed = error => {\n return { type: PUSH_TO_CART_FAILED, error };\n};\n\nexport const createWorkSheetReset = () => {\n return { type: CREATE_WORKSHEET_RESET };\n};\n\nexport const createWorkSheetRequest = obj => {\n return {\n type: CREATE_WORKSHEET_REQUEST,\n obj\n };\n};\n\nexport const createWorkSheetSuccess = data => {\n return { type: CREATE_WORKSHEET_SUCCESS, data };\n};\n\nexport const createWorkSheetFailed = error => {\n return { type: CREATE_WORKSHEET_FAILED, error };\n};\n\nexport const createWorkSheetError = error => {\n return { type: CREATE_WORKSHEET_ERROR, error };\n};\n\nexport const setCreateHomeworkQuestions = questions => {\n return {\n type: SET_CREATE_HOMEWORK_QUESTIONS,\n questions\n };\n};\n\nexport const removeCreateHomeworkQuestion = Id => {\n return { type: REMOVE_CREATE_HOMEWORK_QUESTION, Id };\n};\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst fetchSyllabus = (CurriculumID, LevelID) => {\n return apiClient\n .get(\n `Curriculum/GetSyllabusByCurriculumIDandLevelID/${CurriculumID}/${LevelID}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch syllabus failed' // eslint-disable-line\n };\n });\n};\n\nconst pushToCart = obj => {\n return apiClient\n .post(\n `Cart/AddRandomQuestionsToCart/${obj.curriculumId}/${obj.topicId}/${obj.levelId}/${obj.easy}/${obj.medium}/${obj.difficult}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Push to cart failed' // eslint-disable-line\n };\n });\n};\n\nconst createWorkSheet = obj => {\n return apiClient\n .get(\n `Cart/GetRandomQuestions/${obj.curriculumId}/${obj.topicId}/${obj.levelId}/${obj.easy}/${obj.medium}/${obj.difficult}`\n )\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Create worksheet failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchSyllabus,\n pushToCart,\n createWorkSheet\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport {\n fetchSyllabusSuccess,\n fetchSyllabusFailed,\n noSyllabus,\n pushToCartSuccess,\n pushToCartFailed,\n createWorkSheetSuccess,\n createWorkSheetFailed,\n createWorkSheetError\n} from 'stores/topical-worksheet/actions';\nimport TopicalService from 'services/topical-worksheet';\n\nexport function* fetchSyllabus({ CurriculumID, LevelID }) {\n const data = yield call(TopicalService.fetchSyllabus, CurriculumID, LevelID);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchSyllabusSuccess(data));\n } else {\n if (data.error === 'No Data Found') yield put(noSyllabus());\n }\n } else {\n yield put(fetchSyllabusFailed(data.error));\n }\n}\n\nexport function* pushToCart({ obj }) {\n const data = yield call(TopicalService.pushToCart, obj);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(pushToCartSuccess(data));\n } else {\n if (data.error) {\n yield put(createWorkSheetError(data.error));\n }\n }\n } else {\n yield put(pushToCartFailed(data.error));\n }\n}\n\nexport function* createWorkSheet({ obj }) {\n const data = yield call(TopicalService.createWorkSheet, obj);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(createWorkSheetSuccess(data));\n } else {\n if (data.error) {\n yield put(createWorkSheetError(data.error));\n }\n }\n } else {\n yield put(createWorkSheetFailed(data.error));\n }\n}\n","export const FETCH_TOPIC_SKILL_REQUEST = 'FETCH_TOPIC_SKILL_REQUEST';\nexport const FETCH_TOPIC_SKILL_SUCCESS = 'FETCH_TOPIC_SKILL_SUCCESS';\nexport const FETCH_TOPIC_SKILL_FAILED = 'FETCH_TOPIC_SKILL_FAILED';\nexport const NO_TOPIC_SKILL = 'NO_TOPIC_SKILL';\nexport const CREATE_FACTUAL_FLUENCY_RESET = 'CREATE_FACTUAL_FLUENCY_RESET';\nexport const CREATE_FACTUAL_FLUENCY_REQUEST = 'CREATE_FACTUAL_FLUENCY_REQUEST';\nexport const CREATE_FACTUAL_FLUENCY_SUCCESS = 'CREATE_FACTUAL_FLUENCY_SUCCESS';\nexport const CREATE_FACTUAL_FLUENCY_FAILED = 'CREATE_FACTUAL_FLUENCY_FAILED';\nexport const CREATE_FACTUAL_FLUENCY_ERROR = 'CREATE_FACTUAL_FLUENCY_ERROR';\nexport const SET_CREATE_FACTUAL_FLUENCY_QUESTIONS =\n 'SET_CREATE_FACTUAL_FLUENCY_QUESTIONS';\nexport const REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION =\n 'REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION';\nexport const FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST =\n 'FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST';\nexport const FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS =\n 'FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS';\nexport const FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED =\n 'FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED';\nexport const FACTUAL_FLUENCY_LEADERBOARD_RESET =\n 'FACTUAL_FLUENCY_LEADERBOARD_RESET';\n","import {\n FETCH_TOPIC_SKILL_REQUEST,\n FETCH_TOPIC_SKILL_SUCCESS,\n FETCH_TOPIC_SKILL_FAILED,\n NO_TOPIC_SKILL,\n CREATE_FACTUAL_FLUENCY_RESET,\n CREATE_FACTUAL_FLUENCY_REQUEST,\n CREATE_FACTUAL_FLUENCY_SUCCESS,\n CREATE_FACTUAL_FLUENCY_FAILED,\n CREATE_FACTUAL_FLUENCY_ERROR,\n SET_CREATE_FACTUAL_FLUENCY_QUESTIONS,\n REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED,\n FACTUAL_FLUENCY_LEADERBOARD_RESET\n} from './actionTypes';\n\nexport const fetchTopicSkillRequest = LevelID => {\n return {\n type: FETCH_TOPIC_SKILL_REQUEST,\n LevelID\n };\n};\n\nexport const fetchTopicSkillSuccess = TopicSkill => {\n return { type: FETCH_TOPIC_SKILL_SUCCESS, TopicSkill };\n};\n\nexport const fetchTopicSkillFailed = error => {\n return { type: FETCH_TOPIC_SKILL_FAILED, error };\n};\n\nexport const noTopicSkill = () => {\n return { type: NO_TOPIC_SKILL };\n};\n\nexport const createFactualFluencyReset = () => {\n return { type: CREATE_FACTUAL_FLUENCY_RESET };\n};\n\nexport const createFactualFluencyRequest = obj => {\n return {\n type: CREATE_FACTUAL_FLUENCY_REQUEST,\n obj\n };\n};\n\nexport const createFactualFluencySuccess = data => {\n return { type: CREATE_FACTUAL_FLUENCY_SUCCESS, data };\n};\n\nexport const createFactualFluencyFailed = error => {\n return { type: CREATE_FACTUAL_FLUENCY_FAILED, error };\n};\n\nexport const createFactualFluencyError = error => {\n return { type: CREATE_FACTUAL_FLUENCY_ERROR, error };\n};\n\nexport const setCreateFactualFluencyQuestions = questions => {\n return {\n type: SET_CREATE_FACTUAL_FLUENCY_QUESTIONS,\n questions\n };\n};\n\nexport const removeCreateFactualFluencyQuestion = Id => {\n return { type: REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION, Id };\n};\n\nexport const fetchFactualFluencyLeaderboardRequest = homeworkID => {\n return {\n type: FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST,\n homeworkID\n };\n};\n\nexport const fetchFactualFluencyLeaderboardSuccess = leaderboard => {\n return {\n type: FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS,\n leaderboard\n };\n};\n\nexport const fetchFactualFluencyLeaderboardFailed = error => {\n return {\n type: FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED,\n error\n };\n};\n\nexport const factualFluencyLeaderboardReset = () => {\n return { type: FACTUAL_FLUENCY_LEADERBOARD_RESET };\n};\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst fetchTopicSkill = LevelID => {\n return apiClient\n .get(`FactualFluency/Topics/${LevelID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch topics failed' // eslint-disable-line\n };\n });\n};\n\nconst createFactualFluency = obj => {\n return apiClient\n .post(`FactualFluency/Questions`, obj)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Get Questions failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchLeaderboard = homeworkID => {\n return apiClient\n .get(`FactualFluency/Leaderboard/${homeworkID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Get Leaderboard failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchTopicSkill,\n createFactualFluency,\n fetchLeaderboard\n};\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport {\n createFactualFluencyError,\n createFactualFluencyFailed,\n createFactualFluencySuccess,\n fetchFactualFluencyLeaderboardFailed,\n fetchFactualFluencyLeaderboardSuccess,\n fetchTopicSkillFailed,\n fetchTopicSkillSuccess,\n noTopicSkill\n} from 'stores/factual-fluency/actions';\nimport FactualFluencyService from 'services/factual-fluency';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\n\nexport function* fetchTopicSkill({ LevelID }) {\n const data = yield call(FactualFluencyService.fetchTopicSkill, LevelID);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n const topics = data.filter(item => !isNilOrEmpty(item.Skills));\n yield put(fetchTopicSkillSuccess(topics));\n } else {\n if (data.error === 'No Data Found') yield put(noTopicSkill());\n }\n } else {\n yield put(fetchTopicSkillFailed(data.error));\n }\n}\n\nexport function* createFactualFluency({ obj }) {\n const data = yield call(FactualFluencyService.createFactualFluency, obj);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(createFactualFluencySuccess(data));\n } else {\n if (data.error) {\n yield put(createFactualFluencyError(data.error));\n }\n }\n } else {\n yield put(createFactualFluencyFailed(data.error));\n }\n}\n\nexport function* fetchLeaderboard({ homeworkID }) {\n const data = yield call(FactualFluencyService.fetchLeaderboard, homeworkID);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchFactualFluencyLeaderboardSuccess(data));\n } else {\n if (data.error) {\n yield put(fetchFactualFluencyLeaderboardFailed(data.error));\n }\n }\n } else {\n yield put(createFactualFluencyFailed(data.error));\n }\n}\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst postUserPreferences = params => {\n return apiClient\n .post(`UserPreferences/UpdatePreferences`, params)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Update user preferences failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n postUserPreferences\n};\n","import {\n SET_USER_PREFERENCES_REQUEST,\n SET_USER_PREFERENCES_SUCCESS,\n SET_USER_PREFERENCES_FAILED\n} from './actionTypes';\n\nexport const setUserPreferencesRequest = params => {\n return {\n type: SET_USER_PREFERENCES_REQUEST,\n params\n };\n};\n\nexport const setUserPreferencesSuccess = data => {\n return {\n type: SET_USER_PREFERENCES_SUCCESS,\n data\n };\n};\n\nexport const setUserPreferencesFailed = error => {\n return {\n type: SET_USER_PREFERENCES_FAILED,\n error\n };\n};\n","export const SET_USER_PREFERENCES_REQUEST = 'SET_USER_PREFERENCES_REQUEST';\nexport const SET_USER_PREFERENCES_SUCCESS = 'SET_USER_PREFERENCES_SUCCESS';\nexport const SET_USER_PREFERENCES_FAILED = 'SET_USER_PREFERENCES_FAILED';\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport userPreferencesService from 'services/userPreferences';\nimport {\n setUserPreferencesSuccess,\n setUserPreferencesFailed\n} from 'stores/userPreferences/actions';\n\nexport default function* setUserPreferences({ params }) {\n const rawBody = {\n Id: params.Id,\n Value: params.Value\n };\n const data = yield call(userPreferencesService.postUserPreferences, rawBody);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n localStorage.setItem('current_locale', params.Value);\n yield put(setUserPreferencesSuccess(data));\n }\n } else {\n yield put(setUserPreferencesFailed(data.error));\n }\n}\n","import apiClient from 'services/api';\n\nconst handleResponseSuccess = result => {\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'API request failed' // eslint-disable-line\n };\n }\n return result.data?.Result ?? [];\n};\n\nconst fetchGameSettingClass = () => {\n return apiClient\n .get(`GameAccess/GetAllTeacherGroups`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch class failed' // eslint-disable-line\n };\n });\n};\n\nconst fetchGameSettingStudentByGroup = GroupID => {\n return apiClient\n .get(`GameAccess/GetStudentsList/${GroupID}`)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Fetch class failed' // eslint-disable-line\n };\n });\n};\n\nconst saveGameSetting = params => {\n const options = {\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n return apiClient\n .post(`GameAccess/SaveGameSettingForStudents`, params, options)\n .then(handleResponseSuccess)\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Save game setting failed' // eslint-disable-line\n };\n });\n};\n\nexport default {\n fetchGameSettingClass,\n fetchGameSettingStudentByGroup,\n saveGameSetting\n};\n","import {\n FETCH_GAME_SETTING_CLASS_REQUEST,\n FETCH_GAME_SETTING_CLASS_SUCCESS,\n FETCH_GAME_SETTING_CLASS_FAILED,\n FETCH_GAME_SETTING_STUDENT_REQUEST,\n FETCH_GAME_SETTING_STUDENT_SUCCESS,\n FETCH_GAME_SETTING_STUDENT_FAILED,\n SAVE_GAME_SETTING_REQUEST,\n SAVE_GAME_SETTING_SUCCESS,\n SAVE_GAME_SETTING_FAILED,\n RESET_ERROR\n} from './actionTypes';\n\nexport const fetchGameSettingClassRequest = () => {\n return {\n type: FETCH_GAME_SETTING_CLASS_REQUEST\n };\n};\n\nexport const fetchGameSettingClassSuccess = classes => {\n return { type: FETCH_GAME_SETTING_CLASS_SUCCESS, classes };\n};\n\nexport const fetchGameSettingClassFailed = error => {\n return {\n type: FETCH_GAME_SETTING_CLASS_FAILED,\n error\n };\n};\n\nexport const fetchGameSettingStudentRequest = GroupID => {\n return {\n type: FETCH_GAME_SETTING_STUDENT_REQUEST,\n GroupID\n };\n};\n\nexport const fetchGameSettingStudentSuccess = students => {\n return { type: FETCH_GAME_SETTING_STUDENT_SUCCESS, students };\n};\n\nexport const fetchGameSettingStudentFailed = error => {\n return {\n type: FETCH_GAME_SETTING_STUDENT_FAILED,\n error\n };\n};\n\nexport const saveGameSettingRequest = params => {\n return {\n type: SAVE_GAME_SETTING_REQUEST,\n params\n };\n};\n\nexport const saveGameSettingSuccess = () => {\n return { type: SAVE_GAME_SETTING_SUCCESS };\n};\n\nexport const saveGameSettingFailed = error => {\n return {\n type: SAVE_GAME_SETTING_FAILED,\n error\n };\n};\n\nexport const resetError = () => {\n return {\n type: RESET_ERROR\n };\n};\n","export const FETCH_GAME_SETTING_CLASS_REQUEST =\n 'FETCH_GAME_SETTING_CLASS_REQUEST';\nexport const FETCH_GAME_SETTING_CLASS_SUCCESS =\n 'FETCH_GAME_SETTING_CLASS_SUCCESS';\nexport const FETCH_GAME_SETTING_CLASS_FAILED =\n 'FETCH_GAME_SETTING_CLASS_FAILED';\nexport const FETCH_GAME_SETTING_STUDENT_REQUEST =\n 'FETCH_GAME_SETTING_STUDENT_REQUEST';\nexport const FETCH_GAME_SETTING_STUDENT_SUCCESS =\n 'FETCH_GAME_SETTING_STUDENT_SUCCESS';\nexport const FETCH_GAME_SETTING_STUDENT_FAILED =\n 'FETCH_GAME_SETTING_STUDENT_FAILED';\nexport const SAVE_GAME_SETTING_REQUEST = 'SAVE_GAME_SETTING_REQUEST';\nexport const SAVE_GAME_SETTING_SUCCESS = 'SAVE_GAME_SETTING_SUCCESS';\nexport const SAVE_GAME_SETTING_FAILED = 'SAVE_GAME_SETTING_FAILED';\nexport const RESET_ERROR = 'RESET_ERROR';\n","import { call, put } from 'redux-saga/effects';\nimport { isNil } from 'ramda';\nimport GameAccessSettingService from 'services/gameAccessSetting';\nimport {\n fetchGameSettingClassFailed,\n fetchGameSettingClassSuccess,\n fetchGameSettingStudentFailed,\n fetchGameSettingStudentSuccess,\n saveGameSettingFailed,\n saveGameSettingSuccess\n} from 'stores/gameSetting/actions';\n\nexport function* fetchGameSettingClass() {\n const data = yield call(GameAccessSettingService.fetchGameSettingClass);\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchGameSettingClassSuccess(data));\n } else if (data.error) {\n yield put(fetchGameSettingClassFailed(data.error));\n }\n } else {\n yield put(fetchGameSettingClassFailed(data.error));\n }\n}\n\nexport function* fetchGameSettingStudentByGroup({ GroupID }) {\n const data = yield call(\n GameAccessSettingService.fetchGameSettingStudentByGroup,\n GroupID\n );\n if (!isNil(data)) {\n if (isNil(data.error)) {\n yield put(fetchGameSettingStudentSuccess(data));\n } else if (data.error) {\n yield put(fetchGameSettingStudentFailed(data.error));\n }\n } else {\n yield put(fetchGameSettingStudentFailed(data.error));\n }\n}\n\nexport function* saveGameSetting({ params }) {\n const result = yield call(GameAccessSettingService.saveGameSetting, params);\n if (!isNil(result)) {\n if (isNil(result.error)) {\n yield put(saveGameSettingSuccess());\n } else {\n yield put(saveGameSettingFailed(result.error));\n }\n } else {\n yield put(saveGameSettingFailed(result.error));\n }\n}\n","import { takeLatest, all } from 'redux-saga/effects';\nimport login, {\n logout,\n refreshToken,\n fetchGlobalFeatureConfig\n} from 'sagas/login';\nimport startup from 'sagas/startup';\nimport APP_STARTUP from 'stores/startup/actionTypes';\nimport {\n LOGIN_REQUEST,\n LOGIN_RESET,\n LOGIN_SUCCESS,\n REFRESH_TOKEN_REQUEST,\n GET_GLOBAL_FEATURES_REQUEST\n} from 'stores/login/actionTypes';\nimport {\n SELECTED_LEVEL,\n FETCH_VIDEOS_REQUEST\n} from 'stores/levels/actionTypes';\nimport { SELECTED_TOPIC } from 'stores/topics/actionTypes';\nimport { SELECTED_SKILL } from 'stores/skills/actionTypes';\nimport {\n ADD_QUESTION_TO_CART,\n SELECTING_QUESTION,\n DELETE_QUESTION_FROM_CART,\n SEARCHING_QUESTIONS,\n ADD_QUESTIONS_TO_CART,\n RESET_CART_QUESTIONS\n} from 'stores/questions/actionTypes';\nimport { refreshSkills } from 'sagas/skills';\nimport { callSelectedSkill, callGetVariations } from 'sagas/variations';\nimport { FETCH_SINGLE_VARIATION } from 'stores/variations/actionTypes';\nimport levels, { setDefaultLevel, getVideos } from 'sagas/levels';\nimport syllabus from 'sagas/syllabus';\nimport getQuestionDetail, {\n addQuestionToCart,\n fetchCartQuestions,\n removeQuestionFromCart,\n fetchSearchQuestions,\n addQuestionsToCart,\n resetCart\n} from 'sagas/questions';\nimport {\n ASSIGN_WORKSHEET,\n SAVE_WORKSHEET,\n FETCH_WORKSHEETS_REQUEST,\n SELECTING_WORKSHEET,\n DELETE_WORKSHEET,\n SCHEDULE_WORKSHEET,\n GET_WORKSHEET_REQUEST\n} from 'stores/worksheet/actionTypes';\nimport getWorksheetDetail, {\n assignWorksheet,\n saveWorksheet,\n fetchWorksheets,\n deleteWorksheet,\n scheduledWorksheet,\n getWorksheet\n} from 'sagas/worksheet';\n\nimport {\n FETCH_CLASS_REQUEST,\n FETCH_STUDENTS_REQUEST,\n FETCH_STUDENTS_SEARCH_REQUEST,\n FETCH_MY_GROUP_REQUEST\n} from 'stores/utils/lookup/actionTypes';\nimport {\n fetchClassByLevel,\n fetchStudentsByClass,\n fetchStudentsByKeyword,\n fetchMyGroups\n} from 'sagas/lookup';\nimport {\n FETCH_ASSIGNMENTS_REQUEST,\n FETCH_TEACHERS_REQUEST,\n FETCH_TEACHER_ASSIGNMENTS_REQUEST,\n FETCH_MULTI_CLASS_REPORT_REQUEST,\n FETCH_SINGLE_CLASS_REPORT_REQUEST,\n DELETE_ASSIGNED_HW_REQUEST,\n MARK_ANSWER_RIGHT_REQUEST,\n FETCH_CSV_CLASS_REPORT_REQUEST,\n CHANGE_TITLE_DATE_REQUEST\n} from 'stores/assignments/actionTypes';\nimport {\n fetchAssignments,\n fetchTeacherAssignments,\n fetchTeachers,\n fetchMultiClassReport,\n fetchSingleClassReport,\n deleteAssignedHw,\n markAnswerRight,\n fetchCSVClassReport,\n changeTitleDate\n} from 'sagas/assignments';\nimport {\n FETCH_STUDENTS_DATA_REQUEST,\n FETCH_STUDENT_DETAILS_REQUEST,\n FETCH_CLASSES_REQUEST,\n SEARCH_STUDENT_REQUEST,\n CHANGE_CLASS_REQUEST,\n EDIT_CLASS_REQUEST,\n RESET_PW_REQUEST,\n FETCH_ICONS_REQUEST\n} from 'stores/manage-class/actionTypes';\nimport {\n fetchStudents,\n fetchStudentDetails,\n fetchClasses,\n searchStudents,\n changeClass,\n editClass,\n resetPassword,\n fetchIcons\n} from 'sagas/manage-class';\nimport {\n FETCH_CLASS_PROFICIENCY_REPORT_REQUEST,\n FETCH_CLASS_HIGHSCORE_REPORT_REQUEST,\n FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST,\n FETCH_SAMPLE_QN_REQUEST,\n FETCH_LOGIN_REPORT_REQUEST,\n FETCH_WEEK_ITEMS_REQUEST,\n FETCH_TEACHER_REPORT_MONTH_REQUEST,\n FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST,\n FETCH_REPORT_SYLLABUS_REQUEST,\n FETCH_REPORT_PROFICIENCY_SKILL_REQUEST,\n FETCH_REPORT_HIGHSCORE_SKILL_REQUEST,\n FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST,\n FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST\n} from 'stores/report/actionTypes';\nimport {\n fetchClassProficiencyReport,\n fetchClassHighScoreReport,\n fetchStudentProficiencyReport,\n fetchSampleQn,\n fetchLoginReport,\n fetchWeekItems,\n fetchTeacherMonthReport,\n fetchTeacherSpecificMonthReport,\n fetchReportSyllabus,\n fetchProficiencySkillReport,\n fetchHighScoreSkillReport,\n fetchSkillProficiencyDetailReport,\n fetchSkillHighScoreDetailReport\n} from 'sagas/reports';\nimport {\n SAVE_PRIVATE_GROUP,\n FETCH_PRIVATE_GROUPS_REQUEST\n} from 'stores/privateGroup/actionTypes';\nimport { savePrivateGroup, fetchPrivateGroups } from 'sagas/privateGroup';\nimport { SELECTED_CURRICULUM } from 'stores/curriculums/actionTypes';\nimport {\n FETCH_PROFILE_DATA_REQUEST,\n FETCH_AVATARS_REQUEST,\n UPDATE_PROFILE_REQUEST\n} from 'stores/profileSettings/actionTypes';\nimport {\n fetchProfileData,\n fetchAvatars,\n updateProfileData\n} from 'sagas/profileSettings';\nimport {\n FETCH_MY_GROUPS_REQUEST,\n UPDATE_GROUP_REQUEST,\n DELETE_GROUP_REQUEST,\n CREATE_MY_GROUP_REQUEST,\n GET_CLASS_BY_LEVEL_REQUEST,\n GET_STUDENT_BY_CLASS_REQUEST\n} from 'stores/createGroup/actionTypes';\nimport {\n fetchMyGroup,\n updateGroup,\n deleteGroupById,\n createGroupData,\n getClassesByLevel,\n getStudentsByClass\n} from 'sagas/createGroup';\nimport {\n FETCH_SYLLABUS_REQUEST,\n PUSH_TO_CART_REQUEST,\n PUSH_TO_CART_SUCCESS,\n CREATE_WORKSHEET_REQUEST\n} from 'stores/topical-worksheet/actionTypes';\nimport {\n fetchSyllabus,\n pushToCart,\n createWorkSheet\n} from 'sagas/topical-worksheet';\nimport {\n CREATE_FACTUAL_FLUENCY_REQUEST,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST,\n FETCH_TOPIC_SKILL_REQUEST\n} from 'stores/factual-fluency/actionTypes';\nimport { SET_USER_PREFERENCES_REQUEST } from 'stores/userPreferences/actionTypes';\nimport {\n FETCH_GAME_SETTING_CLASS_REQUEST,\n FETCH_GAME_SETTING_STUDENT_REQUEST,\n SAVE_GAME_SETTING_REQUEST\n} from 'stores/gameSetting/actionTypes';\nimport {\n createFactualFluency,\n fetchLeaderboard,\n fetchTopicSkill\n} from './factual-fluency';\nimport setUserPreferences from './userPreferences';\nimport {\n fetchGameSettingClass,\n fetchGameSettingStudentByGroup,\n saveGameSetting\n} from './gameAccessSetting';\n\nexport default function* root() {\n yield all([\n /**\n * @see https://redux-saga.js.org/docs/basics/UsingSagaHelpers.html\n */\n // Run the startup saga when the application starts\n takeLatest(ADD_QUESTION_TO_CART, addQuestionToCart),\n takeLatest(APP_STARTUP, startup),\n takeLatest(REFRESH_TOKEN_REQUEST, refreshToken),\n takeLatest(DELETE_QUESTION_FROM_CART, removeQuestionFromCart),\n takeLatest(SELECTED_SKILL, callSelectedSkill),\n takeLatest(FETCH_SINGLE_VARIATION, callGetVariations),\n // takeLatest(FETCH_SKILLS_SUCCESS, refreshVariations),\n takeLatest(LOGIN_REQUEST, login),\n takeLatest(LOGIN_RESET, logout),\n takeLatest(LOGIN_SUCCESS, fetchCartQuestions),\n takeLatest(LOGIN_SUCCESS, levels),\n // takeLatest(LOGIN_SUCCESS, fetchWorksheets),\n takeLatest(SELECTED_LEVEL, setDefaultLevel),\n takeLatest(FETCH_VIDEOS_REQUEST, getVideos),\n takeLatest(SELECTED_LEVEL, syllabus),\n takeLatest(SELECTED_TOPIC, refreshSkills),\n takeLatest(SELECTING_QUESTION, getQuestionDetail),\n takeLatest(SAVE_WORKSHEET, saveWorksheet),\n takeLatest(ASSIGN_WORKSHEET, assignWorksheet),\n takeLatest(FETCH_WORKSHEETS_REQUEST, fetchWorksheets),\n takeLatest(FETCH_CLASS_REQUEST, fetchClassByLevel),\n takeLatest(FETCH_STUDENTS_REQUEST, fetchStudentsByClass),\n takeLatest(FETCH_STUDENTS_SEARCH_REQUEST, fetchStudentsByKeyword),\n takeLatest(SAVE_PRIVATE_GROUP, savePrivateGroup),\n takeLatest(FETCH_PRIVATE_GROUPS_REQUEST, fetchPrivateGroups),\n takeLatest(SELECTED_CURRICULUM, syllabus),\n takeLatest(SEARCHING_QUESTIONS, fetchSearchQuestions),\n takeLatest(ADD_QUESTIONS_TO_CART, addQuestionsToCart),\n takeLatest(RESET_CART_QUESTIONS, resetCart),\n takeLatest(GET_WORKSHEET_REQUEST, getWorksheet),\n takeLatest(SELECTING_WORKSHEET, getWorksheetDetail),\n takeLatest(DELETE_WORKSHEET, deleteWorksheet),\n takeLatest(SCHEDULE_WORKSHEET, scheduledWorksheet),\n takeLatest(FETCH_ASSIGNMENTS_REQUEST, fetchAssignments),\n takeLatest(FETCH_TEACHER_ASSIGNMENTS_REQUEST, fetchTeacherAssignments),\n takeLatest(FETCH_TEACHERS_REQUEST, fetchTeachers),\n takeLatest(FETCH_MULTI_CLASS_REPORT_REQUEST, fetchMultiClassReport),\n takeLatest(FETCH_SINGLE_CLASS_REPORT_REQUEST, fetchSingleClassReport),\n takeLatest(DELETE_ASSIGNED_HW_REQUEST, deleteAssignedHw),\n takeLatest(MARK_ANSWER_RIGHT_REQUEST, markAnswerRight),\n takeLatest(FETCH_STUDENTS_DATA_REQUEST, fetchStudents),\n takeLatest(FETCH_STUDENT_DETAILS_REQUEST, fetchStudentDetails),\n takeLatest(FETCH_CLASSES_REQUEST, fetchClasses),\n takeLatest(SEARCH_STUDENT_REQUEST, searchStudents),\n takeLatest(CHANGE_CLASS_REQUEST, changeClass),\n takeLatest(EDIT_CLASS_REQUEST, editClass),\n takeLatest(RESET_PW_REQUEST, resetPassword),\n takeLatest(FETCH_ICONS_REQUEST, fetchIcons),\n takeLatest(\n FETCH_CLASS_PROFICIENCY_REPORT_REQUEST,\n fetchClassProficiencyReport\n ),\n takeLatest(FETCH_CLASS_HIGHSCORE_REPORT_REQUEST, fetchClassHighScoreReport),\n takeLatest(\n FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST,\n fetchStudentProficiencyReport\n ),\n takeLatest(\n FETCH_REPORT_PROFICIENCY_SKILL_REQUEST,\n fetchProficiencySkillReport\n ),\n takeLatest(FETCH_REPORT_HIGHSCORE_SKILL_REQUEST, fetchHighScoreSkillReport),\n takeLatest(FETCH_REPORT_SYLLABUS_REQUEST, fetchReportSyllabus),\n takeLatest(FETCH_SAMPLE_QN_REQUEST, fetchSampleQn),\n takeLatest(FETCH_LOGIN_REPORT_REQUEST, fetchLoginReport),\n takeLatest(FETCH_WEEK_ITEMS_REQUEST, fetchWeekItems),\n takeLatest(FETCH_TEACHER_REPORT_MONTH_REQUEST, fetchTeacherMonthReport),\n takeLatest(\n FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST,\n fetchTeacherSpecificMonthReport\n ),\n takeLatest(\n FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST,\n fetchSkillProficiencyDetailReport\n ),\n takeLatest(\n FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST,\n fetchSkillHighScoreDetailReport\n ),\n takeLatest(FETCH_PROFILE_DATA_REQUEST, fetchProfileData),\n takeLatest(FETCH_AVATARS_REQUEST, fetchAvatars),\n takeLatest(UPDATE_PROFILE_REQUEST, updateProfileData),\n takeLatest(FETCH_SAMPLE_QN_REQUEST, fetchSampleQn),\n takeLatest(FETCH_MY_GROUPS_REQUEST, fetchMyGroup),\n takeLatest(UPDATE_GROUP_REQUEST, updateGroup),\n takeLatest(DELETE_GROUP_REQUEST, deleteGroupById),\n takeLatest(CREATE_MY_GROUP_REQUEST, createGroupData),\n takeLatest(GET_CLASS_BY_LEVEL_REQUEST, getClassesByLevel),\n takeLatest(GET_STUDENT_BY_CLASS_REQUEST, getStudentsByClass),\n takeLatest(FETCH_SYLLABUS_REQUEST, fetchSyllabus),\n takeLatest(PUSH_TO_CART_REQUEST, pushToCart),\n takeLatest(PUSH_TO_CART_SUCCESS, fetchCartQuestions),\n takeLatest(CREATE_WORKSHEET_REQUEST, createWorkSheet),\n takeLatest(FETCH_MY_GROUP_REQUEST, fetchMyGroups),\n takeLatest(FETCH_CSV_CLASS_REPORT_REQUEST, fetchCSVClassReport),\n takeLatest(CHANGE_TITLE_DATE_REQUEST, changeTitleDate),\n // factual-fluency\n takeLatest(FETCH_TOPIC_SKILL_REQUEST, fetchTopicSkill),\n takeLatest(CREATE_FACTUAL_FLUENCY_REQUEST, createFactualFluency),\n takeLatest(FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST, fetchLeaderboard),\n takeLatest(SET_USER_PREFERENCES_REQUEST, setUserPreferences),\n // game-setting\n takeLatest(FETCH_GAME_SETTING_CLASS_REQUEST, fetchGameSettingClass),\n takeLatest(\n FETCH_GAME_SETTING_STUDENT_REQUEST,\n fetchGameSettingStudentByGroup\n ),\n takeLatest(SAVE_GAME_SETTING_REQUEST, saveGameSetting),\n takeLatest(GET_GLOBAL_FEATURES_REQUEST, fetchGlobalFeatureConfig)\n ]);\n}\n","import { applyMiddleware, createStore } from 'redux';\nimport createSagaMiddleware from 'redux-saga';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { persistReducer, persistStore } from 'redux-persist';\n\n/**\n * This import defaults to localStorage for web and AsyncStorage for react-native.\n *\n * Keep in mind this storage *is not secure*. Do not use it to store sensitive information\n * (like API tokens, private and sensitive data, etc.).\n *\n * If you need to store sensitive information, use redux-persist-sensitive-storage.\n * @see https://github.com/CodingZeal/redux-persist-sensitive-storage\n */\nimport storageSession from 'redux-persist/lib/storage/session';\n\nconst persistConfig = {\n key: 'root',\n storage: storageSession,\n /**\n * Blacklist state that we do not need/want to persist\n */\n blacklist: [\n // 'auth',\n 'filters'\n ]\n};\n\nexport default (rootReducer, rootSaga) => {\n // Connect the sagas to the redux store\n const sagaMiddleware = createSagaMiddleware();\n\n // Redux persist\n const persistedReducer = persistReducer(persistConfig, rootReducer);\n\n const store = createStore(\n persistedReducer,\n composeWithDevTools(applyMiddleware(sagaMiddleware))\n );\n const persistor = persistStore(store);\n\n // Kick off the root saga\n sagaMiddleware.run(rootSaga);\n\n return { store, persistor };\n};\n","import { isEmpty } from 'ramda';\nimport { compareValues } from 'helpers/singleClassReport';\nimport {\n FETCH_USER_CURRICULUMS_REQUEST,\n FETCH_USER_CURRICULUMS_SUCCESS,\n FETCH_USER_CURRICULUMS_FAILED,\n SELECTED_CURRICULUM\n} from './actionTypes';\n\nconst initialState = {\n curriculums: [],\n selectedCurriculum: {},\n isLoading: false,\n error: ''\n};\n\n// Helper to set default curriculum\nconst sortCurriculums = curriculumsArray => {\n const sortedCurriculums = curriculumsArray.sort(\n compareValues('CurriculumName', 'asc')\n );\n const defaultCurriculumIndex = sortedCurriculums.findIndex(\n curr => curr.IsDefault === true\n );\n if (defaultCurriculumIndex !== -1) {\n const tempCurriculum = sortedCurriculums[defaultCurriculumIndex];\n // Move default curriculum to start of array\n sortedCurriculums[defaultCurriculumIndex] = sortedCurriculums[0];\n sortedCurriculums[0] = tempCurriculum;\n }\n return sortedCurriculums;\n};\n\nconst setDefaultCurriculum = curriculumsArray => {\n const sortedCurriculums = curriculumsArray.sort(\n compareValues('CurriculumName', 'asc')\n );\n const defaultCurriculumIndex = sortedCurriculums.findIndex(\n curr => curr.IsDefault === true\n );\n if (defaultCurriculumIndex !== -1) {\n return sortedCurriculums[defaultCurriculumIndex];\n }\n return sortedCurriculums[0];\n};\n\nexport default function curriculums(state = initialState, action) {\n switch (action.type) {\n case FETCH_USER_CURRICULUMS_REQUEST:\n return { ...state, isLoading: true };\n case FETCH_USER_CURRICULUMS_SUCCESS:\n return {\n ...state,\n curriculums: sortCurriculums(action.curriculums),\n selectedCurriculum: isEmpty(state.selectedCurriculum)\n ? setDefaultCurriculum(action.curriculums)\n : state.selectedCurriculum\n };\n case FETCH_USER_CURRICULUMS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case SELECTED_CURRICULUM:\n return { ...state, selectedCurriculum: action.selectedCurriculum };\n default:\n return state;\n }\n}\n","export const SET_FILTERS = 'SET_FILTERS';\nexport const RESET_FILTERS = 'RESET_FILTERS';\n","import { SET_FILTERS, RESET_FILTERS } from './actionTypes';\n\nconst initialState = {\n filters: [\n {\n title: 'Assessment Objectives',\n isActive: false,\n options: {\n A01: false,\n A02: false,\n A03: false\n }\n },\n {\n title: 'Question Pools',\n isActive: false,\n options: {\n 'Problem Sums': false,\n 'Mechanical Sums': false,\n 'High-Ability': false\n }\n },\n {\n title: 'Question Type',\n isActive: false,\n options: {\n MCQ: false,\n 'Short Answer': false\n }\n }\n ],\n isLoading: false,\n error: ''\n};\n\nexport default function filters(state = initialState, action) {\n switch (action.type) {\n case SET_FILTERS:\n return { ...state, filters: action.filters };\n case RESET_FILTERS:\n return {\n ...initialState\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_LEVELS_REQUEST,\n FETCH_LEVELS_SUCCESS,\n FETCH_LEVELS_FAILED,\n FETCH_VIDEOS_REQUEST,\n FETCH_VIDEOS_SUCCESS,\n FETCH_VIDEOS_FAILED,\n SELECTED_LEVEL\n} from './actionTypes';\n\nconst initialState = {\n levels: [],\n selectedLevel: {},\n videos: [],\n isLoading: false,\n error: ''\n};\n\nexport default function levels(state = initialState, action) {\n switch (action.type) {\n case FETCH_LEVELS_REQUEST:\n return { ...state, isLoading: true };\n case FETCH_LEVELS_SUCCESS:\n return {\n ...initialState,\n levels: action.levels,\n selectedLevel: state.selectedLevel\n };\n case FETCH_LEVELS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case FETCH_VIDEOS_REQUEST:\n return { ...state, videos: [], isLoading: true };\n case FETCH_VIDEOS_SUCCESS:\n return {\n ...state,\n videos: action.data,\n isLoading: false\n };\n case FETCH_VIDEOS_FAILED:\n return { ...state, isLoading: false, error: action.error, videos: [] };\n case SELECTED_LEVEL:\n return { ...state, selectedLevel: action.selectedLevel };\n default:\n return state;\n }\n}\n","import { isEmpty, isNil } from 'ramda';\nimport {\n LOGIN_REQUEST,\n LOGIN_SUCCESS,\n LOGIN_FAILED,\n LOGIN_RESET,\n SET_SHOW_TRIAL_POPUP,\n SET_USER_DATA,\n GET_GLOBAL_FEATURES_REQUEST,\n GET_GLOBAL_FEATURES_SUCCESS\n} from './actionTypes';\n\nconst initialState = {\n user: {},\n isLoading: false,\n isAdmin: false,\n isSchoolAdmin: false,\n isTrial: false,\n isTrialExpired: false,\n showTrialPopup: true,\n error: '',\n redirectString: '',\n language: null,\n localePreferences: null,\n // Takes precedence over product level feature config from backend\n globalFeatureConfig: {}\n};\n\n// Helper\nconst findTrialRoleID = roles => {\n const TrialRoleIndex = roles.findIndex(role => role.ID === 94);\n if (TrialRoleIndex !== -1) {\n return true;\n }\n return false;\n};\n\nconst checkIfSchoolAdmin = roleID => {\n switch (roleID) {\n // Admin\n case 4:\n return true;\n // PS_Admin\n case 3:\n return true;\n // SuperAdmin\n case 5:\n return true;\n // SupportAdmin\n case 41:\n return true;\n case 96:\n return true;\n default:\n return false;\n }\n};\n\nconst findSchoolAdminRoleID = roles => {\n const schoolAdminRoleIndex = roles.findIndex(role =>\n checkIfSchoolAdmin(role.ID)\n );\n if (schoolAdminRoleIndex !== -1) {\n return true;\n }\n return false;\n};\n\nconst findTeacherRoleID = roles => {\n const schoolAdminRoleIndex = roles.findIndex(role => role.ID === 2);\n if (schoolAdminRoleIndex !== -1) {\n return true;\n }\n return false;\n};\n\nexport default function login(state = initialState, action) {\n switch (action.type) {\n case LOGIN_REQUEST:\n return { ...state, error: '', isLoading: true };\n case LOGIN_SUCCESS:\n // eslint-disable-next-line no-case-declarations\n const parsePreferences = !isNil(action.userPreferences)\n ? JSON.parse(action.userPreferences)\n : [];\n // eslint-disable-next-line no-case-declarations\n const getLocalePref = !isEmpty(parsePreferences)\n ? parsePreferences.find(\n item => item.Name.toLowerCase().trim() === 'currentlocale'\n )\n : null;\n return {\n ...state,\n isLoading: false,\n user: action.user,\n isAdmin: action.isAdmin,\n isTrial: findTrialRoleID(action.user.Role),\n isSchoolAdmin: findSchoolAdminRoleID(action.user.Role),\n isTeacher: findTeacherRoleID(action.user.Role),\n isTrialExpired: action.isTrialExpired,\n redirectString: action.mySecret,\n language: !isNil(action.myLocale) ? JSON.parse(action.myLocale) : [],\n localePreferences: getLocalePref\n };\n case SET_USER_DATA:\n return { ...state, user: action.user };\n case LOGIN_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case LOGIN_RESET:\n return initialState;\n case SET_SHOW_TRIAL_POPUP:\n return {\n ...state,\n showTrialPopup: action.show\n };\n case GET_GLOBAL_FEATURES_REQUEST:\n return {\n ...state\n };\n case GET_GLOBAL_FEATURES_SUCCESS:\n return {\n ...state,\n globalFeatureConfig: action.data\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_CART_QUESTIONS_FAILED,\n FETCH_CART_QUESTIONS_REQUEST,\n FETCH_CART_QUESTIONS_SUCCESS,\n FETCH_QUESTIONS_FAILED,\n FETCH_QUESTIONS_REQUEST,\n FETCH_QUESTIONS_SUCCESS,\n RESET_SELECTED_QUESTION,\n SELECTED_QUESTION,\n SELECTING_QUESTION,\n SELECTING_QUESTIONS,\n RESET_SELECTED_QUESTIONS,\n SEARCHING_QUESTIONS,\n SEARCH_QUESTIONS_SUCCESS,\n SEARCH_QUESTIONS_FAILED,\n RESET_SEARCH_QUESTIONS,\n ADD_QUESTIONS_TO_CART,\n RESET_CART_QUESTIONS\n} from './actionTypes';\n\nconst initialState = {\n cartQuestions: [],\n error: '',\n isLoading: false,\n questions: [],\n selectedQuestion: {},\n selectedQuestions: [],\n searchedQuestions: []\n};\n\nexport default function questions(state = initialState, action) {\n switch (action.type) {\n case FETCH_CART_QUESTIONS_REQUEST:\n case FETCH_QUESTIONS_REQUEST:\n case SELECTING_QUESTION:\n case SEARCHING_QUESTIONS:\n case ADD_QUESTIONS_TO_CART:\n case RESET_CART_QUESTIONS:\n return {\n ...state,\n isLoading: true\n };\n\n case FETCH_CART_QUESTIONS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: '',\n cartQuestions: action.cartQuestions\n };\n case FETCH_QUESTIONS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: '',\n questions: action.questions\n };\n case SELECTED_QUESTION:\n return {\n ...state,\n isLoading: false,\n error: '',\n selectedQuestion: {\n ...state.selectedQuestion,\n [action.selectedQuestion.VariationId]: action.selectedQuestion\n }\n };\n case RESET_SELECTED_QUESTION:\n return {\n ...state,\n error: '',\n selectedQuestion: {}\n };\n case FETCH_CART_QUESTIONS_FAILED:\n case FETCH_QUESTIONS_FAILED:\n case SEARCH_QUESTIONS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case SELECTING_QUESTIONS:\n return {\n ...state,\n isLoading: false,\n selectedQuestions: action.selectedQuestions\n };\n case RESET_SELECTED_QUESTIONS:\n return {\n ...state,\n isLoading: false,\n error: '',\n selectedQuestions: []\n };\n case SEARCH_QUESTIONS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: '',\n searchedQuestions: action.questionsResult\n };\n case RESET_SEARCH_QUESTIONS:\n return {\n ...state,\n isLoading: false,\n error: '',\n searchedQuestions: []\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_SKILLS_REQUEST,\n FETCH_SKILLS_SUCCESS,\n FETCH_SKILLS_FAILED,\n SELECTED_SKILL,\n RESET_SELECTED_SKILL\n} from './actionTypes';\n\nconst initialState = {\n skills: [],\n selectedSkill: {},\n isLoading: false,\n error: ''\n};\n\nexport default function skills(state = initialState, action) {\n switch (action.type) {\n case FETCH_SKILLS_REQUEST:\n return { ...state, isLoading: true };\n case FETCH_SKILLS_SUCCESS:\n return {\n ...initialState,\n skills: action.skills,\n selectedSkill: state.selectedSkill\n };\n case FETCH_SKILLS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case SELECTED_SKILL:\n return { ...state, selectedSkill: action.selectedSkill };\n case RESET_SELECTED_SKILL:\n return { ...state, selectedSkill: {} };\n default:\n return state;\n }\n}\n","import {\n FETCH_SYLLABUS_REQUEST,\n FETCH_SYLLABUS_SUCCESS,\n FETCH_SYLLABUS_FAILED\n} from './actionTypes';\n\nconst initialState = {\n syllabus: {},\n isLoading: false,\n error: ''\n};\n\nexport default function syllabus(state = initialState, action) {\n switch (action.type) {\n case FETCH_SYLLABUS_REQUEST:\n return { ...state, isLoading: true };\n case FETCH_SYLLABUS_SUCCESS:\n return {\n ...initialState,\n syllabus: action.syllabus\n };\n case FETCH_SYLLABUS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n default:\n return state;\n }\n}\n","import {\n FETCH_TOPICS_REQUEST,\n FETCH_TOPICS_SUCCESS,\n FETCH_TOPICS_FAILED,\n SELECTED_TOPIC,\n RESET_SELECTED_TOPIC,\n UNSELECT_TOPIC\n} from './actionTypes';\n\nconst initialState = {\n topics: [],\n selectedTopic: {},\n showSideBar: false,\n isLoading: false,\n error: ''\n};\n\nexport default function topics(state = initialState, action) {\n switch (action.type) {\n case FETCH_TOPICS_REQUEST:\n return { ...state, isLoading: true };\n case FETCH_TOPICS_SUCCESS:\n return {\n ...initialState,\n topics: action.topics,\n selectedTopic: state.selectedTopic\n };\n case FETCH_TOPICS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case SELECTED_TOPIC:\n return {\n ...state,\n selectedTopic: action.selectedTopic,\n showSideBar: true\n };\n case RESET_SELECTED_TOPIC:\n return { ...state, selectedTopic: {}, showSideBar: false };\n case UNSELECT_TOPIC:\n return { ...state, selectedTopic: {}, showSideBar: true };\n default:\n return state;\n }\n}\n","import {\n FETCH_VARIATIONS_FAILED,\n FETCH_VARIATIONS_REQUEST,\n FETCH_VARIATIONS_SUCCESS,\n FETCH_VARIATIONS_COMPLETE,\n RESET_SELECTED_VARIATION,\n SELECTED_VARIATION\n} from './actionTypes';\n\nconst initialState = {\n variations: [],\n selectedVariation: {},\n isLoading: false,\n isTitleLoading: true,\n error: ''\n};\n\nexport default function variations(state = initialState, action) {\n switch (action.type) {\n case FETCH_VARIATIONS_REQUEST:\n return { ...state, isLoading: true, variations: [] };\n case FETCH_VARIATIONS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n variations: [...state.variations, ...action.variations],\n selectedVariation: state.selectedVariation\n };\n case FETCH_VARIATIONS_FAILED:\n return { ...state, isLoading: false, error: action.error };\n case FETCH_VARIATIONS_COMPLETE:\n return { ...state, isTitleLoading: action.value };\n case SELECTED_VARIATION:\n return { ...state, selectedVariation: action.selectedVariation };\n case RESET_SELECTED_VARIATION:\n return { ...state, selectedVariation: {} };\n default:\n return state;\n }\n}\n","export const SET_STEP = 'SET_STEP';\nexport const START_STEP = 'START_STEP';\nexport const PREV_STEP = 'PREV_STEP';\nexport const NEXT_STEP = 'NEXT_STEP';\nexport const FINISH_STEP = 'FINISH_STEP';\n","import {\n SET_STEP,\n START_STEP,\n PREV_STEP,\n NEXT_STEP,\n FINISH_STEP\n} from './actionTypes';\n\nconst initialState = {\n activeStep: 1,\n startStep: 1,\n lastStep: 1\n};\n\nexport default function step(state = initialState, action) {\n const prevStep = state.activeStep - 1;\n const nextStep = state.activeStep + 1;\n switch (action.type) {\n case SET_STEP:\n return { ...state, activeStep: action.step };\n case START_STEP:\n return { ...state, activeStep: state.startStep };\n case PREV_STEP:\n return {\n ...state,\n activeStep: prevStep !== 0 ? prevStep : state.startStep\n };\n case NEXT_STEP:\n return { ...state, activeStep: nextStep };\n case FINISH_STEP:\n return { ...state, activeStep: state.lastStep };\n default:\n return state;\n }\n}\n","import { sort } from 'ramda';\nimport {\n SET_SELECTED_QUESTIONS,\n SET_EDIT_SAVED_WORKSHEET_QUESTIONS,\n REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION,\n REMOVE_SELECTED_QUESTION,\n SET_WORKSHEET_TITLE,\n SET_INSTRUCTION,\n SET_ASSIGMENT_TYPE,\n SET_PRESENTATION_TYPE,\n FETCH_WORKSHEETS_SUCCESS,\n FETCH_WORKSHEETS_FAILED,\n FETCH_WORKSHEETS_REQUEST,\n SELECTING_WORKSHEET,\n SELECTED_WORKSHEET,\n SELECTED_WORKSHEET_FAILED,\n RESET_SELECTED_WORKSHEET,\n SAVE_WORKSHEET,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_ASSIGNMENT,\n RESET_WORKSHEET,\n FETCH_ALL_WORKSHEETS_SUCCESS,\n FETCH_ALL_WORKSHEETS_FAILED,\n FETCH_ALL_WORKSHEETS_REQUEST,\n DELETE_WORKSHEET,\n DELETE_WORKSHEET_SUCCESS,\n DELETE_WORKSHEET_FAILED,\n DELETE_WORKSHEET_RESET,\n ASSIGN_WORKSHEET,\n SCHEDULE_WORKSHEET,\n SET_SETTING_TIME_TYPE,\n SET_SETTING_TIME_LIMIT,\n GET_WORKSHEET_REQUEST,\n RESET_WORKSHEET_SEARCH_PAGE\n} from './actionTypes';\n\nconst initialState = {\n selectedQuestions: [],\n editSavedWorksheetQuestions: [],\n error: null,\n isLoading: false,\n allWorksheets: [],\n worksheets: [],\n selectedWorksheet: {},\n title: '',\n instructions: '',\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: [],\n assignedAdminGroup: {},\n assignedLevel: '',\n assignmentType: '',\n presentationType: '',\n deleteWorkSheet: false,\n timeLimit: 0,\n worksheetSearchPage: 1\n};\n\nexport default function worksheet(state = initialState, action) {\n switch (action.type) {\n case SET_SELECTED_QUESTIONS:\n return { ...state, selectedQuestions: action.selectedQuestions };\n case SET_EDIT_SAVED_WORKSHEET_QUESTIONS:\n return {\n ...state,\n editSavedWorksheetQuestions: action.questions\n };\n case REMOVE_SELECTED_QUESTION: {\n const updatedSelectedQuestions = state.selectedQuestions.filter(\n question => question.ID !== action.Id\n );\n return { ...state, selectedQuestions: updatedSelectedQuestions };\n }\n case REMOVE_SELECTED_SAVED_WORKSHEET_QUESTION: {\n const updatedSelectedQuestions = state.editSavedWorksheetQuestions.filter(\n question => question.ID !== action.Id\n );\n return {\n ...state,\n editSavedWorksheetQuestions: updatedSelectedQuestions\n };\n }\n case SET_WORKSHEET_TITLE:\n return { ...state, title: action.title };\n case SET_INSTRUCTION:\n return { ...state, instructions: action.instructions };\n case SET_ASSIGMENT_TYPE:\n return { ...state, assignmentType: action.assignmentType };\n case SET_PRESENTATION_TYPE:\n return { ...state, presentationType: action.presentationType };\n case SET_SETTING_TIME_TYPE:\n return { ...state, timeSettingType: action.timeSettingType };\n case SET_SETTING_TIME_LIMIT:\n return { ...state, timeLimit: action.timeLimit };\n case SAVE_WORKSHEET:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case FETCH_WORKSHEETS_REQUEST:\n case FETCH_ALL_WORKSHEETS_REQUEST:\n case SELECTING_WORKSHEET:\n case GET_WORKSHEET_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case DELETE_WORKSHEET:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case DELETE_WORKSHEET_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: null,\n deleteWorkSheet: true\n };\n case DELETE_WORKSHEET_FAILED:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case DELETE_WORKSHEET_RESET:\n return {\n ...state,\n isLoading: false,\n error: null,\n deleteWorkSheet: false\n };\n case ASSIGN_WORKSHEET:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case SCHEDULE_WORKSHEET:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case FETCH_WORKSHEETS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n worksheets: action.worksheets,\n worksheetSearchPage: action.worksheets.PageIndex\n };\n case FETCH_ALL_WORKSHEETS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n allWorksheets: action.allWorksheets\n };\n case SELECTED_WORKSHEET:\n return {\n ...state,\n isLoading: false,\n selectedWorksheet: action.selectedWorksheet,\n title: action.selectedWorksheet.Title,\n assignmentType:\n action.selectedWorksheet.PresentationType.AssignmentTypeID,\n presentationType:\n action.selectedWorksheet.PresentationType.presentationTypeID,\n timeLimit: action.selectedWorksheet.PresentationType.TimeLimit\n };\n case RESET_SELECTED_WORKSHEET:\n return {\n ...state,\n editSavedWorksheetQuestions: [],\n error: null,\n isLoading: false,\n worksheets: [],\n selectedWorksheet: {},\n title: '',\n instructions: '',\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: [],\n assignedAdminGroup: {},\n assignedLevel: '',\n assignmentType: '',\n presentationType: '',\n timeLimit: 0\n };\n case FETCH_WORKSHEETS_FAILED:\n case FETCH_ALL_WORKSHEETS_FAILED:\n case SELECTED_WORKSHEET_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case ASSIGN_CLASS:\n return {\n ...state,\n isLoading: false,\n assignedClass: action.classes\n };\n case ASSIGN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedGroup: action.groups\n };\n case ASSIGN_STUDENT:\n return {\n ...state,\n isLoading: false,\n assignedStudent: sort((a, b) => a.ClassID - b.ClassID, action.students)\n };\n case ASSIGN_PRIVATE_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedPrivateGroup: action.privateGroups\n };\n case ASSIGN_ADMIN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedAdminGroup: action.adminGroups\n };\n case ASSIGN_LEVEL:\n return {\n ...state,\n isLoading: false,\n assignedLevel: action.level\n };\n case RESET_ASSIGNMENT:\n return action.assignmentType === 'admin'\n ? {\n ...state,\n isLoading: false,\n assignedAdminGroup: {},\n assignedLevel: ''\n }\n : {\n ...state,\n isLoading: false,\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: []\n };\n case RESET_WORKSHEET_SEARCH_PAGE: {\n return {\n ...state,\n worksheetSearchPage: 1\n };\n }\n case RESET_WORKSHEET:\n return initialState;\n\n default:\n return state;\n }\n}\n","import {\n FETCH_CLASS_REQUEST,\n FETCH_CLASS_SUCCESS,\n FETCH_CLASS_FAILED,\n FETCH_STUDENTS_REQUEST,\n FETCH_STUDENTS_SEARCH_REQUEST,\n FETCH_STUDENTS_SUCCESS,\n FETCH_STUDENTS_FAILED,\n FETCH_MY_GROUP_REQUEST,\n FETCH_MY_GROUP_SUCCESS,\n FETCH_MY_GROUP_FAILED\n} from './actionTypes';\n\nconst initialState = {\n isLoading: false,\n classes: [],\n students: [],\n groups: [],\n error: ''\n};\n\nexport default function lookup(state = initialState, action) {\n switch (action.type) {\n case FETCH_CLASS_REQUEST:\n return {\n ...state,\n error: ''\n };\n case FETCH_STUDENTS_REQUEST:\n return {\n ...state,\n isLoading: true,\n error: ''\n };\n case FETCH_STUDENTS_SEARCH_REQUEST:\n return {\n ...state,\n isLoading: true,\n error: ''\n };\n case FETCH_MY_GROUP_REQUEST:\n return {\n ...state,\n isLoading: true,\n error: ''\n };\n case FETCH_CLASS_FAILED:\n case FETCH_STUDENTS_FAILED:\n case FETCH_MY_GROUP_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_CLASS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n classes: action.classes\n };\n case FETCH_STUDENTS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n students: action.students\n };\n case FETCH_MY_GROUP_SUCCESS:\n return {\n ...state,\n isLoading: false,\n groups: action.groups\n };\n default:\n return state;\n }\n}\n","import {\n SAVE_PRIVATE_GROUP,\n DELETE_PRIVATE_GROUP,\n FETCH_PRIVATE_GROUPS_FAILED,\n FETCH_PRIVATE_GROUPS_REQUEST,\n FETCH_PRIVATE_GROUPS_SUCCESS,\n FETCH_PRIVATE_GROUP_SUCCESS,\n FETCH_PRIVATE_GROUP_FAILED,\n FETCH_PRIVATE_GROUP_REQUEST,\n SELECT_STUDENTS\n} from './actionTypes';\n\nconst initialState = {\n error: '',\n isLoading: false,\n privateGroups: [],\n selectedPrivateGroup: {},\n selectedStudents: []\n};\n\nexport default function worksheet(state = initialState, action) {\n switch (action.type) {\n case SAVE_PRIVATE_GROUP:\n case DELETE_PRIVATE_GROUP:\n case FETCH_PRIVATE_GROUPS_REQUEST:\n case FETCH_PRIVATE_GROUP_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_PRIVATE_GROUPS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n privateGroups: action.privateGroups\n };\n case FETCH_PRIVATE_GROUP_SUCCESS:\n return {\n ...state,\n isLoading: false,\n selectedPrivateGroup: action.privateGroup\n };\n case FETCH_PRIVATE_GROUP_FAILED:\n case FETCH_PRIVATE_GROUPS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case SELECT_STUDENTS:\n return {\n ...state,\n isLoading: false,\n selectedStudents: action.students\n };\n default:\n return state;\n }\n}\n","import { sort } from 'ramda';\nimport {\n SET_START_END_DATE,\n SET_RELEASE_DATE,\n SET_TIMEZONE,\n SET_VISIBILITY,\n SET_KOKO_CREDIT,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_SCHEDULE,\n RESET_ASSIGNMENT\n} from './actionTypes';\n\nconst initialState = {\n error: '',\n isLoading: false,\n startDate: '',\n endDate: '',\n releaseDate: '',\n timezone: '',\n assignmentVisibility: 1,\n kokoCredit: '',\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: [],\n assignedAdminGroup: {},\n assignedLevel: ''\n};\n\nexport default function worksheet(state = initialState, action) {\n switch (action.type) {\n case SET_START_END_DATE:\n return {\n ...state,\n isLoading: false,\n startDate: action.startDate,\n endDate: action.endDate\n };\n case SET_RELEASE_DATE:\n return {\n ...state,\n isLoading: false,\n releaseDate: action.releaseDate\n };\n case SET_TIMEZONE:\n return {\n ...state,\n isLoading: false,\n timezone: action.timezone\n };\n case SET_VISIBILITY:\n return {\n ...state,\n isLoading: false,\n assignmentVisibility: action.assignmentVisibility\n };\n case SET_KOKO_CREDIT:\n return {\n ...state,\n isLoading: false,\n kokoCredit: action.kokoCredit\n };\n case ASSIGN_CLASS:\n return {\n ...state,\n isLoading: false,\n assignedClass: action.classes\n };\n case ASSIGN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedGroup: action.groups\n };\n case ASSIGN_STUDENT:\n return {\n ...state,\n isLoading: false,\n assignedStudent: sort((a, b) => a.ClassID - b.ClassID, action.students)\n };\n case ASSIGN_PRIVATE_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedPrivateGroup: action.privateGroups\n };\n case ASSIGN_ADMIN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedAdminGroup: action.adminGroups\n };\n case ASSIGN_LEVEL:\n return {\n ...state,\n isLoading: false,\n assignedLevel: action.level\n };\n case RESET_SCHEDULE:\n return initialState;\n case RESET_ASSIGNMENT:\n return action.assignmentType === 'admin'\n ? {\n ...state,\n isLoading: false,\n assignedAdminGroup: {},\n assignedLevel: ''\n }\n : {\n ...state,\n isLoading: false,\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: []\n };\n default:\n return state;\n }\n}\n","import { sort } from 'ramda';\nimport {\n SET_START_END_DATE,\n SET_RELEASE_DATE,\n SET_KOKO_CREDIT,\n ASSIGN_CLASS,\n ASSIGN_GROUP,\n ASSIGN_STUDENT,\n ASSIGN_PRIVATE_GROUP,\n ASSIGN_ADMIN_GROUP,\n ASSIGN_LEVEL,\n RESET_ASSIGN,\n RESET_ASSIGNMENT\n} from './actionTypes';\n\nconst initialState = {\n error: '',\n isLoading: false,\n startDate: '',\n endDate: '',\n releaseDate: '',\n kokoCredit: '',\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: [],\n assignedAdminGroup: {},\n assignedLevel: ''\n};\n\nexport default function worksheet(state = initialState, action) {\n switch (action.type) {\n case SET_START_END_DATE:\n return {\n ...state,\n isLoading: false,\n startDate: action.startDate,\n endDate: action.endDate\n };\n case SET_RELEASE_DATE:\n return {\n ...state,\n isLoading: false,\n releaseDate: action.releaseDate\n };\n case SET_KOKO_CREDIT:\n return {\n ...state,\n isLoading: false,\n kokoCredit: action.kokoCredit\n };\n case ASSIGN_CLASS:\n return {\n ...state,\n isLoading: false,\n assignedClass: action.classes\n };\n case ASSIGN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedGroup: action.groups\n };\n case ASSIGN_STUDENT:\n return {\n ...state,\n isLoading: false,\n assignedStudent: sort((a, b) => a.ClassID - b.ClassID, action.students)\n };\n case ASSIGN_PRIVATE_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedPrivateGroup: action.privateGroups\n };\n case ASSIGN_ADMIN_GROUP:\n return {\n ...state,\n isLoading: false,\n assignedAdminGroup: action.adminGroups\n };\n case ASSIGN_LEVEL:\n return {\n ...state,\n isLoading: false,\n assignedLevel: action.level\n };\n case RESET_ASSIGN:\n return initialState;\n case RESET_ASSIGNMENT:\n return action.assignmentType === 'admin'\n ? {\n ...state,\n isLoading: false,\n assignedAdminGroup: {},\n assignedLevel: ''\n }\n : {\n ...state,\n isLoading: false,\n assignedClass: [],\n assignedGroup: [],\n assignedStudent: [],\n assignedPrivateGroup: []\n };\n default:\n return state;\n }\n}\n","import moment from 'moment';\nimport {\n FETCH_ASSIGNMENTS_REQUEST,\n FETCH_ASSIGNMENTS_SUCCESS,\n FETCH_ASSIGNMENTS_FAILED,\n SET_YEARS,\n SET_NUMBER_OF_PAGES,\n FETCH_TEACHER_ASSIGNMENTS_REQUEST,\n FETCH_TEACHER_ASSIGNMENTS_SUCCESS,\n FETCH_TEACHER_ASSIGNMENTS_FAILED,\n FETCH_TEACHERS_REQUEST,\n FETCH_TEACHERS_SUCCESS,\n FETCH_TEACHERS_FAILED,\n FETCH_MULTI_CLASS_REPORT_REQUEST,\n FETCH_MULTI_CLASS_REPORT_SUCCESS,\n FETCH_MULTI_CLASS_REPORT_FAILED,\n FETCH_SINGLE_CLASS_REPORT_REQUEST,\n FETCH_SINGLE_CLASS_REPORT_SUCCESS,\n FETCH_SINGLE_CLASS_REPORT_FAILED,\n FETCH_CSV_CLASS_REPORT_REQUEST,\n FETCH_CSV_CLASS_REPORT_SUCCESS,\n FETCH_CSV_CLASS_REPORT_FAILED,\n DELETE_ASSIGNED_HW_REQUEST,\n DELETE_ASSIGNED_HW_SUCCESS,\n DELETE_ASSIGNED_HW_FAILED,\n SET_LATEST_YEAR,\n SET_ASSIGNMENT_SUMMARY_HISTORY,\n SET_SELECTED_TEACHER,\n CLEAR_ASSIGNMENTS,\n CLEAR_MULTI_CLASS_REPORT,\n CLEAR_SINGLE_CLASS_REPORT,\n RESET_DELETE_HW_RESULT,\n RESET_ERROR,\n CHANGE_TITLE_DATE_RESET,\n CHANGE_TITLE_DATE_REQUEST,\n CHANGE_TITLE_DATE_SUCCESS,\n CHANGE_TITLE_DATE_FAILED,\n MARK_ANSWER_RIGHT_REQUEST,\n MARK_ANSWER_RIGHT_SUCCESS,\n MARK_ANSWER_RIGHT_FAILED\n} from './actionTypes';\n\nconst generateYears = () => {\n const yearsArray = [];\n let currentYear = moment().year();\n while (currentYear >= 2013) {\n yearsArray.push(currentYear);\n currentYear -= 1;\n }\n return yearsArray;\n};\n\nconst initialState = {\n isLoading: false,\n isSingleClassReportLoading: false,\n isCSVClassReportLoading: false,\n deleteHwIsLoading: false,\n assignments: [],\n years: generateYears(),\n numOfPages: 1,\n teachers: [],\n multiClassReport: [],\n singleClassReport: [],\n CSVClassReport: [],\n parsedCSVClassReport: [],\n latestYearWithAssignments: null,\n assignmentSummaryHistory: null,\n selectedTeacher: null,\n deleteHwResult: false,\n changeTitleIsLoading: false,\n changeTitleDate: false,\n markAnswerRight: false,\n error: null\n};\n\nexport default function assignments(state = initialState, action) {\n switch (action.type) {\n case FETCH_ASSIGNMENTS_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_ASSIGNMENTS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n assignments: action.assignments\n };\n case FETCH_ASSIGNMENTS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_TEACHER_ASSIGNMENTS_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_TEACHER_ASSIGNMENTS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n assignments: action.assignments\n };\n case FETCH_TEACHER_ASSIGNMENTS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_MULTI_CLASS_REPORT_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_MULTI_CLASS_REPORT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n multiClassReport: action.report\n };\n case FETCH_MULTI_CLASS_REPORT_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_SINGLE_CLASS_REPORT_REQUEST:\n return {\n ...state,\n isSingleClassReportLoading: true,\n error: null\n };\n case FETCH_SINGLE_CLASS_REPORT_SUCCESS:\n return {\n ...state,\n isSingleClassReportLoading: false,\n singleClassReport: action.report\n };\n case FETCH_SINGLE_CLASS_REPORT_FAILED:\n return {\n ...state,\n isSingleClassReportLoading: false,\n error: action.error\n };\n case FETCH_CSV_CLASS_REPORT_REQUEST:\n return {\n ...state,\n isCSVClassReportLoading: true\n };\n case FETCH_CSV_CLASS_REPORT_SUCCESS:\n return {\n ...state,\n isCSVClassReportLoading: false,\n CSVClassReport: action.data,\n parsedCSVClassReport: action.report\n };\n case FETCH_CSV_CLASS_REPORT_FAILED:\n return {\n ...state,\n isCSVClassReportLoading: false,\n error: action.error\n };\n case SET_YEARS:\n return {\n ...state,\n years: action.years\n };\n case SET_LATEST_YEAR:\n return {\n ...state,\n latestYearWithAssignments: action.year\n };\n case SET_NUMBER_OF_PAGES:\n return {\n ...state,\n numOfPages: action.number\n };\n case SET_ASSIGNMENT_SUMMARY_HISTORY:\n return {\n ...state,\n assignmentSummaryHistory: action.page\n };\n case SET_SELECTED_TEACHER:\n return {\n ...state,\n selectedTeacher: action.teacherID\n };\n case FETCH_TEACHERS_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_TEACHERS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n teachers: action.teachers\n };\n case FETCH_TEACHERS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case DELETE_ASSIGNED_HW_REQUEST:\n return {\n ...state,\n deleteHwIsLoading: true,\n deleteHwResult: false,\n error: null\n };\n case DELETE_ASSIGNED_HW_SUCCESS:\n return {\n ...state,\n deleteHwIsLoading: false,\n deleteHwResult: true\n };\n case DELETE_ASSIGNED_HW_FAILED:\n return {\n ...state,\n deleteHwIsLoading: false,\n error: action.error\n };\n case CLEAR_ASSIGNMENTS:\n return {\n ...state,\n assignments: []\n };\n case CLEAR_SINGLE_CLASS_REPORT:\n return {\n ...state,\n singleClassReport: []\n };\n case CLEAR_MULTI_CLASS_REPORT:\n return {\n ...state,\n multiClassReport: []\n };\n case RESET_ERROR:\n return {\n ...state,\n error: null\n };\n case RESET_DELETE_HW_RESULT:\n return {\n ...state,\n deleteHwResult: false\n };\n case CHANGE_TITLE_DATE_RESET:\n return {\n ...state,\n changeTitleDate: false\n };\n case CHANGE_TITLE_DATE_REQUEST:\n return {\n ...state,\n changeTitleIsLoading: true,\n changeTitleDate: false,\n error: null\n };\n case CHANGE_TITLE_DATE_SUCCESS:\n return {\n ...state,\n changeTitleIsLoading: false,\n changeTitleDate: true\n };\n case CHANGE_TITLE_DATE_FAILED:\n return {\n ...state,\n changeTitleIsLoading: false,\n error: action.error\n };\n case MARK_ANSWER_RIGHT_REQUEST:\n return {\n ...state,\n isLoading: true,\n markAnswerRight: false,\n error: null\n };\n case MARK_ANSWER_RIGHT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n markAnswerRight: true\n };\n case MARK_ANSWER_RIGHT_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_CLASSES_REQUEST,\n FETCH_CLASSES_SUCCESS,\n FETCH_CLASSES_FAILED,\n FETCH_STUDENTS_DATA_REQUEST,\n FETCH_STUDENTS_CLASS_SUCCESS,\n FETCH_STUDENTS_FAILED,\n FETCH_STUDENT_DETAILS_REQUEST,\n FETCH_STUDENT_DETAILS_SUCCESS,\n FETCH_STUDENT_DETAILS_FAILED,\n EDIT_CLASS_REQUEST,\n EDIT_CLASS_SUCCESS,\n EDIT_CLASS_FAILED,\n CHANGE_CLASS_REQUEST,\n CHANGE_CLASS_SUCCESS,\n CHANGE_CLASS_FAILED,\n SEARCH_STUDENT_REQUEST,\n SEARCH_STUDENT_SUCCESS,\n SEARCH_STUDENT_FAILED,\n SET_SEARCH_PAGES,\n SET_STUDENT_PAGES,\n RESET_PW_REQUEST,\n RESET_PW_SUCCESS,\n RESET_PW_FAILED,\n FETCH_ICONS_REQUEST,\n FETCH_ICONS_SUCCESS,\n FETCH_ICONS_FAILED,\n RESET_STUDENTS,\n RESET_SEARCH_RESULTS,\n RESET_PW_RESULT,\n RESET_CHANGE_CLASS_RESULT,\n RESET_EDIT_CLASS_RESULT,\n RESET_ERROR\n} from './actionTypes';\n\nconst initialState = {\n isLoading: false,\n isIconsLoading: false,\n isStudentDetailsLoading: false,\n classes: null,\n students: [],\n searchResults: [],\n maxStudentPages: 1,\n maxSearchPages: 1,\n studentDetails: {},\n resetPwResult: null,\n changeClassResult: null,\n editClassResult: null,\n icons: [],\n iconsLevel: null\n};\n\nexport default function manageClasses(state = initialState, action) {\n switch (action.type) {\n case FETCH_CLASSES_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_CLASSES_SUCCESS:\n return {\n ...state,\n isLoading: false,\n classes: action.classes\n };\n case FETCH_CLASSES_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_STUDENTS_DATA_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case FETCH_STUDENTS_CLASS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n students: action.students\n };\n case FETCH_STUDENTS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_STUDENT_DETAILS_REQUEST:\n return {\n ...state,\n isStudentDetailsLoading: true\n };\n case FETCH_STUDENT_DETAILS_SUCCESS:\n return {\n ...state,\n isStudentDetailsLoading: false,\n studentDetails: action.details\n };\n case FETCH_STUDENT_DETAILS_FAILED:\n return {\n ...state,\n isStudentDetailsLoading: false,\n error: action.error\n };\n case EDIT_CLASS_REQUEST:\n return {\n ...state,\n isLoading: true,\n editClassResult: false\n };\n case EDIT_CLASS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n editClassResult: true\n };\n case EDIT_CLASS_FAILED:\n return {\n ...state,\n isLoading: false,\n editClassResult: false,\n error: action.error\n };\n case CHANGE_CLASS_REQUEST:\n return {\n ...state,\n isLoading: true,\n changeClassResult: false\n };\n case CHANGE_CLASS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n changeClassResult: true\n };\n case CHANGE_CLASS_FAILED:\n return {\n ...state,\n isLoading: false,\n changeClassResult: false,\n error: action.error\n };\n case SEARCH_STUDENT_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case SEARCH_STUDENT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n searchResults: action.results\n };\n case SEARCH_STUDENT_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n\n case RESET_PW_REQUEST:\n return {\n ...state,\n isLoading: true,\n resetPwResult: false\n };\n case RESET_PW_SUCCESS:\n return {\n ...state,\n isLoading: false,\n resetPwResult: true\n };\n case RESET_PW_FAILED:\n return {\n ...state,\n isLoading: false,\n resetPwResult: false,\n error: action.error\n };\n case FETCH_ICONS_REQUEST:\n return {\n ...state,\n isIconsLoading: true\n };\n case FETCH_ICONS_SUCCESS:\n return {\n ...state,\n isIconsLoading: false,\n icons: action.result.icons,\n iconsLevel: action.result.level\n };\n case FETCH_ICONS_FAILED:\n return {\n ...state,\n isIconsLoading: false,\n error: action.error\n };\n case RESET_STUDENTS:\n return {\n ...state,\n students: []\n };\n case RESET_SEARCH_RESULTS:\n return {\n ...state,\n searchResults: []\n };\n case SET_STUDENT_PAGES:\n return {\n ...state,\n maxStudentPages: action.pageTotal\n };\n case SET_SEARCH_PAGES:\n return {\n ...state,\n maxSearchPages: action.pageTotal\n };\n case RESET_PW_RESULT:\n return {\n ...state,\n resetPwResult: null\n };\n case RESET_EDIT_CLASS_RESULT:\n return {\n ...state,\n editClassResult: null\n };\n case RESET_CHANGE_CLASS_RESULT:\n return {\n ...state,\n changeClassResult: null\n };\n case RESET_ERROR:\n return {\n ...state,\n error: null\n };\n default:\n return state;\n }\n}\n","// Helper\nfunction* range(start, end, step) {\n while (start <= end) {\n yield start;\n start += step;\n }\n}\n\nconst generateLevels = () => {\n return Array.from(range(1, 6, 1));\n};\n\nexport default generateLevels;\n","import generateLevels from 'helpers/reportLevels';\nimport * as actionTypes from './actionTypes';\n\nconst reportLevels = generateLevels();\n\nconst initialState = {\n isLoading: false,\n classProficiencyReport: null,\n classHighScoreReport: null,\n selectedClass: null,\n selectedClassLevel: reportLevels[0],\n studentProficiencyReport: null,\n qnIsLoading: false,\n sampleQn: null,\n reportError: null,\n sortOrder: 1,\n reportLevel: null,\n selectedSyllabus: null,\n loginReport: null,\n weekItems: null,\n teacherMonthReport: null,\n teacherSpecificMonthReport: null,\n activeToggle: 'proficiency',\n syllabus: {\n isLoading: false,\n error: null,\n data: null\n },\n proficiencySkill: {\n isLoading: false,\n error: null,\n data: null\n },\n highScoreSkill: {\n isLoading: false,\n error: null,\n data: null\n },\n skillDetailReport: {\n isLoading: false,\n error: null,\n data: []\n }\n};\n\nexport default function reports(state = initialState, action) {\n switch (action.type) {\n case actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_REQUEST:\n return {\n ...state,\n isLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n classProficiencyReport: action.report\n };\n case actionTypes.FETCH_CLASS_PROFICIENCY_REPORT_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n classProficiencyReport: null\n };\n case actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_REQUEST:\n return {\n ...state,\n isLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n classHighScoreReport: action.report\n };\n case actionTypes.FETCH_CLASS_HIGHSCORE_REPORT_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n classHighScoreReport: null\n };\n case actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_REQUEST:\n return {\n ...state,\n isLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n studentProficiencyReport: action.report\n };\n case actionTypes.FETCH_STUDENT_PROFICIENCY_REPORT_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n studentProficiencyReport: null\n };\n case actionTypes.FETCH_SAMPLE_QN_REQUEST:\n return {\n ...state,\n qnIsLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_SAMPLE_QN_SUCCESS:\n return {\n ...state,\n qnIsLoading: false,\n sampleQn: action.question\n };\n case actionTypes.FETCH_SAMPLE_QN_FAILED:\n return {\n ...state,\n qnIsLoading: false,\n reportError: action.error,\n sampleQn: null\n };\n case actionTypes.SET_SELECTED_CLASS:\n return {\n ...state,\n selectedClass: action.classObject\n };\n case actionTypes.SET_SORT_ORDER:\n return {\n ...state,\n sortOrder: action.sortOrder\n };\n case actionTypes.SET_REPORT_LEVEL:\n return {\n ...state,\n reportLevel: action.reportLevel\n };\n case actionTypes.SET_SYLLABUS:\n return {\n ...state,\n selectedSyllabus: action.syllabus\n };\n case actionTypes.SET_CLASS_LEVEL:\n return {\n ...state,\n selectedClassLevel: action.level\n };\n case actionTypes.FETCH_LOGIN_REPORT_REQUEST:\n return {\n ...state,\n isLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_LOGIN_REPORT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n loginReport: action.report\n };\n case actionTypes.FETCH_LOGIN_REPORT_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n loginReport: null\n };\n case actionTypes.FETCH_WEEK_ITEMS_REQUEST:\n return {\n ...state,\n isLoading: true,\n reportError: null\n };\n case actionTypes.FETCH_WEEK_ITEMS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n weekItems: action.weeks\n };\n case actionTypes.FETCH_WEEK_ITEMS_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n weekItems: null\n };\n case actionTypes.TOGGLE_REPORTS:\n return {\n ...state,\n activeToggle: action.val\n };\n case actionTypes.FETCH_TEACHER_REPORT_MONTH_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case actionTypes.FETCH_TEACHER_REPORT_MONTH_SUCCESS:\n return {\n ...state,\n isLoading: false,\n teacherMonthReport: action.report\n };\n case actionTypes.FETCH_TEACHER_REPORT_MONTH_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n teacherMonthReport: null\n };\n case actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_REQUEST:\n return {\n ...state,\n isLoading: true\n };\n case actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_SUCCESS:\n return {\n ...state,\n isLoading: false,\n teacherSpecificMonthReport: action.report\n };\n case actionTypes.FETCH_TEACHER_REPORT_SPECIFIC_MONTH_FAILED:\n return {\n ...state,\n isLoading: false,\n reportError: action.error,\n teacherSpecificMonthReport: null\n };\n case actionTypes.FETCH_REPORT_SYLLABUS_REQUEST: {\n return {\n ...state,\n syllabus: {\n isLoading: true,\n error: null,\n data: null\n }\n };\n }\n case actionTypes.FETCH_REPORT_SYLLABUS_SUCCESS: {\n return {\n ...state,\n syllabus: {\n ...state.syllabus,\n isLoading: false,\n data: action.data.sort((a, b) => a.Display - b.Display)\n }\n };\n }\n case actionTypes.FETCH_REPORT_SYLLABUS_FAILED: {\n return {\n ...state,\n syllabus: {\n ...state.syllabus,\n isLoading: false,\n error: action.error\n }\n };\n }\n case actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_REQUEST: {\n return {\n ...state,\n proficiencySkill: {\n isLoading: true,\n error: null,\n data: null\n }\n };\n }\n case actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_SUCCESS: {\n return {\n ...state,\n proficiencySkill: {\n ...state.proficiencySkill,\n isLoading: false,\n data: action.data.sort((a, b) => a.Display - b.Display)\n }\n };\n }\n case actionTypes.FETCH_REPORT_PROFICIENCY_SKILL_FAILED: {\n return {\n ...state,\n proficiencySkill: {\n ...state.proficiencySkill,\n isLoading: false,\n error: action.error\n }\n };\n }\n case actionTypes.CLEAN_REPORT_PROFICIENCY_SKILL: {\n return {\n ...state,\n proficiencySkill: initialState.proficiencySkill\n };\n }\n case actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_REQUEST: {\n return {\n ...state,\n highScoreSkill: {\n isLoading: true,\n error: null,\n data: null\n }\n };\n }\n case actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_SUCCESS: {\n return {\n ...state,\n highScoreSkill: {\n ...state.highScoreSkill,\n isLoading: false,\n data: action.data.sort((a, b) => a.Display - b.Display)\n }\n };\n }\n case actionTypes.FETCH_REPORT_HIGHSCORE_SKILL_FAILED: {\n return {\n ...state,\n highScoreSkill: {\n ...state.highScoreSkill,\n isLoading: false,\n error: action.error\n }\n };\n }\n case actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_REQUEST:\n return {\n ...state,\n skillDetailReport: {\n isLoading: true,\n error: null,\n data: null\n }\n };\n case actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_SUCCESS:\n return {\n ...state,\n skillDetailReport: {\n isLoading: false,\n error: null,\n data: action.report\n }\n };\n case actionTypes.FETCH_SKILL_PROFICIENCY_DETAIL_REPORT_FAILED:\n return {\n ...state,\n skillDetailReport: {\n isLoading: false,\n error: action.error,\n data: null\n }\n };\n case actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_REQUEST:\n return {\n ...state,\n skillDetailReport: {\n isLoading: true,\n error: null,\n data: null\n }\n };\n case actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_SUCCESS:\n return {\n ...state,\n skillDetailReport: {\n isLoading: false,\n error: null,\n data: action.report\n }\n };\n case actionTypes.FETCH_SKILL_HIGHSCORE_DETAIL_REPORT_FAILED:\n return {\n ...state,\n skillDetailReport: {\n isLoading: false,\n error: action.error,\n data: null\n }\n };\n case actionTypes.CLEAN_REPORT_HIGHSCORE_SKILL: {\n return {\n ...state,\n highScoreSkill: initialState.highScoreSkill\n };\n }\n default:\n return state;\n }\n}\n","import {\n FETCH_MY_GROUPS_REQUEST,\n FETCH_MY_GROUPS_SUCCESS,\n FETCH_MY_GROUPS_FAILED,\n DELETE_GROUP_REQUEST,\n DELETE_GROUP_SUCCESS,\n DELETE_GROUP_FAILED,\n DELETE_GROUP_RESET,\n CREATE_MY_GROUP_RESET,\n CREATE_MY_GROUP_REQUEST,\n CREATE_MY_GROUP_SUCCESS,\n CREATE_MY_GROUP_FAILED,\n UPDATE_GROUP_RESET,\n UPDATE_GROUP_REQUEST,\n UPDATE_GROUP_SUCCESS,\n UPDATE_GROUP_FAILED,\n GET_CLASS_BY_LEVEL_REQUEST,\n GET_CLASS_BY_LEVEL_SUCCESS,\n GET_CLASS_BY_LEVEL_FAILED,\n GET_STUDENT_BY_CLASS_RESET,\n GET_STUDENT_BY_CLASS_REQUEST,\n GET_STUDENT_BY_CLASS_SUCCESS,\n GET_STUDENT_BY_CLASS_FAILED\n} from './actionTypes';\n\nconst initialState = {\n isLoading: false,\n error: '',\n allGroups: [],\n updateGroup: {},\n deleteGroup: false,\n createGroup: {},\n getClasses: {},\n getStudents: [],\n isDelLoading: false\n};\n\nexport default function createGroups(state = initialState, action) {\n switch (action.type) {\n case FETCH_MY_GROUPS_REQUEST:\n return {\n ...state,\n error: '',\n isLoading: true\n };\n case FETCH_MY_GROUPS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n allGroups: action.data\n };\n case FETCH_MY_GROUPS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case DELETE_GROUP_REQUEST:\n return {\n ...state,\n error: '',\n isDelLoading: true,\n deleteGroup: false\n };\n case DELETE_GROUP_SUCCESS:\n return {\n ...state,\n error: '',\n isDelLoading: false,\n deleteGroup: true\n };\n case DELETE_GROUP_FAILED:\n return {\n ...state,\n isDelLoading: false,\n error: action.error,\n deleteGroup: false\n };\n case DELETE_GROUP_RESET:\n return {\n ...state,\n deleteGroup: false\n };\n case CREATE_MY_GROUP_RESET:\n return {\n ...state,\n error: '',\n createGroup: {}\n };\n case CREATE_MY_GROUP_REQUEST:\n return {\n ...state,\n error: '',\n isLoading: true,\n createGroup: {}\n };\n case CREATE_MY_GROUP_SUCCESS:\n return {\n ...state,\n error: '',\n isLoading: false,\n createGroup: action.data\n };\n case CREATE_MY_GROUP_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case UPDATE_GROUP_RESET:\n return {\n ...state,\n updateGroup: {}\n };\n case UPDATE_GROUP_REQUEST:\n return {\n ...state,\n error: '',\n isLoading: true,\n updateGroup: {}\n };\n case UPDATE_GROUP_SUCCESS:\n return {\n ...state,\n error: '',\n isLoading: false,\n updateGroup: action.data\n };\n case UPDATE_GROUP_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case GET_CLASS_BY_LEVEL_REQUEST:\n return {\n ...state,\n error: '',\n isLoading: true,\n getClasses: {}\n };\n case GET_CLASS_BY_LEVEL_SUCCESS:\n return {\n ...state,\n error: '',\n isLoading: false,\n getClasses: action.data\n };\n case GET_STUDENT_BY_CLASS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case GET_STUDENT_BY_CLASS_RESET:\n return {\n ...state,\n error: '',\n isLoading: false,\n getStudents: []\n };\n case GET_STUDENT_BY_CLASS_REQUEST:\n return {\n ...state,\n error: '',\n isLoading: true\n // getStudents: []\n };\n case GET_STUDENT_BY_CLASS_SUCCESS:\n return {\n ...state,\n error: '',\n isLoading: false,\n getStudents: action.data\n };\n case GET_CLASS_BY_LEVEL_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_PROFILE_DATA_REQUEST,\n FETCH_PROFILE_DATA_SUCCESS,\n FETCH_PROFILE_DATA_FAILED,\n FETCH_AVATARS_REQUEST,\n FETCH_AVATARS_SUCCESS,\n FETCH_AVATARS_FAILED,\n UPDATE_PROFILE_REQUEST,\n UPDATE_PROFILE_SUCCESS,\n UPDATE_PROFILE_FAILED,\n EMPTY_UPDATE_PROFILE\n} from './actionTypes';\n\nconst initialState = {\n isLoading: false,\n error: null,\n profileData: {},\n avatars: {},\n updateData: {}\n};\n\nexport default function profileSettings(state = initialState, action) {\n switch (action.type) {\n case FETCH_PROFILE_DATA_REQUEST:\n return {\n ...state,\n isLoading: true,\n error: null,\n profileData: {}\n };\n case FETCH_PROFILE_DATA_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: null,\n profileData: action.data\n };\n case FETCH_PROFILE_DATA_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case FETCH_AVATARS_REQUEST:\n return {\n ...state,\n error: null,\n isLoading: true\n };\n case FETCH_AVATARS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n error: null,\n avatars: action.data\n };\n case FETCH_AVATARS_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case UPDATE_PROFILE_REQUEST:\n return {\n ...state,\n isLoading: true,\n error: null\n };\n case UPDATE_PROFILE_SUCCESS:\n return {\n ...state,\n isLoading: false,\n updateData: action.data,\n error: null\n };\n case UPDATE_PROFILE_FAILED:\n return {\n ...state,\n isLoading: false,\n error: action.error\n };\n case EMPTY_UPDATE_PROFILE:\n return {\n ...state,\n updateData: {}\n };\n default:\n return state;\n }\n}\n","import {\n FETCH_SYLLABUS_REQUEST,\n FETCH_SYLLABUS_SUCCESS,\n FETCH_SYLLABUS_FAILED,\n NO_SYLLABUS,\n PUSH_TO_CART_RESET,\n PUSH_TO_CART_REQUEST,\n PUSH_TO_CART_SUCCESS,\n PUSH_TO_CART_FAILED,\n CREATE_WORKSHEET_RESET,\n CREATE_WORKSHEET_REQUEST,\n CREATE_WORKSHEET_SUCCESS,\n CREATE_WORKSHEET_FAILED,\n CREATE_WORKSHEET_ERROR,\n SET_CREATE_HOMEWORK_QUESTIONS,\n REMOVE_CREATE_HOMEWORK_QUESTION\n} from './actionTypes';\n\nconst initialState = {\n syllabus: [],\n pushCart: {},\n createWorksheet: {},\n createWorksheetItems: [],\n isLoading: false,\n pushCartLoading: false,\n createWorksheetLoading: false,\n error: ''\n};\n\nexport default function topicalWorksheet(state = initialState, action) {\n switch (action.type) {\n case FETCH_SYLLABUS_REQUEST:\n return { ...state, error: '', isLoading: true };\n case PUSH_TO_CART_REQUEST:\n return { ...state, error: '', pushCartLoading: true };\n case CREATE_WORKSHEET_REQUEST:\n return { ...state, error: '', createWorksheetLoading: true };\n case FETCH_SYLLABUS_FAILED:\n case PUSH_TO_CART_FAILED:\n case CREATE_WORKSHEET_FAILED:\n case CREATE_WORKSHEET_ERROR:\n return {\n ...state,\n isLoading: false,\n pushCartLoading: false,\n createWorksheetLoading: false,\n error: action.error\n };\n case NO_SYLLABUS:\n return { ...state, isLoading: false, syllabus: [] };\n case FETCH_SYLLABUS_SUCCESS:\n return {\n ...initialState,\n isLoading: false,\n syllabus: action.syllabus.Topics || []\n };\n case PUSH_TO_CART_RESET:\n return {\n ...initialState,\n pushCart: {}\n };\n case PUSH_TO_CART_SUCCESS:\n return {\n ...initialState,\n pushCartLoading: false,\n pushCart: action.data\n };\n case CREATE_WORKSHEET_RESET:\n return {\n ...initialState,\n createWorksheet: {}\n };\n case CREATE_WORKSHEET_SUCCESS:\n return {\n ...initialState,\n createWorksheetLoading: false,\n createWorksheet: action.data,\n createWorksheetItems: action.data.Items\n };\n case SET_CREATE_HOMEWORK_QUESTIONS:\n return {\n ...state,\n createWorksheetItems: action.questions\n };\n case REMOVE_CREATE_HOMEWORK_QUESTION:\n const updatedQuestions = state.createWorksheetItems.filter(\n question => question.ID !== action.Id\n );\n return { ...state, createWorksheetItems: updatedQuestions };\n default:\n return state;\n }\n}\n","import { compareValues } from 'helpers/singleClassReport';\nimport {\n FETCH_TOPIC_SKILL_REQUEST,\n FETCH_TOPIC_SKILL_SUCCESS,\n FETCH_TOPIC_SKILL_FAILED,\n NO_TOPIC_SKILL,\n CREATE_FACTUAL_FLUENCY_RESET,\n CREATE_FACTUAL_FLUENCY_REQUEST,\n CREATE_FACTUAL_FLUENCY_SUCCESS,\n CREATE_FACTUAL_FLUENCY_FAILED,\n CREATE_FACTUAL_FLUENCY_ERROR,\n SET_CREATE_FACTUAL_FLUENCY_QUESTIONS,\n REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST,\n FACTUAL_FLUENCY_LEADERBOARD_RESET,\n FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED\n} from './actionTypes';\n\nconst initialState = {\n topicSkill: [],\n createFactualFluency: {},\n createFactualFluencyItems: [],\n leaderboard: [],\n isLoading: false,\n createFactualFluencyLoading: false,\n error: ''\n};\n\nexport default function factualFluency(state = initialState, action) {\n switch (action.type) {\n case FETCH_TOPIC_SKILL_REQUEST:\n case FETCH_FACTUAL_FLUENCY_LEADERBOARD_REQUEST:\n return { ...state, error: '', isLoading: true };\n case CREATE_FACTUAL_FLUENCY_REQUEST:\n return { ...state, error: '', createFactualFluencyLoading: true };\n case FETCH_TOPIC_SKILL_FAILED:\n case FETCH_FACTUAL_FLUENCY_LEADERBOARD_FAILED:\n case CREATE_FACTUAL_FLUENCY_FAILED:\n case CREATE_FACTUAL_FLUENCY_ERROR:\n return {\n ...state,\n isLoading: false,\n createFactualFluencyLoading: false,\n error: action.error\n };\n case NO_TOPIC_SKILL:\n return { ...state, isLoading: false, topicSkill: [] };\n case FETCH_TOPIC_SKILL_SUCCESS:\n return {\n ...initialState,\n isLoading: false,\n topicSkill: action.TopicSkill.sort(compareValues('Order', 'asc')) || []\n };\n case FETCH_FACTUAL_FLUENCY_LEADERBOARD_SUCCESS:\n return {\n ...initialState,\n isLoading: false,\n leaderboard: action.leaderboard || []\n };\n case FACTUAL_FLUENCY_LEADERBOARD_RESET:\n return {\n ...initialState,\n leaderboard: []\n };\n case CREATE_FACTUAL_FLUENCY_RESET:\n return {\n ...initialState,\n createFactualFluency: {}\n };\n case CREATE_FACTUAL_FLUENCY_SUCCESS:\n return {\n ...initialState,\n createFactualFluencyLoading: false,\n createFactualFluency: action.data,\n createFactualFluencyItems: action.data.Questions\n };\n case SET_CREATE_FACTUAL_FLUENCY_QUESTIONS:\n return {\n ...state,\n createFactualFluencyItems: action.questions\n };\n case REMOVE_CREATE_FACTUAL_FLUENCY_QUESTION:\n const updatedQuestions = state.createFactualFluencyItems.filter(\n question => question.ID !== action.Id\n );\n return { ...state, createFactualFluencyItems: updatedQuestions };\n default:\n return state;\n }\n}\n","import {\n FETCH_GAME_SETTING_CLASS_REQUEST,\n FETCH_GAME_SETTING_CLASS_SUCCESS,\n FETCH_GAME_SETTING_CLASS_FAILED,\n FETCH_GAME_SETTING_STUDENT_REQUEST,\n FETCH_GAME_SETTING_STUDENT_SUCCESS,\n FETCH_GAME_SETTING_STUDENT_FAILED,\n SAVE_GAME_SETTING_REQUEST,\n SAVE_GAME_SETTING_SUCCESS,\n SAVE_GAME_SETTING_FAILED,\n RESET_ERROR\n} from './actionTypes';\n\nconst initialState = {\n isLoading: false,\n classes: [],\n students: [],\n saveSettingResult: false,\n error: null\n};\n\nexport default function gameSetting(state = initialState, action) {\n switch (action.type) {\n case FETCH_GAME_SETTING_CLASS_REQUEST:\n return {\n ...state,\n isLoading: true,\n classes: [],\n error: null\n };\n case FETCH_GAME_SETTING_CLASS_SUCCESS:\n return {\n ...state,\n isLoading: false,\n classes: action.classes,\n error: null\n };\n case FETCH_GAME_SETTING_CLASS_FAILED:\n return {\n ...state,\n isLoading: false,\n classes: [],\n error: action.error\n };\n case FETCH_GAME_SETTING_STUDENT_REQUEST:\n return {\n ...state,\n isLoading: true,\n students: [],\n error: null\n };\n case FETCH_GAME_SETTING_STUDENT_SUCCESS:\n return {\n ...state,\n isLoading: false,\n students: action.students,\n error: null\n };\n case FETCH_GAME_SETTING_STUDENT_FAILED:\n return {\n ...state,\n isLoading: false,\n students: [],\n error: action.error\n };\n case SAVE_GAME_SETTING_REQUEST:\n return {\n ...state,\n isLoading: true,\n saveSettingResult: false,\n error: null\n };\n case SAVE_GAME_SETTING_SUCCESS:\n return {\n ...state,\n isLoading: false,\n saveSettingResult: true,\n error: null\n };\n case SAVE_GAME_SETTING_FAILED:\n return {\n ...state,\n isLoading: false,\n saveSettingResult: false,\n error: action.error\n };\n case RESET_ERROR:\n return {\n ...state,\n saveSettingResult: false,\n error: null\n };\n default:\n return state;\n }\n}\n","import {\n SET_USER_PREFERENCES_REQUEST,\n SET_USER_PREFERENCES_SUCCESS,\n SET_USER_PREFERENCES_FAILED\n} from './actionTypes';\n\nconst initialState = {\n isUpdating: false,\n updatePreferences: null,\n updateError: null\n};\n\nexport default function userPreferences(state = initialState, action) {\n switch (action.type) {\n case SET_USER_PREFERENCES_REQUEST:\n return {\n ...state,\n isUpdating: true\n };\n case SET_USER_PREFERENCES_SUCCESS:\n return {\n ...state,\n isUpdating: false,\n updatePreferences: action.data\n };\n case SET_USER_PREFERENCES_FAILED:\n return {\n ...state,\n isUpdating: false,\n updatePreferences: action.error\n };\n default:\n return state;\n }\n}\n","import { combineReducers } from 'redux';\nimport rootSaga from 'sagas';\nimport configureStore from 'stores/createStore';\nimport curriculums from 'stores/curriculums/reducer';\nimport filters from 'stores/filters/reducer';\nimport levels from 'stores/levels/reducer';\nimport login from 'stores/login/reducer';\nimport { LOGIN_RESET } from 'stores/login/actionTypes';\nimport questions from 'stores/questions/reducer';\nimport skills from 'stores/skills/reducer';\nimport syllabus from 'stores/syllabus/reducer';\nimport topics from 'stores/topics/reducer';\nimport variations from 'stores/variations/reducer';\nimport step from 'stores/utils/step/reducer';\nimport worksheet from 'stores/worksheet/reducer';\nimport lookup from 'stores/utils/lookup/reducer';\nimport privateGroup from 'stores/privateGroup/reducer';\nimport schedule from 'stores/worksheet/schedule/reducer';\nimport assign from 'stores/worksheet/assign/reducer';\nimport assignments from 'stores/assignments/reducer';\nimport manageClasses from 'stores/manage-class/reducer';\nimport reports from 'stores/report/reducer';\nimport createGroups from 'stores/createGroup/reducer';\nimport profileSettings from 'stores/profileSettings/reducer';\nimport topicalWorksheet from 'stores/topical-worksheet/reducer';\nimport factualFluency from 'stores/factual-fluency/reducer';\nimport gameSetting from 'stores/gameSetting/reducer';\nimport userPreferences from './userPreferences/reducer';\n\nexport default () => {\n const appReducer = combineReducers({\n curriculums,\n filters,\n levels,\n login,\n lookup,\n questions,\n skills,\n syllabus,\n topics,\n variations,\n step,\n worksheet,\n privateGroup,\n schedule,\n assign,\n assignments,\n manageClasses,\n reports,\n createGroups,\n profileSettings,\n topicalWorksheet,\n factualFluency,\n userPreferences,\n gameSetting\n });\n\n const rootReducer = (state, action) => {\n /**\n * To purge your persist store https://stackoverflow.com/a/35641992/6366525\n */\n if (action.type === LOGIN_RESET) {\n state = undefined; /* eslint-disable-line */\n }\n\n return appReducer(state, action);\n };\n\n return configureStore(rootReducer, rootSaga);\n};\n","import { useEffect, useState } from 'react';\nimport { isNil } from 'ramda';\nimport { useSelector } from 'react-redux';\n\n// For handling users who access Student Portal using secret link generated by Contingency Admin\nconst useSecret = () => {\n const query = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop)\n });\n const { secret } = query;\n const { globalFeatureConfig } = useSelector(state => state.login);\n const isSecretLinkEnabled = isNil(globalFeatureConfig)\n ? false\n : globalFeatureConfig.secretlink?.parameters?.IsEnabled === true;\n const [contingencySecret, setContingencySecret] = useState(null);\n useEffect(() => {\n if (!isNil(secret)) {\n setContingencySecret(secret);\n sessionStorage.setItem('secret', secret);\n } else if (contingencySecret === null) {\n const sessionSecret = sessionStorage.getItem('secret');\n if (isNil(sessionSecret)) {\n setContingencySecret('');\n } else {\n setContingencySecret(sessionSecret);\n }\n }\n }, [contingencySecret, secret]);\n useEffect(() => {\n if (\n !isNil(contingencySecret) &&\n isSecretLinkEnabled &&\n globalFeatureConfig.secretlink?.parameters?.key !== contingencySecret &&\n window.location.pathname !== '/login'\n ) {\n window.location.href =\n globalFeatureConfig.secretlink?.parameters?.supportUrl ??\n 'https://support.koobits.com/hc/en-gb';\n }\n }, [contingencySecret, globalFeatureConfig, isSecretLinkEnabled]);\n};\n\nexport default useSecret;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport finger from 'assets/img/Icon Select.svg';\n\nexport default function SelectTopic(props) {\n const { textClass } = props;\n const { t } = useTranslation(['browse-content']);\n return (\n
\n
\n \"select-topic\"\n

\n {t(`browse-content:main.select`, 'Select topic to start')}\n

\n
\n
\n );\n}\n","const openIVM = () => {\n const url = 'https://ivm.koobits.com/dashboardv5/index.html';\n window.open(url, '_blank');\n};\n\nexport default openIVM;\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport IconIvm from 'assets/img/icon-ivm.svg';\nimport IconQuestion from 'assets/img/icon-questions.svg';\nimport IconPlay from 'assets/img/icon-play.svg';\nimport ModalVideo from 'react-modal-video';\nimport 'react-modal-video/scss/modal-video.scss';\nimport { useHistory } from 'react-router-dom';\nimport { sort } from 'ramda';\nimport { selectTopic } from 'stores/topics/actions';\nimport openIVM from 'helpers/openIVM';\n\nexport default function ContentType() {\n const { t } = useTranslation(['browse-content']);\n const dispatch = useDispatch();\n const { isTrial } = useSelector(state => state.login);\n const { topics } = useSelector(state => state.topics);\n const sortedTopics = sort((a, b) => a.Display - b.Display, topics);\n const history = useHistory();\n\n const contentTypes = [\n {\n name: t(`browse-content:main.questions`, 'Questions'),\n url: null,\n icon: IconQuestion\n },\n {\n name: t(`browse-content:main.videoTutorials`, 'Video Tutorials'),\n url: null,\n icon: IconPlay\n },\n {\n name: 'IVM',\n url: null,\n icon: IconIvm\n }\n ];\n const [contentType, setContentType] = useState(contentTypes[0].name);\n\n const [isOpen, setIsOpen] = useState(false);\n const showVideo = () => {\n setIsOpen(true);\n };\n\n return (\n <>\n setIsOpen(false)}\n />\n
\n
\n
\n {t(`browse-content:main.contentType`, 'Content Type')}\n
\n
\n
\n
    \n {contentTypes.map((item, index) => (\n \n {\n if (item.name === 'IVM' && isTrial) {\n setContentType(item.name);\n showVideo();\n } else if (item.name === 'IVM' && !isTrial) {\n e.preventDefault();\n openIVM();\n } else if (\n item.name ===\n t(`browse-content:main.videoTutorials`, 'Video Tutorials')\n ) {\n e.preventDefault();\n setContentType(item.name);\n history.push('/browse-content/problemsums-trial');\n } else if (item.url === null && item.name !== contentType) {\n e.preventDefault();\n setContentType(item.name);\n history.push('/browse-content/question-list');\n dispatch(selectTopic(sortedTopics[0]));\n }\n }}\n className=\"nav-link\"\n >\n \n {item.name}\n \n \n ))}\n
\n
\n
\n \n );\n}\n","import React from 'react';\nimport ContentType from 'components/Content/ContentType';\n\n// eslint-disable-next-line\nconst Subbar = React.forwardRef((_, ref) => {\n return (\n
\n
\n \n
\n
\n );\n});\n\nexport default Subbar;\n","export const HOTS_CURR_ID = 92;\n\nexport const AGE_GROUP = {\n 1: '6-9',\n 2: '',\n 3: '8-11',\n 4: '',\n 5: '10-13',\n 6: ''\n};\n","import styled from 'styled-components';\nimport { Modal } from 'react-bootstrap';\n\nconst StyledModal = styled(Modal)`\n .modal-dialog {\n display: flex;\n align-items: center;\n }\n .modal-content {\n background-color: transparent;\n align-items: center;\n width: ${({ width }) => width || '100%'};\n }\n .modal-custom {\n min-width: 30%;\n }\n .modal-custom-large {\n min-width: 60%;\n }\n`;\n\nexport default StyledModal;\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport StyledModal from './PopupModal.styles';\n\nexport default function PopupModal({ children, show, hide, width, className }) {\n return (\n {\n hide();\n }}\n width={width}\n className={className}\n >\n {children}\n \n );\n}\n","import styled from 'styled-components';\n\nexport const TrialModalBodyContainer = styled.div`\n max-width: 600px;\n background-color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px;\n font-family: Century Gothic;\n border-radius: 10px;\n border: 2px solid #dfe9e8;\n h3 {\n margin: 30px 0px;\n text-align: center;\n }\n p {\n font-size: 15px;\n line-height: 20px;\n padding: 15px 30px;\n span {\n text-decoration: underline;\n }\n }\n img {\n width: 104px;\n height: 94px;\n }\n button {\n background-color: #01a89e;\n border: none;\n border-radius: 2px;\n color: white;\n padding: 10px;\n width: 150px;\n font-size: 24px;\n font-weight: bold;\n margin-top: 30px;\n z-index: 10;\n }\n .shape-top {\n position: absolute;\n right: 19px;\n top: 19px;\n height: 0;\n width: 0;\n border-bottom: 200px solid #f9fafc;\n border-right: 200px solid transparent;\n transform: rotate(180deg);\n }\n .shape-bottom {\n position: absolute;\n left: 19px;\n bottom: 19px;\n height: 0;\n width: 0;\n border-bottom: 150px solid #f9fafc;\n border-right: 250px solid transparent;\n }\n`;\n","import React from 'react';\nimport TrialIcon from 'assets/img/icon-trial-account.png';\nimport ExpiredIcon from 'assets/img/icon-trial-account-expired.png';\nimport { TrialModalBodyContainer } from './TrialAccountModalBody.styles';\n\nconst TrialAccountModalBody = ({ hide, type }) => {\n return (\n \n
\n
\n \n

\n {type === 'trial-account' ||\n type === 'trial-question' ||\n type === 'trial-video' ? (\n You are using a trial account\n ) : (\n Your KooBits free trial has expired\n )}\n

\n

\n {type === 'trial-account' && (\n <>\n In the Koobits School Trial account, some content\n and features are locked.\n
\n They will be made available to you once your account is upgraded to\n a full account.\n \n )}\n {type === 'trial-question' && (\n <>\n In the Koobits School Trial account, you can add{' '}\n up to 5 questions to the question cart. The\n limitation will be lifted once your account is upgraded to a full\n account.\n \n )}\n {type === 'trial-video' && (\n <>\n In the Koobits School Trial account, you can play{' '}\n up to 5 videos. The limitation will be lifted once\n your account is upgraded to a full account.\n \n )}\n {type === 'trial-expired' && (\n <>\n Your KooBits School Trial account has expired.\n
\n Please contact our team to upgrade to a full account.\n
\n Email: support@koobits.com\n \n )}\n

\n {\n hide();\n }}\n >\n Got it\n \n \n );\n};\n\nexport default TrialAccountModalBody;\n","import styled from 'styled-components';\n\nconst VideoOverlayContainer = styled.div`\n width: 225px;\n height: 127.5px;\n position: absolute;\n .video-thumbnail {\n position: absolute;\n top: 0;\n left: 0;\n }\n .play-video {\n background-color: #474747;\n opacity: 0;\n display: flex;\n width: 225px;\n height: 127.5px;\n align-items: center;\n justify-content: center;\n .play-icon {\n width: 50%;\n height: 50%;\n }\n }\n .play-video:hover {\n background-color: #f9caa6;\n opacity: 0.4;\n cursor: pointer;\n }\n .disabled-video {\n background-color: #474747;\n opacity: 0.9;\n width: 225px;\n height: 127.5px;\n display: flex;\n .text {\n color: white;\n padding: 20px;\n }\n }\n .disabled-video:hover {\n cursor: pointer;\n }\n`;\n\nexport default VideoOverlayContainer;\n","import React, { useState } from 'react';\nimport ModalVideo from 'react-modal-video';\nimport PopupModal from 'components/Shared/PopupModal';\nimport TrialAccountModalBody from 'components/TrialAccount/TrialAccountModalBody';\nimport VideoOverlayContainer from './VideoOverlay.styles';\nimport 'react-modal-video/scss/modal-video.scss';\nimport PlayVideoIcon from 'assets/img/icon-play-video.svg';\n\nconst VideoOverlay = ({ type, videoId }) => {\n const [isOpen, setIsOpen] = useState(false);\n const showVideo = () => {\n setIsOpen(true);\n };\n\n const [showTrialAccount, setShowTrialAccount] = useState(false);\n const hideTrialAccount = () => {\n setShowTrialAccount(false);\n };\n\n return (\n <>\n setIsOpen(false)}\n />\n \n \n \n \n \n {type === 'play-video' && (\n
setIsOpen(true)}>\n \"play\"\n
\n )}\n {type === 'disabled-video' && (\n setShowTrialAccount(true)}\n />\n )}\n
\n \n );\n};\n\nexport default VideoOverlay;\n","import styled from 'styled-components';\n\nexport const NoVideoStyle = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n color: #555555;\n margin-top: 150px;\n .no-vid-title {\n font-weight: bold;\n margin: 40px 0 10px;\n }\n`;\n","import React, { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport noVideo from 'assets/img/no-videos-found.svg';\nimport { NoVideoStyle } from './NoVideo.styles';\n\nconst NoVideoFound = () => {\n const { t } = useTranslation(['browse-content']);\n return (\n \n \"no-video-found\"\n
\n {t(\n `browse-content:main.noVideoTitle`,\n 'No video tutorials found for this topic'\n )}\n
\n
\n {t(\n `browse-content:main.noVideoDesc`,\n 'Browse other topics to watch more video tutorials.'\n )}\n
\n
\n );\n};\n\nexport default memo(NoVideoFound);\n","import styled from 'styled-components';\n\nconst SkillsResultContainer = styled.div`\n .subbar-inner {\n position: relative;\n top: 48px;\n z-index: 10;\n }\n`;\n\nexport default SkillsResultContainer;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty } from 'ramda';\nimport { resetSelectedSkill } from 'stores/skills/actions';\nimport SkillsResultContainer from './SkillsResult.styles';\n\nexport default function SkillsResult({ isVideo, totalVideos }) {\n const { t } = useTranslation(['browse-content']);\n const dispatch = useDispatch();\n const { skills, selectedSkill } = useSelector(state => state.skills);\n const onSeeSkillDescription = e => {\n e.preventDefault();\n dispatch(resetSelectedSkill());\n };\n\n const data = isVideo ? totalVideos : skills;\n return (\n \n
\n
\n
\n
\n Total{' '}\n \n {data?.length ?? 'Empty'} {isVideo ? 'videos' : 'skills'}\n \n
\n
\n \n
\n
\n
\n );\n}\n","import styled from 'styled-components';\n\nexport const ProblemsumsTrialContainer = styled.div`\n display: flex;\n flex-direction: column;\n /* margin: 80px 60px; */\n flex-wrap: wrap;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',\n 'Segoe UI Symbol', 'Noto Color Emoji';\n .logo {\n margin-bottom: 30px;\n text-align: center;\n }\n .level {\n .active {\n background-color: #545454;\n color: white;\n border-color: #545454;\n }\n }\n .topics {\n .active {\n background-color: #545454;\n color: white;\n border-color: #545454;\n }\n }\n .btn-group {\n margin-right: 20px;\n margin-bottom: 10px;\n background-color: #ededed;\n border: 1px solid #adb5bd;\n padding: 5px 12px;\n }\n .vids-header {\n margin-top: 25px;\n padding: 30px 25px 5px;\n font-size: 16px;\n .level-id {\n font-weight: 700;\n margin-right: 3px;\n }\n }\n .age-header {\n font-size: 1rem;\n color: #000000;\n background-color: #ffffff;\n max-width: fit-content;\n margin-left: 1rem;\n margin-top: 4rem;\n padding: 10px 25px;\n font-weight: 600;\n }\n`;\n\nexport const VideoListContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n /* margin-top: 50px; */\n padding: 10px 30px;\n overflow-y: scroll;\n .video {\n width: 225px;\n height: 127.5px;\n margin-right: 20px;\n margin-bottom: 10px;\n color: #444;\n iframe {\n border: none;\n width: 100%;\n height: 100%;\n }\n }\n .video-title {\n font-weight: bold;\n margin-bottom: 20px;\n display: flex;\n flex-direction: column;\n .video-desc {\n margin-top: 5px;\n font-size: 14px;\n font-weight: 500;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty } from 'ramda';\n\nimport { HOTS_CURR_ID, AGE_GROUP } from 'constants/hotsCurr';\n\nimport VideoOverlay from 'components/Content/VideoOverlay';\nimport NoVideoFound from 'components/Content/NoVideoFound';\nimport SkillsResult from 'components/Content/SkillsResult';\nimport { unSelectTopic } from 'stores/topics/actions';\nimport {\n ProblemsumsTrialContainer,\n VideoListContainer\n} from './ProblemSumsTrial.styles';\n\nconst ProblemsumsTrial = () => {\n const dispatch = useDispatch();\n const { t } = useTranslation(['common']);\n const { selectedTopic } = useSelector(state => state.topics);\n const { isTrial } = useSelector(state => state.login);\n const { videos, selectedLevel } = useSelector(state => state.levels);\n const { selectedCurriculum } = useSelector(state => state.curriculums);\n const [isRun, setIsRun] = useState(false);\n const [videoData, setVideoData] = useState([]);\n\n const isHOTS = selectedCurriculum?.CurriculumID === HOTS_CURR_ID;\n\n useEffect(() => {\n dispatch(unSelectTopic());\n }, [dispatch]);\n\n useEffect(() => {\n if (!isRun) {\n setIsRun(true);\n return;\n }\n if (!isEmpty(selectedTopic)) {\n const tempVideo = [...videos].filter(\n vid => vid.TopicId === selectedTopic.ID\n );\n setVideoData(tempVideo);\n } else {\n setVideoData([...videos]);\n }\n }, [selectedTopic, videos, isRun]);\n\n const videoLists = videoData.map((video, index) => (\n
\n
\n 5 ? 'disabled-video' : 'play-video'}\n videoId={video.videoCode}\n />\n {/* */}\n
\n
\n \n Skill {video.skillId}- {video.TopicName}\n \n {video.SkillDescription}\n
\n
\n ));\n\n if (isHOTS) {\n return (\n \n \n
\n \n {t(`common:age`, 'Age')} {AGE_GROUP[selectedLevel.ID]} -{' '}\n \n \n {t(`common:allTopics`, 'All Topics')}\n \n
\n \n
\n );\n }\n\n return (\n \n \n
\n P{selectedLevel.ID}-\n \n {isEmpty(selectedTopic)\n ? t(`common:allTopics`, 'All Topics')\n : selectedTopic.Name}\n \n
\n {videoLists.length === 0 ? : null}\n {videoLists.length > 0 ? (\n {videoLists}\n ) : null}\n
\n );\n};\n\nexport default ProblemsumsTrial;\n","import { useState, useEffect } from 'react';\n\nconst useWindowSize = () => {\n const [windowSize, setWindowSize] = useState({\n width: window.innerWidth,\n height: window.innerHeight\n });\n\n const resizeHandler = () => {\n setWindowSize({ width: window.innerWidth, height: window.innerHeight });\n };\n\n useEffect(() => {\n window.addEventListener('resize', resizeHandler);\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n });\n\n return windowSize;\n};\n\nexport default useWindowSize;\n","export default (obj, keyMaps) => {\n const newObj = {};\n keyMaps.forEach(key => {\n newObj[key.new] = obj[key.old];\n });\n return { ...newObj, ...obj };\n};\n","import { fetchSingleVariation } from 'stores/variations/actions';\nimport { useDispatch } from 'react-redux';\nimport React, { useEffect } from 'react';\n\nconst scrollMarginTop = 20;\n// eslint-disable-next-line\nconst ItemWrap = React.forwardRef(({ children, id, skill, sio }, ref) => {\n const dispatch = useDispatch();\n useEffect(() => {\n let timer = null;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n clearTimeout(timer);\n if (!sio.length) {\n timer = setTimeout(() => {\n dispatch(fetchSingleVariation({ skill }));\n }, 500);\n }\n } else {\n clearTimeout(timer);\n }\n },\n { threshold: 0.5 }\n );\n const currentRef = ref?.current;\n if (currentRef) {\n observer.observe(currentRef);\n }\n return () => {\n if (currentRef) {\n observer.unobserve(currentRef);\n }\n clearTimeout(timer);\n };\n }, [dispatch, ref, sio, sio.length, skill]);\n return (\n <>\n {/* eslint-disable-next-line */}\n
\n {children}\n
\n \n );\n});\n\nexport default ItemWrap;\n","import React, { useState } from 'react';\nimport { isNil } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectQuestion } from 'stores/questions/actions';\nimport PopupModal from 'components/Shared/PopupModal';\nimport TrialAccountModalBody from 'components/TrialAccount/TrialAccountModalBody';\n\nexport default function SimilarQuestions({\n align,\n button,\n onSelectedQuestion,\n questions,\n variation\n}) {\n const { t } = useTranslation(['browse-content']);\n const [hoverButton, setHoverButton] = useState(false);\n const [hoverMenu, setHoverMenu] = useState(false);\n const show = hoverButton || hoverMenu;\n const dispatch = useDispatch();\n const { selectedQuestion, cartQuestions } = useSelector(\n state => state.questions\n );\n const { isTrial } = useSelector(state => state.login);\n\n // modal state\n const [showTrialAccount, setShowTrialAccount] = useState(false);\n const hideTrialAccount = () => {\n setShowTrialAccount(false);\n };\n\n // onClick handler for change value button\n const changeValueButton = () => {\n if (isTrial) {\n setShowTrialAccount(true);\n setHoverButton(!hoverButton);\n } else {\n setHoverButton(!hoverButton);\n }\n };\n\n const isSelectedQuestion = question =>\n selectedQuestion[variation?.ID]?.Id === question.Id ||\n (isNil(selectedQuestion[variation?.ID]) && questions[0].Id === question.Id); // UI, first item as default selected item\n\n const isAssignedQuestion = question =>\n cartQuestions.findIndex(q => q.QuestionId === question.Id) !== -1;\n\n const getQuestionClassNames = question => {\n if (isAssignedQuestion(question)) {\n return 'active';\n }\n\n if (isSelectedQuestion(question)) {\n return 'selected';\n }\n\n return '';\n };\n\n let dropdownClassNames = `dropdown-menu`;\n if (align === 'left') {\n dropdownClassNames = `${dropdownClassNames} dropdown-menu-left`;\n }\n if (align === 'right') {\n dropdownClassNames = `${dropdownClassNames} dropdown-menu-right`;\n }\n\n return (\n <>\n \n \n \n \n \n {' '}\n {t(`browse-content:questionCard.changeVal`, 'Change Value')}\n \n setHoverMenu(true)}\n onMouseLeave={() => setTimeout(() => setHoverMenu(false), 300)}\n className={`${dropdownClassNames}${show ? ' show' : ''}`}\n data-cy=\"changevaluetooltip\"\n >\n
    \n {questions.map((question, index) => (\n \n {\n e.preventDefault();\n dispatch(selectQuestion(question));\n if (!isNil(onSelectedQuestion)) {\n onSelectedQuestion(index);\n }\n }}\n >\n Qn{index + 1}\n \n \n ))}\n
\n
\n {' '}\n {t(\n `browse-content:questionCard.changeVal`,\n 'Question has been assigned'\n )}\n
\n
\n \n \n );\n}\n","import React from 'react';\n\nexport default function DifficultyChillis(props) {\n const { value } = props;\n const Chillis = [];\n const filteredValue = value <= 0 ? 3 : value;\n\n for (let index = 1; index <= 9; index += 2) {\n Chillis.push(\n \n );\n }\n return {Chillis};\n}\n","export default (str, showImage = true) => {\n let htmlText = str;\n // \"Content\" tag >> to \"div\" tag\n htmlText = htmlText.replace(/(<\\/?)Content([^>]*>)/gi, '$1div$2');\n\n // removing \"CDATA\" opening and closing tags\n htmlText = htmlText.replace(//g, '');\n\n // converting \"/>\" tag-ending to a \">\" tag-ending in order to avoid detecting \"/\" as a divide sign\n htmlText = htmlText.replace(/\\/>/g, '>');\n\n // converting xml-img to html-img\n htmlText = htmlText.replace(\n /(]*)\\surl=([^<>]*>)/g,\n `$1 style=\"max-width:100%;height:auto;${\n !showImage ? 'display:none;' : '' // To hide image, when we want to move the position\n }\" src=$2`\n );\n\n // converting \"helptext\" tags to \"div\" tags with class \"help-text\"\n while (htmlText.match(/(((?!helptext>).)+)<\\/helptext>/g))\n htmlText = htmlText.replace(\n /(((?!helptext>).)+)<\\/helptext>/g,\n '$1'\n );\n\n // html parts for fractions\n const fractionHtmlStart =\n '';\n const fractionHtmlMiddle =\n '';\n const fractionHtmlEnd = '';\n\n // converting \"fraction\" tags to html code with horizontal line\n while (\n htmlText.match(\n /\\[fraction\\](((?!fracline\\]).)+)\\/(((?!fracline\\]).)+)\\[\\/fraction\\]/g\n )\n )\n htmlText = htmlText.replace(\n /\\[fraction\\](((?!fracline\\]).)+)\\/(((?!fracline\\]).)+)\\[\\/fraction\\]/g,\n '[fraction]$1[fracline]$3[/fraction]'\n );\n while (\n htmlText.match(\n /\\[fraction\\](((?!fraction\\]).)*)&(((?!fraction\\]).)*)\\[fracline\\]/g\n )\n )\n htmlText = htmlText.replace(\n /\\[fraction\\](((?!fraction\\]).)*)&(((?!fraction\\]).)*)\\[fracline\\]/g,\n '$1[fraction]$3[fracline]'\n );\n while (\n htmlText.match(\n /\\[fraction\\](((?!fraction\\]).)*)\\[fracline\\](((?!fraction\\]).)*)\\[\\/fraction\\]/g\n )\n )\n htmlText = htmlText.replace(\n /\\[fraction\\](((?!fraction\\]).)*)\\[fracline\\](((?!fraction\\]).)*)\\[\\/fraction\\]/g,\n `${fractionHtmlStart}$1${fractionHtmlMiddle}$3${fractionHtmlEnd}`\n );\n // removing unused \"fraction\" tags\n htmlText = htmlText.replace(/\\[fraction\\]|\\[fracline\\]|\\[\\/fraction\\]/g, '');\n\n // EQN\n htmlText = htmlText.replace(/EQN\\(/g, '[eqntag]');\n while (htmlText.match(/\\(([^)(]*)\\)/g))\n htmlText = htmlText.replace(/\\(([^)(]*)\\)/g, '($1)');\n htmlText = htmlText.replace(\n /\\[eqntag\\](((?!fraction\\]).)*)\\[fracline\\](((?!fraction\\]).)*)\\)/g,\n `${fractionHtmlStart}$1${fractionHtmlMiddle}$3${fractionHtmlEnd}`\n );\n htmlText = htmlText.replace(\n /\\[eqntag\\](((?!fraction\\]).)*)\\/(((?!fraction\\]).)*)\\)/g,\n `${fractionHtmlStart}$1${fractionHtmlMiddle}$3${fractionHtmlEnd}`\n );\n // removing unused \"EQN\" tags\n htmlText = htmlText.replace(/\\[eqntag\\](((?!eqntag\\]).)*)\\)/g, '$1');\n\n // replacing simple tags\n htmlText = htmlText.replace(/\\n/g, '
');\n htmlText = htmlText.replace(/\\[angle\\]/g, '∠');\n htmlText = htmlText.replace(/\\[div\\]/g, '÷');\n htmlText = htmlText.replace(/\\[deg\\]/g, '°');\n htmlText = htmlText.replace(/\\[quote\\]/g, '"');\n htmlText = htmlText.replace(/\\[cent\\]/g, '¢');\n htmlText = htmlText.replace(/\\[arrow\\]/g, '→');\n htmlText = htmlText.replace(/\\[triangle\\]/g, '▵');\n htmlText = htmlText.replace(/\\[approx\\]/g, '∼');\n htmlText = htmlText.replace(/\\[square\\]/g, '2');\n htmlText = htmlText.replace(/\\[cube\\]/g, '3');\n htmlText = htmlText.replace(/\\[power4\\]/g, '4');\n htmlText = htmlText.replace(/\\[power5\\]/g, '5');\n\n // converting \"blank#\" tag\n htmlText = htmlText.replace(/\\[blank\\]/g, '__');\n htmlText = htmlText.replace(/\\[blank1\\]/g, '__');\n while (htmlText.match(/\\[blank(\\d+)\\]/)) {\n htmlText = htmlText.replace(/\\[blank(\\d+)\\]/, (match, numOfUnders) => {\n let currentNumOfUnders = parseInt(numOfUnders); // eslint-disable-line\n if (currentNumOfUnders <= 0) return '';\n currentNumOfUnders--; // eslint-disable-line\n return `_[blank${currentNumOfUnders}]`;\n });\n }\n\n return htmlText;\n};\n","import styled from 'styled-components';\n\nexport const MediaBody = styled.div`\n p {\n font-family: 'Muli', sans-serif;\n font-size: 0.875rem;\n line-height: 1.4285;\n color: rgba(52, 52, 52, 0.8);\n }\n`;\n\nexport const McqOptionsList = styled.ul`\n list-style-type: circle;\n`;\n\nexport const TableModal = styled.div`\n table {\n width: 140px;\n margin-left: initial;\n }\n table tbody tr td {\n text-align: center;\n }\n table tbody tr td hr {\n margin-top: 0;\n margin-bottom: 3px;\n border-color: darkgray;\n }\n table tbody tr td input {\n max-width: 25px !important;\n height: 35px;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { isEmpty } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport {\n MediaBody,\n McqOptionsList,\n TableModal\n} from './QuestionContent.styles';\n// import IconPlay2 from 'assets/img/Icon Video.svg';\n\nexport default function QuestionContent({\n question,\n onShowModal,\n onShowSolution,\n isFactualFluencyView\n}) {\n // jsx renders\n const { t } = useTranslation(['browse-content']);\n const { title, imageUri, mcqOptions } = questionParser(question);\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n const renderQuestion = HTMLReactParser(convertTagsToHTML(title, false), {\n replace: domNode => {\n if (domNode.name === 'helptext') {\n return (\n \n {domNode.children[0]?.data ?? ''}\n \n );\n }\n if (domNode.name === 'table') {\n domNode.attribs.cellspacing = '0';\n domNode.attribs.cellpadding = '0';\n domNode.attribs.style = 'align-content: center;';\n return domNode;\n }\n if (domNode.name === 'td') {\n if (\n domNode.attribs.hasOwnProperty('style') &&\n !domNode.attribs.style.includes('border')\n ) {\n domNode.attribs.style = 'width: 10%';\n }\n return domNode;\n }\n if (domNode.name === 'input') {\n return (\n \n );\n }\n return domNode;\n }\n });\n const renderQuestionCondition = () => {\n if (isFactualFluencyView) {\n if (Array.isArray(renderQuestion)) {\n return renderQuestion[0];\n }\n return renderQuestion;\n }\n return renderQuestion;\n };\n return (\n
\n \n {renderQuestionCondition()}\n {mcqOptions.length > 0 && (\n \n {renderOptions.map(option => (\n
  • {option}
  • \n ))}\n
    \n )}\n\n {!isFactualFluencyView && (\n <>\n
    \n
    \n {\n e.preventDefault();\n onShowSolution && onShowSolution();\n onShowModal && onShowModal();\n }}\n >\n {t(`browse-content:questionCard.seeSol`, 'See Solution')}\n \n \n )}\n
    \n {!isEmpty(imageUri) && (\n
    \n \"question\"\n
    \n )}\n
    \n );\n}\n","import React, { useState } from 'react';\nimport { isNil, findIndex, propEq } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport IconPlay from 'assets/img/icon-play.svg';\nimport { addQuestion, deleteQuestion } from 'stores/questions/actions';\nimport SimilarQuestions from 'components/Content/SimilarQuestions';\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport { setSelectedQuestions } from 'stores/worksheet/actions';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport PopupModal from 'components/Shared/PopupModal';\nimport TrialAccountModalBody from 'components/TrialAccount/TrialAccountModalBody';\nimport { featureToggle } from 'constants/index';\n// import IconPlay2 from 'assets/img/Icon Video.svg';\n\nexport default function QuestionCardView({\n question,\n questions,\n onShowModal,\n onShowSolution\n}) {\n const { t } = useTranslation(['browse-content']);\n const dispatch = useDispatch();\n // Redux state selector\n const { cartQuestions } = useSelector(state => state.questions);\n const { selectedQuestions } = useSelector(state => state.worksheet);\n const { variations } = useSelector(state => state.variations);\n const { isTrial } = useSelector(state => state.login);\n // Variable definitions\n const variation = variations.find(v => v.ID === question.VariationId);\n const isAdded = !isNil(cartQuestions.find(item => item.ID === question.Id));\n const btnClassNames = `btn ${\n isAdded ? 'btn-outline-primary' : 'btn-primary'\n } btn-md`;\n // Modal state\n const [showTrialAccount, setShowTrialAccount] = useState(false);\n const hideTrialAccount = () => {\n setShowTrialAccount(false);\n };\n\n // Function or actions\n const questionSelector = () => {\n // Create new temp variable and use JS array slice / filter instead of splice\n // so we don't mutate original `selectedQuestions` variable\n // @see {@link https://stackoverflow.com/a/40737615} and {@link https://daveceddia.com/why-not-modify-react-state-directly/}\n let updatedSelectedQuestions;\n if (isAdded) {\n dispatch(deleteQuestion(question.Id));\n const index = findIndex(propEq('ID', question.Id))(selectedQuestions);\n if (index !== -1) {\n updatedSelectedQuestions = [\n ...selectedQuestions.slice(0, index),\n ...selectedQuestions.slice(index + 1)\n ];\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n }\n } else {\n dispatch(addQuestion(question));\n }\n };\n\n const toggleQuestionSelector = () => {\n if (isTrial) {\n if (cartQuestions.length + 1 > 5) {\n setShowTrialAccount(true);\n } else {\n questionSelector();\n }\n } else {\n questionSelector();\n }\n };\n\n return (\n <>\n \n \n \n
    \n {\n /**\n * Prevent modal to show when others input/button clicked clicked\n * Using e.target.dataset.toggle === \"modal\", not really working\n */\n if (['DIV', 'P'].includes(e.target.tagName)) {\n onShowModal();\n }\n }}\n >\n
    \n
    \n
    \n \n {t(`browse-content:questionCard.questionId`, 'Question ID')} :{' '}\n {question.Id}\n \n \n \n {t(`browse-content:questionCard.difficulty`, 'Difficulty')}:\n \n \n \n
    \n
    \n {variation?.Name}\n {featureToggle.videoPlayButton && (\n \n \"icon-play\"\n \n )}\n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n {/* \n \n 9.2K\n \n \n \n \n Flag\n \n */}\n \n
    \n
    \n \n {isAdded\n ? t(`browse-content:questionCard.unselect`, 'Unselect')\n : t(`browse-content:questionCard.select`, 'Select')}\n \n
    \n
    \n
    \n
    \n
    \n \n );\n}\n","import React, { useState } from 'react';\nimport Button from 'react-bootstrap/Button';\n\nexport default function Collapse({ collapsed, hideText, showText, children }) {\n const [show, setShow] = useState(collapsed);\n const toggleShow = () => setShow(!show);\n const showStyles = `collapse${show ? ' show' : ''}`;\n return (\n
    \n
    \n \n
    \n
    \n {children}\n
    \n
    \n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nexport default function SpinnerOverlay({ isLoading }) {\n return (\n \n \n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { isNil } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport { addQuestion, deleteQuestion } from 'stores/questions/actions';\nimport Collapse from 'components/Shared/Collapse';\nimport SimilarQuestions from 'components/Content/SimilarQuestions';\nimport SpinnerOverlay from 'components/Loader/SpinnerOverlay';\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport {\n McqOptionsList,\n TableModal\n} from 'components/Question/QuestionContent.styles';\n\nexport default function QuestionModalView({\n handleSlideTo,\n skillTitle,\n question: { VariationId }, // inconsistent question data\n questions,\n onCloseModal,\n showSolution\n}) {\n const { t } = useTranslation(['browse-content']);\n const dispatch = useDispatch();\n // State\n const [questionTitle, setQuestionTitle] = useState(null);\n const [questionSolution, setQuestionSolution] = useState(null);\n const [mcqOptions, setMCQOptions] = useState([]);\n\n // Redux state selector\n const { selectedTopic } = useSelector(state => state.topics);\n const { variations } = useSelector(state => state.variations);\n const { isLoading, cartQuestions, selectedQuestion } = useSelector(\n state => state.questions\n );\n\n // Variable definitions\n const question = selectedQuestion[VariationId] ?? {};\n const variation = variations.find(v => v.ID === VariationId) ?? {};\n const isAdded = !isNil(cartQuestions.find(item => item.ID === question.Id));\n const btnClassNames = `btn ${\n isAdded ? 'btn-outline-primary' : 'btn-primary'\n } btn-block fz14`;\n\n // Functions or actions\n const toggleQuestionSelector = () =>\n isAdded\n ? dispatch(deleteQuestion(question.Id))\n : dispatch(addQuestion(question));\n\n // Effects\n useEffect(() => {\n if (!isNil(question.Payload)) {\n const { title, solution, mcqOptions } = questionParser(question);\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setMCQOptions(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n \n );\n }\n if (domNode.name === 'helptext') {\n return (\n \n {domNode.children[0]?.data ?? ''}\n \n );\n }\n if (domNode.name === 'input') {\n return ;\n }\n return domNode;\n }\n })\n );\n\n setQuestionSolution(HTMLReactParser(convertTagsToHTML(solution)));\n }\n }, [question]);\n\n return (\n
    \n \n
    \n
    \n \n ×\n \n

    {selectedTopic.Name}

    \n

    {skillTitle}

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {t(\n `browse-content:questionCard.questionId`,\n 'Question ID'\n )}\n : {question.Id}\n \n \n {t(\n `browse-content:questionCard.difficulty`,\n 'Difficulty'\n )}\n \n \n {variation.Name}\n
    \n
    \n
    \n \n \n Flag\n \n \n \n \n 0\n \n \n
    \n
    \n
    \n
    \n {questionTitle}\n {mcqOptions.length > 0 && (\n \n {mcqOptions.map(option => (\n
  • {option}
  • \n ))}\n
    \n )}\n
    \n
    \n
    \n \n {questionSolution}\n \n
    \n
    \n
    \n
    \n \n {isAdded\n ? t(`browse-content:questionCard.unselect`, 'Unselect')\n : t(`browse-content:questionCard.pselect`, '+ Select')}\n \n \n
    \n

    Tag

    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import React from 'react';\n\nconst SkillItem = props => {\n const {\n skill: { Display, AliasSkillName }\n } = props;\n return (\n \n {`Skill ${Display} `}\n {`- ${AliasSkillName}`}\n \n );\n};\n\nexport default SkillItem;\n","import React from 'react';\nimport ContentLoader from 'react-content-loader';\n\nexport default function QuestionLoader() {\n return (\n <>\n {[...Array(2)].map((x, index) => (\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 \n \n \n \n
    \n
    \n
    \n ))}\n \n );\n}\n","import React, { createRef, useState, useEffect } from 'react';\nimport { isNil, sort } from 'ramda';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal } from 'react-bootstrap';\nimport Slider from 'react-slick';\nimport 'slick-carousel/slick/slick.css';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport filterQuestions from 'helpers/filterQuestions';\nimport parseKeys from 'helpers/parseKeys';\nimport { selectQuestion } from 'stores/questions/actions';\nimport { selectVariation } from 'stores/variations/actions';\nimport ItemWrap from 'components/Content/ItemWrap';\nimport QuestionCardView from 'components/Content/QuestionCardView';\nimport QuestionModalView from 'components/Content/QuestionModalView';\nimport SkillItem from 'components/Content/SkillItem';\nimport QuestionLoader from 'components/Loader/QuestionLoader';\n\nexport default function QuestionsView() {\n const slider = React.createRef();\n const dispatch = useDispatch();\n\n // Redux state section\n const { questions, selectedQuestion } = useSelector(state => state.questions);\n const { variations, selectedVariation, isTitleLoading } = useSelector(\n state => state.variations\n );\n const { filters } = useSelector(state => state.filters);\n const { skills: unsortedSkills, selectedSkill } = useSelector(\n state => state.skills\n );\n const skills = sort((a, b) => a.Display - b.Display, unsortedSkills);\n\n // State section\n const [show, setShow] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const [filteredQuestions, setFilteredQuestions] = useState([]);\n const [initialSlide, setInitialSlide] = useState(0);\n\n const handleShowSolution = () => setShowSolution(true);\n const handleHideSolution = () => setShowSolution(false);\n const getSkillTitle = skill => ;\n const handleClose = () => {\n handleHideSolution();\n dispatch(selectVariation({}));\n setShow(false);\n };\n\n const handleShow = async question => {\n const variation = variations.find(v => v.ID === question.VariationId);\n if (!isNil(variation)) {\n await dispatch(selectVariation(variation));\n }\n await dispatch(selectQuestion(question));\n setShow(true);\n };\n\n const handleSlideTo = index => slider.current.slickGoTo(index);\n const onSlideChange = index =>\n dispatch(selectQuestion(filteredQuestions[index]));\n\n const skillRefs = skills.reduce((acc, value) => {\n acc[value.ID] = createRef();\n return acc;\n }, {});\n\n const scrollToSkill = id => {\n const element = skillRefs[id].current;\n // Header element height\n const offset = -53;\n const scrollContainer = document.getElementsByClassName(\n 'simplebar-content-wrapper'\n )[1];\n\n if (element && scrollContainer) {\n const elementRect = element.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n const targetScrollTop =\n elementRect.top -\n containerRect.top +\n scrollContainer.scrollTop +\n offset;\n scrollContainer.scrollTo({\n top: targetScrollTop,\n behavior: 'smooth'\n });\n }\n };\n\n useEffect(() => {\n if (!isTitleLoading) scrollToSkill(selectedSkill.ID);\n }, [isTitleLoading]); // eslint-disable-line\n\n useEffect(() => {\n const newFilteredQuestion = filterQuestions(\n !isNilOrEmpty(questions) ? questions : selectedVariation?.Questions ?? [],\n filters\n ).map(question =>\n // parse the question data to make it similar from question detail\n parseKeys(question, [\n { old: 'QuestionID', new: 'Id' },\n { old: 'VariationID', new: 'VariationId' }\n ])\n );\n setFilteredQuestions(newFilteredQuestion);\n const questionIndex = Math.max(\n 0,\n newFilteredQuestion.findIndex(\n q => q.Id === selectedQuestion[selectedVariation?.ID]?.Id\n )\n );\n setInitialSlide(questionIndex);\n }, [selectedQuestion, selectedVariation, questions]); // eslint-disable-line\n\n return (\n <>\n {!isNilOrEmpty(selectedVariation) && (\n \n \n {filteredQuestions.map(question => {\n return (\n skill.SIOID === selectedVariation.SIOID\n )\n )}\n question={question}\n questions={filteredQuestions}\n onCloseModal={handleClose}\n showSolution={showSolution}\n />\n );\n })}\n \n \n )}\n {skills.map(skill => {\n const filterArr = variations.filter(\n variation => variation.SIOID === skill.SIOID\n );\n return (\n \n

    {getSkillTitle(skill)}

    \n
    \n
    \n {filterArr.length > 0 ? (\n filterArr.map(variation => {\n // for variation with emtpy questions, just return null\n if (isNilOrEmpty(variation.Questions[0])) {\n return null;\n }\n const variationQuestions = variation.Questions.map(\n question =>\n // parse the question data to make it similar from question detail\n parseKeys(question, [\n { old: 'QuestionID', new: 'Id' },\n { old: 'VariationID', new: 'VariationId' }\n ])\n );\n const question =\n selectedQuestion[variation.ID] ??\n variationQuestions[0].Question;\n if (isNilOrEmpty(question)) {\n return null;\n }\n return (\n handleShow(question)}\n onShowSolution={handleShowSolution}\n />\n );\n })\n ) : (\n \n )}\n
    \n
    \n \n );\n })}\n \n );\n}\n","export default (questions, filters) => {\n const questionType = filters.find(f => f.title === 'Question Type');\n return questions.filter(question => {\n if (\n questionType?.options['MCQ'] === questionType?.options['Short Answer']\n ) {\n return true;\n }\n\n if (questionType?.options['MCQ']) {\n return question.QuestionType === 1;\n }\n\n if (questionType?.options['Short Answer']) {\n return question.QuestionType === 2;\n }\n\n return true;\n });\n};\n","import React from 'react';\nimport ContentLoader from 'react-content-loader';\n\nexport default function SkillsLoader() {\n const randomWidth = Math.floor(Math.random() * (340 - 80 + 1)) + 80;\n return (\n
  • \n \n \n \n
  • \n );\n}\n","import React from 'react';\nimport { sort } from 'ramda';\nimport { useDispatch } from 'react-redux';\nimport { selectSkill } from 'stores/skills/actions';\nimport SkillItem from 'components/Content/SkillItem';\nimport SkillsLoader from 'components/Loader/SkillsLoader';\n\nconst SkillsList = ({ isLoading, skills }) => {\n const sortedSkills = sort((a, b) => a.Display - b.Display, skills);\n const dispatch = useDispatch();\n const sortByDisplay = (a, b) => a.Display - b.Display;\n return (\n
      \n {isLoading\n ? [...Array(8)].map((y, index) => )\n : sortedSkills.sort(sortByDisplay).map((skill, index) => (\n
    • \n {\n e.preventDefault();\n dispatch(selectSkill(skill));\n }}\n >\n \n \n
    • \n ))}\n
    \n );\n};\n\nexport default SkillsList;\n","import styled from 'styled-components';\n\nconst ContentWrapContainer = styled.div`\n .content-wrap-scrollpane {\n padding: 50px 20px 20px;\n }\n`;\n\nexport default ContentWrapContainer;\n","import React from 'react';\nimport SimpleBar from 'simplebar-react';\nimport 'simplebar/dist/simplebar.min.css';\nimport ContentWrapContainer from './ContentWrap.styles';\n\nexport default function ContentWrap({ paddingTop, children }) {\n return (\n \n
    \n {children}\n
    \n
    \n );\n}\n","export default text =>\n text\n .toString()\n .toLowerCase()\n .trim()\n .replace(/&/g, '-and-')\n .replace(/[\\s\\W-]+/g, '-');\n","import { SET_FILTERS, RESET_FILTERS } from './actionTypes';\n\nexport const setFilters = filters => {\n return { type: SET_FILTERS, filters };\n};\n\nexport const resetFilters = () => {\n return { type: RESET_FILTERS };\n};\n","import React from 'react';\n\nexport default function Checkbox(props) {\n const { checked, disabled, onChange, id, value } = props;\n return (\n
    \n \n {/* eslint-disable-next-line */}\n \n
    \n );\n}\n","import React, { useState } from 'react';\n\nexport default function DropdownFilter({ filters, onCheckFilter }) {\n const [show, setShow] = useState(false);\n return (\n
    \n setShow(!show)}\n >\n + Add Filter\n \n \n {filters.map((filter, index) => {\n const checked = filter.isActive;\n const id = `customCheckFilter${index}`;\n const handleCheck = () => onCheckFilter(filter, index);\n return (\n
    \n \n {/* eslint-disable-next-line */}\n \n
    \n );\n })}\n
    \n setShow(!show)}\n >\n OK\n \n
    \n
    \n \n );\n}\n","import React from 'react';\nimport update from 'immutability-helper';\nimport { useDispatch, useSelector } from 'react-redux';\nimport slugify from 'helpers/text/slugify';\nimport { setFilters } from 'stores/filters/actions';\nimport Checkbox from 'components/Shared/Checkbox';\nimport DropdownFilter from 'components/Content/DropdownFilter';\n\nexport default function QuestionFilter() {\n const dispatch = useDispatch();\n const filters = useSelector(state => state.filters.filters);\n const onCheckFilter = (filter, index) => {\n const newFilters = update(filters, {\n [index]: {\n isActive: { $set: !filter.isActive }\n }\n });\n dispatch(setFilters(newFilters));\n };\n\n const checkActive = title => {\n return filters?.find(f => f.title === title)?.isActive ? 'active' : '';\n };\n\n const onCheckOption = (key, filter, index) => {\n const newFilters = update(filters, {\n [index]: {\n options: {\n [key]: {\n $set: !filter.options[key]\n }\n }\n }\n });\n dispatch(setFilters(newFilters));\n };\n\n return (\n <>\n {filters[1].isActive && (\n \n \n
    Questions Pools
    \n
    \n \n
    \n \n \n )}\n \n
    \n
    \n
    Questions Pools
    \n
    \n
    \n
    \n
    \n
    \n {Object.keys(filters[1]?.options)?.map(\n (filterOption, index) => (\n \n onCheckOption(filterOption, filters[1], 1)\n }\n value={filterOption}\n />\n )\n )}\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Assessment Objectives\n onCheckFilter(filters[0], 0)}\n >\n \n \n
    \n
    \n
    \n
    \n
    \n
    \n {Object.keys(filters[0]?.options)?.map(\n (filterOption, index) => (\n \n onCheckOption(filterOption, filters[0], 0)\n }\n value={filterOption}\n />\n )\n )}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Question Type\n onCheckFilter(filters[2], 2)}\n >\n \n \n
    \n
    \n
    \n
    \n
    \n
    \n {Object.keys(filters[2]?.options)?.map(\n (filterOption, index) => (\n \n onCheckOption(filterOption, filters[2], 2)\n }\n value={filterOption}\n />\n )\n )}\n
    \n
    \n
    \n
    \n
    \n \n \n );\n}\n","import React, { createRef, useEffect, useState } from 'react';\nimport { isEmpty } from 'ramda';\nimport { useSelector } from 'react-redux';\nimport useWindows from 'helpers/useWindowSize';\nimport QuestionsView from 'components/Content/QuestionsView';\nimport SkillsList from 'components/Content/SkillsList';\nimport ContentWrap from 'components/Content/ContentWrap';\nimport QuestionFilter from 'components/Content/QuestionsFilter';\nimport SkillsResult from 'components/Content/SkillsResult';\n\nconst QuestionList = () => {\n const subbarRef = createRef();\n const { width } = useWindows();\n const [subbarHeight, setSubbarHeight] = useState(0);\n const { skills, selectedSkill, isLoading } = useSelector(\n state => state.skills\n );\n useEffect(() => {\n setSubbarHeight(subbarRef.current?.clientHeight);\n }, [subbarRef, width]);\n return (\n <>\n \n \n \n {isEmpty(selectedSkill) ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default QuestionList;\n","import React, { createRef } from 'react';\nimport Subbar from 'components/Content/Subbar';\nimport ProblemsumsTrial from 'pages/BrowseContent/TrialAccount/ProblemSumsTrial';\nimport QuestionList from 'pages/BrowseContent/QuestionList';\nimport { Route } from 'react-router-dom';\n\nconst Content = () => {\n const subbarRef = createRef();\n\n return (\n <>\n \n \n \n \n );\n};\n\nexport default Content;\n","import React from 'react';\n\nconst Overlay = props => {\n const { isVisible, toggleVisible } = props;\n return (\n \n );\n};\n\nexport default Overlay;\n","import React from 'react';\n\nconst Sidebar = props => {\n const { children, className, expanded, toggleNavigation } = props;\n return (\n <>\n \n \n \n \n {children}\n \n \n );\n};\n\nexport default Sidebar;\n","const shortenLevel = str => {\n if (str.startsWith('Primary')) {\n return str.replace('Primary ', 'P');\n }\n if (str.startsWith('Secondary')) {\n return str.replace('Secondary', 'Sec');\n }\n return str;\n};\n\nexport default shortenLevel;\n","import React from 'react';\nimport { isEmpty, isNil } from 'ramda';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport shortenLevel from 'helpers/text/shortenLevel';\nimport { HOTS_CURR_ID, AGE_GROUP } from 'constants/hotsCurr';\n\nimport { selectLevel } from 'stores/levels/actions';\nimport { setShowTrialPopup } from 'stores/login/actions';\n\nconst SidebarLevels = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n // const levels = useSelector(state => state.levels.levels ?? []);\n const { isTrialExpired, isTrial } = useSelector(state => state.login);\n const selectedLevel = useSelector(state => state.levels.selectedLevel ?? {});\n const { selectedCurriculum } = useSelector(state => state.curriculums);\n const currLevels =\n selectedCurriculum && selectedCurriculum.Levels\n ? selectedCurriculum.Levels\n : [];\n\n const isHOTS = selectedCurriculum?.CurriculumID === HOTS_CURR_ID;\n\n const onSelectLevel = e => {\n const checkLevelAvailable =\n isEmpty(selectedCurriculum.Levels) &&\n selectedCurriculum.Levels.findIndex(item => item.ID === selectedLevel.ID);\n\n const level =\n checkLevelAvailable !== -1\n ? currLevels.find(lvl => lvl.Name === e.target.value)\n : selectedCurriculum.Levels[0];\n\n if (isTrialExpired && isTrial) {\n dispatch(setShowTrialPopup(true));\n } else if (!isEmpty(currLevels)) {\n history.push('/browse-content');\n dispatch(selectLevel(level));\n }\n };\n return (\n
    \n
      \n {currLevels.map((item, index) => (\n \n {\n e.preventDefault();\n if (isTrialExpired && isTrial) {\n dispatch(setShowTrialPopup(true));\n } else {\n if (selectedLevel.ID !== item.ID)\n history.push('/browse-content');\n dispatch(selectLevel(item));\n }\n }}\n >\n {isHOTS ? `Age ${AGE_GROUP[item.ID]}` : shortenLevel(item.Name)}\n \n \n ))}\n
    \n
    \n
    \n {/* eslint-disable-next-line */}\n \n
    \n
    \n \n {currLevels.map((item, index) => (\n \n ))}\n \n
    \n
    \n
    \n );\n};\n\nexport default SidebarLevels;\n","import React from 'react';\nimport ContentLoader from 'react-content-loader';\n\nexport default function TopicsLoader() {\n return (\n \n {[20, 80, 140, 200, 260].map((y, index) => {\n const randomWidth = Math.floor(Math.random() * (340 - 80 + 1)) + 80;\n return (\n \n );\n })}\n \n );\n}\n","import styled from 'styled-components';\n\nexport const EditClassIconSelectorContainer = styled.div`\n display: flex;\n flex-direction: column;\n .edit-classicon-selector {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 380px;\n height: 250px;\n margin-bottom: 1rem;\n\n .class-icon-container {\n width: 74px;\n height: 74px;\n background: #f9f9f9;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border: solid 1px #dbdbdb;\n cursor: pointer;\n &:hover {\n background: #fff3df;\n }\n .class-icon {\n width: 51.3px;\n height: 51.3px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: #ffcb51;\n border-radius: 50%;\n }\n }\n .selected {\n border: solid 1px #ff5b00;\n background: #fff3df;\n }\n }\n`;\n\nexport const PaginationContainer = styled.div`\n display: flex;\n width: 360px;\n justify-content: center;\n margin-bottom: 20px;\n button {\n display: flex;\n justify-content: center;\n align-items: center;\n border: solid 1px #dbdbdb;\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n background: #ffffff;\n color: #ff5b00;\n &:hover {\n background: #fff7f3;\n border-color: #ff5b00;\n }\n }\n`;\n","import styled from 'styled-components';\nimport { Nav } from 'react-bootstrap';\nimport { PaginationContainer } from 'components/ManageClass/EditClassIconSelector.styles';\n\nexport const MultipleCurriculumModalBodyContainer = styled.div`\n background-color: white;\n padding-bottom: 15px;\n .info-text {\n display: flex;\n justify-content: space-evenly;\n margin: 15px 80px;\n p {\n font-size: 21px;\n font-weight: 600;\n color: #e84b05;\n margin-right: 30px;\n }\n button {\n width: 113px;\n height: 40px;\n font-size: 16px;\n border: none;\n color: #fffdfc;\n background: #ff5b00;\n padding: 10px;\n border-radius: 3px;\n }\n button:hover {\n background-color: #ef4b01;\n }\n }\n`;\n\nexport const CurriculumNav = styled(Nav)`\n background-color: #f5f5f5;\n border-bottom: 1px solid #dee2e6;\n .nav {\n width: 95%;\n justify-content: center;\n background-color: transparent;\n }\n .nav-tabs {\n border-bottom: none;\n }\n .nav-link {\n border: none;\n }\n .nav-link.active {\n color: #101010;\n border-bottom: 3px solid #ffc400;\n background-color: transparent;\n }\n a {\n font-size: 18px;\n font-weight: 600;\n }\n .close-btn {\n border: none;\n background-color: transparent;\n color: #616161;\n font-size: 16px;\n }\n`;\n\nexport const Curriculums = styled.div`\n .tab-pane {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-evenly;\n margin: 25px;\n }\n`;\n\nexport const Pagination = styled(PaginationContainer)`\n width: 100%;\n`;\n","import styled from 'styled-components';\n\nexport const CurriculumCardContainer = styled.div`\n .card-content {\n display: flex;\n flex-direction: column;\n width: 150px;\n height: 173px;\n border: 1px solid #cccccc;\n padding: 10px;\n justify-content: center;\n margin: 10px;\n p {\n text-align: center;\n font-size: 16px;\n color: #000000;\n font-weight: bold;\n }\n :hover {\n border: 2px solid #9ddfdd;\n cursor: pointer;\n }\n img {\n align-self: center;\n }\n }\n .selected {\n background-color: #ebf9ff;\n border: 1px solid #9ddfdd;\n }\n`;\n","import React from 'react';\nimport { isEmpty, isNil } from 'ramda';\nimport { CurriculumCardContainer } from './CurriculumCard.styles';\nimport C1 from './icon-c1.svg';\n\nconst CurriculumCard = ({\n curriculumName,\n curriculumIcon,\n curriculum,\n setSelectedModalCurriculum,\n selectedModalCurriculum,\n currentLevel,\n setSelectedModalLevel\n}) => {\n const level = selectCurr => {\n const checkLevelAvailable =\n selectCurr && selectCurr.Levels.find(item => item.ID === currentLevel.ID);\n if (!isEmpty(selectCurr.Levels)) {\n if (isNil(checkLevelAvailable)) {\n return selectCurr.Levels[0];\n // eslint-disable-next-line no-else-return\n } else {\n return currentLevel;\n }\n // eslint-disable-next-line no-else-return\n } else {\n return { ID: -1 };\n }\n };\n\n return (\n \n {\n setSelectedModalCurriculum(curriculum);\n setSelectedModalLevel(level(curriculum));\n }}\n >\n

    {curriculumName}

    \n {\n e.target.src = C1;\n }}\n src={curriculumIcon}\n alt=\"curriculum-icon\"\n />\n \n
    \n );\n};\n\nexport default CurriculumCard;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { selectCurriculum } from 'stores/curriculums/actions';\nimport { selectLevel } from 'stores/levels/actions';\nimport { subjectTypes } from 'constants/index';\nimport history from 'helpers/history';\nimport {\n MultipleCurriculumModalBodyContainer,\n CurriculumNav,\n Curriculums,\n Pagination\n} from './MultipleCurriculumModalBody.styles';\nimport CurriculumCard from './CurriculumCard';\n\nconst MultipleCurriculumModalBody = ({\n hide,\n curriculums,\n selectedCurriculum,\n selectedLevel\n}) => {\n const { t } = useTranslation(['browse-content']);\n const dispatch = useDispatch();\n const uniqueSubjectIDs = [\n ...new Set(curriculums.map(curriculum => curriculum.SubjectID))\n ];\n // Component States\n const [selectedModalCurriculum, setSelectedModalCurriculum] = useState(\n selectedCurriculum\n );\n const [selectedSubjectID, setSubjectID] = useState(uniqueSubjectIDs[0]);\n const [selectedModalLevel, setSelectedModalLevel] = useState(selectedLevel);\n const [currentPage, setCurrentPage] = useState(1);\n const maxPage = Math.ceil(\n curriculums.filter(curriculum => curriculum.SubjectID === selectedSubjectID)\n .length / 5\n );\n\n return (\n \n \n <>\n
    \n {uniqueSubjectIDs.map(subjectID => (\n {\n setSubjectID(subjectID);\n }}\n >\n {t(\n `browse-content:curriculumSection.${subjectTypes[subjectID]}`,\n subjectTypes[subjectID]\n )}\n \n ))}\n
    \n \n {\n hide();\n }}\n >\n X\n \n
    \n
    \n

    \n {t(\n `browse-content:curriculumSection.choose`,\n 'Please choose the curriculum you want to browse'\n )}\n

    \n {\n dispatch(selectCurriculum(selectedModalCurriculum));\n dispatch(selectLevel(selectedModalLevel));\n hide();\n history.push('/browse-content');\n }}\n >\n {t(`browse-content:curriculumSection.confirm`, 'Confirm')}\n \n
    \n \n
    \n \n {curriculums\n .filter(curriculum => curriculum.SubjectID === selectedSubjectID)\n .slice((currentPage - 1) * 5, (currentPage - 1) * 5 + 5)\n .map(item => (\n \n ))}\n
    \n \n
    \n \n {currentPage > 1 && (\n {\n setCurrentPage(currentPage - 1);\n }}\n >\n {'<'}\n \n )}\n {currentPage < maxPage && (\n {\n setCurrentPage(currentPage + 1);\n }}\n >\n {'>'}\n \n )}\n \n
    \n );\n};\n\nexport default MultipleCurriculumModalBody;\n","import styled from 'styled-components';\n\nexport const ButtonContainer = styled.div`\n margin-left: 20px;\n display: flex;\n align-items: center;\n .curr-name {\n display: flex;\n flex-direction: column;\n width: 165px;\n }\n .label {\n color: #47270e;\n font-size: 8px;\n margin-right: 10px;\n }\n .name {\n font-size: 11px;\n color: #000000;\n }\n`;\n\nexport const ChangeBtn = styled.div`\n border: 1px solid #d8a211;\n background: #ffc831;\n border-radius: 5px;\n color: #000000;\n font-family: 'Muli';\n font-size: 11px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 6px 10px;\n cursor: pointer;\n`;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport PopupModal from 'components/Shared/PopupModal';\nimport MultipleCurriculumModalBody from 'components/MultipleCurriculum/MultipleCurriculumModalBody';\nimport { ButtonContainer, ChangeBtn } from './SidebarMultipleCurriculum.styles';\n\nconst SidebarMultipleCurriculums = () => {\n const { t } = useTranslation(['browse-content']);\n const { selectedCurriculum, curriculums } = useSelector(\n state => state.curriculums\n );\n const selectedLevel = useSelector(state => state.levels.selectedLevel ?? {});\n\n // popup modal states\n const [\n showMultipleCurriculumModal,\n setShowMultipleCurriculumModal\n ] = useState(false);\n\n // handlers to hide popup modal\n const hideMultipleCurriculumModal = () => {\n setShowMultipleCurriculumModal(false);\n };\n return (\n
    \n \n \n \n \n
    \n
    \n {t(`browse-content:curriculumSection.curriculum`, 'Curriculum')}\n
    \n

    {selectedCurriculum.curriculumName ?? ''}

    \n
    \n setShowMultipleCurriculumModal(true)}>\n {t(`browse-content:curriculumSection.change`, 'Change')}\n \n
    \n
    \n );\n};\n\nexport default SidebarMultipleCurriculums;\n","import React from 'react';\nimport { sort } from 'ramda';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { selectTopic } from 'stores/topics/actions';\nimport TopicsLoader from 'components/Loader/TopicsLoader';\nimport SimpleBar from 'simplebar-react';\nimport { setShowTrialPopup } from 'stores/login/actions';\nimport SidebarMultipleCurriculums from './SidebarMultipleCurriculum/SidebarMultipleCurriculum';\nimport 'simplebar/dist/simplebar.min.css';\n\nconst SidebarTopics = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const location = useLocation();\n const { topics, isLoading } = useSelector(state => state.topics);\n const { isTrialExpired, isTrial } = useSelector(state => state.login);\n const { selectedCurriculum } = useSelector(state => state.curriculums);\n const currLevels =\n selectedCurriculum && selectedCurriculum.Levels\n ? selectedCurriculum.Levels\n : [];\n const sortedTopics = sort((a, b) => a.Display - b.Display, topics);\n const selectedTopic = useSelector(state => state.topics.selectedTopic ?? {});\n const onSelectTopic = topic => {\n window.scrollTo(0, 0);\n if (isTrialExpired && isTrial) {\n dispatch(setShowTrialPopup(true));\n } else {\n dispatch(selectTopic(topic));\n }\n };\n\n return (\n \n
    \n \n
    \n \n
      \n {isLoading ? (\n \n ) : (\n sortedTopics.map((item, index) => (\n \n {\n e.preventDefault();\n onSelectTopic(item);\n if (\n location.pathname !== '/browse-content/problemsums-trial'\n )\n history.push('/browse-content/question-list');\n }}\n >\n {item.Name}\n \n \n ))\n )}\n
    \n
    \n \n );\n};\n\nexport default SidebarTopics;\n","export default [\n {\n icon: 'icon-browse',\n name: 'Content',\n nameKey: 'content',\n to: '/browse-content',\n externalLink: false\n },\n {\n icon: 'icon-create',\n name: 'Assign',\n nameKey: 'assign',\n to: '/create-and-assign',\n externalLink: false\n },\n {\n icon: 'icon-track-assignment',\n name: 'Track',\n nameKey: 'track',\n to: '/track-assignment',\n externalLink: false\n },\n {\n icon: 'icon-report',\n name: 'Report',\n nameKey: 'report',\n to: '/report',\n externalLink: false\n },\n {\n icon: 'icon-manage-class',\n name: 'Class',\n nameKey: 'class',\n to: '/manage-class',\n externalLink: false\n },\n {\n icon: 'icon-help',\n name: 'Help',\n nameKey: 'help',\n to:\n 'https://support.koobits.com/hc/en-gb/categories/201303246-For-Teachers',\n externalLink: true\n }\n];\n","import apiClient from 'services/api';\n\nconst getStudentToken = () => {\n return apiClient\n .get(`User/SwitchToken`)\n .then(result => {\n console.log(result);\n if (result.data?.IsSuccessful === false) {\n return {\n error: result.data?.Message?.Message ?? 'Get student token failed'\n };\n }\n return result.data?.Result ?? {};\n })\n .catch(err => {\n return {\n error: err?.response?.data?.message ?? 'Get student token failed' // eslint-disable-line\n };\n });\n};\n\nexport default getStudentToken;\n","import { isNil } from 'ramda';\n\nconst simplifiedChineseLocaleNames = [\n 'zh',\n 'zh-CN',\n 'zh-Hans',\n 'zh-Hans-HK',\n 'zh-Hans-MO',\n 'zh-SG'\n];\nconst traditionalChineseLocaleNames = ['zh-Hant', 'zh-HK', 'zh-MO', 'zh-TW'];\n\n// eslint-disable-next-line import/prefer-default-export\nexport const defaultLang = (lang, localeName, nativeName) => {\n if (lang === 'en') {\n return { name: 'English', code: 'en' };\n }\n if (lang === 'id') {\n return { name: 'Indonesian', code: 'ba' };\n }\n if (lang === 'zh') {\n const isSimplifiedChinese = simplifiedChineseLocaleNames.find(\n name => name === localeName\n );\n const isTraditionalChinese = traditionalChineseLocaleNames.find(\n name => name === localeName\n );\n if (!isNil(isSimplifiedChinese)) {\n return { name: '中文-简', code: 'zh_CN' };\n }\n if (!isNil(isTraditionalChinese)) {\n return { name: '中文', code: 'zh_TW' };\n }\n return 'zh_CN';\n }\n return {\n name: nativeName,\n code: localeName\n };\n};\n","import styled from 'styled-components';\nimport Tick from 'assets/img/locale/icon-tick-red.svg';\n\nexport const StyledLanguageModal = styled.div`\n background-color: #ffffff;\n min-width: 177px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 9px;\n font-family: 'Nunito';\n border: 1px solid rgb(112, 112, 112, 0.15);\n .styled-button {\n border-radius: 23px;\n padding: 0.1rem 1.5rem;\n margin: 1rem;\n }\n`;\n\nexport const Item = styled.div`\n width: 100%;\n text-align: center;\n color: #2b2b2b;\n font-size: 16px;\n border-bottom: 1px solid rgb(112, 112, 112, 0.15);\n padding: 1rem 1rem 1rem 2rem;\n display: flex;\n align-items: center;\n cursor: pointer;\n font-weight: 600;\n\n .tick {\n width: 20px;\n height: 15px;\n background: ${({ isSelected }) => (isSelected ? `url(${Tick})` : 'none')};\n background-repeat: no-repeat;\n background-size: contain;\n margin-right: 0.5rem;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { setUserPreferencesRequest } from 'stores/userPreferences/actions';\nimport { defaultLang } from 'helpers/localizationNames';\nimport { StyledLanguageModal, Item } from './LanguageModal.styles';\n\nconst LanguageModal = ({ setModal }) => {\n const dispatch = useDispatch();\n const { t, i18n } = useTranslation(['navigation']);\n const { language } = useSelector(state => state.login);\n const [selectedLang, setSelectedLang] = useState(null);\n\n const changeLanguage = code => {\n i18n.changeLanguage(code);\n dispatch(setUserPreferencesRequest({ Id: 3, Value: code }));\n setModal(false);\n };\n\n useEffect(() => {\n setSelectedLang(i18n.language);\n }, [i18n.language]);\n\n return (\n \n {language &&\n language.map(lang => (\n {\n setSelectedLang(\n defaultLang(\n lang.TwoLetterIsolanguageName,\n lang.LocaleName,\n lang.NativeName\n ).code\n );\n }}\n >\n
    \n
    \n {\n defaultLang(\n lang.TwoLetterIsolanguageName,\n lang.LocaleName,\n lang.NativeName\n ).name\n }\n
    \n \n ))}\n changeLanguage(selectedLang)}\n >\n {t('navigation:menu.confirm', 'Confirm')}\n \n \n );\n};\n\nexport default LanguageModal;\n","import React, { forwardRef, useState } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { Dropdown } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport Avatar from 'assets/img/avatar.png';\n// import { ReactComponent as TickIcon } from 'assets/img/locale/icon-black-tick.svg';\nimport Cookies from 'js-cookie';\nimport { logout } from 'stores/login/actions';\nimport { featureToggle } from 'constants/index';\nimport { isNil } from 'ramda';\nimport getStudentToken from 'services/switchStudentAccount';\nimport PopupModal from 'components/Shared/PopupModal';\nimport LanguageModal from './LanguageModal';\n\nconst ProfileAvatar = ({ onClick }, ref) => {\n const { profileData } = useSelector(state => state.profileSettings);\n return (\n
  • \n {\n e.preventDefault();\n onClick(e);\n }}\n >\n {\n e.target.src = Avatar;\n }}\n />\n \n
  • \n );\n};\n\nconst NavbarNav = () => {\n const { t } = useTranslation(['navigation']);\n const history = useHistory();\n const dispatch = useDispatch();\n const { cartQuestions } = useSelector(state => state.questions);\n const handleLogout = () => dispatch(logout());\n const [showLangModal, setShowLangModal] = useState(false);\n const hideLangModal = () => {\n setShowLangModal(false);\n };\n\n const switchToStudentHandler = async () => {\n const res = await getStudentToken();\n // Check if api request succeeded\n if (!isNil(res.error)) {\n console.log(res.error);\n return;\n }\n Cookies.set('sp_access_token', res.AccessToken, {\n path: '/',\n domain: 'koobits.com'\n });\n Cookies.set('sp_refresh_token', res.RefreshToken, {\n path: '/',\n domain: 'koobits.com'\n });\n // add callback for flutter app switch account\n const hasFlutter = window.flutter_inappwebview;\n if (hasFlutter) hasFlutter.callHandler('switchAccountFunc');\n window.location.replace(process.env.REACT_APP_STUDENT_PORTAL_URL);\n };\n\n const toggleLanguage = () => {\n setShowLangModal(true);\n };\n\n return (\n <>\n \n \n \n
      \n {featureToggle.notificationBell && (\n
    • \n \n \n {/* Notification Count */}\n 3\n \n
    • \n )}\n
    • \n \n 0 ? 'icon-cart-filled' : 'icon-cart'\n }\n />\n {cartQuestions?.length > 0 && (\n {cartQuestions.length}\n )}\n \n
    • \n \n \n \n
      \n \n \n {t(\n `navigation:menu.switchToStudentAccount`,\n 'Switch to student account'\n )}\n \n \n history.push('/profile-setting')}\n >\n \n {t(`navigation:menu.profileSettings`, 'Profile and Settings')}\n \n \n \n \n {t(`navigation:menu.changeLanguage`, 'Change Language')}\n \n \n \n \n {t(`navigation:menu.logOut`, 'Log out')}\n \n \n \n
    \n \n );\n};\n\nexport default NavbarNav;\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { setShowTrialPopup } from 'stores/login/actions';\nimport { Link, withRouter } from 'react-router-dom';\n\nconst NavItem = ({ isActive, to, children, externalLink }) => {\n const dispatch = useDispatch();\n const classes = ['nav-item', 'text-icon'];\n if (isActive) classes.push('active');\n\n return (\n {\n dispatch(setShowTrialPopup(true));\n }}\n style={{ width: '17%' }}\n >\n {externalLink && (\n \n {children}\n \n )}\n {!externalLink && (\n \n {children}\n \n )}\n \n );\n};\n\nexport default withRouter(({ location, match, ...props }) => {\n let isActive = location.pathname.slice(0, props.to.length) === props.to;\n if (props.to === '/') {\n isActive = false;\n }\n return ; /* eslint-disable-line */\n});\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport arrowImage from 'assets/img/arrow.svg';\nimport history from 'helpers/history';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport PopupModal from 'components/Shared/PopupModal';\nimport TrialAccountModalBody from 'components/TrialAccount/TrialAccountModalBody';\nimport { setShowTrialPopup } from 'stores/login/actions';\nimport { useTranslation } from 'react-i18next';\nimport navs from './navs.js';\nimport NavbarNav from './NavbarNav';\nimport NavItem from './NavItem';\n\nconst NavbarCollapse = () => {\n const dispatch = useDispatch();\n const { t } = useTranslation(['navigation']);\n const { cartQuestions } = useSelector(state => state.questions);\n const { isAdmin, isTrial, isTrialExpired, showTrialPopup } = useSelector(\n state => state.login\n );\n const showArrow =\n history.location.pathname === '/create-and-assign' &&\n isNilOrEmpty(cartQuestions); // @todo remove \"!\" when the design ready\n\n // modal state\n const hideTrialAccount = () => {\n dispatch(setShowTrialPopup(false));\n };\n\n const trialAccount = isTrial && (\n \n \n \n );\n\n return (\n <>\n {trialAccount}\n
      \n {navs.map((nav, index) => {\n if (nav.forAdmin && !isAdmin) {\n return false;\n }\n return (\n \n \n {nav.to === '/browse-content' && showArrow && (\n
      \n \"nav-arrow\"\n
      \n )}\n\n {t(`navigation:navbar.${nav.nameKey}`, nav.name)}\n \n );\n })}\n
    \n \n \n );\n};\n\nexport default NavbarCollapse;\n","import styled from 'styled-components';\n\nexport const HeaderTrial = styled.span`\n font-size: 14px;\n color: #ffc551;\n font-family: Linotte Regular;\n margin-left: 6px;\n vertical-align: bottom;\n`;\n","import React from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n// import { ReactComponent as Logo } from 'assets/img/logo.svg';\nimport DefaultLogo from 'assets/img/logo.svg';\nimport TeacherLogo from 'assets/img/logoTeacher.svg';\n// import TutorLogo from 'assets/img/logoTutor.svg';\nimport AdminLogo from 'assets/img/logoAdmin.svg';\nimport NavbarCollapse from './NavbarCollapse';\nimport { HeaderTrial } from './Header.styles';\n\nconst Header = () => {\n const { isTrial, isSchoolAdmin, isTeacher } = useSelector(\n state => state.login\n );\n const history = useHistory();\n const headerVisibility =\n history.location.pathname === '/login' ? 'd-none' : '';\n\n let logo = DefaultLogo;\n if (isSchoolAdmin) logo = AdminLogo;\n else if (isTeacher) logo = TeacherLogo;\n return (\n \n );\n};\n\nexport default Header;\n","import React, { useState } from 'react';\nimport { isEmpty } from 'ramda';\nimport { useSelector } from 'react-redux';\nimport SelectTopic from 'components/SelectTopic';\nimport Content from 'components/Content/Content';\nimport Overlay from 'components/Content/Overlay';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport SidebarLevels from 'components/Sidebar/SidebarLevels';\nimport SidebarTopics from 'components/Sidebar/SidebarTopics';\nimport './BrowseContent.styles.scss';\n// import { Redirect } from 'react-router-dom';\nimport Header from 'components/Header/Header';\n\nexport default function BrowseContent() {\n // const { user } = useSelector(state => state.login);\n const { selectedTopic, showSideBar } = useSelector(state => state.topics);\n const { selectedCurriculum } = useSelector(state => state.curriculums);\n const currLevels = selectedCurriculum && selectedCurriculum.Levels;\n const [expanded, setExpanded] = useState(false);\n const toggleNavigation = () => setExpanded(!expanded);\n\n // if (\n // (isNil(user.DefaultLevel) || user.DefaultLevel < 1) &&\n // !isEmpty(currLevels)\n // ) {\n // return ;\n // }\n\n return (\n <>\n
    \n
    \n \n {!isEmpty(currLevels) && }\n \n \n
    \n {isEmpty(selectedTopic) && !showSideBar ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n )}\n
    \n
    \n \n );\n}\n","import React from 'react';\n\nexport default function Radio(props) {\n const { onChange, id, value } = props;\n return (\n
  • \n \n {/* eslint-disable-next-line */}\n \n
  • \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport shortenLevel from 'helpers/text/shortenLevel';\nimport { selectLevel } from 'stores/levels/actions';\nimport Radio from 'components/Level/Radio';\nimport Header from 'components/Header/Header';\n\nconst ChooseLevel = () => {\n const { t } = useTranslation(['choose-level']);\n const history = useHistory();\n const dispatch = useDispatch();\n const levels = useSelector(state => state.levels.levels ?? []);\n const handleSubmit = event => {\n event.preventDefault();\n history.push('/browse-content');\n };\n return (\n <>\n
    \n
    \n
    \n
    \n

    \n {t(\n `choose-level:main.chooseMsg`,\n 'Please choose the level you want to browse'\n )}\n

    \n
    \n
      \n {levels.map((item, index) => (\n dispatch(selectLevel(item))}\n id={String(index)}\n value={shortenLevel(item.Name)}\n />\n ))}\n
    \n \n {t(`choose-level:main.confirm`, 'Confirm')}\n \n \n
    \n
    \n
    \n \n );\n};\n\nexport default ChooseLevel;\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\n\nexport default function SidebarNavLink(props) {\n const { children, path: url } = props;\n const { pathname } = useLocation();\n const subPagePath = url.split('/').slice(1)[1];\n const isActivePath = path =>\n path === pathname || pathname.includes(subPagePath);\n return (\n \n {children}\n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport topicRevisionIcon from 'assets/img/icon-topic-revision.svg';\nimport questionCartIcon from 'assets/img/icon-question-cart.svg';\nimport topicalWorksheetIcon from 'assets/img/icon-topical-worksheet.svg';\nimport factualFluencyIcon from 'assets/img/icon-factual-fluency-white.png';\nimport { resetWorksheetSearchPage } from 'stores/worksheet/actions';\nimport { featureToggle } from 'constants/index';\nimport SidebarNavLink from './SidebarNavLink';\n\nexport default function SidebarCreateAssign() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { isAdmin } = useSelector(state => state.login);\n\n return (\n
    \n
      \n
    • \n {/* @todo dynamically set active class from redux state */}\n \n \n \n {t(\n `create-assign-question:sidebar.questionCart`,\n 'Question Cart'\n )}\n \n \n
    • \n dispatch(resetWorksheetSearchPage())}\n >\n \n \n \n {t(`create-assign-question:sidebar.savedWo`, 'Saved worksheet')}\n \n \n \n
    • \n \n \n \n {t(\n `create-assign-question:sidebar.topicalWo`,\n 'Topical worksheet'\n )}\n \n \n
    • \n
    • \n \n \n \n {t(\n `create-assign-question:sidebar.factualFluency`,\n 'Factual Fluency'\n )}\n \n \n
    • \n {featureToggle.topicRevision && (\n
    • \n \n \n Topic Revision\n \n
    • \n )}\n {isAdmin && (\n
    • \n \n \n \n {t(\n `create-assign-question:sidebar.importQnList`,\n 'Import Question List'\n )}\n \n \n
    • \n )}\n
    \n
    \n );\n}\n","import {\n SET_STEP,\n START_STEP,\n PREV_STEP,\n NEXT_STEP,\n FINISH_STEP\n} from './actionTypes';\n\nexport const setStep = step => {\n return { type: SET_STEP, step };\n};\n\nexport const startStep = () => {\n return { type: START_STEP };\n};\n\nexport const prevStep = () => {\n return { type: PREV_STEP };\n};\n\nexport const nextStep = () => {\n return { type: NEXT_STEP };\n};\n\nexport const finishStep = () => {\n return { type: FINISH_STEP };\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport emptyCartImage from 'assets/img/empty-cart.svg';\n\n/**\n * @todo adding classNames and styles\n */\nexport default function EmptyCartQuestion() {\n const { t } = useTranslation(['create-assign-question']);\n return (\n
    \n \n

    \n \n {' '}\n {t(\n `create-assign-question:main.cartEmpty`,\n 'Your question cart is empty.'\n )}\n \n

    \n

    \n {t(`create-assign-question:main.cartMsg1`, 'You can click the ')}\n {t(`create-assign-question:main.cartMsg2`, 'Browse Content ')}\n {t(`create-assign-question:main.cartMsg3`, 'at the top bar to ')}\n {t(`create-assign-question:main.cartMsg4`, 'pick questions.')}\n

    \n \n {t(`create-assign-question:main.browseContent`, 'Browse Content')}\n \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const EditPanelStyle = styled.div`\n right: -44px;\n top: 0;\n text-align: center;\n flex-direction: column !important;\n position: absolute !important;\n .question-action__item {\n display: block;\n width: 39px;\n height: 36px;\n padding: 11px;\n background-color: #ffffff;\n color: #545454;\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\n margin-bottom: 2px;\n background-repeat: no-repeat;\n background-size: 17px auto;\n background-position: center center;\n position: relative;\n\n &:hover {\n background-color: #fff6ee;\n cursor: pointer;\n\n &::after {\n font-family: 'Muli', sans-serif;\n font-size: 13px;\n line-height: 16px;\n display: block;\n position: absolute;\n top: 5px;\n background-color: #6b6b6b;\n border-radius: 4px;\n padding: 5px;\n color: #fff;\n white-space: nowrap;\n right: 45px;\n }\n }\n\n &:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n }\n\n &:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n }\n }\n`;\n\nexport const MenuSection = styled.button`\n padding-left: 0;\n padding-right: 0;\n background-size: 30px auto!important;\n background-image: ${props => `url(${props.icon})`};\n\n &:hover {\n background-image: ${props => `url(${props.activeIcon})`};\n\n &:after {\n content: \"${props => props.content}\";\n }\n }\n`;\n\nexport const MenuUp = styled.button`\n background-image: ${props => `url(${props.icon})`};\n\n &:hover {\n background-image: ${props => `url(${props.activeIcon})`};\n\n &:after {\n content: \"${props => props.content}\";\n }\n }\n`;\n\nexport const MenuEnd = styled.button`\n background-image: ${props => `url(${props.icon})`};\n\n &:hover {\n background-image: ${props => `url(${props.activeIcon})`};\n\n &::after {\n content: \"${props => props.content}\";\n }\n }\n`;\n\nexport const MenuDown = styled.button`\n background-image: ${props => `url(${props.icon})`};\n\n &:hover {\n background-image: ${props => `url(${props.activeIcon})`};\n\n &::after {\n content: \"${props => props.content}\";\n }\n }\n`;\n\nexport const MenuDownEnd = styled.button`\n background-image: ${props => `url(${props.icon})`};\n\n &:hover {\n background-image: ${props => `url(${props.activeIcon})`};\n\n &::after {\n content: \"${props => props.content}\";\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n EditPanelStyle,\n MenuSection,\n MenuUp,\n MenuEnd,\n MenuDown,\n MenuDownEnd\n} from './EditPanel.styles';\nimport iconMenu from 'assets/img/icon-menu-list.svg';\nimport iconMenuActive from 'assets/img/icon-menu-list-active.svg';\nimport iconUp from 'assets/img/icon-menu-up.svg';\nimport iconUpActive from 'assets/img/icon-menu-up-active.svg';\nimport iconEnd from 'assets/img/icon-menu-up-end.svg';\nimport iconEndActive from 'assets/img/icon-menu-up-end-active.svg';\nimport iconDown from 'assets/img/icon-menu-down.svg';\nimport iconDownActive from 'assets/img/icon-menu-down-active.svg';\nimport iconDownEnd from 'assets/img/icon-menu-down-end.svg';\nimport iconDownEndActive from 'assets/img/icon-menu-down-end-active.svg';\nimport {\n setSelectedQuestions,\n setEditSavedWorksheetQuestions\n} from 'stores/worksheet/actions';\n\nimport { setCreateHomeworkQuestions } from 'stores/topical-worksheet/actions';\nimport { setCreateFactualFluencyQuestions } from 'stores/factual-fluency/actions';\n\nconst EditPanel = props => {\n const { t } = useTranslation(['create-assign-question']);\n const {\n cardIndex,\n isEditSavedWorksheet,\n isCreateHomework,\n isCreateFactualFluency\n } = props;\n\n const { selectedQuestions, editSavedWorksheetQuestions } = useSelector(\n state => state.worksheet\n );\n const { createWorksheetItems } = useSelector(state => state.topicalWorksheet);\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n // Copy into new array, but @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Copy_an_array potential hiccups}\n let updatedSelectedQuestions = [];\n if (isEditSavedWorksheet)\n updatedSelectedQuestions = [...editSavedWorksheetQuestions];\n else if (isCreateHomework)\n updatedSelectedQuestions = [...createWorksheetItems];\n else if (isCreateFactualFluency)\n updatedSelectedQuestions = [...createFactualFluencyItems];\n else updatedSelectedQuestions = [...selectedQuestions];\n\n const dispatch = useDispatch();\n\n const moveUp = () => {\n const firstIndex = 0;\n const move = cardIndex - 1;\n if (move >= firstIndex) {\n const tmp = updatedSelectedQuestions[cardIndex];\n updatedSelectedQuestions[cardIndex] = updatedSelectedQuestions[move];\n updatedSelectedQuestions[move] = tmp;\n if (isEditSavedWorksheet) {\n dispatch(setEditSavedWorksheetQuestions(updatedSelectedQuestions));\n } else if (isCreateHomework) {\n dispatch(setCreateHomeworkQuestions(updatedSelectedQuestions));\n } else if (isCreateFactualFluency) {\n dispatch(setCreateFactualFluencyQuestions(updatedSelectedQuestions));\n } else {\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n }\n }\n };\n\n const moveDown = () => {\n const lastIndex = updatedSelectedQuestions.length - 1;\n const move = cardIndex + 1;\n if (move <= lastIndex) {\n const tmp = updatedSelectedQuestions[cardIndex];\n updatedSelectedQuestions[cardIndex] = updatedSelectedQuestions[move];\n updatedSelectedQuestions[move] = tmp;\n if (isEditSavedWorksheet) {\n dispatch(setEditSavedWorksheetQuestions(updatedSelectedQuestions));\n } else if (isCreateHomework) {\n dispatch(setCreateHomeworkQuestions(updatedSelectedQuestions));\n } else if (isCreateFactualFluency) {\n dispatch(setCreateFactualFluencyQuestions(updatedSelectedQuestions));\n } else {\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n }\n }\n };\n\n const moveFirst = () => {\n const firstIndex = 0;\n if (cardIndex !== firstIndex) {\n updatedSelectedQuestions.unshift(\n updatedSelectedQuestions.splice(cardIndex, 1)[0]\n );\n if (isEditSavedWorksheet) {\n dispatch(setEditSavedWorksheetQuestions(updatedSelectedQuestions));\n } else if (isCreateHomework) {\n dispatch(setCreateHomeworkQuestions(updatedSelectedQuestions));\n } else if (isCreateFactualFluency) {\n dispatch(setCreateFactualFluencyQuestions(updatedSelectedQuestions));\n } else {\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n }\n }\n };\n\n const moveLast = () => {\n const lastIndex = updatedSelectedQuestions.length - 1;\n if (cardIndex !== lastIndex) {\n updatedSelectedQuestions.push(\n updatedSelectedQuestions.splice(cardIndex, 1)[0]\n );\n if (isEditSavedWorksheet) {\n dispatch(setEditSavedWorksheetQuestions(updatedSelectedQuestions));\n } else if (isCreateHomework) {\n dispatch(setCreateHomeworkQuestions(updatedSelectedQuestions));\n } else if (isCreateFactualFluency) {\n dispatch(setCreateFactualFluencyQuestions(updatedSelectedQuestions));\n } else {\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n }\n }\n };\n\n return (\n //
    \n \n \n \n \n \n \n \n //
    \n );\n};\n\nexport default EditPanel;\n","import styled from 'styled-components';\n\nconst ModalContainerStyle = styled.div`\n background-color: white;\n padding-bottom: 20px;\n .top-section {\n padding: 20px 50px;\n }\n .close-btn {\n border: none;\n background-color: transparent;\n color: #616161;\n font-size: 16px;\n position: absolute;\n right: 35px;\n top: 25px;\n }\n .title {\n font-size: 16px;\n color: #ff5b00;\n text-align: center;\n }\n .text {\n text-align: center;\n color: #000000;\n font-size: 14px;\n line-height: 18px;\n margin: 10px;\n }\n hr {\n margin-top: 0px;\n }\n .btn-section {\n display: flex;\n justify-content: space-evenly;\n .cancel {\n border: 1px solid #d5d5d5;\n border-radius: 2px;\n color: #ff5b00;\n font-size: 16px;\n background-color: #ffffff;\n width: 110px;\n &:hover {\n border-color: #ff5b00;\n background: #fff7f3;\n }\n }\n .remove {\n border: 1px solid #ff3d3d;\n border-radius: 2px;\n color: #ffffff;\n font-size: 16px;\n background-color: #ff5b00;\n width: 110px;\n }\n }\n`;\n\nexport default ModalContainerStyle;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\nimport { resetCartQuestions } from 'stores/questions/actions';\n\nimport ModalContainerStyle from './RemoveQuestionModal.styles';\n\nconst RemoveQuestionModal = ({ hide, type, remove }) => {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const handleRemoveAll = () => {\n dispatch(resetCartQuestions());\n hide();\n };\n return (\n \n
    \n \n
    \n {type === 'remove-question'\n ? t(`create-assign-question:main.removeQn`, 'Remove Question')\n : t(`create-assign-question:main.removeAll`, 'Remove All')}\n
    \n
    \n {type === 'remove-question' ? (\n t(\n `create-assign-question:main.removeMsg`,\n 'Are you sure you want to remove this question?'\n )\n ) : (\n
    \n {t(\n `create-assign-question:main.removeAllMsg`,\n 'Are you sure you want to remove all the questions? '\n )}\n
    \n {t(\n `create-assign-question:main.removeAllDesc`,\n 'Your question cart will be empty.'\n )}\n
    \n )}\n
    \n
    \n
    \n
    \n \n \n {t(`create-assign-question:resetModal.yes`, 'Yes')}\n \n
    \n
    \n );\n};\n\nexport default RemoveQuestionModal;\n","import styled from 'styled-components';\n\nexport const QuestionNumber = styled.p`\n position: absolute;\n left: 23px;\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 0px;\n color: ${props => (props.active ? '#ff5b00' : 'rgba(52, 52, 52, 0.8)')};\n`;\n\nexport const QuestionBox = styled.div`\n border: 1px solid rgba(112, 112, 112, 0.14);\n`;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { deleteQuestion } from 'stores/questions/actions';\nimport {\n removeSelectedQuestion,\n removeSelectedSavedWorksheetQuestion\n} from 'stores/worksheet/actions';\n\nimport { removeCreateHomeworkQuestion } from 'stores/topical-worksheet/actions';\n\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport iconTrash from 'assets/img/icons8-trash.svg';\nimport KebabIcon from 'assets/img/icon-question-card-kebab.svg';\nimport KebabActiveIcon from 'assets/img/icon-question-card-kebab-active.svg';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport EditPanel from 'components/Question/EditPanel';\nimport PopupModal from 'components/Shared/PopupModal';\nimport RemoveQuestionModal from 'components/CreateAndAssign/QuestionCart/RemoveQuestionModal';\nimport { removeCreateFactualFluencyQuestion } from 'stores/factual-fluency/actions';\nimport { QuestionNumber, QuestionBox } from './WorksheetQuestion.styles';\n\nexport default function WorksheetQuestion({\n selectedQuestion,\n onShowModal,\n onShowSolution,\n isSelectable,\n isChecked,\n onChange,\n isShowEditPanel,\n selectedCard,\n onClick,\n cardIndex,\n isEditSavedWorksheet,\n isCreateHomework,\n isCreateFactualFluency\n}) {\n const { t } = useTranslation(['browse-content']);\n const question = selectedQuestion.CartQuestion;\n const active = selectedCard === selectedQuestion.ID;\n\n const dispatch = useDispatch();\n const removeQuestionSelector = () => {\n if (isEditSavedWorksheet) {\n dispatch(removeSelectedSavedWorksheetQuestion(selectedQuestion.ID));\n } else if (isCreateHomework) {\n dispatch(removeCreateHomeworkQuestion(selectedQuestion.ID));\n } else if (isCreateFactualFluency) {\n dispatch(removeCreateFactualFluencyQuestion(selectedQuestion.ID));\n } else {\n dispatch(deleteQuestion(selectedQuestion.ID));\n dispatch(removeSelectedQuestion(selectedQuestion.ID));\n }\n };\n const [confirmation, setConfirmation] = useState(false);\n const showConfirmation = () => {\n setConfirmation(true);\n };\n\n const closeConfirmation = () => {\n setConfirmation(false);\n };\n return (\n <>\n \n \n \n \n \n
    \n
    \n {!isSelectable && (\n {`Qn${cardIndex + 1}.`}\n )}\n
    \n {isSelectable && (\n <>\n \n \n \n )}\n
    \n {selectedQuestion.TopicName}\n
    \n

    {selectedQuestion.SkillName}

    \n
    \n
    \n \n {t(`browse-content:questionCard.id`, 'ID :')}{' '}\n {selectedQuestion.ID}\n \n \n \n {' '}\n {t(`browse-content:questionCard.difficulty`, 'Difficulty:')}\n {' '}\n \n \n {!isSelectable && (\n \n \n \n )}\n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n \"Trash\"\n {t(`browse-content:questionCard.remove`, 'Remove')}\n \n
    \n
    \n \n {active && isShowEditPanel && (\n \n )}\n
    \n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { isNil } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport Collapse from 'components/Shared/Collapse';\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport {\n McqOptionsList,\n TableModal\n} from 'components/Question/QuestionContent.styles';\n\nexport default function WorksheetQuestionModal({\n selectedQuestion,\n onCloseModal,\n showSolution\n}) {\n const { t } = useTranslation(['browse-content']);\n const question = selectedQuestion.CartQuestion;\n // State\n const [questionTitle, setQuestionTitle] = useState(null);\n const [questionSolution, setQuestionSolution] = useState(null);\n const [mcqOptions, setMCQOptions] = useState([]);\n\n // Effects\n useEffect(() => {\n if (!isNil(question.Payload)) {\n const { title, solution, mcqOptions } = questionParser(question);\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setMCQOptions(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n \n );\n }\n if (domNode.name === 'helptext') {\n return (\n \n {domNode.children[0]?.data ?? ''}\n \n );\n }\n if (domNode.name === 'input') {\n return ;\n }\n return domNode;\n }\n })\n );\n\n setQuestionSolution(HTMLReactParser(convertTagsToHTML(solution)));\n }\n }, [question]);\n\n return (\n
    \n
    \n
    \n \n ×\n \n

    {selectedQuestion.TopicName}

    \n

    {selectedQuestion.SkillName}

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {t(\n `browse-content:questionCard.questionId`,\n 'Question ID'\n )}\n : {selectedQuestion.QuestionId}\n \n \n {t(\n `browse-content:questionCard.difficulty`,\n 'Difficulty'\n )}\n \n \n
    \n
    \n
    \n
    \n
    \n {questionTitle}\n {mcqOptions.length > 0 && (\n \n {mcqOptions.map(option => (\n
  • {option}
  • \n ))}\n
    \n )}\n
    \n
    \n
    \n \n {questionSolution}\n \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import React from 'react';\n\n/**\n * @todo adding classNames and styles\n */\nconst HeaderBox = props => {\n const { children } = props;\n return (\n
    \n {children}\n
    \n );\n};\nexport default HeaderBox;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nextStep } from 'stores/utils/step/actions';\n\nfunction ButtonStepNext(props) {\n const dispatch = useDispatch();\n const { title, onClick, disabled } = props;\n\n const defaultOnClick = () => dispatch(nextStep());\n const handlePrevStep = onClick || defaultOnClick;\n\n return (\n \n {title}\n \n );\n}\n\nexport default ButtonStepNext;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ButtonStepNext from 'components/Shared/ButtonStepNext';\n\n/**\n * @todo adding classNames and styles\n */\nconst NavigationWizard = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { totalQuestions, onClick, showtotalQuestions } = props;\n\n return (\n
    \n {showtotalQuestions && (\n

    \n {t(`create-assign-question:main.totalQn`, 'Total Qn : ')}\n {totalQuestions}\n

    \n )}\n\n 50}\n />\n
    \n );\n};\nexport default React.memo(NavigationWizard);\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * @todo adding classNames and styles\n */\nconst CheckAllCard = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { checked, onChange } = props;\n return (\n <>\n
    \n \n \n {/* eslint-disable-next-line jsx-a11y/label-has-for */}\n \n
    \n \n );\n};\nexport default CheckAllCard;\n","import styled from 'styled-components';\n\nexport const Container = styled.p`\n font-size: 14px;\n color: #ff5b00;\n align-self: flex-end;\n margin-bottom: 1rem !important;\n padding-right: 10px;\n`;\n","import React from 'react';\nimport { Trans } from 'react-i18next';\n\nimport { Container } from './ValidationMessage.styles';\n\nexport default function ValidationMessage() {\n return (\n \n \n Please select max 50 questions to proceed.\n \n \n );\n}\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setSelectedQuestions } from 'stores/worksheet/actions';\nimport { propEq, find, findIndex } from 'ramda';\nimport { nextStep } from 'stores/utils/step/actions';\nimport { Modal, Col } from 'react-bootstrap';\nimport PopupModal from 'components/Shared/PopupModal';\nimport iconTrash from 'assets/img/icons8-trash.svg';\nimport QuestionLoader from 'components/Loader/QuestionLoader';\nimport WorksheetQuestion from 'components/CreateAndAssign/QuestionCart/WorksheetQuestion';\nimport WorksheetQuestionModal from 'components/CreateAndAssign/QuestionCart/WorksheetQuestionModal';\nimport RemoveQuestionModal from 'components/CreateAndAssign/QuestionCart/RemoveQuestionModal';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport CheckAllCard from 'components/CreateAndAssign/CheckAllCard';\nimport ValidationMessage from 'components/CreateAndAssign/ValidationMessage';\n\nexport default function WorksheetQuestions() {\n const dispatch = useDispatch();\n const { cartQuestions, isLoading } = useSelector(state => state.questions);\n const { selectedQuestions } = useSelector(state => state.worksheet);\n\n // Boolean variable to monitor whether all questions are selected\n // Variable name prefixed with `is` so it is more meaningful\n // @see {@link https://www.samanthaming.com/tidbits/34-better-boolean-variable-names/}\n\n const isAllQuestionsSelected = cartQuestions\n .map(question => question.ID)\n .every(\n v => selectedQuestions.map(selected => selected.ID).indexOf(v) !== -1\n );\n\n const [show, setShow] = useState(false);\n const [confirmation, setConfirmation] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const handleShowSolution = () => setShowSolution(true);\n const handleHideSolution = () => setShowSolution(false);\n\n const [questionPopup, setQuestionPopup] = useState({});\n const handleClose = () => {\n handleHideSolution();\n setShow(false);\n };\n\n const handleShow = async question => {\n setQuestionPopup(question);\n setShow(true);\n };\n\n const showConfirmation = () => {\n setConfirmation(true);\n };\n\n const closeConfirmation = () => {\n setConfirmation(false);\n };\n\n const findIn = Id => {\n const found = findIndex(propEq('ID', Id))(selectedQuestions);\n if (found !== -1) {\n return true;\n }\n return false;\n };\n\n const handleAllChecked = event => {\n const data = event.target.checked ? cartQuestions : [];\n dispatch(setSelectedQuestions(data));\n };\n\n const handleChecked = event => {\n const Id = parseInt(event.target.value, 10);\n const index = findIndex(propEq('ID', Id))(selectedQuestions);\n\n // Use new variable to avoid mutating state\n let updatedSelectedQuestions;\n\n if (event.target.checked) {\n const question = find(propEq('ID', Id))(cartQuestions);\n updatedSelectedQuestions = [...selectedQuestions, question];\n } else if (index !== -1) {\n updatedSelectedQuestions = [\n ...selectedQuestions.slice(0, index),\n ...selectedQuestions.slice(index + 1)\n ];\n }\n dispatch(setSelectedQuestions(updatedSelectedQuestions));\n };\n\n const handleNextStep = () => {\n if (selectedQuestions.length > 0) {\n dispatch(nextStep());\n }\n };\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n {selectedQuestions.length > 50 && }\n \n \n \n \n \n \n
    \n
    \n {isLoading ? (\n \n ) : (\n cartQuestions.map(question => {\n return (\n handleShow(question)}\n onShowSolution={handleShowSolution}\n />\n );\n })\n )}\n
    \n
    \n \n );\n}\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { prevStep } from 'stores/utils/step/actions';\n\nexport default function ButtonStepPrev(props) {\n const { title } = props;\n\n const dispatch = useDispatch();\n const handlePrevStep = () => {\n dispatch(prevStep());\n };\n return (\n \n {title}\n \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useFormik } from 'formik';\nimport ButtonStepPrev from 'components/Shared/ButtonStepPrev';\n\nconst WorksheetForm = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { placeholder, value, isError, onChange, alertMsg } = props;\n const [placeholderTitle, setPlaceholderTitle] = useState(placeholder);\n const formik = useFormik({\n initialValues: {\n worksheetTitle: value\n }\n });\n\n const handleOnFocus = event => {\n formik.setFieldTouched(event.target.name, true);\n setPlaceholderTitle('');\n };\n\n const handleOnBlur = event => {\n formik.setFieldTouched(event.target.name, false);\n setPlaceholderTitle(event.target.value === '' ? placeholder : '');\n };\n\n const handleOnChange = e => {\n onChange(e.target.value);\n };\n\n return (\n <>\n {props.showBackBtn === false ? null : (\n \n )}\n
    \n
    \n \n {alertMsg && isError && (\n

    \n {t(\n `create-assign-question:editWo.nextStepVal`,\n '*Please add worksheet title before going to the next step.'\n )}\n

    \n )}\n
    \n
    \n \n );\n};\nexport default WorksheetForm;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { nextStep } from 'stores/utils/step/actions';\n\nimport { Modal, Col } from 'react-bootstrap';\nimport PopupModal from 'components/Shared/PopupModal';\nimport RemoveQuestionModal from 'components/CreateAndAssign/QuestionCart/RemoveQuestionModal';\nimport iconTrash from 'assets/img/icons8-trash.svg';\nimport WorksheetQuestion from 'components/CreateAndAssign/QuestionCart/WorksheetQuestion';\nimport WorksheetQuestionModal from 'components/CreateAndAssign/QuestionCart/WorksheetQuestionModal';\n// import IconPlus from 'assets/img/icons-plus.svg';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport WorksheetForm from 'components/CreateAndAssign/QuestionCart/WorksheetForm';\nimport { setWorksheetTitle } from 'stores/worksheet/actions';\nimport { isEmpty } from 'ramda';\n\nexport default function WorksheetEdit() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n\n const { selectedQuestions, title } = useSelector(state => state.worksheet);\n\n const [show, setShow] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const [selectedCard, setSelectedCard] = useState(\n !isEmpty(selectedQuestions) && selectedQuestions[0].ID\n );\n const [confirmation, setConfirmation] = useState(false);\n const [alertMsg, setAlertMsg] = useState(false);\n\n const toggleShowSolution = () => setShowSolution(!showSolution);\n\n const [questionPopup, setQuestionPopup] = useState({});\n const handleClose = () => {\n toggleShowSolution();\n setShow(false);\n };\n\n const handleShow = async question => {\n setQuestionPopup(question);\n setShow(true);\n };\n\n const handleNextStep = () => {\n if (title.trim() === '') {\n setAlertMsg(true);\n }\n if (title.trim()) {\n setAlertMsg(false);\n dispatch(nextStep());\n }\n };\n\n const onChangeTitle = value => {\n dispatch(setWorksheetTitle(value));\n };\n\n const showConfirmation = () => {\n setConfirmation(true);\n };\n\n const closeConfirmation = () => {\n setConfirmation(false);\n };\n\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 {/* eslint-disable-next-line jsx-a11y/label-has-for, jsx-a11y/label-has-associated-control */}\n {/* */}\n
    \n
    \n {selectedQuestions.map((question, key) => {\n return (\n handleShow(question)}\n onShowSolution={toggleShowSolution}\n selectedCard={selectedCard}\n onClick={() => setSelectedCard(question.ID)}\n cardIndex={key}\n />\n );\n })}\n
    \n
    \n
    \n );\n}\n","import React from 'react';\n\nconst Stepper = props => {\n const {\n steps,\n showNumber,\n activeStep,\n onSelect,\n className,\n backButton\n } = props;\n const lastIndexOfSteps = steps.length - 1;\n const handleChangeClass = index => {\n if (activeStep === index + 1) {\n return 'stepper-item-inner-active';\n }\n if (index + 1 < activeStep) {\n return 'stepper-item-inner-completed';\n }\n return 'stepper-item-inner-future';\n };\n return (\n \n {backButton}\n
    \n {steps.map((step, index) => {\n return (\n \n \n \n \n {' '}\n {showNumber && index + 1}{' '}\n \n \n {' '}\n {step.title}{' '}\n \n
    \n \n {lastIndexOfSteps === index ? (\n ''\n ) : (\n
    \n )}\n \n );\n })}\n
    \n \n );\n};\nexport default Stepper;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setStep } from 'stores/utils/step/actions';\nimport Stepper from './Stepper';\n\n// eslint-disable-next-line\nconst StepperWizard = props => {\n const dispatch = useDispatch();\n\n const { activeStep } = useSelector(state => state.step);\n const { children, onSelect, className, backButton } = props;\n\n let componentChildrens;\n const defaultOnSelect = step => {\n dispatch(setStep(step));\n };\n\n const handleOnClickStepper = onSelect || defaultOnSelect;\n const steps = [];\n\n React.Children.map(children, child => {\n steps.push({\n title: child.props.title\n });\n if (activeStep === parseInt(child.props.step, 10)) {\n componentChildrens = child;\n }\n });\n\n return (\n <>\n \n
    {componentChildrens}
    \n \n );\n};\n\nexport default StepperWizard;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ButtonStepPrev from 'components/Shared/ButtonStepPrev';\n\nexport default function WorksheetAssignTitle(props) {\n const { t } = useTranslation(['create-assign-question']);\n const { title, totalQuestions, icon, onPreview } = props;\n return (\n
    \n \n
    \n
    \n {icon && (\n \n )}\n
    \n

    {title}

    \n
    \n
    \n ( {t(`create-assign-question:main.totalQn`, 'Total Qn : ')}\n {totalQuestions} )\n
    \n {/*
    \n Total Score : 10 )\n
    */}\n
    \n
    \n
    \n {onPreview && (\n \n {t(`create-assign-question:stepper.preview`, 'Preview')}\n \n )}\n
    \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const NewBorderStyle = styled.div`\n border-bottom: 1px solid #dddddd;\n margin: 10px -15px;\n`;\n","import React from 'react';\nimport { NewBorderStyle } from './NewBorder.styles';\n\nexport default function NewBorder({ styles }) {\n return ;\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nexport default function QuestionHeader(props) {\n const { t } = useTranslation(['create-assign-question']);\n // const { order, score } = props;\n const { order } = props;\n return (\n
    \n
    \n {t(`create-assign-question:assign.question`, 'Question')}\n {order}\n
    \n {/*
    \n Score Weightage {score} marks\n
    */}\n
    \n );\n}\n","import React from 'react';\nimport DateTimeRangeContainer from 'react-advanced-datetimerange-picker';\nimport './DateTimePicker.styles.scss';\n\nexport default function DateTimeRangePicker(props) {\n const { startDate, endDate, applyCallback } = props;\n\n const config = {\n sundayFirst: true\n };\n\n const value = `${startDate.format('DD MMM YYYY, h:mm A')} - ${endDate.format(\n 'DD MMM YYYY, h:mm A'\n )}`;\n\n return (\n \n event.preventDefault()}>\n {value}\n \n \n );\n}\n","import React, { useState } from 'react';\nimport DateRangePicker from 'react-bootstrap-daterangepicker';\nimport 'bootstrap-daterangepicker/daterangepicker.css';\nimport './DateTimePicker.styles.scss';\n\nexport default function DateTimePicker(props) {\n const { selectedDate, applyCallback, minDateVal } = props;\n const [minDate] = useState(minDateVal || new Date());\n\n const config = {\n sundayFirst: true\n };\n\n const value = selectedDate.format('DD MMM YYYY, h:mm A');\n\n return (\n \n event.preventDefault()}>\n {value}\n \n \n );\n}\n","import React from 'react';\n\nconst SidebarRight = props => {\n const { children, className } = props;\n return
    {children}
    ;\n};\n\nexport default SidebarRight;\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nconst AlertModal = props => {\n const { isShow, handleClose, title, message, children, buttons } = props;\n\n return (\n \n \n

    {title}

    \n {message && (\n
    \n {message}\n
    \n )}\n
    \n {children}\n
    \n {buttons &&
    {buttons}
    }\n
    \n
    \n );\n};\n\nexport default AlertModal;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from 'react-bootstrap';\n\nimport AlertModal from './AlertModal';\n\nconst ConfirmModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { isShow, onConfirm, onClose, title, children, loading } = props;\n\n const buttons = (\n <>\n \n {t(`create-assign-question:resetModal.no`, 'No')}\n \n \n \n );\n\n return (\n \n {children}\n \n );\n};\n\nexport default ConfirmModal;\n","import styled from 'styled-components';\n\nexport const SpinnerContainer = styled.div`\n &,\n &:before,\n &:after {\n border-radius: 50%;\n width: ${props => (props.small ? '1.5em' : '2.5em')};\n height: ${props => (props.small ? '1.5em' : '2.5em')};\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation: load7 1.8s infinite ease-in-out;\n animation: load7 1.8s infinite ease-in-out;\n }\n\n color: #ff5b00;\n font-size: 10px;\n margin: 80px auto;\n position: ${props => (props.position ? props.position : 'relative')};\n grid-column: ${props => (props.gridColumn ? props.gridColumn : null)};\n top: ${props => (props.top ? props.top : '0')};\n text-indent: -9999em;\n -webkit-transform: translateZ(0);\n -ms-transform: translateZ(0);\n transform: translateZ(0);\n -webkit-animation-delay: -0.16s;\n animation-delay: -0.16s;\n\n &:before,\n &:after {\n content: '';\n position: absolute;\n top: 0;\n }\n\n &:before {\n left: ${props => (props.small ? '-2em' : '-3.5em')};\n -webkit-animation-delay: -0.32s;\n animation-delay: -0.32s;\n }\n &:after {\n left: ${props => (props.small ? '2em' : '3.5em')};\n }\n @-webkit-keyframes load7 {\n 0%,\n 80%,\n 100% {\n box-shadow: 0 2.5em 0 -1.3em;\n }\n 40% {\n box-shadow: 0 2.5em 0 0;\n }\n }\n @keyframes load7 {\n 0%,\n 80%,\n 100% {\n box-shadow: 0 2.5em 0 -1.3em;\n }\n 40% {\n box-shadow: 0 2.5em 0 0;\n }\n }\n`;\n","import React from 'react';\nimport { SpinnerContainer } from './Spinner.styles';\n\nconst Spinner = ({ top, position, gridColumn, small, styles }) => (\n \n Loading...\n \n);\n\nexport default Spinner;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport Spinner from 'components/Shared/Spinner';\nimport ErrorIcon from 'assets/img/icon-error.svg';\nimport AlertModal from './AlertModal';\n\nconst InfoSavedWorksheetModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const history = useHistory();\n const { isShow, onConfirm, onClose, error, onCloseError, isLoading } = props;\n const buttons = (\n <>\n {error && (\n \n {t(`create-assign-question:saveWoModal.close`, 'Close')}\n \n )}\n {!error && !isLoading && (\n <>\n \n \n {t(`create-assign-question:saveWoModal.no`, 'No')}\n \n \n )}\n \n );\n\n const errorTitle = (\n

    \n \n \n {t(`create-assign-question:saveWoModal.no`, 'Error')}\n \n

    \n );\n\n return (\n \n
    \n {isLoading && }\n {!isLoading && error === null && (\n <>\n

    \n {t(\n `create-assign-question:saveWoModal.woSavedMsg`,\n 'Your Worksheet has been saved succesfully'\n )}\n

    \n
      \n
    • \n {t(\n `create-assign-question:saveWoModal.findWo`,\n 'find your worksheet at'\n )}\n \n history.push('/create-and-assign/saved-worksheet')\n }\n style={{ width: '100%' }}\n >\n \n {t(\n `create-assign-question:saveWoModal.savedWo`,\n 'Saved Worksheet'\n )}\n \n
    • \n
    \n

    \n {t(\n `create-assign-question:saveWoModal.assignWo`,\n 'Do you want to assign worksheet now?'\n )}\n

    \n \n )}\n {!isLoading && error !== null && (\n <>\n \n {error}\n
    {' '}\n {t(\n `create-assign-question:saveAssignModal.tryAgain`,\n 'Please try again.'\n )}\n

    \n \n )}\n
    \n \n );\n};\n\nexport default InfoSavedWorksheetModal;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport Spinner from 'components/Shared/Spinner';\nimport ErrorIcon from 'assets/img/icon-error.svg';\nimport AlertModal from './AlertModal';\n\nconst InfoAssignedWorksheetModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const history = useHistory();\n const { isShow, onConfirm, onClose, error, isLoading } = props;\n const buttons = (\n <>\n {error && (\n \n )}\n {!error && !isLoading && (\n \n )}\n \n );\n const errorTitle = (\n

    \n \n \n {t(`create-assign-question:saveWoModal.error`, 'Error')}\n \n

    \n );\n\n return (\n \n
    \n {isLoading && }\n {!isLoading && error === null && (\n <>\n

    \n {t(\n `create-assign-question:saveAssignModal.hwAssignedMsg`,\n 'This Worksheet has been assigned to the classes / student that you have selected'\n )}\n

    \n

    \n {t(\n `create-assign-question:saveAssignModal.trackAssign`,\n 'Track Assignment'\n )}\n

    \n
      \n
    • \n {t(\n `create-assign-question:saveAssignModal.trackStuActions`,\n 'Track student assignment actions'\n )}\n
      \n history.push('/track-assignment')}\n >\n \n {t(\n `create-assign-question:saveAssignModal.trackAssign`,\n 'Track Assignment'\n )}\n \n
    • \n
    • \n {t(\n `create-assign-question:saveAssignModal.editReWo`,\n 'To edit or re-use your worksheet, go to'\n )}\n
      \n \n history.push('/create-and-assign/saved-worksheet')\n }\n >\n \n {t(\n `create-assign-question:saveWoModal.savedWo`,\n 'Saved Worksheet'\n )}\n \n
    • \n
    \n \n )}\n {!isLoading && error !== null && (\n <>\n \n {error}\n
    {' '}\n {t(\n `create-assign-question:saveAssignModal.tryAgain`,\n 'Please try again.'\n )}\n

    \n \n )}\n
    \n \n );\n};\n\nexport default InfoAssignedWorksheetModal;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { homeworkLink } from 'constants/index';\nimport AlertModal from './AlertModal';\n\nconst InfoLinkWorksheetModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { isShow, onConfirm, onClose } = props;\n const { selectedWorksheet } = useSelector(state => state.worksheet);\n const buttons = (\n <>\n \n \n );\n return (\n \n
    \n

    \n {t(\n `create-assign-question:saveAssignModal.reimndMsg`,\n 'You can remind your student to complete this worksheet by sharing the link via email, forum, LMS, or simply instruct the students to login to KooBits and look for it at the homework section.'\n )}\n

    \n \n

    \n {t(\n `create-assign-question:saveAssignModal.impNote`,\n 'important note:'\n )}\n
    \n {t(\n `create-assign-question:saveAssignModal.authorizeStud`,\n 'only authorized students will be able to access the home work link.'\n )}\n

    \n
    \n \n );\n};\n\nexport default InfoLinkWorksheetModal;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport { resetCartQuestions } from 'stores/questions/actions';\nimport AlertModal from './AlertModal';\n\nconst CartResetModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { isShow, onConfirm, onClose } = props;\n const resetCart = () => {\n onConfirm();\n dispatch(resetCartQuestions());\n };\n\n const buttons = (\n <>\n \n \n \n );\n return (\n \n

    \n {t(\n `create-assign-question:resetModal.selectReset`,\n 'Do you want to reset the cart?'\n )}\n

    \n \n );\n};\n\nexport default CartResetModal;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignClass,\n assignGroup,\n resetAssignment\n} from 'stores/worksheet/actions';\nimport { findIndex, find, propEq } from 'ramda';\nimport { classType } from 'constants/index';\n\nexport default function ClassGroupCheckbox(props) {\n const { type } = props;\n const dispatch = useDispatch();\n const { assignedClass, assignedGroup } = useSelector(\n state => state.worksheet\n );\n\n const { classes } = useSelector(state => state.lookup);\n\n const items = classes.filter(classData => {\n return classData.Type === classType[type];\n });\n\n const assignedData = type === 'class' ? assignedClass : assignedGroup;\n const assignData = type === 'class' ? assignClass : assignGroup;\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedData) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(classes);\n\n updatedData = [...assignedData, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedData);\n updatedData = [\n ...assignedData.slice(0, index),\n ...assignedData.slice(index + 1)\n ];\n }\n\n dispatch(assignData(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return items.length !== 0 ? (\n <>\n {items.map(item => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    No classes found

    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport CheckboxClassGroup from './CheckboxClassGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]); // @see {@link https://github.com/facebook/create-react-app/issues/6880#issuecomment-488158024 having dispatch in useEffect dependencies}\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.classAssign`,\n 'Please choose classes you want to assign'\n )}\n

    \n \n \n {levels.map(level => (\n \n ))}\n \n \n {/* \n \n \n \n \n */}\n \n
    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchClassRequest,\n fetchStudentsRequest,\n fetchStudentsSuccess\n} from 'stores/utils/lookup/actions';\nimport { filter, find, propEq, findIndex } from 'ramda';\nimport { assignStudent, resetAssignment } from 'stores/worksheet/actions';\nimport Spinner from 'components/Shared/Spinner';\n\nexport default function AssignIndividual() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n // Get data from redux store\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { classes, students, error, isLoading } = useSelector(\n state => state.lookup\n );\n const { assignedStudent } = useSelector(state => state.worksheet);\n\n // Level state management\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n // Level on change effect\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]);\n\n // Class state management\n const [selectedClass, setSelectedClass] = useState(\n classes.length > 0 ? classes[0].ID : null\n );\n const onChangeClass = event => {\n setSelectedClass(event.target.value);\n };\n // Class on change effect\n useEffect(() => {\n if (selectedClass !== null) {\n dispatch(fetchStudentsRequest(selectedClass));\n } else {\n dispatch(fetchStudentsSuccess([]));\n }\n }, [dispatch, selectedClass]);\n // When classes change, change the selected class\n useEffect(() => {\n if (classes.length > 0) {\n setSelectedClass(classes[0].ID);\n } else {\n setSelectedClass(null);\n }\n }, [classes]);\n\n // Available students state management\n const availableStudents = filter(\n student =>\n findIndex(propEq('UserId', parseInt(student.UserId, 10)))(\n assignedStudent\n ) === -1,\n students\n );\n const [\n selectedAvailableStudentIds,\n setSelectedAvailableStudentIds\n ] = useState([]);\n const handleSelectAvailableStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAvailableStudentIds(value);\n };\n const onAdd = () => {\n const updatedData = [...assignedStudent];\n selectedAvailableStudentIds.forEach(id => {\n const newData = find(propEq('UserId', id))(students);\n updatedData.push(newData);\n });\n\n dispatch(assignStudent(updatedData));\n dispatch(resetAssignment('admin'));\n setSelectedAvailableStudentIds([]);\n };\n\n // Selected assigned students state management\n const [selectedAssignedStudentIds, setSelectedAssignedStudentIds] = useState(\n []\n );\n const handleSelectAssignedStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAssignedStudentIds(value);\n };\n const onRemove = () => {\n let updatedData = [...assignedStudent];\n\n updatedData = updatedData.filter(\n student => selectedAssignedStudentIds.indexOf(student.UserId) === -1\n );\n dispatch(assignStudent(updatedData));\n setSelectedAssignedStudentIds([]);\n };\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.chooseStud`,\n 'Please choose students you want to assign'\n )}\n

    \n \n \n {levels.map(level => (\n \n ))}\n \n \n \n \n {classes.map(classItem => (\n \n ))}\n \n \n
    \n
    \n {isLoading && }\n
    \n \n {isLoading ? (\n ''\n ) : availableStudents.length === 0 || error !== '' ? (\n \n ) : (\n availableStudents.map(student => (\n \n ))\n )}\n \n
    \n \n {t(`create-assign-question:assignModal.add`, 'Add')}\n \n \n {t(`create-assign-question:assignModal.remove`, 'Remove')}\n \n
    \n \n {assignedStudent.map(student => (\n \n ))}\n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { assignPrivateGroup, resetAssignment } from 'stores/worksheet/actions';\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function CheckboxPrivateGroup(props) {\n const { t } = useTranslation(['create-assign-question']);\n const { groups } = props;\n const dispatch = useDispatch();\n const { assignedPrivateGroup } = useSelector(state => state.worksheet);\n\n const checkChecked = id => {\n return (\n findIndex(propEq('ID', parseInt(id, 10)))(assignedPrivateGroup) !== -1\n );\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedPrivateGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(\n assignedPrivateGroup\n );\n updatedData = [\n ...assignedPrivateGroup.slice(0, index),\n ...assignedPrivateGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignPrivateGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return groups.length !== 0 ? (\n <>\n {groups.map(group => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    \n {t(\n 'create-assign-question:assignModal.noFound',\n 'No Private groups found'\n )}\n

    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchPrivateGroupsRequest } from 'stores/privateGroup/actions';\nimport PrivateGroupCheckbox from './CheckboxPrivateGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const [groupName, setGroupName] = useState('');\n const { privateGroups } = useSelector(state => state.privateGroup);\n\n const handleChangeGroupName = group => {\n setGroupName(group);\n };\n\n useEffect(() => {\n dispatch(fetchPrivateGroupsRequest(groupName));\n }, [dispatch, groupName]);\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.choosePrivateGroup`,\n 'Please choose private groups you want to assign'\n )}\n

    \n \n handleChangeGroupName(event.target.value)}\n />\n \n \n
    \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n assignAdminGroup,\n assignLevel,\n resetAssignment\n} from 'stores/worksheet/actions';\nimport './AssignAdmin.styles.scss';\n\nconst adminGroupsHash = {\n premium: 'All Premium users',\n retail: 'All Retail users',\n koobits: 'All KooBits users'\n};\n\nexport default function AssignAdmin() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { assignedAdminGroup, assignedLevel } = useSelector(\n state => state.worksheet\n );\n\n const [selectedLevel, setSelectedLevel] = useState(\n assignedLevel !== '' ? assignedLevel : globalSelectedLevel.ID\n );\n const [selectedUserGroup, setSelectedUserGroup] = useState(\n assignedAdminGroup.ID\n );\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n dispatch(assignLevel(event.target.value));\n dispatch(resetAssignment('non-admin'));\n };\n\n const onChangeUserGroup = event => {\n if (event.target.checked) {\n setSelectedUserGroup(event.target.value);\n dispatch(\n assignAdminGroup({\n ID: event.target.value,\n Name: adminGroupsHash[event.target.value]\n })\n );\n dispatch(assignLevel(selectedLevel));\n dispatch(resetAssignment('non-admin'));\n } else {\n setSelectedUserGroup(null);\n dispatch(assignAdminGroup({}));\n dispatch(assignLevel(''));\n dispatch(resetAssignment('non-admin'));\n }\n };\n\n return (\n
    \n

    \n {t(\n 'create-assign-question:assignModal.chooseAdmin',\n 'Please choose users and level you want to assign'\n )}\n

    \n
    \n {' '}\n \n {t(\n 'create-assign-question:assignModal.allPremium',\n 'All Premium users'\n )}\n \n
    \n\n {/* \n \n */}\n
    \n {' '}\n \n {t(\n 'create-assign-question:assignModal.allKoobits',\n 'All KooBits users'\n )}\n \n
    \n \n \n {levels.map(level => (\n \n ))}\n \n \n
    \n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchMyGroupsRequest } from 'stores/utils/lookup/actions';\nimport { assignGroup, resetAssignment } from 'stores/worksheet/actions';\n\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { groups } = useSelector(state => state.lookup);\n const { assignedGroup } = useSelector(state => state.worksheet);\n\n useEffect(() => {\n dispatch(fetchMyGroupsRequest());\n }, [dispatch]);\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedGroup) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedGroup);\n updatedData = [\n ...assignedGroup.slice(0, index),\n ...assignedGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.chooseGroup`,\n 'Please choose groups you want to assign'\n )}\n

    \n {groups.length !== 0 ? (\n <>\n {groups.map(item => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    \n {t(`create-assign-question:assignModal.noGroup`, 'No group found')}\n

    \n )}\n
    \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport AssignClass from './AssignClass';\nimport AssignIndividual from './AssignIndividual';\nimport AssignPrivate from './AssignPrivate';\nimport AssignAdmin from './AssignAdmin';\nimport AssignGroup from './AssignGroup';\n\nexport default function AssignRadio() {\n const { t } = useTranslation(['create-assign-question']);\n const { isAdmin } = useSelector(state => state.login);\n const [typeAssign, setTypeAssign] = useState('class');\n\n const onChange = event => {\n setTypeAssign(event.target.value);\n };\n\n const renderSwitch = param => {\n switch (param) {\n case 'private':\n return ;\n case 'admin':\n return ;\n case 'class':\n return ;\n case 'individual':\n return ;\n case 'group':\n return ;\n default:\n return false;\n }\n };\n\n return (\n <>\n
    \n {isAdmin && (\n <>\n
    \n \n \n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n \n
    \n &\n \n )}\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.class`, 'Class')}\n \n
    \n &\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.group`, 'Group')}\n \n
    \n &\n
    \n {' '}\n \n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Student'\n )}\n \n
    \n {isAdmin && (\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.forAdimn`, 'For Admin')}\n \n
    \n )}\n
    \n
    {renderSwitch(typeAssign)}
    \n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { groupBy } from 'ramda';\nimport hasProp from 'helpers/hasProp';\n\nexport default function AssignResult(props) {\n const { t } = useTranslation(['create-assign-question']);\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel,\n hasAssignees\n } = props;\n\n const groupedStudents = groupBy(\n student => student.ClassName,\n assignedStudent\n );\n\n return (\n <>\n

    {t(`create-assign-question:assign.assignTo`, 'Assign to')}

    \n {hasAssignees ? (\n <>\n {assignedClass.length > 0 && (\n
    \n
    {t(`create-assign-question:assignModal.class`, 'Class')}
    \n {assignedClass.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {assignedGroup.length > 0 && (\n
    \n
    {t(`create-assign-question:assignModal.group`, 'Group')}
    \n {assignedGroup.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {assignedPrivateGroup.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n
    \n {assignedPrivateGroup.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {hasProp(assignedAdminGroup, 'ID') && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.adminGroup`,\n 'Admin Group'\n )}\n
    \n

    {assignedAdminGroup.Name}

    \n
    \n )}\n {assignedLevel !== '' && (\n
    \n
    {t(`create-assign-question:assignModal.level`, 'Level')}
    \n

    {`Primary ${assignedLevel}`}

    \n
    \n )}\n {assignedStudent.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Students'\n )}\n
    \n {Object.entries(groupedStudents).map(\n ([studentClass, classOfStudents]) => {\n return (\n \n

    {studentClass}

    \n {classOfStudents.map(singleStudent => (\n
    \n

    {singleStudent.FullName}

    \n
    \n ))}\n
    \n );\n }\n )}\n
    \n )}\n \n ) : (\n

    \n {t(\n `create-assign-question:assignModal.noSelection`,\n 'No Classes, Groups or students chosen'\n )}\n

    \n )}\n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Col } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport hasProp from 'helpers/hasProp';\nimport AssignRadio from './AssignRadio';\nimport AssignResult from './AssignResult';\n\nexport default function AssignModal(props) {\n const { t } = useTranslation(['create-assign-question']);\n const { onConfirm } = props;\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.worksheet);\n\n const hasAssignees =\n assignedClass.length > 0 ||\n assignedGroup.length > 0 ||\n assignedStudent.length > 0 ||\n assignedPrivateGroup.length > 0 ||\n (hasProp(assignedAdminGroup, 'ID') && assignedLevel !== '');\n\n return (\n
    \n \n \n \n \n \n \n {t(`create-assign-question:assignModal.confirm`, 'Confirm')}\n \n {/* if it's clickable, change btn-secondary class into btn-primary */}\n \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const AssignSidebarStyle = styled.div`\n ::-webkit-scrollbar {\n width: 10px;\n }\n ::-webkit-scrollbar-track {\n background: #f4f4f4;\n border-radius: 15px;\n }\n ::-webkit-scrollbar-thumb {\n border: 2px solid rgba(0, 0, 0, 0);\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignWorksheet,\n saveWorksheet,\n resetWorksheet,\n setSelectedQuestions\n} from 'stores/worksheet/actions';\nimport { resetCartQuestions } from 'stores/questions/actions';\nimport { groupBy, isNil } from 'ramda';\nimport { Modal } from 'react-bootstrap';\nimport {\n assignReferenceType,\n worksheetStatus,\n assignmentTypes\n} from 'constants/index';\nimport DateTimeRangePicker from 'components/CreateAndAssign/DateTimeRangePicker';\nimport DateTimePicker from 'components/CreateAndAssign/DateTimePicker';\nimport SidebarRight from 'components/Sidebar/SidebarRight';\nimport ConfirmModal from 'components/Alert/ConfirmModal';\nimport InfoSavedWorksheetModal from 'components/Alert/InfoSavedWorksheetModal';\nimport InfoAssignedWorksheetModal from 'components/Alert/InfoAssignedWorksheetModal';\nimport InfoLinkWorksheetModal from 'components/Alert/InfoLinkWorksheetModal';\nimport CartResetModal from 'components/Alert/CartResetModal';\nimport history from 'helpers/history';\nimport hasProp from 'helpers/hasProp';\nimport AssignModal from './AssignModal';\nimport { AssignSidebarStyle } from './AssignSidebar.styles';\n/**\n * @todo adding classNames and styles\n */\nexport default function AssignSidebar({\n isEditSavedWorksheet,\n isCreateHomework,\n isCreateFactualFluency\n}) {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const [show, setShow] = useState(false);\n\n // message alert\n const [showConfirm, setShowConfirm] = useState(false);\n const [showSave, setShowSave] = useState(false);\n const [showAssign, setShowAssign] = useState(false);\n const [showLink, setShowLink] = useState(false);\n const [showResetCart, setShowResetCart] = useState(false);\n\n const {\n title,\n presentationType,\n assignmentType,\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel,\n timeLimit,\n selectedWorksheet,\n isLoading,\n error\n } = useSelector(state => state.worksheet);\n const { cartQuestions } = useSelector(state => state.questions);\n\n const NumberOfKokoCredits = isNil(selectedWorksheet.NumberOfKokoCredits)\n ? 5\n : selectedWorksheet.NumberOfKokoCredits;\n\n const [tempAssignedClass, setTempAssignedClass] = useState([]);\n const [tempAssignedGroup, setTempAssignedGroup] = useState([]);\n const [tempAssignedStudent, setTempAssignedStudent] = useState([]);\n const [tempAssignedPrivateGroup, setTempAssignedPrivateGroup] = useState([]);\n const [tempAssignedAdminGroup, setTempAssignedAdminGroup] = useState({});\n const [tempAssignedLevel, setTempAssignedLevel] = useState('');\n\n const hasAssignees =\n tempAssignedClass.length > 0 ||\n tempAssignedGroup.length > 0 ||\n tempAssignedStudent.length > 0 ||\n tempAssignedPrivateGroup.length > 0 ||\n (hasProp(tempAssignedAdminGroup, 'ID') && assignedLevel !== '');\n\n // Save Worksheet Event Handler\n const onClickSave = () => {\n const params = {\n Title: title,\n Instructions: title,\n WorksheetStatus: worksheetStatus.publish,\n PresentationTypeID: presentationType,\n AssignmentTypeID: assignmentType,\n NumberOfKokoCredits,\n TimeLimit: timeLimit,\n isEditSavedWorksheet: false,\n isCreateHomework: false,\n isCreateFactualFluency: false\n };\n if (isCreateHomework) params.isCreateHomework = true;\n\n if (isCreateFactualFluency) params.isCreateFactualFluency = true;\n\n if (isEditSavedWorksheet) params.isEditSavedWorksheet = true;\n\n dispatch(saveWorksheet(params));\n setShowSave(true);\n };\n\n const showModal = event => {\n event.preventDefault();\n setShow(true);\n };\n\n // Save & Assign Event Handler\n const handleSaveAndAssign = event => {\n event.preventDefault();\n if (hasAssignees) {\n setShowConfirm(true);\n } else {\n setShow(true);\n }\n };\n\n const hideModal = () => {\n setShow(false);\n };\n\n const renderAssigneeItem = items => {\n return items.map(item => (\n

    \n \n {item.Name}\n \n

    \n ));\n };\n\n const [startDate, setStartDate] = useState(moment().startOf('day'));\n const [endDate, setEndDate] = useState(\n moment()\n .add(3, 'day')\n .set({ hour: 23, minute: 59 })\n );\n const [releaseDate, setReleaseDate] = useState(\n moment()\n .add(4, 'day')\n .startOf('day')\n );\n\n const applyCallback = (startDateValue, endDateValue) => {\n setStartDate(startDateValue);\n setEndDate(endDateValue);\n };\n\n const applyCallbackRelease = (e, picker) => {\n setReleaseDate(picker.startDate);\n };\n\n const groupedStudents = groupBy(\n student => student.ClassName,\n tempAssignedStudent\n );\n\n const saveAssignedWorksheet = () => {\n // compile data for assigning\n const assignedClassData = assignedClass.map(classData => ({\n referenceId: classData.ID,\n type: assignReferenceType.class\n }));\n const assignedGroupData = assignedGroup.map(groupData => ({\n referenceId: groupData.ID,\n type: assignReferenceType.group\n }));\n const assignedPrivateGroupData = assignedPrivateGroup.map(\n privateGroupData => ({\n referenceId: privateGroupData.ID,\n type: assignReferenceType.group\n })\n );\n const assignedStudentData = assignedStudent.map(studentData => ({\n referenceId: studentData.UserId,\n type: assignReferenceType.student\n }));\n let assignedAdminData = null;\n if (hasProp(assignedAdminGroup, 'ID')) {\n switch (assignedAdminGroup.ID) {\n case 'premium':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isPremium: 1\n };\n break;\n case 'retail':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isRetail: 1\n };\n break;\n case 'koobits':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level\n };\n break;\n default:\n assignedAdminData = null;\n }\n }\n const assignmentsArray =\n assignedAdminData !== null\n ? [assignedAdminData]\n : [\n ...assignedClassData,\n ...assignedGroupData,\n ...assignedStudentData,\n ...assignedPrivateGroupData\n ];\n\n const data = {\n // data needed for saving worksheet\n Title: title,\n Instructions: title,\n WorksheetStatus: worksheetStatus.publish,\n PresentationTypeID: presentationType,\n AssignmentTypeID: assignmentType,\n TimeLimit: timeLimit,\n NumberOfKokoCredits,\n // data needed for assignment\n startDate: startDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDate: endDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n assignments: assignmentsArray,\n isCreateHomework: isCreateHomework || false,\n isEditSavedWorksheet: isEditSavedWorksheet || false,\n isCreateFactualFluency: isCreateFactualFluency || false\n };\n if (assignmentType === assignmentTypes.test) {\n data.resultDate = releaseDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n }\n const isPublish = true;\n dispatch(assignWorksheet(data, isPublish));\n setShowConfirm(false);\n setShowAssign(true);\n };\n\n const onConfirm = () => {\n setShow(false);\n const newAssignedClass = [...assignedClass];\n setTempAssignedClass(newAssignedClass);\n\n const newAssignedGroup = [...assignedGroup];\n setTempAssignedGroup(newAssignedGroup);\n\n const newAssignedStudent = [...assignedStudent];\n setTempAssignedStudent(newAssignedStudent);\n\n const newAssignedPrivateGroup = [...assignedPrivateGroup];\n setTempAssignedPrivateGroup(newAssignedPrivateGroup);\n\n const newAssignedAdminGroup = assignedAdminGroup;\n setTempAssignedAdminGroup(newAssignedAdminGroup);\n const newAssignedLevel = assignedLevel;\n setTempAssignedLevel(newAssignedLevel);\n };\n\n // button modal\n\n return (\n <>\n \n \n \n\n setShowConfirm(false)}\n title={t(\n `create-assign-question:saveAssignModal.assignHw`,\n 'Assign Homework Now'\n )}\n loading={isLoading}\n >\n

    \n {t(\n `create-assign-question:saveAssignModal.assignMsg`,\n 'Homework will be assigned to the classes/ students that you have selected.'\n )}\n

    \n

    \n {t(\n `create-assign-question:saveAssignModal.proceed`,\n 'Do you want to proceed?'\n )}\n

    \n \n\n {\n setShowSave(false);\n setShow(true);\n }}\n isLoading={isLoading}\n onClose={() => {\n setShowSave(false);\n if (\n isCreateHomework ||\n isEditSavedWorksheet ||\n isCreateFactualFluency\n ) {\n dispatch(resetWorksheet());\n history.push('/create-and-assign/saved-worksheet');\n } else {\n setShowResetCart(true);\n }\n }}\n onCloseError={() => setShowSave(false)}\n error={error}\n />\n\n {\n setShowAssign(false);\n setShowLink(true);\n }}\n onClose={() => setShowAssign(false)}\n error={error}\n isLoading={isLoading}\n />\n\n {\n setShowLink(false);\n if (\n isCreateHomework ||\n isEditSavedWorksheet ||\n isCreateFactualFluency\n ) {\n dispatch(resetWorksheet());\n history.push('/create-and-assign/saved-worksheet');\n } else {\n setShowResetCart(true);\n }\n }}\n onClose={() => {\n setShowLink(false);\n if (\n isCreateHomework ||\n isEditSavedWorksheet ||\n isCreateFactualFluency\n ) {\n dispatch(resetWorksheet());\n history.push('/create-and-assign/saved-worksheet');\n } else {\n setShowResetCart(true);\n }\n }}\n />\n {\n dispatch(resetCartQuestions());\n dispatch(resetWorksheet());\n history.push('/create-and-assign/saved-worksheet');\n setShowResetCart(false);\n }}\n onClose={() => {\n dispatch(resetWorksheet());\n dispatch(setSelectedQuestions(cartQuestions));\n setShowResetCart(false);\n history.push('/create-and-assign/saved-worksheet');\n }}\n />\n \n

    \n {' '}\n {t(\n `create-assign-question:assign.assignSettings`,\n 'Assignment Settings'\n )}\n

    \n
    \n \n \n
    \n

    {t(`create-assign-question:assign.assignTo`, 'Assign to')}

    \n {!hasAssignees && (\n \n {t(\n `create-assign-question:assign.clickChoose`,\n 'Click here to choose'\n )}\n \n )}\n {tempAssignedClass.length > 0 && (\n
    \n
    \n {t(`create-assign-question:assignModal.class`, 'Class')}\n
    \n {renderAssigneeItem(tempAssignedClass)}\n
    \n )}\n {tempAssignedGroup.length > 0 && (\n
    \n
    \n {t(`create-assign-question:assignModal.group`, 'Group')}\n
    \n {renderAssigneeItem(tempAssignedGroup)}\n
    \n )}\n {tempAssignedPrivateGroup.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n
    \n {renderAssigneeItem(tempAssignedPrivateGroup)}\n
    \n )}\n {hasProp(tempAssignedAdminGroup, 'ID') && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.adminGroup`,\n 'Admin Group'\n )}\n
    \n

    \n \n {tempAssignedAdminGroup.Name}\n \n

    \n
    \n )}\n {tempAssignedLevel !== '' && (\n
    \n
    \n {t(`create-assign-question:assignModal.level`, 'Level')}\n
    \n

    \n \n {`Primary ${tempAssignedLevel}`}\n \n

    \n
    \n )}\n {tempAssignedStudent.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Students'\n )}\n
    \n {Object.entries(groupedStudents).map(\n ([studentClass, classOfStudents]) => {\n return (\n \n

    {studentClass}

    \n {classOfStudents.map(singleStudent => (\n \n ))}\n
    \n );\n }\n )}\n
    \n )}\n
    \n
    \n
    \n \n
    \n

    \n {t(`create-assign-question:assign.startEnd`, 'Start / End')}\n

    \n \n
    \n
    \n {assignmentType === assignmentTypes.test && (\n
    \n \n
    \n

    \n {t(\n `create-assign-question:assignModal.releaseDate`,\n 'Release Date'\n )}\n

    \n \n
    \n
    \n )}\n {/*
    \n \n
    \n

    Rewards

    \n
    \n \n {kokoCredits.map(koko => {\n return (\n \n );\n })}\n \n

    Koko

    \n
    \n
    \n
    */}\n
    \n
    \n \n {t(`create-assign-question:assign.saveOnly`, 'Save Only')}\n \n \n {t(`create-assign-question:assign.saveAssign`, 'Save & Assign')}\n \n
    \n
    \n \n );\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport WorksheetAssignTitle from 'components/CreateAndAssign/QuestionCart/WorksheetAssignTitle';\nimport NewBorder from 'components/Shared/NewBorder';\nimport QuestionHeader from 'components/Question/QuestionHeader';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport AssignSidebar from 'components/CreateAndAssign/AssignSidebar';\n// import printImage from 'assets/img/print-icon.svg';\n\nexport default function WorksheetAssign() {\n const { selectedQuestions, title } = useSelector(state => state.worksheet);\n\n return (\n <>\n
    \n \n \n {/* window.print()}\n >\n \"\"\n Print\n */}\n \n
    \n {/* */}\n {/* \n */}\n \n {selectedQuestions.map((question, key) => {\n const order = key + 1;\n return (\n
    \n \n \n \n \n
    \n );\n })}\n
    \n
    \n \n \n );\n}\n","import styled from 'styled-components';\n\nexport const WorksheetTypeStyled = styled.div`\n display: flex;\n flex-flow: column;\n .worksheet-type-info {\n margin: auto;\n }\n .worksheet-type-options {\n display: flex;\n justify-content: space-evenly;\n margin-bottom: 25px;\n }\n .worksheet-type-choice {\n display: flex;\n .worksheet-type-icon {\n height: 31px;\n width: 31px;\n border-radius: 50%;\n text-align: center;\n color: white;\n padding: 2px;\n font-family: Helvetica;\n font-size: 19px;\n }\n .form-check {\n padding: 8px;\n color: #000000;\n }\n }\n .types-label {\n @media screen and (max-width: 562px) {\n font-size: 12px;\n }\n }\n //hide the browser's default radio\n .form-check input {\n opacity: 0;\n cursor: pointer;\n }\n //create a custom radio\n .form-check .custom-radio {\n position: absolute;\n left: 3px;\n height: 18px;\n width: 18px;\n border-radius: 50px;\n border: 1px solid #9e9e9e;\n background-color: white;\n pointer-events: none;\n }\n //when radio is checked\n .form-check input:checked ~ .custom-radio {\n background-color: none;\n border: 1px solid #deab71;\n }\n //create the indicator (hidden when not checked)\n .form-check .custom-radio:after {\n content: '';\n position: absolute;\n display: none;\n }\n //show the checkmark when checked\n .form-check input:checked ~ .custom-radio:after {\n display: block;\n }\n //style the indicator\n .form-check .custom-radio:after {\n margin: 4px;\n width: 8px;\n height: 8px;\n border-radius: 50px;\n background-color: #ffa640;\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setAssigmentType } from 'stores/worksheet/actions';\nimport {\n assignmentTypeNames,\n assignmentTypes,\n assignmentTypeColors,\n assignmentTypeInitials\n} from 'constants/index';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport worksheetType from 'assets/img/worksheet-type.svg';\nimport { WorksheetTypeStyled } from './ChooseWorkSheetType.styles';\n\nexport default function ChooseWorkSheetType() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { assignmentType } = useSelector(state => state.worksheet);\n\n const assignmentTypeID = isNilOrEmpty(assignmentType)\n ? assignmentTypes.homework\n : parseInt(assignmentType, 10);\n\n useEffect(() => {\n dispatch(setAssigmentType(assignmentTypeID));\n }, [assignmentTypeID, dispatch]);\n const handleOnChange = e => {\n dispatch(setAssigmentType(e.target.value));\n };\n\n return (\n \n
    \n {Object.keys(assignmentTypeNames).map(type => (\n
    \n \n {assignmentTypeInitials[type]}\n
    \n
    \n {' '}\n \n \n {t(\n `create-assign-question:preview.${assignmentTypeNames[type]}`,\n assignmentTypeNames[type]\n )}\n \n
    \n
    \n ))}\n \n
    \n \"Choose\n
    \n
    \n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setPresentationType } from 'stores/worksheet/actions';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport ChooseWorkSheetType from 'components/CreateAndAssign/ChooseWorkSheetType';\nimport { Col } from 'react-bootstrap';\nimport { presentationTypes } from 'constants/index';\nimport { nextStep } from 'stores/utils/step/actions';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport ButtonStepPrev from 'components/Shared/ButtonStepPrev';\n\nexport default function WorksheetPreviewNew() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { presentationType } = useSelector(state => state.worksheet);\n\n const presentationTypeID = isNilOrEmpty(presentationType)\n ? presentationTypes.standard\n : parseInt(presentationType, 10);\n\n useEffect(() => {\n dispatch(setPresentationType(presentationTypeID));\n }, [presentationTypeID, dispatch]);\n const handleOnNext = () => {\n dispatch(nextStep());\n dispatch(setPresentationType(presentationTypeID));\n };\n\n return (\n
    \n \n \n
    \n \n
    \n
    \n

    \n {t(\n `create-assign-question:preview.chooseWoType`,\n 'Choose Worksheet Type'\n )}\n

    \n

    \n {t(\n `create-assign-question:preview.chooseWo1`,\n 'We provide 3 worksheet types: '\n )}\n \n {t(\n `create-assign-question:preview.chooseWo2`,\n 'Homework, Mock Test and Test/Assessment.'\n )}\n {' '}\n
    \n {t(\n `create-assign-question:preview.chooseWo3`,\n 'You can choose one of them to present your worksheet.'\n )}\n

    \n
    \n \n \n
    \n
    \n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty } from 'ramda';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setStep } from 'stores/utils/step/actions';\nimport EmptyCartQuestion from 'components/CreateAndAssign/EmptyCartQuestion';\nimport WorksheetQuestions from 'pages/CreateAndAssign/QuestionCart/WorksheetQuestions';\nimport WorksheetEdit from 'pages/CreateAndAssign/QuestionCart/WorksheetEdit';\n// import WorksheetPreview from 'pages/CreateAndAssign/QuestionCart/WorksheetPreview';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport WorksheetAssign from 'pages/CreateAndAssign/QuestionCart/WorksheetAssign';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport WorksheetPreviewNew from './QuestionCart/WorksheetPreviewNew';\n\n/**\n * @todo when the UI for empty cart questions done, use cartQuestions from reducer or other resources\n * @note client still not confirm whether cartQuestions is the data we will be use\n */\nexport default function QuestionCart() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { cartQuestions } = useSelector(state => state.questions);\n const { title, selectedQuestions, presentationType } = useSelector(\n state => state.worksheet\n );\n\n const onSelect = step => {\n let valid = false;\n switch (step) {\n case 2:\n valid = selectedQuestions.length > 0 && selectedQuestions.length <= 50;\n break;\n case 3:\n valid = title.trim().length > 0;\n break;\n case 4:\n valid =\n selectedQuestions.length > 0 &&\n title.trim().length > 0 &&\n !isNilOrEmpty(presentationType);\n break;\n default:\n valid = true;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n };\n\n return (\n <>\n {isEmpty(cartQuestions) ? (\n \n ) : (\n \n \n \n \n \n \n )}\n \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Dropdown } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\nimport { deleteWorksheet } from 'stores/worksheet/actions';\nimport './SavedWorksheetRowSubMenu.styles.scss';\nimport ConfirmModal from 'components/Alert/ConfirmModal';\nimport { featureToggle } from 'constants/index';\nimport { isNil } from 'ramda';\n\nexport default function SavedWorksheetRowSubMenu(props) {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { worksheet } = props;\n\n const handleDelete = selectedWorksheet => {\n dispatch(deleteWorksheet(selectedWorksheet.ID));\n };\n\n const handlePrint = async () => {\n const sessionSecret = sessionStorage.getItem('secret');\n const url = isNil(sessionSecret)\n ? `/worksheet/print/${worksheet.ID}`\n : `/worksheet/print/${worksheet.ID}?secret=${sessionSecret}`;\n const win = window.open(url, '_blank');\n win.focus();\n };\n\n const [showConfirm, setShowConfirm] = useState(false);\n return (\n <>\n handleDelete(worksheet)}\n onClose={() => setShowConfirm(false)}\n title={t(`create-assign-saved:delWo.delWo`, 'Delete Worksheet')}\n >\n

    \n {t(\n `create-assign-saved:delWo.delConfirm`,\n 'This assignment will be deleted'\n )}\n

    \n

    \n {t(`create-assign-saved:delWo.proceed`, 'Do you want to proceed?')}\n

    \n \n \n \n \n {featureToggle.printButton && (\n handlePrint()}\n >\n \n {t(`create-assign-saved:main.print`, 'Print')}\n \n )}\n setShowConfirm(true)}\n >\n \n {t(`create-assign-saved:main.delete`, 'Delete')}\n \n \n \n \n );\n}\n","import { assignmentTypes } from 'constants/index';\nimport { invertObj } from 'ramda';\n\nexport const isFactualFluency = typeId => {\n const assignmentTypeName = invertObj(assignmentTypes)[typeId];\n const factualFluencyTime = ['total', 'interval', 'notime'];\n\n return factualFluencyTime.includes(assignmentTypeName);\n};\n","import React from 'react';\nimport { assignmentTypes } from 'constants/index';\nimport { invertObj, toUpper } from 'ramda';\nimport './CircleType.styles.scss';\nimport iconFactualFluency from 'assets/img/icon-factual-fluency.png';\nimport { isFactualFluency } from 'helpers/factualFluency';\n\nexport default function CircleType(props) {\n const { typeId } = props;\n const assignmentTypeName = invertObj(assignmentTypes)[typeId];\n\n return (\n \n {isFactualFluency(typeId) ? (\n \"iconFactualFluency\"\n ) : (\n toUpper(assignmentTypeName.substr(0, 1))\n )}\n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport scheduleIcon from 'assets/img/icon-schedule-orange.svg';\nimport assignedIcon from 'assets/img/icon-assigned.svg';\nimport assignNow from 'assets/img/icon-assign-now.svg';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { selectWorksheet } from 'stores/worksheet/actions';\nimport history from 'helpers/history';\nimport { worksheetStatus, featureToggle } from 'constants/index';\nimport SavedWorksheetRowSubMenu from './SavedWorksheetRowSubMenu';\nimport CircleType from '../CircleType';\nimport './SavedWorksheetRow.styles.scss';\nimport { isFactualFluency } from 'helpers/factualFluency';\n\nexport default function SavedWorksheetRow(props) {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { worksheet } = props;\n const ModifiedDate = moment(worksheet.ModifiedDate).format('DD/MM/YYYY');\n\n const handleSchedule = selectedWorksheet => {\n dispatch(selectWorksheet(selectedWorksheet, false, false, 1));\n history.push('/create-and-assign/saved-worksheet/schedule');\n };\n\n const handleAssign = selectedWorksheet => {\n dispatch(selectWorksheet(selectedWorksheet, false, false, 2));\n history.push('/create-and-assign/saved-worksheet/assign-now');\n };\n\n const handleEdit = async selectedWorksheet => {\n await dispatch(selectWorksheet(selectedWorksheet, false, true));\n\n if (isFactualFluency(selectedWorksheet.PresentationType.AssignmentTypeID)) {\n history.push('/create-and-assign/factual-fluency/edit');\n } else {\n history.push('/create-and-assign/saved-worksheet/edit');\n }\n };\n return (\n
    \n
    \n
    \n \n
    \n
    \n

    {worksheet.Title}

    \n
    \n
    \n

    {ModifiedDate}

    \n
    \n {featureToggle.previewButton && (\n
    \n \n
    \n )}\n
    \n
    \n handleSchedule(worksheet)}\n disabled={worksheetStatus.publish !== worksheet.WorksheetStatus}\n >\n \n {t(`create-assign-saved:main.schedule`, 'Schedule')}\n \n handleAssign(worksheet)}\n disabled={worksheetStatus.publish !== worksheet.WorksheetStatus}\n >\n \n {t(`create-assign-saved:main.assignNow`, 'Assign Now')}\n \n handleEdit(worksheet)}\n >\n {t(`create-assign-saved:main.edit`, 'Edit')}\n \n \n
    \n
    \n
    \n {worksheet.IsAssigned && (\n
    \n
    \n \n \n {t(`create-assign-saved:main.assigned`, 'Assigned')}\n \n \n {t(`create-assign-saved:main.seeAll`, 'see all assignments')}\n \n
    \n
    \n )}\n
    \n {worksheet.Files.length > 0 &&\n worksheet.Files.map(file => (\n
    \n \n \n {t(\n `create-assign-saved:main.singSyll`,\n 'Singapore Maths Syllabus 2018....'\n )}\n \n
    \n ))}\n
    \n
    \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isNil } from 'ramda';\nimport { useSelector } from 'react-redux';\nimport { featureToggle } from 'constants/index';\nimport SavedWorksheetRow from './SavedWorksheetRow';\nimport './SavedWorksheetList.styles.scss';\n\nexport default function SavedWorksheetList() {\n const { t } = useTranslation(['create-assign-saved']);\n const { worksheets } = useSelector(state => state.worksheet);\n\n const dataWorksheets = !isNil(worksheets.List) ? worksheets.List : [];\n\n return (\n
    \n
    \n
    \n

    {t(`create-assign-saved:main.type`, 'Type')}

    \n
    \n
    \n

    {t(`create-assign-saved:main.woTitle`, 'Worksheet Title')}

    \n
    \n
    \n

    {t(`create-assign-saved:main.lastMod`, 'Last Modified')}

    \n
    \n {featureToggle.previewButton && (\n
    \n

    {t(`create-assign-saved:main.type`, 'Preview')}

    \n
    \n )}\n
    \n
    \n {dataWorksheets.map(worksheet => (\n \n ))}\n
    \n
    \n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport emptyWorksheetImage from 'assets/img/empty-worksheet.svg';\nimport arrowImage from 'assets/img/empty-worksheet-navigator.svg';\nimport './EmptySavedWorksheet.styles.scss';\n\nexport default function EmptySavedWorksheet() {\n return (\n
    \n
    \n \"nav-arrow\"\n
    \n
    \n \n

    \n Your haven‘t saved any worksheet.\n

    \n

    \n You can check the Question Cart to create the worksheet.\n

    \n \n Create worksheet\n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { range } from 'ramda';\nimport './Pagination.styles.scss';\n\nfunction getPaginationNumbers(maxPage, numVisiblePages, page) {\n // Generate page numbers, e.g. if maxPage === 3, show pages number 1 to 3\n const pageNumbers = range(1, maxPage + 1);\n\n // If we have less total pages than number of visible pages, show all page numbers generated\n if (maxPage <= numVisiblePages) {\n return pageNumbers;\n }\n\n // If current page is at beginning portion of possible page numbers, show the beginning portion\n if (page < numVisiblePages) {\n return pageNumbers.slice(0, numVisiblePages);\n }\n\n // If current page is at the end portion of possible page numbers, show the end portion\n // Note: not limiting current page to max page number\n if (page > maxPage - (numVisiblePages - 1)) {\n const firstIndex = pageNumbers.indexOf(maxPage - numVisiblePages) + 1;\n return pageNumbers.slice(firstIndex);\n }\n\n // If below code runs, current page must be in the middle portion of possible page numbers\n // show the page numbers adjacent to the current page\n const numPagesOnLeft = Math.floor(numVisiblePages / 2);\n const numPagesOnRight = numVisiblePages - numPagesOnLeft;\n const firstIndex = pageNumbers.indexOf(page) - numPagesOnLeft;\n const lastIndex = pageNumbers.indexOf(page) + numPagesOnRight;\n return pageNumbers.slice(firstIndex, lastIndex);\n}\n\nfunction Pagination(props) {\n const { t } = useTranslation(['create-assign-saved']);\n const {\n maxPage,\n numVisiblePages,\n onPageChange,\n onSearchPageChange,\n page,\n searchPage\n } = props;\n\n const pages = getPaginationNumbers(maxPage, numVisiblePages, page);\n\n return (\n \n );\n}\n\nPagination.defaultProps = {\n numVisiblePages: 3\n};\n\nexport default Pagination;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDebounce } from 'use-debounce';\nimport SavedWorksheetList from 'components/CreateAndAssign/SavedWorksheet/SavedWorksheetList';\nimport './SavedWorksheet.styles.scss';\nimport savedWorksheetIcon from 'assets/img/icon-saved-worksheet-grey.svg';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isNil } from 'ramda';\nimport {\n fetchWorksheetsRequest,\n deleteWorksheetReset\n // resetSelectedWorksheet\n} from 'stores/worksheet/actions';\nimport EmptySavedWorksheet from 'components/CreateAndAssign/EmptySavedWorksheet';\nimport Pagination from 'components/Shared/Pagination';\nimport Spinner from 'components/Shared/Spinner';\n\nexport default function SavedWorksheet() {\n const { t } = useTranslation(['create-assign-saved']);\n const {\n isLoading,\n worksheets,\n deleteWorkSheet,\n worksheetSearchPage\n } = useSelector(state => state.worksheet);\n // Variables and setup\n const initialPage = worksheetSearchPage || 1;\n const perPage = 5;\n const dispatch = useDispatch();\n const [page, setPage] = useState(initialPage);\n\n // Search page logic\n const [searchPage, setSearchPage] = useState(initialPage);\n const [debouncedSearchPage] = useDebounce(searchPage, 500);\n const totalWorksheets = !isNil(worksheets.TotalCount)\n ? worksheets.TotalCount\n : 0;\n const maxPage = Math.ceil(totalWorksheets / perPage);\n const onSearchPageChange = pageNumber => {\n if (pageNumber <= maxPage) {\n setSearchPage(pageNumber);\n } else {\n setSearchPage(page);\n }\n };\n\n const totalData = !isNil(worksheets.List) ? worksheets.List.length : 0;\n\n useEffect(() => {\n if (debouncedSearchPage) {\n dispatch(fetchWorksheetsRequest(debouncedSearchPage, perPage));\n setPage(parseInt(debouncedSearchPage, 10));\n }\n }, [debouncedSearchPage, dispatch]);\n\n useEffect(() => {\n if (deleteWorkSheet) {\n let pageNo = debouncedSearchPage;\n if (totalData === 1 && debouncedSearchPage !== 1) {\n pageNo -= 1;\n setSearchPage(pageNo);\n }\n dispatch(fetchWorksheetsRequest(pageNo, perPage));\n setPage(parseInt(pageNo, 10));\n dispatch(deleteWorksheetReset());\n }\n }, [debouncedSearchPage, deleteWorkSheet, dispatch, totalData]);\n\n const isInitialLoading = isLoading && isNil(worksheets.List);\n if (isInitialLoading) {\n return (\n
    \n
    \n \n
    \n
    \n );\n }\n\n // Callback for page change\n const onPageChange = number => {\n // dispatch(fetchWorksheetsRequest(number, perPage));\n setPage(number);\n setSearchPage(number);\n };\n\n // Callback for search page change\n\n return totalData > 0 ? (\n
    \n
    \n
    \n \n
    {t(`create-assign-saved:main.savedWo`, 'Saved Worksheet')}
    \n
    \n
    \n {isLoading ? (\n
    \n \n Loading...\n \n
    \n ) : (\n <>\n \n \n \n )}\n
    \n ) : (\n \n );\n}\n","import styled from 'styled-components';\nimport { Dropdown } from 'react-bootstrap';\n\nexport const StyledDropdown = styled(Dropdown)`\n #dropdown-custom {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n border: solid 1px #707070;\n min-width: 230px;\n width: ${props => (props.width ? props.width : '230px')};\n }\n\n .dropdown-item-custom {\n width: ${props => (props.width ? props.width : '230px')};\n }\n`;\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\nimport { StyledDropdown } from './DropdownMenu.styles';\n\nconst DropdownMenu = ({\n selectedValue,\n valueKey,\n values,\n setValue,\n width,\n valueTemplate,\n children\n}) => {\n return (\n \n \n {selectedValue}\n \n \n {children}\n {values.length > 0 &&\n values.map(value => (\n {\n event.preventDefault();\n setValue(value);\n }}\n className=\"dropdown-item-custom\"\n >\n {valueTemplate !== undefined\n ? valueKey !== null\n ? valueTemplate(value[valueKey])\n : valueTemplate(value)\n : valueKey !== null\n ? value[valueKey]\n : value}\n \n ))}\n \n \n );\n};\n\nexport default DropdownMenu;\n","import styled from 'styled-components';\n\nexport const SelectNumberWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n .diff-type {\n color: ${props => props.color};\n /* text-transform: capitalize; */\n }\n .diff-controls {\n display: flex;\n background: #fff;\n justify-content: center;\n margin-top: 10px;\n .dec-count,\n .inc-count {\n border: 1px solid #c5c5c5;\n color: #727272;\n cursor: pointer;\n padding: 5px 10px;\n }\n .dec-count {\n border-style: solid none solid solid;\n border-radius: 3px 0 0 3px;\n }\n .inc-count {\n border-style: solid solid solid none;\n border-radius: 0 3px 3px 0;\n }\n input {\n border: 1px solid #c5c5c5;\n border: none solid none solid;\n width: 25%;\n text-align: center;\n font-size: 15px;\n color: #222222;\n }\n }\n`;\n","import React from 'react';\nimport { SelectNumberWrapper } from './SelectNumberQuestions.styles';\n\nexport default function SelectNumberQuestions({\n type,\n count,\n changeCount,\n color,\n index,\n changeControl,\n label\n}) {\n return (\n \n
    {label}
    \n
    \n changeControl('dec', type, index)}\n >\n -\n
    \n changeCount(e.target.value, type, index)}\n />\n changeControl('inc', type, index)}\n >\n +\n \n \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const TopicalWorksheetContainer = styled.div`\n padding-top: 20px;\n padding-left: 40px;\n padding-right: 20px;\n height: calc(100vh - 75px);\n margin-left: 200px;\n background-color: #f2f2f2;\n\n .topical-worksheet-header {\n display: flex;\n justify-content: center;\n align-items: center;\n span {\n margin-left: 10px;\n font-size: 20px;\n color: #545454;\n }\n }\n .topical-loader {\n position: absolute;\n top: 50%;\n left: 55%;\n }\n .topical-worksheet-dropdown {\n display: flex;\n justify-content: space-evenly;\n margin-top: 20px;\n .tw-levels {\n display: flex;\n align-items: center;\n .dropdown-menu.show {\n max-height: 400px;\n overflow: auto;\n background: #fff;\n }\n button {\n padding: 3px 10px;\n font-size: 15px;\n border: 1px solid #c5c5c5 !important;\n }\n }\n span {\n font-size: 14px;\n color: #727272;\n margin-right: 40px;\n }\n }\n .topical-worksheet-body {\n margin-top: 50px;\n .topical-worksheet-card {\n display: flex;\n background: #ffffff;\n margin-bottom: 30px;\n border-radius: 5px;\n user-select: none;\n .topical-name-category {\n flex: 1;\n border-right: 0.5px solid #c5c5c5;\n display: flex;\n padding: 10px;\n align-items: center;\n .syllabus-img {\n width: 70px;\n }\n .syllabus-name {\n margin-left: 5px;\n .syllabus-item-name {\n font-size: 16px;\n font-weight: bold;\n color: #1d1d1d;\n }\n }\n }\n .topical-difficulty-category {\n flex: 3;\n border-right: 0.5px solid #c5c5c5;\n display: flex;\n padding: 10px;\n justify-content: space-evenly;\n align-items: center;\n }\n .topical-total-category {\n flex: 1;\n padding: 10px;\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-evenly;\n .tw-category-total {\n span {\n font-size: 18px;\n color: #1d1d1d;\n font-weight: 700;\n margin-left: 10px;\n }\n }\n .tw-category-controls {\n display: flex;\n width: 90%;\n justify-content: space-evenly;\n .tw-push-cart {\n background: #ffffff;\n border: 1px solid #ff5b00;\n border-radius: 4px;\n color: #ff5b00;\n padding: 5px 10px;\n font-size: 18px;\n }\n .tw-create {\n background: #ff5b00;\n border: 1px solid #cf4a00;\n border-radius: 4px;\n color: #fff;\n font-size: 18px;\n padding: 5px 20px;\n }\n .tw-create:disabled,\n .tw-push-cart:disabled {\n cursor: not-allowed !important;\n }\n }\n }\n }\n }\n @media (max-width: 1024px) {\n margin-left: 10px;\n }\n`;\n\nexport const NoSyllabusContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n .no-syll-img {\n }\n .title {\n color: #555555;\n font-weight: 900;\n font-size: 18px;\n margin: 25px 0 12px;\n }\n .suggestion {\n color: #555555;\n font-size: 18px;\n }\n`;\n","import React from 'react';\nimport noSyllabus from 'assets/img/icon-no-syllabus.svg';\nimport { NoSyllabusContainer } from './TopicalWorksheet.styles';\n\nexport default function NoSyllabus() {\n return (\n \n \"no-syllabus\"\n
    No topics found
    \n
    Select another syllabus to show topics.
    \n
    \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Dropdown, Spinner } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { sort, clone, isEmpty } from 'ramda';\n\nimport { HOTS_CURR_ID, AGE_GROUP } from 'constants/hotsCurr';\n\nimport {\n fetchSyllabusRequest,\n pushToCartRequest,\n createWorkSheetRequest,\n pushToCartReset\n} from 'stores/topical-worksheet/actions';\nimport { selectLevel } from 'stores/levels/actions';\nimport { selectCurriculum } from 'stores/curriculums/actions';\n\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport AlertModal from 'components/Alert/AlertModal';\nimport SelectNumberQuestions from 'components/CreateAndAssign/SelectNumberQuestions';\n\nimport topicalWorksheetWhiteIcon from 'assets/img/icon-topical-worksheet-white.svg';\nimport cartIcon from 'assets/img/icon-push-cart.svg';\nimport { resetSelectedWorksheet } from 'stores/worksheet/actions';\nimport { TopicalWorksheetContainer } from './TopicalWorksheet.styles';\nimport NoSyllabus from './NoSyllabus';\n\nexport default function TopicalWorksheet() {\n const { t } = useTranslation(['create-assig-topical', 'common']);\n const history = useHistory();\n const dispatch = useDispatch();\n const { curriculums, selectedCurriculum } = useSelector(\n state => state.curriculums\n );\n const { levels, selectedLevel } = useSelector(state => state.levels);\n\n const {\n syllabus,\n createWorksheet,\n pushCart,\n isLoading,\n pushCartLoading,\n createWorksheetLoading,\n error\n } = useSelector(state => state.topicalWorksheet);\n const sortedTopics = sort((a, b) => a.Display - b.Display, syllabus);\n\n const [isRun, setIsRun] = useState(false);\n const [levelId, setLevelId] = useState(selectedLevel?.ID);\n const [curriculumId, setCurriculumId] = useState(\n selectedCurriculum.CurriculumID\n );\n const [curriculumName, setCurriculumName] = useState(\n selectedCurriculum.curriculumName\n );\n const [isShowModal, setIsShowModal] = useState(false);\n const [isShowMsg, setIsShowMsg] = useState('');\n\n const levellessCurr = isEmpty(selectedCurriculum.Levels);\n\n const sortedArray = arrVal => {\n const val = arrVal.map(elem => {\n return {\n easy: 0,\n medium: 0,\n difficult: 0,\n total: 0\n };\n });\n return val;\n };\n const [counts, setCounts] = useState(sortedArray(sortedTopics));\n\n const isHOTS = selectedCurriculum?.CurriculumID === HOTS_CURR_ID;\n\n useEffect(() => {\n setCurriculum(curriculumId, curriculumName);\n return () => {\n dispatch(resetSelectedWorksheet());\n };\n // eslint-disable-next-line\n }, [dispatch]);\n\n useEffect(() => {\n if (!isRun) {\n setIsRun(true);\n return;\n }\n const sortedTopics = sort((a, b) => a.Display - b.Display, syllabus);\n let tempCounts = clone(counts);\n tempCounts = sortedArray(sortedTopics);\n setCounts(tempCounts);\n // eslint-disable-next-line\n }, [syllabus]);\n\n useEffect(() => {\n if (!isRun) {\n setIsRun(true);\n return;\n }\n if (!isEmpty(createWorksheet)) {\n history.push('/create-and-assign/topical-worksheet/create');\n }\n // eslint-disable-next-line\n }, [createWorksheet]);\n\n useEffect(() => {\n if (!isRun) {\n setIsRun(true);\n return;\n }\n if (!isEmpty(pushCart)) {\n dispatch(pushToCartReset());\n history.push('/create-and-assign');\n }\n // eslint-disable-next-line\n }, [pushCart]);\n\n useEffect(() => {\n if (!isRun) {\n setIsRun(true);\n return;\n }\n if (!isEmpty(error)) {\n setIsShowModal(true);\n setIsShowMsg(error);\n }\n // eslint-disable-next-line\n }, [error]);\n\n const getSyllabus = (currId, level) => {\n dispatch(fetchSyllabusRequest(currId, level));\n };\n\n const setCurriculum = (id, name) => {\n const curriculum = curriculums.find(curr => curr.CurriculumID === id);\n setCurriculumId(id);\n setCurriculumName(name);\n const findLevel = curriculum.Levels.find(level => level.ID === levelId);\n if (!findLevel) {\n if (curriculum.Levels[0]) {\n setLevelId(curriculum.Levels[0].ID);\n dispatch(selectLevel(curriculum.Levels[0]));\n }\n getSyllabus(id, curriculum.Levels[0]?.ID ?? -1);\n } else {\n getSyllabus(id, levelId);\n }\n dispatch(selectCurriculum(curriculum));\n };\n\n const setLevel = id => {\n const level = levels.find(lvl => lvl.ID === id);\n setLevelId(id);\n dispatch(selectLevel(level));\n getSyllabus(curriculumId, id);\n };\n\n const save = (topicId, index, type) => {\n const { easy, medium, difficult } = counts[index];\n const obj = {\n curriculumId,\n topicId,\n levelId,\n easy,\n medium,\n difficult\n };\n if (type === 'push') {\n dispatch(pushToCartRequest(obj));\n } else {\n dispatch(createWorkSheetRequest(obj));\n }\n };\n\n const onChangeHandler = (val, difficultyLevel, index) => {\n if (/^\\d*\\.?\\d*$/.test(val)) {\n const tempCounts = clone(counts);\n const objVal = tempCounts[index];\n if (val === '') val = 0;\n objVal[difficultyLevel] = Number(val);\n objVal.total = objVal.easy + objVal.medium + objVal.difficult;\n setCounts(tempCounts);\n }\n };\n\n const onControlsHandler = (type, difficultyLevel, index) => {\n const tempCounts = clone(counts);\n const objVal = tempCounts[index];\n if (type === 'inc') {\n objVal[difficultyLevel] = objVal[difficultyLevel] + 1;\n } else if (objVal[difficultyLevel] !== 0) {\n objVal[difficultyLevel] = objVal[difficultyLevel] - 1;\n }\n objVal.total = objVal.easy + objVal.medium + objVal.difficult;\n setCounts(tempCounts);\n };\n\n const onModalClose = () => {\n setIsShowMsg('');\n setIsShowModal(false);\n };\n\n return (\n \n
    \n \"topical-icon\"\n \n {t(`create-assig-topical:main.topicalWo`, 'Topical Worksheet')}\n \n
    \n {(isLoading || pushCartLoading || createWorksheetLoading) && (\n \n )}\n
    \n
    \n {t(`create-assig-topical:main.curriculum`, 'Curriculum')}\n \n \n {curriculumName}\n \n \n {curriculums.map(item => (\n \n setCurriculum(item.CurriculumID, item.curriculumName)\n }\n value={curriculumId}\n >\n {item.curriculumName}\n \n ))}\n \n \n
    \n {!levellessCurr && (\n
    \n {t(`create-assig-topical:main.level`, 'Level')}\n level.ID)}\n setValue={setLevel}\n valueTemplate={value =>\n isHOTS\n ? `${t(`common:age`, 'Age')} ${AGE_GROUP[value]}`\n : `P${value}`\n }\n />\n
    \n )}\n
    \n\n
    \n {sortedTopics.length === 0 ? (\n \n ) : (\n sortedTopics.map((item, index) => (\n
    \n
    \n
    \n
    {item.Name}
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n {t(`create-assig-topical:main.total`, 'Total: ')}\n {counts[index] && counts[index].total}\n
    \n
    \n save(item.ID, index, 'push')}\n disabled={counts[index] && counts[index].total === 0}\n >\n +\"cart-icon\"\n \n save(item.ID, index, 'create')}\n disabled={counts[index] && counts[index].total === 0}\n >\n {t(`create-assig-topical:main.create`, 'Create')}\n \n
    \n
    \n
    \n ))\n )}\n \n {t(`create-assig-topical:delWo.close`, 'Close')}\n \n }\n >\n

    {isShowMsg}

    \n \n
    \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const TopicWrap = styled.div`\n .skill-wrap {\n &.open {\n display: block;\n }\n &.hide {\n display: none;\n }\n }\n`;\n\nexport const ArrowImage = styled.img`\n height: 15px;\n margin-right: 20px;\n transition-duration: 0.3s;\n &.open {\n transform: rotate(90deg);\n transition-duration: 0.3s;\n }\n`;\n\nexport const TopicItemContainer = styled.div`\n background: #fdfbf6;\n border-bottom: solid 1px #dfdfdf;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px;\n cursor: pointer;\n .title-wrap {\n display: flex;\n align-items: center;\n .arrow-button {\n border: none;\n background-color: transparent;\n width: 25px;\n }\n .title-topic {\n font-size: 1.2rem;\n font-weight: bolder;\n }\n }\n\n .question-wrap {\n display: flex;\n align-items: center;\n .total-qn {\n font-size: 1.5rem;\n color: #ff5b00;\n font-weight: bold;\n font-family: 'Muli', sans-serif;\n &.empty {\n color: #cececc;\n }\n }\n }\n`;\n\nexport const SkillItem = styled.div`\n background: #fcfcfc;\n border-bottom: solid 1px #dfdfdf;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px;\n\n .title-wrap {\n margin-left: 30px;\n display: flex;\n align-items: center;\n .subtitle-skill {\n color: #afafaf;\n font-size: 1rem;\n font-weight: bolder;\n margin-right: 20px;\n }\n .title-skill {\n color: #4a4a4a;\n font-size: 1rem;\n font-weight: bolder;\n }\n }\n`;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport iconRight from 'assets/img/icon-right-purple.svg';\nimport { clone, sum } from 'ramda';\nimport {\n TopicWrap,\n ArrowImage,\n TopicItemContainer,\n SkillItem\n} from './TopicItem.style';\nimport SelectNumberQuestions from '../SelectNumberQuestions';\n\nconst TopicItem = ({\n topic,\n index,\n counts,\n setCounts,\n allOpen,\n setAllOpen\n}) => {\n const { t } = useTranslation(['create-assign-factual-fluency.json']);\n const [showSkill, setShowSkill] = useState(false);\n useEffect(() => {\n if (allOpen) {\n setShowSkill(true);\n }\n }, [allOpen]);\n const onChangeHandler = useCallback(\n (val, difficultyLevel, indexSkill) => {\n if (/^\\d*\\.?\\d*$/.test(val)) {\n const tempCounts = clone(counts);\n const objVal = tempCounts[index];\n if (val === '') val = 0;\n if (val <= 10) {\n objVal.skills[indexSkill].numberOfQuestion = Number(val);\n objVal.total = sum(\n objVal.skills.map(item => {\n return item.numberOfQuestion;\n })\n );\n setCounts(tempCounts);\n }\n }\n },\n [index, counts, setCounts]\n );\n\n const onControlsHandler = useCallback(\n (type, difficultyLevel, indexSkill) => {\n const tempCounts = clone(counts);\n const objVal = tempCounts[index];\n if (type === 'inc') {\n objVal.skills[indexSkill].numberOfQuestion =\n objVal.skills[indexSkill].numberOfQuestion + 1;\n } else if (objVal.skills[indexSkill].numberOfQuestion !== 0) {\n objVal.skills[indexSkill].numberOfQuestion =\n objVal.skills[indexSkill].numberOfQuestion - 1;\n }\n if (objVal.skills[indexSkill].numberOfQuestion <= 10) {\n objVal.total = sum(\n objVal.skills.map(item => {\n return item.numberOfQuestion;\n })\n );\n setCounts(tempCounts);\n }\n },\n [index, counts, setCounts]\n );\n\n const onPress = () => {\n setShowSkill(prev => {\n setAllOpen(!prev);\n return !prev;\n });\n };\n\n return (\n \n \n
    \n \n\n
    {topic.Name}
    \n
    \n
    \n \n {counts[index].total}\n \n
    \n
    \n
    \n {topic.Skills.map((Skill, i) => (\n \n
    \n
    {`${t(\n 'create-assign-factual-fluency:main.skill',\n 'Skill'\n )} ${i + 1}`}
    \n
    {Skill.Name}
    \n
    \n \n
    \n ))}\n
    \n
    \n );\n};\nexport default React.memo(TopicItem);\n","import styled from 'styled-components';\n\nexport const TopicContainer = styled.div`\n border: solid 1px #dfdfdf;\n color: #1e1e1e;\n border-bottom: none;\n`;\n","import React, { useState } from 'react';\nimport TopicItem from './TopicItem';\nimport { TopicContainer } from './TopicList.style';\n\nconst TopicList = props => {\n const { topics, counts, setCounts } = props;\n const [allOpen, setAllOpen] = useState(false);\n return (\n \n {topics.map((Topic, index) => {\n return (\n \n );\n })}\n \n );\n};\nexport default React.memo(TopicList);\n","import styled from 'styled-components';\n\nexport const FactualFluencyContainer = styled.div`\n height: calc(100vh - 75px);\n margin-left: 195px;\n background-color: #f2f2f2;\n\n .factual-fluency-header {\n padding-top: 20px;\n padding-left: 40px;\n padding-right: 20px;\n padding-bottom: 20px;\n background-color: #fff;\n position: fixed;\n top: 55px;\n width: calc(100% - 195px);\n z-index: 1;\n\n .factual-fluency-title {\n display: flex;\n justify-content: center;\n align-items: center;\n span {\n margin-left: 10px;\n font-size: 20px;\n color: #545454;\n }\n }\n\n .factual-fluency-action {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n .factual-fluency-dropdown {\n display: flex;\n justify-content: space-evenly;\n .tw-levels {\n display: flex;\n align-items: center;\n .dropdown-menu.show {\n max-height: 400px;\n overflow: auto;\n background: #fff;\n }\n button {\n padding: 3px 10px;\n font-size: 15px;\n border: 1px solid #c5c5c5 !important;\n }\n }\n span {\n font-size: 14px;\n color: #727272;\n margin-right: 40px;\n }\n }\n }\n\n .topical-loader {\n position: absolute;\n top: 50%;\n left: 55%;\n }\n\n .factual-fluency-body {\n margin-top: 200px;\n padding: 0 140px;\n .factual-fluency-card {\n display: flex;\n background: #ffffff;\n margin-bottom: 30px;\n border-radius: 5px;\n user-select: none;\n .topical-name-category {\n flex: 1;\n border-right: 0.5px solid #c5c5c5;\n display: flex;\n padding: 10px;\n align-items: center;\n justify-content: right;\n .syllabus-img {\n width: 70px;\n }\n .syllabus-name {\n margin-left: 5px;\n .syllabus-item-title {\n color: #727272;\n font-size: 12px;\n margin-bottom: 20px;\n }\n .syllabus-item-name {\n font-size: 14px;\n font-weight: bold;\n color: #1d1d1d;\n }\n }\n }\n .topical-difficulty-category {\n flex: 3;\n border-right: 0.5px solid #c5c5c5;\n display: flex;\n padding: 10px;\n justify-content: space-evenly;\n align-items: center;\n }\n .topical-total-category {\n flex: 1;\n padding: 10px;\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-evenly;\n .tw-category-total {\n span {\n font-size: 18px;\n color: #1d1d1d;\n font-weight: 700;\n margin-left: 10px;\n }\n }\n .tw-category-controls {\n display: flex;\n width: 90%;\n justify-content: space-evenly;\n .tw-push-cart {\n background: #ffffff;\n border: 1px solid #ff5b00;\n border-radius: 4px;\n color: #ff5b00;\n padding: 5px 10px;\n font-size: 18px;\n }\n .tw-create {\n background: #ff5b00;\n border: 1px solid #cf4a00;\n border-radius: 4px;\n color: #fff;\n font-size: 18px;\n padding: 5px 20px;\n }\n .tw-create:disabled,\n .tw-push-cart:disabled {\n cursor: not-allowed !important;\n }\n }\n }\n }\n }\n @media (max-width: 1024px) {\n margin-left: 10px;\n }\n`;\n\nexport const NoTopicsContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n .no-topic-img {\n }\n .title {\n color: #555555;\n font-weight: 900;\n font-size: 18px;\n margin: 25px 0 12px;\n }\n .suggestion {\n color: #555555;\n font-size: 18px;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport noSyllabus from 'assets/img/icon-no-syllabus.svg';\nimport { NoTopicsContainer } from './FactualFluency.styles';\n\nexport default function NoTopicSkill() {\n const { t } = useTranslation(['create-assign-factual-fluency']);\n return (\n \n \"no-topics-skill\"\n
    \n {t('create-assign-factual-fluency:empty.notFound', 'No topics found')}\n
    \n
    \n {t(\n 'create-assign-factual-fluency:empty.suggest',\n 'Select another level to show topics.'\n )}\n
    \n
    \n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Spinner } from 'react-bootstrap';\nimport { clone, flatten, isEmpty, sum } from 'ramda';\nimport {\n fetchTopicSkillRequest,\n createFactualFluencyRequest\n} from 'stores/factual-fluency/actions';\nimport { resetSelectedWorksheet } from 'stores/worksheet/actions';\n// Temporary deactivate cause currently we only have content for P1\n// import { selectLevel } from 'stores/levels/actions';\n// import DropdownMenu from 'components/Shared/DropdownMenu';\nimport topicalWorksheetWhiteIcon from 'assets/img/icon-topical-worksheet-white.svg';\nimport AlertModal from 'components/Alert/AlertModal';\n\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport TopicList from 'components/CreateAndAssign/FactualFluency/TopicList';\nimport ValidationMessage from 'components/CreateAndAssign/ValidationMessage';\nimport NoTopicSkill from './NoTopicSkill';\nimport { FactualFluencyContainer } from './FactualFluency.styles.js';\n\nconst sortedArray = arrVal => {\n const val = arrVal.map(item => {\n return {\n topicId: item.Id,\n total: 0,\n skills: item.Skills.map(skill => {\n return { topicId: item.Id, skillId: skill.Id, numberOfQuestion: 0 };\n })\n };\n });\n return val;\n};\n\nconst FactualFluency = () => {\n const { t } = useTranslation(['create-assign-factual-fluency']);\n const dispatch = useDispatch();\n const history = useHistory();\n // Temporary deactivate cause currently we only have content for P1\n // const { levels, selectedLevel } = useSelector(state => state.levels);\n\n const {\n topicSkill,\n createFactualFluency,\n isLoading,\n createFactualFluencyLoading,\n error\n } = useSelector(state => state.factualFluency);\n\n // eslint-disable-next-line no-unused-vars\n const [levelId, setLevelId] = useState(1);\n const [isShowModal, setIsShowModal] = useState(false);\n const [isShowMsg, setIsShowMsg] = useState('');\n\n const onModalClose = () => {\n setIsShowMsg('');\n setIsShowModal(false);\n };\n\n const [counts, setCounts] = useState([]);\n const totalQn = sum(\n counts.map(count => {\n return count.total;\n })\n );\n\n const getTopics = useCallback(\n levelId => {\n dispatch(fetchTopicSkillRequest(levelId));\n },\n [dispatch]\n );\n\n useEffect(() => {\n return () => {\n dispatch(resetSelectedWorksheet());\n };\n }, [dispatch]);\n\n useEffect(() => {\n getTopics(levelId);\n // eslint-disable-next-line\n }, [levelId]);\n\n useEffect(() => {\n let tempCounts = clone(counts);\n tempCounts = sortedArray(topicSkill);\n setCounts(tempCounts);\n // eslint-disable-next-line\n }, [topicSkill]);\n\n useEffect(() => {\n if (!isEmpty(createFactualFluency)) {\n history.push('/create-and-assign/factual-fluency/create');\n }\n }, [history, createFactualFluency]);\n\n useEffect(() => {\n if (!isEmpty(error)) {\n setIsShowModal(true);\n setIsShowMsg(error);\n }\n }, [error]);\n\n // Temporary deactivate cause currently we only have content for P1\n // const setLevel = useCallback(\n // id => {\n // const level = levels.find(lvl => lvl.ID === id);\n // setLevelId(id);\n // dispatch(selectLevel(level));\n // },\n // [dispatch, levels]\n // );\n\n const save = useCallback(() => {\n if (totalQn > 0) {\n const obj = flatten(\n counts.map(count => {\n return count.skills.filter(skill => skill.numberOfQuestion > 0);\n })\n );\n dispatch(createFactualFluencyRequest(obj));\n }\n }, [totalQn, counts, dispatch]);\n\n return (\n \n
    \n
    \n \"topical-icon\"\n \n {t(\n `create-assign-factual-fluency:main.factualFluency`,\n 'Factual Fluency Practice'\n )}\n \n
    \n\n
    \n {/* Temporary deactivate cause currently we only have content for P1 */}\n {/*
    \n
    \n \n {t(`create-assign-factual-fluency:main.level`, 'Level')}\n \n level.ID)}\n setValue={setLevel}\n valueTemplate={value => `P${value}`}\n />\n
    \n
    */}\n {totalQn > 50 && }\n save()}\n showtotalQuestions\n totalQuestions={totalQn}\n />\n
    \n
    \n\n
    \n {isLoading || createFactualFluencyLoading ? (\n \n ) : topicSkill.length === 0 || counts.length === 0 ? (\n \n ) : (\n \n )}\n \n {t(`create-assign-factual-fluency:delWo.close`, 'Close')}\n \n }\n >\n

    {isShowMsg}

    \n \n
    \n
    \n );\n};\n\nexport default React.memo(FactualFluency);\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { find, findIndex, propEq } from 'ramda';\nimport { selectQuestions } from 'stores/questions/actions';\nimport { questionStatus } from 'constants/index';\n\nexport default function SearchResult() {\n const { t } = useTranslation(['create-assign-import-qn']);\n // const { keyword } = props;\n const { isLoading, searchedQuestions, selectedQuestions } = useSelector(\n state => state.questions\n );\n\n const validSearchedQuestions = searchedQuestions.filter(\n question => questionStatus[question.Status] === 'Valid'\n );\n\n const dispatch = useDispatch();\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(selectedQuestions) !== -1;\n };\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(\n searchedQuestions\n );\n\n updatedData = [...selectedQuestions, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(\n selectedQuestions\n );\n updatedData = [\n ...selectedQuestions.slice(0, index),\n ...selectedQuestions.slice(index + 1)\n ];\n }\n\n dispatch(selectQuestions(updatedData));\n };\n\n const isAllQuestionsSelected =\n validSearchedQuestions.length > 0\n ? validSearchedQuestions\n .map(question => question.ID)\n .every(\n v =>\n selectedQuestions.map(selected => selected.ID).indexOf(v) !== -1\n )\n : false;\n\n const toggleCheckAll = event => {\n let updatedData;\n if (event.target.checked) {\n updatedData = [...selectedQuestions, ...validSearchedQuestions];\n } else {\n const questionIds = searchedQuestions.map(question => question.ID);\n updatedData = selectedQuestions.filter(\n question => questionIds.indexOf(question.ID) === -1\n );\n }\n dispatch(selectQuestions(updatedData));\n };\n\n return (\n
    \n {isLoading && (\n \n \n {t('create-assign-import-qn:result.loading', 'Loading...')}\n \n \n )}\n {searchedQuestions.length > 0 ? (\n <>\n
    \n \n \n \n \n \n \n \n \n \n {searchedQuestions.map(question => (\n \n \n \n \n \n ))}\n \n
    \n {t('create-assign-import-qn:result.id', 'Question ID')}\n \n {t('create-assign-import-qn:result.status', 'Status')}\n \n \n
    {question.ID}{questionStatus[question.Status]}\n {questionStatus[question.Status] === 'Valid' && (\n \n )}\n
    \n
    \n \n ) : (\n \n

    \n {t('create-assign-import-qn:result.notFound', 'Question Not found')}\n

    \n
    \n )}\n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { useDebounce } from 'use-debounce';\nimport { Form, Col, Row } from 'react-bootstrap';\nimport { searchingQuestions, addQuestions } from 'stores/questions/actions';\nimport SearchResult from 'components/Search/SearchResult';\n\nexport default function ImportQuestionList() {\n const { t, i18n } = useTranslation(['create-assign-import-qn']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { isAdmin } = useSelector(state => state.login);\n const { selectedQuestions } = useSelector(state => state.questions);\n\n const [searchIds, setSearchIds] = useState('');\n const [emptyCart, setEmptyCart] = useState(0);\n const [debouncedSearchTerm] = useDebounce(searchIds, 500);\n const isEnglish = i18n.language === 'en';\n const handleChange = event => {\n const re = /^[0-9\\s\\b]+$/;\n if (event.target.value === '' || re.test(event.target.value)) {\n setSearchIds(event.target.value);\n }\n };\n\n const handelSubmit = () => {\n dispatch(addQuestions(emptyCart));\n setSearchIds('');\n };\n\n useEffect(() => {\n if (isAdmin !== true) {\n history.push('/create-and-assign');\n }\n }, [history, isAdmin]);\n\n useEffect(() => {\n if (debouncedSearchTerm) {\n const questionIds = debouncedSearchTerm\n .split(/\\s+/)\n .filter((value, index, self) => {\n return self.indexOf(value) === index;\n })\n .join(',');\n dispatch(searchingQuestions(questionIds));\n }\n }, [dispatch, debouncedSearchTerm]);\n\n return (\n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n
    \n setEmptyCart(!emptyCart)}\n label={t('create-assign-import-qn:emptyCart', 'Empty Cart')}\n bsPrefix=\"form-check-visible import-question-list__input--check\"\n />\n
    \n
    \n {t(\n 'create-assign-import-qn:qnList',\n {\n qn: selectedQuestions.length\n },\n `Selected ${selectedQuestions.length} Question`\n )}\n {isEnglish && selectedQuestions.length > 1 ? 's' : ''}\n
    \n \n {t(\n 'create-assign-import-qn:btn',\n 'Add Valid Question To Cart'\n )}\n \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import React from 'react';\n\n/**\n * @todo adding classNames and styles\n */\nconst HeaderFull = props => {\n const { children } = props;\n return (\n
    \n {children}\n
    \n );\n};\nexport default HeaderFull;\n","import React from 'react';\n\nexport default function Border(props) {\n const { color } = props;\n return
    ;\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-timezone';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport { useSelector, useDispatch } from 'react-redux';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport DateTimeRangePicker from 'components/CreateAndAssign/DateTimeRangePicker';\nimport { assignmentTypes, assignmentVisibilities } from 'constants/index';\nimport DateTimePicker from 'components/CreateAndAssign/DateTimePicker';\nimport { nextStep } from 'stores/utils/step/actions';\nimport {\n setStartEndDate,\n setReleaseDate,\n setAssignmentVisibility,\n setKokoCredit\n} from 'stores/worksheet/schedule/actions';\nimport { Spinner } from 'react-bootstrap';\n\nexport default function ScheduleTime() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { selectedWorksheet, isLoading } = useSelector(\n state => state.worksheet\n );\n\n const {\n startDate,\n endDate,\n releaseDate,\n assignmentVisibility,\n kokoCredit\n } = useSelector(state => state.schedule);\n\n // must fullfil by data selected worksheet but I can find that\n // kokoCredits 10, 15, 20 is temporarily removed\n const kokoCredits = [5];\n const [kokoCreditVal, setKokoCreditVal] = useState(kokoCredit);\n const [visibilityVal, setVisibilityVal] = useState(assignmentVisibility);\n const startDateVal = moment(startDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n const endDateVal = moment(endDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n\n const releaseDateVal = moment(releaseDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n\n const applyCallback = (startDateValue, endDateValue) => {\n dispatch(\n setStartEndDate(\n startDateValue.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDateValue.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n };\n\n const applyCallbackRelease = (e, picker) => {\n dispatch(\n setReleaseDate(picker.startDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'))\n );\n };\n\n const onChangeKoko = event => {\n setKokoCreditVal(event.target.value);\n dispatch(setKokoCredit(event.target.value));\n };\n const onChangeVisibility = event => {\n setVisibilityVal(event.target.value);\n dispatch(setAssignmentVisibility(parseInt(event.target.value, 10)));\n };\n\n const handleNext = () => {\n if (!kokoCredit) {\n dispatch(setKokoCredit(kokoCreditVal));\n }\n\n if (!startDate && !endDate) {\n dispatch(\n setStartEndDate(\n startDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n }\n\n if (!assignmentVisibility) {\n dispatch(setAssignmentVisibility(visibilityVal));\n }\n\n if (\n selectedWorksheet.PresentationType.AssignmentTypeID ===\n assignmentTypes.test &&\n !releaseDate\n ) {\n dispatch(\n setReleaseDate(releaseDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'))\n );\n }\n\n dispatch(nextStep());\n };\n return isLoading ? (\n
    \n \n Loading...\n \n
    \n ) : (\n
    \n \n
    \n \n

    {selectedWorksheet?.Title}

    \n
    \n
    \n \n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n \n \n {t(`create-assign-saved:scheduleWo.next`, 'Next')}\n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n

    \n {t(`create-assign-saved:scheduleWo.startend`, 'Start / End')}\n

    \n \n
    \n
    \n {selectedWorksheet?.PresentationType?.AssignmentTypeID ===\n assignmentTypes.test && (\n
    \n \n

    \n {t(\n `create-assign-saved:scheduleWo.releaseDate`,\n 'Release Date'\n )}\n

    \n \n
    \n
    \n )}\n
    \n
    \n
    \n
    \n \n
    \n

    \n {t(\n `create-assign-saved:scheduleWo.showWo`,\n `Show the worksheet in students' account`\n )}\n

    \n
    \n
    \n \n {Object.keys(assignmentVisibilities).map(key => {\n return (\n \n );\n })}\n \n
    \n
    \n
    \n
    \n
    \n \n
    \n

    {t(`create-assign-saved:scheduleWo.rewards`, 'Rewards')}

    \n
    \n
    \n \n {kokoCredits.map(kokoItem => {\n return (\n \n );\n })}\n \n
    \n

    Koko

    \n
    \n
    \n
    \n
    \n );\n}\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignClass,\n assignGroup,\n resetAssignment\n} from 'stores/worksheet/schedule/actions';\nimport { findIndex, find, propEq } from 'ramda';\nimport { classType } from 'constants/index';\n\nexport default function ClassGroupCheckbox(props) {\n const { type } = props;\n const dispatch = useDispatch();\n const { assignedClass, assignedGroup } = useSelector(state => state.schedule);\n\n const { classes } = useSelector(state => state.lookup);\n\n const items = classes.filter(classData => {\n return classData.Type === classType[type];\n });\n\n const assignedData = type === 'class' ? assignedClass : assignedGroup;\n const assignData = type === 'class' ? assignClass : assignGroup;\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedData) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(classes);\n\n updatedData = [...assignedData, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedData);\n updatedData = [\n ...assignedData.slice(0, index),\n ...assignedData.slice(index + 1)\n ];\n }\n\n dispatch(assignData(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return items.length !== 0 ? (\n <>\n {items.map(item => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    No classes found

    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport CheckboxClassGroup from './CheckboxClassGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]); // @see {@link https://github.com/facebook/create-react-app/issues/6880#issuecomment-488158024 having dispatch in useEffect dependencies}\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.classAssign`,\n 'Please choose classes you want to assign'\n )}\n

    \n \n \n {levels.map(level => (\n \n ))}\n \n \n
    \n \n
    \n
    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchClassRequest,\n fetchStudentsRequest\n} from 'stores/utils/lookup/actions';\nimport { filter, find, propEq, findIndex } from 'ramda';\nimport {\n assignStudent,\n resetAssignment\n} from 'stores/worksheet/schedule/actions';\nimport Spinner from 'components/Shared/Spinner';\n\nexport default function AssignIndividual() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n // Get data from redux store\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { classes, students, isLoading, error } = useSelector(\n state => state.lookup\n );\n const { assignedStudent } = useSelector(state => state.schedule);\n\n // Level state management\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n // Level on change effect\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]);\n\n // Class state management\n const [selectedClass, setSelectedClass] = useState(\n classes.length > 0 ? classes[0].ID : 1\n );\n const onChangeClass = event => {\n setSelectedClass(event.target.value);\n };\n // Class on change effect\n useEffect(() => {\n dispatch(fetchStudentsRequest(selectedClass));\n }, [dispatch, selectedClass]);\n // When classes change, change the selected class\n useEffect(() => {\n setSelectedClass(classes.length > 0 ? classes[0].ID : 1);\n }, [classes]);\n\n // Available students state management\n const availableStudents = filter(\n student =>\n findIndex(propEq('UserId', parseInt(student.UserId, 10)))(\n assignedStudent\n ) === -1,\n students\n );\n const [\n selectedAvailableStudentIds,\n setSelectedAvailableStudentIds\n ] = useState([]);\n const handleSelectAvailableStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAvailableStudentIds(value);\n };\n const onAdd = () => {\n const updatedData = [...assignedStudent];\n selectedAvailableStudentIds.forEach(id => {\n const newData = find(propEq('UserId', id))(students);\n updatedData.push(newData);\n });\n\n dispatch(assignStudent(updatedData));\n dispatch(resetAssignment('admin'));\n setSelectedAvailableStudentIds([]);\n };\n\n // Selected assigned students state management\n const [selectedAssignedStudentIds, setSelectedAssignedStudentIds] = useState(\n []\n );\n const handleSelectAssignedStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAssignedStudentIds(value);\n };\n const onRemove = () => {\n let updatedData = [...assignedStudent];\n\n updatedData = updatedData.filter(\n student => selectedAssignedStudentIds.indexOf(student.UserId) === -1\n );\n dispatch(assignStudent(updatedData));\n setSelectedAssignedStudentIds([]);\n };\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.chooseStud`,\n 'Please choose students you want to assign'\n )}\n

    \n \n \n {levels.map(level => (\n \n ))}\n \n \n \n \n {classes.map(classItem => (\n \n ))}\n \n \n
    \n
    \n {isLoading && }\n
    \n \n {isLoading ? (\n ''\n ) : availableStudents.length === 0 || error !== '' ? (\n \n ) : (\n availableStudents.map(student => (\n \n ))\n )}\n \n
    \n \n {t(`create-assign-question:assignModal.add`, 'Add')}\n \n \n {t(`create-assign-question:assignModal.remove`, 'Remove')}\n \n
    \n \n {assignedStudent.map(student => (\n \n ))}\n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignPrivateGroup,\n resetAssignment\n} from 'stores/worksheet/schedule/actions';\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function CheckboxPrivateGroup(props) {\n const { t } = useTranslation(['create-assign-question']);\n const { groups } = props;\n const dispatch = useDispatch();\n const { assignedPrivateGroup } = useSelector(state => state.schedule);\n\n const checkChecked = id => {\n return (\n findIndex(propEq('ID', parseInt(id, 10)))(assignedPrivateGroup) !== -1\n );\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedPrivateGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(\n assignedPrivateGroup\n );\n updatedData = [\n ...assignedPrivateGroup.slice(0, index),\n ...assignedPrivateGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignPrivateGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return groups.length !== 0 ? (\n <>\n {groups.map(group => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    \n {t(\n 'create-assign-question:assignModal.noFound',\n 'No Private groups found'\n )}\n

    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchPrivateGroupsRequest } from 'stores/privateGroup/actions';\nimport PrivateGroupCheckbox from './CheckboxPrivateGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const [groupName, setGroupName] = useState('');\n const { privateGroups } = useSelector(state => state.privateGroup);\n\n const handleChangeGroupName = group => {\n setGroupName(group);\n };\n\n useEffect(() => {\n dispatch(fetchPrivateGroupsRequest(groupName));\n }, [dispatch, groupName]);\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.choosePrivateGroup`,\n 'Please choose private groups you want to assign'\n )}\n

    \n \n handleChangeGroupName(event.target.value)}\n />\n \n \n
    \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n assignAdminGroup,\n assignLevel,\n resetAssignment\n} from 'stores/worksheet/schedule/actions';\nimport './AssignAdmin.styles.scss';\n\nconst adminGroupsHash = {\n premium: 'All Premium users',\n retail: 'All Retail users',\n koobits: 'All KooBits users'\n};\n\nexport default function AssignAdmin() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { assignedAdminGroup, assignedLevel } = useSelector(\n state => state.schedule\n );\n\n const [selectedLevel, setSelectedLevel] = useState(\n assignedLevel !== '' ? assignedLevel : globalSelectedLevel.ID\n );\n const [selectedUserGroup, setSelectedUserGroup] = useState(\n assignedAdminGroup.ID\n );\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n dispatch(assignLevel(event.target.value));\n dispatch(resetAssignment('non-admin'));\n };\n\n const onChangeUserGroup = event => {\n if (event.target.checked) {\n setSelectedUserGroup(event.target.value);\n dispatch(\n assignAdminGroup({\n ID: event.target.value,\n Name: adminGroupsHash[event.target.value]\n })\n );\n dispatch(assignLevel(selectedLevel));\n dispatch(resetAssignment('non-admin'));\n } else {\n setSelectedUserGroup(null);\n dispatch(assignAdminGroup({}));\n dispatch(assignLevel(''));\n dispatch(resetAssignment('non-admin'));\n }\n };\n\n return (\n
    \n

    \n {t(\n 'create-assign-question:assignModal.chooseAdmin',\n 'Please choose users and level you want to assign'\n )}\n

    \n
    \n {' '}\n \n {t(\n 'create-assign-question:assignModal.allPremium',\n 'All Premium users'\n )}\n \n
    \n\n {/* \n \n */}\n
    \n {' '}\n \n {t(\n 'create-assign-question:assignModal.allKoobits',\n 'All KooBits users'\n )}\n \n
    \n \n \n {levels.map(level => (\n \n ))}\n \n \n
    \n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchMyGroupsRequest } from 'stores/utils/lookup/actions';\nimport {\n assignGroup,\n resetAssignment\n} from 'stores/worksheet/schedule/actions';\n\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { groups } = useSelector(state => state.lookup);\n const { assignedGroup } = useSelector(state => state.schedule);\n\n useEffect(() => {\n dispatch(fetchMyGroupsRequest());\n }, [dispatch]);\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedGroup) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedGroup);\n updatedData = [\n ...assignedGroup.slice(0, index),\n ...assignedGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return (\n
    \n

    \n {t(\n `create-assign-question:assignModal.chooseGroup`,\n 'Please choose groups you want to assign'\n )}\n

    \n {groups.length !== 0 ? (\n <>\n {groups.map(item => {\n return (\n \n \n \n );\n })}\n \n ) : (\n

    \n {t(`create-assign-question:assignModal.noGroup`, 'No group found')}\n

    \n )}\n
    \n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport AssignClass from './AssignClass';\nimport AssignIndividual from './AssignIndividual';\nimport AssignPrivate from './AssignPrivate';\nimport AssignAdmin from './AssignAdmin';\nimport AssignGroup from './AssignGroup';\n\nexport default function AssignRadio() {\n const { t } = useTranslation(['create-assign-question']);\n const { isAdmin } = useSelector(state => state.login);\n const [typeAssign, setTypeAssign] = useState('class');\n\n const onChange = event => {\n setTypeAssign(event.target.value);\n };\n\n const renderSwitch = param => {\n switch (param) {\n case 'private':\n return ;\n case 'admin':\n return ;\n case 'class':\n return ;\n case 'individual':\n return ;\n case 'group':\n return ;\n default:\n return false;\n }\n };\n\n return (\n <>\n
    \n {isAdmin && (\n <>\n
    \n {' '}\n \n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n \n
    \n &\n \n )}\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.class`, 'Class')}\n \n
    \n &\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.group`, 'Group')}\n \n
    \n &\n
    \n {' '}\n \n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Student'\n )}\n \n
    \n {isAdmin && (\n
    \n {' '}\n \n {t(`create-assign-question:assignModal.forAdimn`, 'For Admin')}\n \n
    \n )}\n
    \n
    {renderSwitch(typeAssign)}
    \n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { groupBy } from 'ramda';\nimport hasProp from 'helpers/hasProp';\n\nexport default function AssignResult(props) {\n const { t } = useTranslation(['create-assign-question']);\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel,\n hasAssignees\n } = props;\n\n const groupedStudents = groupBy(\n student => student.ClassName,\n assignedStudent\n );\n\n return (\n <>\n

    {t(`create-assign-question:assign.assignTo`, 'Assign to')}

    \n {hasAssignees ? (\n <>\n {assignedClass.length > 0 && (\n
    \n
    \n {t(`create-assign-question:assign.assignTo`, 'Assign to')}\n
    \n {assignedClass.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {assignedGroup.length > 0 && (\n
    \n
    {t(`create-assign-question:assignModal.group`, 'Group')}
    \n {assignedGroup.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {assignedPrivateGroup.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n
    \n {assignedPrivateGroup.map(item => (\n

    {item.Name}

    \n ))}\n
    \n )}\n {hasProp(assignedAdminGroup, 'ID') && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.adminGroup`,\n 'Admin Group'\n )}\n
    \n

    {assignedAdminGroup.Name}

    \n
    \n )}\n {assignedLevel !== '' && (\n
    \n
    {t(`create-assign-question:assignModal.level`, 'Level')}
    \n

    {`Primary ${assignedLevel}`}

    \n
    \n )}\n {assignedStudent.length > 0 && (\n
    \n
    \n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Students'\n )}\n
    \n {Object.entries(groupedStudents).map(\n ([studentClass, classOfStudents]) => {\n return (\n \n

    {studentClass}

    \n {classOfStudents.map(singleStudent => (\n
    \n

    {singleStudent.FullName}

    \n
    \n ))}\n
    \n );\n }\n )}\n
    \n )}\n \n ) : (\n

    \n {t(\n `create-assign-question:assignModal.noSelection`,\n 'No Classes, Groups or students chosen'\n )}\n

    \n )}\n \n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { nextStep } from 'stores/utils/step/actions';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport AssignRadio from 'components/CreateAndAssign/Schedule/AssignRadio';\nimport AssignResult from 'components/CreateAndAssign/Schedule/AssignResult';\nimport { Col } from 'react-bootstrap';\nimport hasProp from 'helpers/hasProp';\nimport './ScheduleClass.styles.scss';\n\nexport default function ScheduleClass() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { selectedWorksheet } = useSelector(state => state.worksheet);\n\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.schedule);\n\n const hasAssignees =\n assignedClass.length > 0 ||\n assignedGroup.length > 0 ||\n assignedStudent.length > 0 ||\n assignedPrivateGroup.length > 0 ||\n (hasProp(assignedAdminGroup, 'ID') && assignedLevel !== '');\n\n const handleNext = () => {\n if (hasAssignees) {\n dispatch(nextStep());\n }\n };\n\n return (\n
    \n \n
    \n \n

    {selectedWorksheet.Title}

    \n
    \n
    \n \n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n \n \n {t(`create-assign-saved:scheduleWo.next`, 'Next')}\n \n
    \n
    \n \n
    \n \n \n \n \n \n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nexport default function PlainText(props) {\n const { label, value, children } = props;\n return (\n
    \n {label && (\n \n {label}\n \n )}\n
    \n {value && {value}}\n {children &&
    {children}
    }\n
    \n
    \n );\n}\n","import React, { useState, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Overlay, Tooltip } from 'react-bootstrap';\nimport './PopoverItems.styles.scss';\n\nfunction PopoverItems(Props) {\n const { t } = useTranslation(['create-assign-saved']);\n const { items, placement } = Props;\n const [show, setShow] = useState(false);\n const target = useRef(null);\n\n return (\n <>\n setShow(!show)}\n >\n {t(`create-assign-saved:assignNow.showMore`, 'Show more')}\n \n \n \n
    \n {items.map((item, index) => {\n return
    {item}
    ;\n })}\n
    \n
    \n
    \n \n );\n}\n\nPopoverItems.defaultProps = {\n placement: 'top'\n};\n\nexport default PopoverItems;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport Spinner from 'components/Shared/Spinner';\nimport ErrorIcon from 'assets/img/icon-error.svg';\nimport AlertModal from './AlertModal';\n\nconst InfoScheduledWorksheetModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const history = useHistory();\n const { isShow, onConfirm, onClose, isLoading, error } = props;\n const buttons = (\n <>\n {error === null && (\n \n )}\n \n );\n\n const errorTitle = (\n

    \n \n \n {t(`create-assign-question:saveWoModal.error`, 'Error')}\n \n

    \n );\n return (\n \n
    \n {isLoading && }\n {!isLoading && error === null && (\n <>\n

    \n {t(\n `create-assign-question:saveAssignModal.hwAssignedMsg`,\n 'Homework Scheduled Succesfully!This Worksheet has been scheduled to the classes / student that you have selected'\n )}\n

    \n

    \n {t(\n `create-assign-question:saveAssignModal.trackAssign`,\n 'Track Assignment'\n )}\n

    \n
      \n
    • \n {t(\n `create-assign-question:saveAssignModal.trackStuActions`,\n 'Track student assignment actions'\n )}\n history.push('/track-assignment')}\n >\n \n {t(\n `create-assign-question:saveAssignModal.trackAssign`,\n 'Track Assignment'\n )}\n \n
    • \n
    • \n {t(\n `create-assign-question:saveAssignModal.editReWo`,\n 'To edit or re-use your worksheet, go to'\n )}\n \n history.push('/create-and-assign/saved-worksheet')\n }\n >\n \n {t(\n `create-assign-question:saveWoModal.savedWo`,\n 'Saved Worksheet'\n )}\n \n
    • \n
    \n \n )}\n {!isLoading && error !== null && (\n \n {t(\n `create-assign-question:saveAssignModal.failedSchedule`,\n 'Failed to schedule worksheet.'\n )}{' '}\n
    {' '}\n {t(\n `create-assign-question:saveAssignModal.tryAgain`,\n 'Please try again.'\n )}\n

    \n )}\n
    \n \n );\n};\n\nexport default InfoScheduledWorksheetModal;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { homeworkLink } from 'constants/index';\nimport AlertModal from './AlertModal';\n\nconst InfoLinkScheduledModal = props => {\n const { t } = useTranslation(['create-assign-question']);\n const { isShow, onConfirm, onClose } = props;\n const { selectedWorksheet } = useSelector(state => state.worksheet);\n const buttons = (\n <>\n \n \n );\n return (\n \n
    \n

    \n {t(\n `create-assign-question:saveAssignModal.reimndMsg`,\n 'You can remind your student to complete this worksheet by sharing the link via email, forum, LMS, or simply instruct the students to login to KooBits and look for it at the homework section.'\n )}\n

    \n \n

    \n {t(\n `create-assign-question:saveAssignModal.impNote`,\n 'important note:'\n )}\n
    \n {t(\n `create-assign-question:saveAssignModal.authorizeStud`,\n 'only authorized students will be able to access the home work link.'\n )}\n

    \n
    \n \n );\n};\n\nexport default InfoLinkScheduledModal;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport './SchedulePreview.styles.scss';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport { useSelector, useDispatch } from 'react-redux';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport PlainText from 'components/Shared/PlainText';\nimport {\n assignmentTypes,\n assignReferenceType,\n assignmentVisibilities\n} from 'constants/index';\nimport { scheduleWorksheet } from 'stores/worksheet/actions';\nimport { isNil } from 'ramda';\nimport PopoverItems from 'components/Shared/PopoverItems';\nimport hasProp from 'helpers/hasProp';\nimport InfoScheduledWorksheetModal from 'components/Alert/InfoScheduledWorksheetModal';\nimport InfoLinkScheduledModal from 'components/Alert/InfoLinkScheduledModal';\nimport history from 'helpers/history';\n\nexport default function SchedulePreview() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { isAdmin } = useSelector(state => state.login);\n const { selectedWorksheet, error, isLoading } = useSelector(\n state => state.worksheet\n );\n const AssignmentTypeID = isNil(\n selectedWorksheet.PresentationType.AssignmentTypeID\n )\n ? null\n : selectedWorksheet.PresentationType.AssignmentTypeID;\n\n const [showScheduled, setShowScheduled] = useState(false);\n const [showLink, setShowLink] = useState(false);\n\n const {\n startDate,\n endDate,\n releaseDate,\n assignmentVisibility,\n kokoCredit,\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.schedule);\n\n const renderShowAssigne = items => {\n return items.map(item => {item.Name});\n };\n\n const renderAssigneeItem = items => {\n if (items.length > 5) {\n const itemsShow = items.slice(0, 5);\n const itemsPopOver = items.slice(5).map(item => {\n return item.Name;\n });\n\n return (\n <>\n {renderShowAssigne(itemsShow)}\n \n \n );\n }\n return renderShowAssigne(items);\n };\n\n const renderShowIndividual = items => {\n return items.map(item => (\n \n {item.FullName} ({item.ClassName})\n \n ));\n };\n\n const renderAssigneeItemIndividual = items => {\n if (items.length > 3) {\n const itemsShow = items.slice(0, 3);\n const itemsPopOver = items.slice(3).map(item => {\n return `${item.FullName} (${item.ClassName})`;\n });\n\n return (\n <>\n {renderShowIndividual(itemsShow)}\n \n \n );\n }\n return renderShowIndividual(items);\n };\n\n const handleSchedule = () => {\n // compile data for assigning\n const assignedClassData = assignedClass.map(classData => ({\n referenceId: classData.ID,\n type: assignReferenceType.class\n }));\n const assignedGroupData = assignedGroup.map(groupData => ({\n referenceId: groupData.ID,\n type: assignReferenceType.group\n }));\n const assignedPrivateGroupData = assignedPrivateGroup.map(\n privateGroupData => ({\n referenceId: privateGroupData.ID,\n type: assignReferenceType.group\n })\n );\n const assignedStudentData = assignedStudent.map(studentData => ({\n referenceId: studentData.UserId,\n type: assignReferenceType.student\n }));\n let assignedAdminData = null;\n if (hasProp(assignedAdminGroup, 'ID')) {\n switch (assignedAdminGroup.ID) {\n case 'premium':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isPremium: 1\n };\n break;\n case 'retail':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isRetail: 1\n };\n break;\n case 'koobits':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level\n };\n break;\n default:\n assignedAdminData = null;\n }\n }\n const assignmentsArray =\n assignedAdminData !== null\n ? [assignedAdminData]\n : [\n ...assignedClassData,\n ...assignedGroupData,\n ...assignedStudentData,\n ...assignedPrivateGroupData\n ];\n\n const data = {\n assignmentVisibility,\n rewards: kokoCredit,\n startDate: moment(startDate).format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDate: moment(endDate).format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n assignments: assignmentsArray,\n homeWorkID: selectedWorksheet.ID\n };\n if (AssignmentTypeID === assignmentTypes.test) {\n data.resultDate = moment(releaseDate).format(\n 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'\n );\n }\n dispatch(scheduleWorksheet(data));\n setShowScheduled(true);\n };\n\n return (\n <>\n {\n setShowScheduled(false);\n setShowLink(true);\n }}\n onClose={() => setShowScheduled(false)}\n isLoading={isLoading}\n error={error}\n />\n\n {\n setShowLink(false);\n history.push('/create-and-assign/saved-worksheet');\n }}\n onClose={() => {\n setShowLink(false);\n }}\n />\n\n
    \n \n
    \n \n

    {selectedWorksheet.Title}

    \n
    \n
    \n \n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n \n \n {t(`create-assign-saved:scheduleWo.schedule`, 'Schedule')}\n \n
    \n
    \n \n
    \n
    \n
    \n {t(`create-assign-saved:scheduleWo.schedTime`, 'Schedule Time')}\n
    \n
    \n
    \n \n {selectedWorksheet.PresentationType.AssignmentTypeID ===\n assignmentTypes.test && (\n \n )}\n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n {t(`create-assign-saved:assignNow.assignTo`, 'Assign To')}\n
    \n
    \n {isAdmin && (\n <>\n {hasProp(assignedAdminGroup, 'ID') && (\n \n )}\n {assignedLevel !== '' && (\n <PlainText\n label={t(`create-assign-saved:assignNow.level`, 'Level')}\n value={assignedLevel}\n />\n )}\n {assignedPrivateGroup.length > 0 && (\n <PlainText\n label={t(\n `create-assign-saved:assignNow.pvtGroups`,\n 'Private Groups'\n )}\n >\n {renderAssigneeItem(assignedPrivateGroup)}\n </PlainText>\n )}\n </>\n )}\n {assignedClass.length > 0 && (\n <PlainText\n label={t(`create-assign-saved:assignNow.class`, 'Class')}\n className=\"mr-n1\"\n >\n {renderAssigneeItem(assignedClass)}\n </PlainText>\n )}\n {assignedGroup.length > 0 && (\n <PlainText\n label={t(`create-assign-saved:assignNow.group`, 'Groups')}\n >\n {renderAssigneeItem(assignedGroup)}\n </PlainText>\n )}\n {assignedStudent.length > 0 && (\n <PlainText\n label={t(\n `create-assign-saved:assignNow.indvStud`,\n 'Individual Student'\n )}\n >\n {renderAssigneeItemIndividual(assignedStudent)}\n </PlainText>\n )}\n </div>\n </div>\n <div className=\"panel panel-schedule-rewards row\">\n <div className=\"panel-header h5 col-sm-2\">\n {t(`create-assign-saved:scheduleWo.rewards`, 'Rewards')}\n </div>\n <div className=\"panel-body col-sm-10 mt-n1\">\n <PlainText value={`${kokoCredit} Koko`} />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport { Link } from 'react-router-dom';\nimport { setStep } from 'stores/utils/step/actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport hasProp from 'helpers/hasProp';\nimport { resetSelectedWorksheet } from 'stores/worksheet/actions';\nimport { resetSchedule } from 'stores/worksheet/schedule/actions';\nimport ScheduleTime from './ScheduleTime';\nimport ScheduleClass from './ScheduleClass';\nimport SchedulePreview from './SchedulePreview';\n\n/**\n * @todo when the UI for empty cart questions done, use cartQuestions from reducer or other resources\n * @note client still not confirm whether cartQuestions is the data we will be use\n */\n\nexport default function ScheduleView() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.schedule);\n\n const hasAssignees =\n assignedClass.length > 0 ||\n assignedGroup.length > 0 ||\n assignedStudent.length > 0 ||\n assignedPrivateGroup.length > 0 ||\n (hasProp(assignedAdminGroup, 'ID') && assignedLevel !== '');\n\n const BackButton = (\n <Link\n to=\"/create-and-assign/saved-worksheet\"\n className=\"btn btn-link question-cart-content__back\"\n >\n &lt; {t(`create-assign-saved:scheduleWo.backList`, 'Back To List')}\n </Link>\n );\n\n useEffect(() => {\n return () => {\n dispatch(resetSelectedWorksheet());\n dispatch(resetSchedule());\n };\n }, [dispatch]);\n\n const onSelect = step => {\n let valid = false;\n switch (step) {\n case 3:\n if (hasAssignees) {\n valid = true;\n }\n break;\n default:\n valid = true;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n };\n\n return (\n <div className=\"content content__inner content__inner-create-assign\">\n <StepperWizard\n backButton={BackButton}\n onSelect={onSelect}\n className=\"stepper-blue stepper-schedule stepper-default\"\n >\n <ScheduleTime\n step=\"1\"\n title={t(`create-assign-saved:scheduleWo.schedTime`, 'Schedule Time')}\n />\n <ScheduleClass\n step=\"2\"\n title={t(\n `create-assign-saved:scheduleWo.schedClass`,\n 'Schedule Class'\n )}\n />\n <SchedulePreview\n step=\"3\"\n title={t(\n `create-assign-saved:scheduleWo.schedPrev`,\n 'Schedule Preview'\n )}\n />\n </StepperWizard>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment-timezone';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport { useSelector, useDispatch } from 'react-redux';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport DateTimeRangePicker from 'components/CreateAndAssign/DateTimeRangePicker';\nimport { assignmentTypes } from 'constants/index';\nimport DateTimePicker from 'components/CreateAndAssign/DateTimePicker';\nimport { nextStep } from 'stores/utils/step/actions';\nimport {\n setStartEndDate,\n setReleaseDate,\n setKokoCredit\n} from 'stores/worksheet/assign/actions';\nimport { Spinner } from 'react-bootstrap';\nimport history from 'helpers/history';\n\nexport default function AssignTime() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { selectedWorksheet, isLoading } = useSelector(\n state => state.worksheet\n );\n\n const { startDate, endDate, releaseDate, kokoCredit } = useSelector(\n state => state.assign\n );\n\n // must fullfil by data selected worksheet but I can find that\n // kokoCredits 10, 15, 20 is temporarily removed\n const kokoCredits = [5];\n const [kokoCreditVal, setKokoCreditVal] = useState(kokoCredit);\n const startDateVal = moment(startDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n const endDateVal = moment(endDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n\n const releaseDateVal = moment(releaseDate, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n\n const applyCallback = (startDateValue, endDateValue) => {\n dispatch(\n setStartEndDate(\n startDateValue.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDateValue.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n };\n\n const applyCallbackRelease = (e, picker) => {\n dispatch(\n setReleaseDate(picker.startDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'))\n );\n };\n\n const onChangeKoko = event => {\n setKokoCreditVal(event.target.value);\n dispatch(setKokoCredit(event.target.value));\n };\n\n const handleNext = () => {\n if (!kokoCredit) {\n dispatch(setKokoCredit(kokoCreditVal));\n }\n\n if (!startDate && !endDate) {\n dispatch(\n setStartEndDate(\n startDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ')\n )\n );\n }\n\n if (\n selectedWorksheet.PresentationType.AssignmentTypeID ===\n assignmentTypes.test &&\n !releaseDate\n ) {\n dispatch(\n setReleaseDate(releaseDateVal.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'))\n );\n }\n\n dispatch(nextStep());\n };\n\n const handleCancel = () => {\n history.push('/create-and-assign/saved-worksheet');\n };\n\n return isLoading ? (\n <div className=\"d-flex justify-content-center align-items-center vh-100\">\n <Spinner animation=\"border\">\n <span className=\"sr-only\">Loading...</span>\n </Spinner>\n </div>\n ) : (\n <div className=\"container schedule-content\">\n <HeaderFull>\n <div className=\"d-flex flex-row align-items-center justify-content-center schedule-content-title\">\n <CircleType\n typeId={selectedWorksheet?.PresentationType.AssignmentTypeID}\n />\n <h1>{selectedWorksheet?.Title}</h1>\n </div>\n <div className=\"schedule-content-nav-btn\">\n <button\n onClick={handleCancel}\n type=\"button\"\n className=\"btn btn-outline-primary\"\n >\n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n </button>\n <button\n onClick={handleNext}\n type=\"button\"\n className=\"btn btn-primary\"\n >\n {t(`create-assign-saved:scheduleWo.next`, 'Next')}\n </button>\n </div>\n </HeaderFull>\n <Border />\n <div>\n <div className=\"d-flex flex-row\">\n <div>\n <div className=\"save-assign__content-action-item\">\n <i className=\"save-assign__content-action-icon icon-class-start-orange\" />\n <div className=\"save-assign__content-action-caption\">\n <p>\n {t(`create-assign-saved:scheduleWo.startend`, 'Start / End')}\n </p>\n <DateTimeRangePicker\n startDate={startDateVal}\n endDate={endDateVal}\n applyCallback={applyCallback}\n />\n </div>\n </div>\n {selectedWorksheet?.PresentationType.AssignmentTypeID ===\n assignmentTypes.test && (\n <div className=\"save-assign__content-action-item\">\n <div\n className=\"save-assign__content-action-caption\"\n style={{ marginLeft: 35 }}\n >\n <p>\n {t(\n `create-assign-saved:scheduleWo.releaseDate`,\n 'Release Date'\n )}\n </p>\n <DateTimePicker\n selectedDate={releaseDateVal}\n applyCallback={applyCallbackRelease}\n minDateVal={endDateVal}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n <div className=\"save-assign__content-action-item\">\n <i className=\"icon-class-reward-orange save-assign__content-action-icon\" />\n <div className=\"save-assign__content-action-caption\">\n <p>{t(`create-assign-saved:scheduleWo.rewards`, 'Rewards')}</p>\n <div className=\"save-assign__content-action-rewards\">\n <div className=\"schedule-option-arrow\">\n <select\n onBlur={onChangeKoko}\n onChange={onChangeKoko}\n defaultValue={kokoCreditVal}\n name=\"kokoCredit\"\n className=\"schedule-option-rewards\"\n >\n {kokoCredits.map(kokoItem => {\n return (\n <option value={kokoItem} key={kokoItem}>\n {kokoItem}\n </option>\n );\n })}\n </select>\n </div>\n <p>Koko</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignClass,\n assignGroup,\n resetAssignment\n} from 'stores/worksheet/assign/actions';\nimport { findIndex, find, propEq } from 'ramda';\nimport { classType } from 'constants/index';\n\nexport default function ClassGroupCheckbox(props) {\n const { type } = props;\n const dispatch = useDispatch();\n const { assignedClass, assignedGroup } = useSelector(state => state.assign);\n\n const { classes } = useSelector(state => state.lookup);\n\n const items = classes.filter(classData => {\n return classData.Type === classType[type];\n });\n\n const assignedData = type === 'class' ? assignedClass : assignedGroup;\n const assignData = type === 'class' ? assignClass : assignGroup;\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedData) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(classes);\n\n updatedData = [...assignedData, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedData);\n updatedData = [\n ...assignedData.slice(0, index),\n ...assignedData.slice(index + 1)\n ];\n }\n\n dispatch(assignData(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return items.length !== 0 ? (\n <>\n {items.map(item => {\n return (\n <Form.Group\n key={`${type}-${item.ID}`}\n className=\"row schedule-checkbox\"\n controlId={`${type}-${item.ID}`}\n >\n <Form.Check\n className=\"checkbox-class\"\n checked={checkChecked(item.ID)}\n onChange={onChange}\n type=\"checkbox\"\n label={item.Name}\n value={item.ID}\n />\n </Form.Group>\n );\n })}\n </>\n ) : (\n <p>No classes found</p>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport CheckboxClassGroup from './CheckboxClassGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]); // @see {@link https://github.com/facebook/create-react-app/issues/6880#issuecomment-488158024 having dispatch in useEffect dependencies}\n\n return (\n <div>\n <p>\n {t(\n `create-assign-question:assignModal.classAssign`,\n 'Please choose classes you want to assign'\n )}\n </p>\n <Form.Group controlId=\"options-level schedule-option-arrow\">\n <Form.Control\n as=\"select\"\n name=\"level\"\n onChange={onChangeLevel}\n value={selectedLevel}\n >\n {levels.map(level => (\n <option key={level.ID} value={level.ID}>\n {level.Name}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n <div className=\"schedule-checkbox-group\">\n <CheckboxClassGroup type=\"class\" />\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport './AssignIndividual.styles.scss';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchClassRequest,\n fetchStudentsRequest\n} from 'stores/utils/lookup/actions';\nimport { filter, find, propEq, findIndex } from 'ramda';\nimport {\n assignStudent,\n resetAssignment\n} from 'stores/worksheet/assign/actions';\nimport Spinner from 'components/Shared/Spinner';\n\nexport default function AssignIndividual() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n // Get data from redux store\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { classes, students, isLoading, error } = useSelector(\n state => state.lookup\n );\n const { assignedStudent } = useSelector(state => state.assign);\n\n // Level state management\n const [selectedLevel, setSelectedLevel] = useState(globalSelectedLevel.ID);\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n };\n // Level on change effect\n useEffect(() => {\n dispatch(fetchClassRequest(selectedLevel));\n }, [dispatch, selectedLevel]);\n\n // Class state management\n const [selectedClass, setSelectedClass] = useState(\n classes.length > 0 ? classes[0].ID : 1\n );\n const onChangeClass = event => {\n setSelectedClass(event.target.value);\n };\n // Class on change effect\n useEffect(() => {\n dispatch(fetchStudentsRequest(selectedClass));\n }, [dispatch, selectedClass]);\n // When classes change, change the selected class\n useEffect(() => {\n setSelectedClass(classes.length > 0 ? classes[0].ID : 1);\n }, [classes]);\n\n // Available students state management\n const availableStudents = filter(\n student =>\n findIndex(propEq('UserId', parseInt(student.UserId, 10)))(\n assignedStudent\n ) === -1,\n students\n );\n const [\n selectedAvailableStudentIds,\n setSelectedAvailableStudentIds\n ] = useState([]);\n const handleSelectAvailableStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAvailableStudentIds(value);\n };\n const onAdd = () => {\n const updatedData = [...assignedStudent];\n selectedAvailableStudentIds.forEach(id => {\n const newData = find(propEq('UserId', id))(students);\n updatedData.push(newData);\n });\n\n dispatch(assignStudent(updatedData));\n dispatch(resetAssignment('admin'));\n setSelectedAvailableStudentIds([]);\n };\n\n // Selected assigned students state management\n const [selectedAssignedStudentIds, setSelectedAssignedStudentIds] = useState(\n []\n );\n const handleSelectAssignedStudents = event => {\n const { options } = event.target;\n const value = [];\n for (let i = 0, l = options.length; i < l; i += 1) {\n if (options[i].selected) {\n value.push(parseInt(options[i].value, 10));\n }\n }\n setSelectedAssignedStudentIds(value);\n };\n const onRemove = () => {\n let updatedData = [...assignedStudent];\n\n updatedData = updatedData.filter(\n student => selectedAssignedStudentIds.indexOf(student.UserId) === -1\n );\n dispatch(assignStudent(updatedData));\n setSelectedAssignedStudentIds([]);\n };\n\n return (\n <div>\n <p>\n {t(\n `create-assign-question:assignModal.chooseStud`,\n 'Please choose students you want to assign'\n )}\n </p>\n <Form.Group controlId=\"options-level\">\n <Form.Control\n as=\"select\"\n name=\"level\"\n onChange={onChangeLevel}\n value={selectedLevel}\n >\n {levels.map(level => (\n <option key={level.ID} value={level.ID}>\n {level.Name}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n <Form.Group controlId=\"options-class-group\">\n <Form.Control\n as=\"select\"\n name=\"level\"\n onChange={onChangeClass}\n value={selectedClass}\n >\n {classes.map(classItem => (\n <option key={classItem.ID} value={classItem.ID}>\n {classItem.Name}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n <div className=\"assign-form\">\n <div style={{ position: 'absolute', left: '160px', top: '150px' }}>\n {isLoading && <Spinner small />}\n </div>\n <Form.Control\n as=\"select\"\n multiple\n className=\"assign-modal-textarea\"\n onChange={handleSelectAvailableStudents}\n value={selectedAvailableStudentIds}\n >\n {isLoading ? (\n ''\n ) : availableStudents.length === 0 || error !== '' ? (\n <option disabled style={{ fontSize: '14px' }}>\n {t(\n `create-assign-question:assignModal.noStud`,\n 'No student in the selected class'\n )}\n </option>\n ) : (\n availableStudents.map(student => (\n <option key={student.UserId} value={student.UserId}>\n {student.FullName}\n </option>\n ))\n )}\n </Form.Control>\n <div className=\"assign-form-button\">\n <button\n type=\"button\"\n onClick={onAdd}\n disabled={selectedAvailableStudentIds.length <= 0}\n className=\"btn btn-primary\"\n >\n {t(`create-assign-question:assignModal.add`, 'Add')}\n </button>\n <button\n type=\"button\"\n onClick={onRemove}\n disabled={assignedStudent.length <= 0}\n className=\"btn btn-info\"\n >\n {t(`create-assign-question:assignModal.remove`, 'Remove')}\n </button>\n </div>\n <Form.Control\n as=\"select\"\n multiple\n className=\"assign-modal-textarea--selected\"\n onChange={handleSelectAssignedStudents}\n value={selectedAssignedStudentIds}\n >\n {assignedStudent.map(student => (\n <option key={student.UserId} value={student.UserId}>\n {student.FullName} {student.ClassName}\n </option>\n ))}\n </Form.Control>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n assignPrivateGroup,\n resetAssignment\n} from 'stores/worksheet/assign/actions';\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function CheckboxPrivateGroup(props) {\n const { t } = useTranslation(['create-assign-question']);\n const { groups } = props;\n const dispatch = useDispatch();\n const { assignedPrivateGroup } = useSelector(state => state.assign);\n\n const checkChecked = id => {\n return (\n findIndex(propEq('ID', parseInt(id, 10)))(assignedPrivateGroup) !== -1\n );\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedPrivateGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(\n assignedPrivateGroup\n );\n updatedData = [\n ...assignedPrivateGroup.slice(0, index),\n ...assignedPrivateGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignPrivateGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return groups.length !== 0 ? (\n <>\n {groups.map(group => {\n return (\n <Form.Group key={group.ID} className=\"row\" controlId={group.ID}>\n <Form.Check\n className=\"checkbox-class\"\n checked={checkChecked(group.ID)}\n onChange={onChange}\n type=\"checkbox\"\n label={group.Name}\n value={group.ID}\n />\n </Form.Group>\n );\n })}\n </>\n ) : (\n <p>\n {t(\n 'create-assign-question:assignModal.noFound',\n 'No Private groups found'\n )}\n </p>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchPrivateGroupsRequest } from 'stores/privateGroup/actions';\nimport PrivateGroupCheckbox from './CheckboxPrivateGroup';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const [groupName, setGroupName] = useState('');\n const { privateGroups } = useSelector(state => state.privateGroup);\n\n const handleChangeGroupName = group => {\n setGroupName(group);\n };\n\n useEffect(() => {\n dispatch(fetchPrivateGroupsRequest(groupName));\n }, [dispatch, groupName]);\n\n return (\n <div>\n <p>\n {t(\n `create-assign-question:assignModal.choosePrivateGroup`,\n 'Please choose private groups you want to assign'\n )}\n </p>\n <Form.Group className=\"col-md-12\">\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder={t(\n `create-assign-question:assignModal.searchBy`,\n 'Search by group name'\n )}\n value={groupName}\n onChange={event => handleChangeGroupName(event.target.value)}\n />\n </Form.Group>\n <PrivateGroupCheckbox groups={privateGroups} />\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n assignAdminGroup,\n assignLevel,\n resetAssignment\n} from 'stores/worksheet/assign/actions';\nimport './AssignAdmin.styles.scss';\n\nconst adminGroupsHash = {\n premium: 'All Premium users',\n retail: 'All Retail users',\n koobits: 'All KooBits users'\n};\n\nexport default function AssignAdmin() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { levels, selectedLevel: globalSelectedLevel } = useSelector(\n state => state.levels\n );\n const { assignedAdminGroup, assignedLevel } = useSelector(\n state => state.assign\n );\n\n const [selectedLevel, setSelectedLevel] = useState(\n assignedLevel !== '' ? assignedLevel : globalSelectedLevel.ID\n );\n const [selectedUserGroup, setSelectedUserGroup] = useState(\n assignedAdminGroup.ID\n );\n\n const onChangeLevel = event => {\n setSelectedLevel(event.target.value);\n dispatch(assignLevel(event.target.value));\n dispatch(resetAssignment('non-admin'));\n };\n\n const onChangeUserGroup = event => {\n if (event.target.checked) {\n setSelectedUserGroup(event.target.value);\n dispatch(\n assignAdminGroup({\n ID: event.target.value,\n Name: adminGroupsHash[event.target.value]\n })\n );\n dispatch(assignLevel(selectedLevel));\n dispatch(resetAssignment('non-admin'));\n } else {\n setSelectedUserGroup(null);\n dispatch(assignAdminGroup({}));\n dispatch(assignLevel(''));\n dispatch(resetAssignment('non-admin'));\n }\n };\n\n return (\n <div className=\"assign-admin\">\n <p>\n {t(\n 'create-assign-question:assignModal.chooseAdmin',\n 'Please choose users and level you want to assign'\n )}\n </p>\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-premium\"\n value=\"premium\"\n checked={selectedUserGroup === 'premium'}\n onChange={onChangeUserGroup}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-premium\">\n {t(\n 'create-assign-question:assignModal.allPremium',\n 'All Premium users'\n )}\n </Form.Label>\n </div>\n\n {/* <Form.Group key=\"retail\" className=\"row\" controlId=\"select-users\">\n <Form.Check\n className=\"checkbox-class\"\n checked={selectedUserGroup === 'retail'}\n onChange={onChangeUserGroup}\n type=\"checkbox\"\n label=\"All Retail users\"\n value=\"retail\"\n />\n </Form.Group> */}\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"koobits\"\n value=\"koobits\"\n checked={selectedUserGroup === 'koobits'}\n onChange={onChangeUserGroup}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-premium\">\n {' '}\n {t(\n 'create-assign-question:assignModal.allKoobits',\n 'All KooBits users'\n )}\n </Form.Label>\n </div>\n <Form.Group controlId=\"options-level\">\n <Form.Control\n as=\"select\"\n name=\"level\"\n onChange={onChangeLevel}\n value={selectedLevel}\n >\n {levels.map(level => (\n <option key={level.ID} value={level.ID}>\n {level.Name}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchMyGroupsRequest } from 'stores/utils/lookup/actions';\nimport { assignGroup, resetAssignment } from 'stores/worksheet/assign/actions';\n\nimport { findIndex, find, propEq } from 'ramda';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { groups } = useSelector(state => state.lookup);\n const { assignedGroup } = useSelector(state => state.assign);\n\n useEffect(() => {\n dispatch(fetchMyGroupsRequest());\n }, [dispatch]);\n\n const checkChecked = id => {\n return findIndex(propEq('ID', parseInt(id, 10)))(assignedGroup) !== -1;\n };\n\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('ID', parseInt(value, 10)))(groups);\n\n updatedData = [...assignedGroup, newData];\n } else {\n const index = findIndex(propEq('ID', parseInt(value, 10)))(assignedGroup);\n updatedData = [\n ...assignedGroup.slice(0, index),\n ...assignedGroup.slice(index + 1)\n ];\n }\n\n dispatch(assignGroup(updatedData));\n dispatch(resetAssignment('admin'));\n };\n\n return (\n <div>\n <p>\n {t(\n `create-assign-question:assignModal.chooseGroup`,\n 'Please choose groups you want to assign'\n )}\n </p>\n {groups.length !== 0 ? (\n <>\n {groups.map(item => {\n return (\n <Form.Group\n key={`group-${item.ID}`}\n className=\"row\"\n controlId={`group-${item.ID}`}\n >\n <Form.Check\n className=\"checkbox-class\"\n checked={checkChecked(item.ID)}\n onChange={onChange}\n type=\"checkbox\"\n label={item.Name}\n value={item.ID}\n />\n </Form.Group>\n );\n })}\n </>\n ) : (\n <p>\n {t(`create-assign-question:assignModal.noGroup`, 'No group found')}\n </p>\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport AssignClass from './AssignClass';\nimport AssignIndividual from './AssignIndividual';\nimport AssignPrivate from './AssignPrivate';\nimport AssignAdmin from './AssignAdmin';\nimport AssignGroup from './AssignGroup';\n\nexport default function AssignRadio() {\n const { t } = useTranslation(['create-assign-question']);\n const { isAdmin } = useSelector(state => state.login);\n const [typeAssign, setTypeAssign] = useState('class');\n\n const onChange = event => {\n setTypeAssign(event.target.value);\n };\n\n const renderSwitch = param => {\n switch (param) {\n case 'private':\n return <AssignPrivate />;\n case 'admin':\n return <AssignAdmin />;\n case 'class':\n return <AssignClass />;\n case 'individual':\n return <AssignIndividual />;\n case 'group':\n return <AssignGroup />;\n default:\n return false;\n }\n };\n\n return (\n <>\n <div className=\"assign-modal-header d-flex flex-row\">\n {isAdmin && (\n <>\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-private\"\n value=\"private\"\n checked={typeAssign === 'private'}\n onChange={onChange}\n className=\"form-check-radio custom-radio\"\n />\n <Form.Label htmlFor=\"type-private\">\n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n </Form.Label>\n </div>\n <span>&</span>\n </>\n )}\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-class\"\n value=\"class\"\n checked={typeAssign === 'class'}\n onChange={onChange}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-class\">\n {t(`create-assign-question:assignModal.class`, 'Class')}\n </Form.Label>\n </div>\n <span>&</span>\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-group\"\n value=\"group\"\n checked={typeAssign === 'group'}\n onChange={onChange}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-group\">\n {t(`create-assign-question:assignModal.group`, 'Group')}\n </Form.Label>\n </div>\n <span>&</span>\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-individual\"\n value=\"individual\"\n checked={typeAssign === 'individual'}\n onChange={onChange}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-individual\">\n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Student'\n )}\n </Form.Label>\n </div>\n {isAdmin && (\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id=\"type-admin\"\n value=\"admin\"\n checked={typeAssign === 'admin'}\n onChange={onChange}\n className=\"form-check-radio custom-radio\"\n />{' '}\n <Form.Label htmlFor=\"type-admin\">\n {t(`create-assign-question:assignModal.forAdimn`, 'For Admin')}\n </Form.Label>\n </div>\n )}\n </div>\n <div className=\"assign-modal-body\">{renderSwitch(typeAssign)}</div>\n </>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { groupBy } from 'ramda';\nimport hasProp from 'helpers/hasProp';\n\nexport default function AssignResult(props) {\n const { t } = useTranslation(['create-assign-question']);\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel,\n hasAssignees\n } = props;\n\n const groupedStudents = groupBy(\n student => student.ClassName,\n assignedStudent\n );\n\n return (\n <>\n <h3>{t(`create-assign-question:assign.assignTo`, 'Assign to')}</h3>\n {hasAssignees ? (\n <>\n {assignedClass.length > 0 && (\n <div className=\"class-list\">\n <h5>{t(`create-assign-question:assignModal.class`, 'Class')}</h5>\n {assignedClass.map(item => (\n <p key={item.ID}>{item.Name}</p>\n ))}\n </div>\n )}\n {assignedGroup.length > 0 && (\n <div className=\"group-list\">\n <h5>{t(`create-assign-question:assignModal.group`, 'Group')}</h5>\n {assignedGroup.map(item => (\n <p key={item.ID}>{item.Name}</p>\n ))}\n </div>\n )}\n {assignedPrivateGroup.length > 0 && (\n <div className=\"group-list\">\n <h5>\n {t(\n `create-assign-question:assignModal.pvtGroup`,\n 'Private Group'\n )}\n </h5>\n {assignedPrivateGroup.map(item => (\n <p key={item.ID}>{item.Name}</p>\n ))}\n </div>\n )}\n {hasProp(assignedAdminGroup, 'ID') && (\n <div className=\"group-list\">\n <h5>\n {t(\n `create-assign-question:assignModal.adminGroup`,\n 'Admin Group'\n )}\n </h5>\n <p>{assignedAdminGroup.Name}</p>\n </div>\n )}\n {assignedLevel !== '' && (\n <div className=\"group-list\">\n <h5>{t(`create-assign-question:assignModal.level`, 'Level')}</h5>\n <p>{`Primary ${assignedLevel}`}</p>\n </div>\n )}\n {assignedStudent.length > 0 && (\n <div className=\"group-list\">\n <h5>\n {t(\n `create-assign-question:assignModal.indvStud`,\n 'Individual Students'\n )}\n </h5>\n {Object.entries(groupedStudents).map(\n ([studentClass, classOfStudents]) => {\n return (\n <React.Fragment key={studentClass}>\n <p className=\"text-muted mt-2\">{studentClass}</p>\n {classOfStudents.map(singleStudent => (\n <div key={singleStudent.UserId}>\n <p>{singleStudent.FullName}</p>\n </div>\n ))}\n </React.Fragment>\n );\n }\n )}\n </div>\n )}\n </>\n ) : (\n <p>\n {t(\n `create-assign-question:assignModal.noSelection`,\n 'No Classes, Groups or students chosen'\n )}\n </p>\n )}\n </>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { nextStep, prevStep } from 'stores/utils/step/actions';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport AssignRadio from 'components/CreateAndAssign/Assign/AssignRadio';\nimport AssignResult from 'components/CreateAndAssign/Assign/AssignResult';\nimport { Col } from 'react-bootstrap';\nimport hasProp from 'helpers/hasProp';\n\nexport default function AssignClass() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { selectedWorksheet } = useSelector(state => state.worksheet);\n\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.assign);\n\n const hasAssignees =\n assignedClass.length > 0 ||\n assignedGroup.length > 0 ||\n assignedStudent.length > 0 ||\n assignedPrivateGroup.length > 0 ||\n (hasProp(assignedAdminGroup, 'ID') && assignedLevel !== '');\n\n const handleNext = () => {\n if (hasAssignees) {\n dispatch(nextStep());\n }\n };\n\n const handleCancel = () => {\n dispatch(prevStep());\n };\n return (\n <div className=\"container schedule-content schedule-content-class\">\n <HeaderFull>\n <div className=\"d-flex flex-row align-items-center justify-content-center schedule-content-title\">\n <CircleType\n typeId={selectedWorksheet.PresentationType.AssignmentTypeID}\n />\n <h1>{selectedWorksheet.Title}</h1>\n </div>\n <div className=\"schedule-content-nav-btn\">\n <button\n onClick={handleCancel}\n type=\"button\"\n className=\"btn btn-outline-primary\"\n >\n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n </button>\n <button\n onClick={handleNext}\n type=\"button\"\n className=\"btn btn-primary\"\n >\n {t(`create-assign-saved:scheduleWo.next`, 'Next')}\n </button>\n </div>\n </HeaderFull>\n <Border />\n <div className=\"d-flex assign-modal\">\n <Col md={9} className=\"assign-modal-form assign-private\">\n <AssignRadio />\n </Col>\n <Col md={3} className=\"assign-modal-info assign-class\">\n <AssignResult\n assignedClass={assignedClass}\n assignedGroup={assignedGroup}\n assignedStudent={assignedStudent}\n assignedPrivateGroup={assignedPrivateGroup}\n assignedAdminGroup={assignedAdminGroup}\n assignedLevel={assignedLevel}\n hasAssignees={hasAssignees}\n />\n </Col>\n </div>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport './AssignPreview.styles.scss';\nimport moment from 'moment';\nimport HeaderFull from 'components/CreateAndAssign/HeaderFull';\nimport { useSelector, useDispatch } from 'react-redux';\nimport CircleType from 'components/CreateAndAssign/CircleType';\nimport Border from 'components/Shared/Border';\nimport PlainText from 'components/Shared/PlainText';\nimport { assignmentTypes, assignReferenceType } from 'constants/index';\nimport { assignWorksheet } from 'stores/worksheet/actions';\nimport { prevStep } from 'stores/utils/step/actions';\nimport PopoverItems from 'components/Shared/PopoverItems';\nimport hasProp from 'helpers/hasProp';\nimport InfoAssignedWorksheetModal from 'components/Alert/InfoAssignedWorksheetModal';\nimport InfoLinkWorksheetModal from 'components/Alert/InfoLinkWorksheetModal';\nimport history from 'helpers/history';\n\nexport default function AssignPreview() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const { isAdmin } = useSelector(state => state.login);\n const { selectedWorksheet, error, isLoading } = useSelector(\n state => state.worksheet\n );\n\n const [showAssign, setShowAssign] = useState(false);\n const [showLink, setShowLink] = useState(false);\n\n const {\n startDate,\n endDate,\n releaseDate,\n kokoCredit,\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.assign);\n\n const renderShowAssigne = items => {\n return items.map(item => <span key={item.ID}>{item.Name}</span>);\n };\n\n const renderAssigneeItem = items => {\n if (items.length > 5) {\n const itemsShow = items.slice(0, 5);\n const itemsPopOver = items.slice(5).map(item => {\n return item.Name;\n });\n\n return (\n <>\n {renderShowAssigne(itemsShow)}\n <PopoverItems items={itemsPopOver} />\n </>\n );\n }\n return renderShowAssigne(items);\n };\n\n const renderShowIndividual = items => {\n return items.map(item => (\n <span key={item.UserId}>\n {item.FullName} <small>({item.ClassName})</small>\n </span>\n ));\n };\n\n const renderAssigneeItemIndividual = items => {\n if (items.length > 3) {\n const itemsShow = items.slice(0, 3);\n const itemsPopOver = items.slice(3).map(item => {\n return `${item.FullName} (${item.ClassName})`;\n });\n\n return (\n <>\n {renderShowIndividual(itemsShow)}\n <PopoverItems items={itemsPopOver} />\n </>\n );\n }\n return renderShowIndividual(items);\n };\n\n const handleAssign = () => {\n // compile data for assigning\n const assignedClassData = assignedClass.map(classData => ({\n referenceId: classData.ID,\n type: assignReferenceType.class\n }));\n const assignedGroupData = assignedGroup.map(classData => ({\n referenceId: classData.ID,\n type: assignReferenceType.group\n }));\n const assignedPrivateGroupData = assignedPrivateGroup.map(classData => ({\n referenceId: classData.ID,\n type: assignReferenceType.group\n }));\n const assignedStudentData = assignedStudent.map(classData => ({\n referenceId: classData.UserId,\n type: assignReferenceType.student\n }));\n let assignedAdminData = null;\n if (hasProp(assignedAdminGroup, 'ID')) {\n switch (assignedAdminGroup.ID) {\n case 'premium':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isPremium: 1\n };\n break;\n case 'retail':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level,\n isRetail: 1\n };\n break;\n case 'koobits':\n assignedAdminData = {\n referenceId: parseInt(assignedLevel, 10),\n type: assignReferenceType.level\n };\n break;\n default:\n assignedAdminData = null;\n }\n }\n const assignmentsArray =\n assignedAdminData !== null\n ? [assignedAdminData]\n : [\n ...assignedClassData,\n ...assignedGroupData,\n ...assignedStudentData,\n ...assignedPrivateGroupData\n ];\n\n const data = {\n rewards: kokoCredit,\n startDate: moment(startDate).format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n endDate: moment(endDate).format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n assignments: assignmentsArray\n };\n if (\n selectedWorksheet.PresentationType.AssignmentTypeID ===\n assignmentTypes.test\n ) {\n data.resultDate = moment(releaseDate).format(\n 'YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'\n );\n }\n dispatch(assignWorksheet(data));\n setShowAssign(true);\n };\n\n const handleCancel = () => {\n dispatch(prevStep());\n };\n\n return (\n <>\n <InfoAssignedWorksheetModal\n isShow={showAssign}\n onConfirm={() => {\n setShowAssign(false);\n setShowLink(true);\n }}\n onClose={() => setShowAssign(false)}\n isLoading={isLoading}\n error={error}\n />\n\n <InfoLinkWorksheetModal\n isShow={showLink}\n onConfirm={() => {\n setShowLink(false);\n history.push('/create-and-assign/saved-worksheet');\n }}\n onClose={() => {\n setShowLink(false);\n }}\n />\n\n <div className=\"container schedule-content schedule-content-preview\">\n <HeaderFull>\n <div className=\"d-flex flex-row align-items-center justify-content-center schedule-content-title\">\n <CircleType\n typeId={selectedWorksheet.PresentationType.AssignmentTypeID}\n />\n <h1>{selectedWorksheet.Title}</h1>\n </div>\n <div className=\"schedule-content-nav-btn\">\n <button\n onClick={handleCancel}\n type=\"button\"\n className=\"btn btn-outline-primary\"\n >\n {t(`create-assign-saved:scheduleWo.cancel`, 'Cancel')}\n </button>\n <button\n onClick={handleAssign}\n type=\"button\"\n className=\"btn btn-primary\"\n >\n {t(`create-assign-saved:assignNow.assign`, 'Assign')}\n </button>\n </div>\n </HeaderFull>\n <Border />\n <div className=\"ml-4 pl-2 panel-with-icon\">\n <div className=\"panel panel-schedule-time\">\n <div className=\"panel-header h5\">\n {t(`create-assign-saved:scheduleWo.schedTime`, 'Schedule Time')}\n </div>\n <div className=\"panel-body row\">\n <div className=\"col-6\">\n <PlainText\n label={t(\n `create-assign-saved:scheduleWo.startDate`,\n 'Start Date'\n )}\n value={moment(startDate).format('D/M/YYYY, ha')}\n />\n {selectedWorksheet.PresentationType.AssignmentTypeID ===\n assignmentTypes.test && (\n <PlainText\n label={t(\n `create-assign-saved:scheduleWo.resDate`,\n 'Result Release Date'\n )}\n value={moment(releaseDate).format('D/M/YYYY, ha')}\n />\n )}\n </div>\n <div className=\"col-6\">\n <PlainText\n label={t(\n `create-assign-saved:scheduleWo.endDate`,\n 'End Date'\n )}\n value={moment(endDate).format('D/M/YYYY, ha')}\n />\n </div>\n </div>\n </div>\n <div className=\"panel panel-schedule-assign-to\">\n <div className=\"panel-header h5\">\n {t(`create-assign-saved:assignNow.assignTo`, 'Assign To')}\n </div>\n <div className=\"panel-body\">\n {isAdmin && (\n <>\n {hasProp(assignedAdminGroup, 'ID') && (\n <PlainText label=\"Admin\" value={assignedAdminGroup.Name} />\n )}\n {assignedLevel !== '' && (\n <PlainText\n label={t(`create-assign-saved:assignNow.level`, 'Level')}\n value={assignedLevel}\n />\n )}\n {assignedPrivateGroup.length > 0 && (\n <PlainText\n label={t(\n `create-assign-saved:assignNow.pvtGroups`,\n 'Private Groups'\n )}\n >\n {renderAssigneeItem(assignedPrivateGroup)}\n </PlainText>\n )}\n </>\n )}\n {assignedClass.length > 0 && (\n <PlainText\n label={t(`create-assign-saved:assignNow.class`, 'Class')}\n className=\"mr-n1\"\n >\n {renderAssigneeItem(assignedClass)}\n </PlainText>\n )}\n {assignedGroup.length > 0 && (\n <PlainText\n label={t(`create-assign-saved:assignNow.group`, 'Groups')}\n >\n {renderAssigneeItem(assignedGroup)}\n </PlainText>\n )}\n {assignedStudent.length > 0 && (\n <PlainText\n label={t(\n `create-assign-saved:assignNow.indvStud`,\n 'Individual Student'\n )}\n >\n {renderAssigneeItemIndividual(assignedStudent)}\n </PlainText>\n )}\n </div>\n </div>\n <div className=\"panel panel-schedule-rewards row\">\n <div className=\"panel-header h5 col-sm-2\">\n {t(`create-assign-saved:scheduleWo.rewards`, 'Rewards')}\n </div>\n <div className=\"panel-body col-sm-10 mt-n1\">\n <PlainText value={`${kokoCredit} Koko`} />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport { Link } from 'react-router-dom';\nimport { setStep } from 'stores/utils/step/actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport hasProp from 'helpers/hasProp';\nimport { resetAssign } from 'stores/worksheet/assign/actions';\nimport { resetSelectedWorksheet } from 'stores/worksheet/actions';\nimport AssignTime from './AssignTime';\nimport AssignClass from './AssignClass';\nimport AssignPreview from './AssignPreview';\n\n/**\n * @todo when the UI for empty cart questions done, use cartQuestions from reducer or other resources\n * @note client still not confirm whether cartQuestions is the data we will be use\n */\n\nexport default function AssignView() {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n const {\n assignedClass,\n assignedGroup,\n assignedStudent,\n assignedPrivateGroup,\n assignedAdminGroup,\n assignedLevel\n } = useSelector(state => state.assign);\n const hasAssignees =\n assignedClass.length > 0 ||\n assignedGroup.length > 0 ||\n assignedStudent.length > 0 ||\n assignedPrivateGroup.length > 0 ||\n (hasProp(assignedAdminGroup, 'ID') && assignedLevel !== '');\n const BackButton = (\n <Link\n to=\"/create-and-assign/saved-worksheet\"\n className=\"btn btn-link question-cart-content__back\"\n >\n &lt; {t(`create-assign-saved:scheduleWo.backList`, 'Back To List')}\n </Link>\n );\n\n useEffect(() => {\n return () => {\n dispatch(resetSelectedWorksheet());\n dispatch(resetAssign());\n };\n }, [dispatch]);\n\n const onSelect = step => {\n let valid = false;\n switch (step) {\n case 3:\n if (hasAssignees) {\n valid = true;\n }\n break;\n default:\n valid = true;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n };\n\n return (\n <div className=\"content content__inner content__inner-create-assign\">\n <StepperWizard\n backButton={BackButton}\n onSelect={onSelect}\n className=\"stepper-schedule stepper-default\"\n >\n <AssignTime\n step=\"1\"\n title={t(`create-assign-saved:assignNow.selTime`, 'Select Time')}\n />\n <AssignClass\n step=\"2\"\n title={t(`create-assign-saved:assignNow.chooseClass`, 'Choose Class')}\n />\n <AssignPreview\n step=\"3\"\n title={t(\n `create-assign-saved:assignNow.schedPrev`,\n 'Preview Assigment'\n )}\n />\n </StepperWizard>\n </div>\n );\n}\n","import styled from 'styled-components';\n\nexport const EditSavedWorksheetContainer = styled.div`\n margin-top: 55px;\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n .question-cart-content {\n margin-left: 0;\n border-bottom: 1px solid rgba(#707070, 0.21);\n }\n .check-add-score {\n left: 100px;\n ~ .custom-checkbox {\n left: 100px;\n @media (max-width: 991px) {\n left: 120px;\n }\n @media (max-width: 639px) {\n left: 40px;\n }\n }\n ~ label {\n left: 130px;\n @media (max-width: 991px) {\n left: 150px;\n }\n @media (max-width: 639px) {\n left: 70px;\n }\n }\n }\n .box-white-wrap {\n .question-card.create-assign {\n padding-left: 10px;\n }\n }\n }\n`;\n\nexport const HeaderContainer = styled.div`\n width: 100%;\n max-width: 1065px;\n background-color: #fff;\n padding: 15px 1px 0 1px;\n margin: 0 auto 10px;\n font-family: 'Muli', sans-serif;\n border-radius: 0;\n box-shadow: none;\n color: rgba(52, 52, 52, 0.8);\n display: flex;\n align-items: center;\n flex-direction: column;\n`;\n\nexport const HeaderContent = styled.div`\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Col } from 'react-bootstrap';\nimport WorksheetQuestionModal from 'components/CreateAndAssign/QuestionCart/WorksheetQuestionModal';\nimport WorksheetForm from 'components/CreateAndAssign/QuestionCart/WorksheetForm';\nimport { setWorksheetTitle } from 'stores/worksheet/actions';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport { nextStep } from 'stores/utils/step/actions';\nimport WorksheetQuestion from 'components/CreateAndAssign/QuestionCart/WorksheetQuestion';\nimport Spinner from 'components/Shared/Spinner';\nimport ValidationMessage from 'components/CreateAndAssign/ValidationMessage';\nimport {\n EditSavedWorksheetContainer,\n HeaderContainer,\n HeaderContent\n} from './EditSavedWorksheet.styles';\n\nconst EditSavedWorksheet = () => {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n // REDUX STATES\n const { isLoading, editSavedWorksheetQuestions, title } = useSelector(\n state => state.worksheet\n );\n // COMPONENT STATES\n const [show, setShow] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const [selectedCard, setSelectedCard] = useState(null);\n const [alertMsg, setAlertMsg] = useState(false);\n\n const toggleShowSolution = () => setShowSolution(!showSolution);\n\n const [questionPopup, setQuestionPopup] = useState({});\n const handleClose = () => {\n toggleShowSolution();\n setShow(false);\n };\n\n const handleShow = async question => {\n setQuestionPopup(question);\n setShow(true);\n };\n\n const handleNextStep = () => {\n if (title.trim() === '') {\n setAlertMsg(true);\n }\n if (title.trim().length > 0 && editSavedWorksheetQuestions.length > 0) {\n setAlertMsg(false);\n dispatch(nextStep());\n }\n };\n\n const onChangeTitle = value => {\n dispatch(setWorksheetTitle(value));\n };\n\n /*eslint-disable */\n useEffect(() => {\n if (!isLoading && editSavedWorksheetQuestions.length > 0) {\n setSelectedCard(editSavedWorksheetQuestions[0].ID);\n }\n }, [isLoading]);\n /* eslint-enable */\n\n return (\n <EditSavedWorksheetContainer>\n {isLoading && <Spinner />}\n {!isLoading && (\n <>\n <Modal show={show} onHide={handleClose} className=\"modal-qs\">\n <WorksheetQuestionModal\n key={String(questionPopup.Id)}\n selectedQuestion={questionPopup}\n onCloseModal={handleClose}\n showSolution={showSolution}\n />\n </Modal>\n <HeaderContainer>\n <HeaderContent>\n <Col xl={7} md={6}>\n <WorksheetForm\n isError={title.trim() === ''}\n value={title}\n placeholder={t(\n `create-assign-saved:main.addWoTitle`,\n 'Add Worksheet Title'\n )}\n onChange={onChangeTitle}\n showBackBtn={false}\n alertMsg={alertMsg}\n />\n </Col>\n <NavigationWizard\n onClick={handleNextStep}\n showtotalQuestions\n totalQuestions={editSavedWorksheetQuestions.length}\n />\n </HeaderContent>\n {editSavedWorksheetQuestions.length > 50 && <ValidationMessage />}\n </HeaderContainer>\n <div className=\"box-white-wrap question-cart-list\">\n <div className=\"row\">\n {editSavedWorksheetQuestions.map((question, key) => {\n return (\n <WorksheetQuestion\n isEditSavedWorksheet\n isShowEditPanel\n key={String(question.ID)}\n selectedQuestion={question}\n onShowModal={() => handleShow(question)}\n onShowSolution={toggleShowSolution}\n selectedCard={selectedCard}\n onClick={() => setSelectedCard(question.ID)}\n cardIndex={key}\n />\n );\n })}\n </div>\n </div>\n </>\n )}\n </EditSavedWorksheetContainer>\n );\n};\n\nexport default EditSavedWorksheet;\n","import styled from 'styled-components';\n\nexport const AssignContent = styled.div`\n margin-top: 55px;\n padding-left: 205px;\n padding-right: 283px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media screen and (max-width: 1199px) {\n padding-right: 220px;\n }\n @media screen and (max-width: 991.98px) {\n padding-right: 200px;\n }\n @media screen and (max-width: 575.98px) {\n padding-right: 180px;\n }\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport WorksheetAssignTitle from 'components/CreateAndAssign/QuestionCart/WorksheetAssignTitle';\nimport NewBorder from 'components/Shared/NewBorder';\nimport QuestionHeader from 'components/Question/QuestionHeader';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport AssignSidebar from 'components/CreateAndAssign/AssignSidebar';\nimport { AssignContent } from './AssignSavedWorksheet.styles';\n\nconst AssignSavedWorksheet = () => {\n const { editSavedWorksheetQuestions, title } = useSelector(\n state => state.worksheet\n );\n return (\n <>\n <AssignContent>\n <HeaderBox>\n <WorksheetAssignTitle\n title={title}\n totalQuestions={editSavedWorksheetQuestions.length}\n />\n </HeaderBox>\n <div className=\"box-white p-3 assign-content\">\n {/* <InfoSection\n title=\"Instruction\"\n description=\"Follow All Instuction Carefully. Answer All Question.\"\n /> */}\n <NewBorder />\n {editSavedWorksheetQuestions.map((question, key) => {\n const order = key + 1;\n return (\n <div key={`question-${order}`}>\n <QuestionHeader order={order} score={2} />\n <NewBorder styles={{ marginBottom: '20px' }} />\n <QuestionContent question={question.CartQuestion} />\n <NewBorder />\n </div>\n );\n })}\n </div>\n </AssignContent>\n <AssignSidebar isEditSavedWorksheet />\n </>\n );\n};\n\nexport default AssignSavedWorksheet;\n","import styled from 'styled-components';\n\nexport const EditViewContainer = styled.div`\n .topical-preview {\n padding-left: 195px;\n }\n .question-cart-content {\n margin-top: 60px !important;\n border-bottom: 1px solid rgba(#707070, 0.21);\n }\n .content__stepper-block {\n width: ${props =>\n props.activeStep === 3 ? 'calc(100vw - 395px)' : 'calc(100vw - 195px)'};\n margin-left: 195px;\n }\n .question-cart-content__back {\n margin-top: 0;\n position: absolute;\n left: 1.5rem;\n }\n @media (max-width: 1024px) {\n .content__stepper-block {\n width: 100vw;\n margin-left: 0;\n }\n }\n\n @media (max-width: 640px) {\n .content__stepper-block {\n width: calc(100vw + 20px);\n left: -20px;\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setStep } from 'stores/utils/step/actions';\nimport { Link } from 'react-router-dom';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport EditSavedWorksheet from 'pages/CreateAndAssign/Edit/EditSavedWorksheet';\nimport AssignSavedWorksheet from 'pages/CreateAndAssign/Edit/AssignSavedWorksheet';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport WorksheetPreviewNew from '../QuestionCart/WorksheetPreviewNew';\nimport { EditViewContainer } from './EditView.styles';\n\nconst EditView = () => {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { activeStep } = useSelector(state => state.step);\n const { title, editSavedWorksheetQuestions, presentationType } = useSelector(\n state => state.worksheet\n );\n const BackButton = (\n <Link\n to=\"/create-and-assign/saved-worksheet\"\n className=\"btn btn-link question-cart-content__back\"\n >\n &lt; {t(`create-assign-saved:scheduleWo.backList`, 'Back To List')}\n </Link>\n );\n const onSelect = step => {\n let valid = false;\n switch (step) {\n case 2:\n valid =\n title.trim().length > 0 &&\n editSavedWorksheetQuestions.length > 0 &&\n editSavedWorksheetQuestions.length <= 50;\n break;\n case 3:\n valid =\n title.trim().length > 0 &&\n editSavedWorksheetQuestions.length > 0 &&\n !isNilOrEmpty(presentationType);\n break;\n default:\n valid = true;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n };\n return (\n <EditViewContainer activeStep={activeStep}>\n <StepperWizard onSelect={onSelect} backButton={BackButton}>\n <EditSavedWorksheet\n step=\"1\"\n title={t(`create-assign-question:stepper.editWo`, 'Edit Worksheet')}\n />\n <WorksheetPreviewNew\n step=\"2\"\n title={t(`create-assign-question:stepper.preview`, 'Preview')}\n />\n <AssignSavedWorksheet\n step=\"3\"\n title={t(`create-assign-question:stepper.assign`, 'Assign')}\n />\n </StepperWizard>\n </EditViewContainer>\n );\n};\n\nexport default EditView;\n","import styled from 'styled-components';\n\nexport const CreateHomeworkWorksheetContainer = styled.div`\n margin-top: 55px;\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n .question-cart-content {\n margin-left: 0;\n margin-top: 60px;\n }\n .check-add-score {\n left: 100px;\n ~ .custom-checkbox {\n left: 100px;\n @media (max-width: 991px) {\n left: 120px;\n }\n @media (max-width: 639px) {\n left: 40px;\n }\n }\n ~ label {\n left: 130px;\n @media (max-width: 991px) {\n left: 150px;\n }\n @media (max-width: 639px) {\n left: 70px;\n }\n }\n }\n .box-white-wrap {\n .question-card.create-assign {\n padding-left: 10px;\n }\n }\n }\n`;\n\nexport const HeaderContainer = styled.div`\n width: 100%;\n max-width: 1065px;\n background-color: #fff;\n padding: 15px 1px 0 1px;\n margin: 0 auto 10px;\n font-family: 'Muli', sans-serif;\n border-radius: 0;\n box-shadow: none;\n color: rgba(52, 52, 52, 0.8);\n display: flex;\n align-items: center;\n flex-direction: column;\n`;\n\nexport const HeaderContent = styled.div`\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Col } from 'react-bootstrap';\nimport WorksheetQuestionModal from 'components/CreateAndAssign/QuestionCart/WorksheetQuestionModal';\nimport WorksheetForm from 'components/CreateAndAssign/QuestionCart/WorksheetForm';\nimport { setWorksheetTitle } from 'stores/worksheet/actions';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport { nextStep } from 'stores/utils/step/actions';\nimport WorksheetQuestion from 'components/CreateAndAssign/QuestionCart/WorksheetQuestion';\nimport Spinner from 'components/Shared/Spinner';\nimport { isEmpty } from 'ramda';\nimport ValidationMessage from 'components/CreateAndAssign/ValidationMessage';\nimport {\n CreateHomeworkWorksheetContainer,\n HeaderContainer,\n HeaderContent\n} from './CreateHomeworkWorksheet.styles';\n\nconst CreateHomeworkWorksheet = () => {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n // REDUX STATES\n const { title } = useSelector(state => state.worksheet);\n const { isLoading, createWorksheetItems } = useSelector(\n state => state.topicalWorksheet\n );\n // COMPONENT STATES\n const [show, setShow] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const [selectedCard, setSelectedCard] = useState(\n !isEmpty(createWorksheetItems) && createWorksheetItems[0].ID\n );\n const [alertMsg, setAlertMsg] = useState(false);\n\n const toggleShowSolution = () => setShowSolution(!showSolution);\n\n const [questionPopup, setQuestionPopup] = useState({});\n const handleClose = () => {\n toggleShowSolution();\n setShow(false);\n };\n\n const handleShow = async question => {\n setQuestionPopup(question);\n setShow(true);\n };\n\n const handleNextStep = () => {\n if (title.trim() === '') {\n setAlertMsg(true);\n }\n if (title.trim().length > 0 && createWorksheetItems.length > 0) {\n setAlertMsg(false);\n dispatch(nextStep());\n }\n };\n\n const onChangeTitle = value => {\n dispatch(setWorksheetTitle(value));\n };\n\n return (\n <CreateHomeworkWorksheetContainer>\n {isLoading && <Spinner />}\n {!isLoading && (\n <>\n <Modal show={show} onHide={handleClose} className=\"modal-qs\">\n <WorksheetQuestionModal\n key={String(questionPopup.Id)}\n selectedQuestion={questionPopup}\n onCloseModal={handleClose}\n showSolution={showSolution}\n />\n </Modal>\n <HeaderContainer>\n <HeaderContent>\n <Col xl={7} md={6}>\n <WorksheetForm\n isError={title.trim() === ''}\n value={title}\n placeholder={t(\n `create-assign-saved:main.addWoTitle`,\n 'Add Worksheet Title'\n )}\n onChange={onChangeTitle}\n showBackBtn={false}\n alertMsg={alertMsg}\n />\n </Col>\n <NavigationWizard\n onClick={handleNextStep}\n showtotalQuestions\n totalQuestions={createWorksheetItems.length}\n />\n </HeaderContent>\n {createWorksheetItems.length > 50 && <ValidationMessage />}\n </HeaderContainer>\n <div className=\"box-white-wrap question-cart-list\">\n <div className=\"row\">\n {createWorksheetItems.map((question, key) => {\n return (\n <WorksheetQuestion\n isCreateHomework\n isShowEditPanel\n key={String(question.ID)}\n selectedQuestion={question}\n onShowModal={() => handleShow(question)}\n onShowSolution={toggleShowSolution}\n selectedCard={selectedCard}\n onClick={() => setSelectedCard(question.ID)}\n cardIndex={key}\n />\n );\n })}\n </div>\n </div>\n </>\n )}\n </CreateHomeworkWorksheetContainer>\n );\n};\n\nexport default CreateHomeworkWorksheet;\n","import styled from 'styled-components';\n\nexport const AssignContent = styled.div`\n margin-top: 55px;\n padding-left: 205px;\n padding-right: 283px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media screen and (max-width: 1199px) {\n padding-right: 220px;\n }\n @media screen and (max-width: 991.98px) {\n padding-right: 200px;\n }\n @media screen and (max-width: 575.98px) {\n padding-right: 180px;\n }\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport WorksheetAssignTitle from 'components/CreateAndAssign/QuestionCart/WorksheetAssignTitle';\nimport NewBorder from 'components/Shared/NewBorder';\nimport QuestionHeader from 'components/Question/QuestionHeader';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport AssignSidebar from 'components/CreateAndAssign/AssignSidebar';\nimport { AssignContent } from './AssignSavedWorksheet.styles';\n\nconst AssignSavedWorksheet = () => {\n const { title } = useSelector(state => state.worksheet);\n\n const { createWorksheetItems } = useSelector(state => state.topicalWorksheet);\n return (\n <>\n <AssignContent>\n <HeaderBox>\n <WorksheetAssignTitle\n title={title}\n totalQuestions={createWorksheetItems.length}\n />\n </HeaderBox>\n <div className=\"box-white p-3 assign-content\">\n {/* <InfoSection\n title=\"Instruction\"\n description=\"Follow All Instuction Carefully. Answer All Question.\"\n />*/}\n <NewBorder />\n {createWorksheetItems.map((question, key) => {\n const order = key + 1;\n return (\n <div key={`question-${order}`}>\n <QuestionHeader order={order} score={2} />\n <NewBorder styles={{ marginBottom: '20px' }} />\n <QuestionContent question={question.CartQuestion} />\n <NewBorder />\n </div>\n );\n })}\n </div>\n </AssignContent>\n <AssignSidebar isCreateHomework />\n </>\n );\n};\n\nexport default AssignSavedWorksheet;\n","import styled from 'styled-components';\n\nexport const CreateHomeworkContainer = styled.div`\n .topical-preview {\n padding-left: 195px;\n }\n .question-cart-content {\n margin-top: 60px !important;\n }\n .content__stepper-block {\n width: ${props =>\n props.activeStep === 3 ? 'calc(100vw - 395px)' : 'calc(100vw - 195px)'};\n margin-left: 195px;\n }\n\n @media (max-width: 1024px) {\n .content__stepper-block {\n width: 100vw;\n margin-left: 0;\n }\n .topical-preview {\n padding-left: 55px;\n }\n }\n\n @media (max-width: 640px) {\n .content__stepper-block {\n width: calc(100vw + 20px);\n left: -20px;\n }\n .topical-preview {\n padding-left: 20px;\n }\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { setStep } from 'stores/utils/step/actions';\nimport { resetSelectedWorksheet } from 'stores/worksheet/actions';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport CreateHomeworkWorksheet from 'pages/CreateAndAssign/CreateHomework/CreateHomeworkWorksheet';\nimport AssignSavedWorksheet from 'pages/CreateAndAssign/CreateHomework/AssignSavedWorksheet';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport { isEmpty } from 'ramda';\nimport WorksheetPreviewNew from '../QuestionCart/WorksheetPreviewNew';\nimport { CreateHomeworkContainer } from './CreateHomework.styles';\n\nconst CreateHomework = () => {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { activeStep } = useSelector(state => state.step);\n const { title, presentationType } = useSelector(state => state.worksheet);\n const { createWorksheetItems } = useSelector(state => state.topicalWorksheet);\n\n useEffect(() => {\n return () => {\n dispatch(resetSelectedWorksheet());\n };\n }, [dispatch]);\n\n useEffect(() => {\n isEmpty(createWorksheetItems) &&\n history.push('/create-and-assign/topical-worksheet');\n // eslint-disable-next-line\n }, [isEmpty(createWorksheetItems)]);\n\n const onSelect = step => {\n let valid = false;\n switch (step) {\n case 2:\n valid =\n !!title.trim() &&\n createWorksheetItems.length > 0 &&\n createWorksheetItems.length <= 50;\n break;\n case 3:\n valid =\n !!title.trim() &&\n createWorksheetItems.length > 0 &&\n !isNilOrEmpty(presentationType);\n break;\n default:\n valid = true;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n };\n\n return (\n <CreateHomeworkContainer activeStep={activeStep}>\n <StepperWizard onSelect={onSelect}>\n <CreateHomeworkWorksheet\n step=\"1\"\n title={t(`create-assign-question:stepper.editWo`, 'Edit Worksheet')}\n />\n <WorksheetPreviewNew\n step=\"2\"\n title={t(`create-assign-question:stepper.preview`, 'Preview')}\n />\n <AssignSavedWorksheet\n step=\"3\"\n title={t(`create-assign-question:stepper.assign`, 'Assign')}\n />\n </StepperWizard>\n </CreateHomeworkContainer>\n );\n};\n\nexport default CreateHomework;\n","import styled from 'styled-components';\n\nexport const CreateFactualFluencyWorksheetContainer = styled.div`\n margin-top: 55px;\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n .question-cart-content {\n margin-left: 0;\n margin-top: 60px;\n }\n .check-add-score {\n left: 100px;\n ~ .custom-checkbox {\n left: 100px;\n @media (max-width: 991px) {\n left: 120px;\n }\n @media (max-width: 639px) {\n left: 40px;\n }\n }\n ~ label {\n left: 130px;\n @media (max-width: 991px) {\n left: 150px;\n }\n @media (max-width: 639px) {\n left: 70px;\n }\n }\n }\n .box-white-wrap {\n .question-card.create-assign {\n padding-left: 10px;\n }\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Col } from 'react-bootstrap';\nimport WorksheetQuestionModal from 'components/CreateAndAssign/QuestionCart/WorksheetQuestionModal';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport WorksheetForm from 'components/CreateAndAssign/QuestionCart/WorksheetForm';\nimport { setWorksheetTitle } from 'stores/worksheet/actions';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport { nextStep } from 'stores/utils/step/actions';\nimport WorksheetQuestion from 'components/CreateAndAssign/QuestionCart/WorksheetQuestion';\nimport Spinner from 'components/Shared/Spinner';\nimport { CreateFactualFluencyWorksheetContainer } from './CreateFactualFluencyWorksheet.styles';\nimport { isEmpty } from 'ramda';\n\nconst CreateFactualFluencyWorksheet = () => {\n const { t } = useTranslation(['create-assign-saved']);\n const dispatch = useDispatch();\n // REDUX STATES\n const { title } = useSelector(state => state.worksheet);\n const { isLoading, createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n // COMPONENT STATES\n const [show, setShow] = useState(false);\n const [showSolution, setShowSolution] = useState(false);\n const [selectedCard, setSelectedCard] = useState(\n !isEmpty(createFactualFluencyItems) && createFactualFluencyItems[0].ID\n );\n const [alertMsg, setAlertMsg] = useState(false);\n\n const toggleShowSolution = () => setShowSolution(!showSolution);\n\n const [questionPopup, setQuestionPopup] = useState({});\n const handleClose = () => {\n toggleShowSolution();\n setShow(false);\n };\n\n const handleShow = async question => {\n setQuestionPopup(question);\n setShow(true);\n };\n\n const handleNextStep = () => {\n if (title.trim() === '') {\n setAlertMsg(true);\n }\n if (title.trim().length > 0 && createFactualFluencyItems.length > 0) {\n setAlertMsg(false);\n dispatch(nextStep());\n }\n };\n\n const onChangeTitle = value => {\n dispatch(setWorksheetTitle(value));\n };\n\n return (\n <CreateFactualFluencyWorksheetContainer>\n {isLoading && <Spinner />}\n {!isLoading && (\n <>\n <Modal show={show} onHide={handleClose} className=\"modal-qs\">\n <WorksheetQuestionModal\n key={String(questionPopup.Id)}\n selectedQuestion={questionPopup}\n onCloseModal={handleClose}\n showSolution={showSolution}\n />\n </Modal>\n <HeaderBox>\n <Col xl={7} md={6}>\n <WorksheetForm\n isError={title.trim() === ''}\n value={title}\n placeholder={t(\n `create-assign-saved:main.addWoTitle`,\n 'Add Worksheet Title'\n )}\n onChange={onChangeTitle}\n showBackBtn={false}\n alertMsg={alertMsg}\n />\n </Col>\n <NavigationWizard\n onClick={handleNextStep}\n showtotalQuestions\n totalQuestions={createFactualFluencyItems.length}\n />\n </HeaderBox>\n <div className=\"box-white-wrap question-cart-list\">\n <div className=\"row\">\n {createFactualFluencyItems.map((question, key) => {\n return (\n <WorksheetQuestion\n isCreateFactualFluency\n isShowEditPanel\n key={String(question.ID)}\n selectedQuestion={question}\n onShowModal={() => handleShow(question)}\n onShowSolution={toggleShowSolution}\n selectedCard={selectedCard}\n onClick={() => setSelectedCard(question.ID)}\n cardIndex={key}\n />\n );\n })}\n </div>\n </div>\n </>\n )}\n </CreateFactualFluencyWorksheetContainer>\n );\n};\n\nexport default React.memo(CreateFactualFluencyWorksheet);\n","import { timeSettingTypes } from 'constants/index';\nimport { find, propEq } from 'ramda';\n\nexport const secondsToTime = secs => {\n const hours = Math.floor(secs / (60 * 60));\n\n const divisor_for_minutes = secs % (60 * 60);\n const minutes = Math.floor(divisor_for_minutes / 60);\n\n const divisor_for_seconds = divisor_for_minutes % 60;\n const seconds = Math.ceil(divisor_for_seconds);\n\n const obj = {\n h: hours,\n m: minutes,\n s: seconds\n };\n return obj;\n};\n\nexport const renderTimes = (times, translation) => {\n const names = {\n h: 'H',\n m: 'Min',\n s: 'Sec'\n };\n const res = Object.keys(times)\n .map(time => {\n let parsedTime;\n if (times[time] !== 0) {\n parsedTime = `${times[time]} ${names[time]}`;\n }\n return parsedTime;\n })\n .filter(v => v !== undefined)\n .join(' ');\n return res;\n};\n\nexport const getTimeType = assigmentId => {\n const timeType = find(propEq('value', parseInt(assigmentId, 10)))(\n Object.values(timeSettingTypes)\n );\n\n return timeType;\n};\n\nexport const milisecondToString = timeMs => {\n const timeSecond = timeMs / 1000;\n const minute = Math.floor(timeSecond / 60);\n const second = Math.floor(timeSecond - minute * 60);\n const minutePadded = `${minute}`.padStart(2, '0');\n const secondPadded = `${second}`.padStart(2, '0');\n return `${minutePadded} min ${secondPadded} sec`;\n};\n","import styled from 'styled-components';\n\nexport const AssignContent = styled.div`\n margin-top: 55px;\n padding-left: 205px;\n padding-right: 283px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media screen and (max-width: 1199px) {\n padding-right: 220px;\n }\n @media screen and (max-width: 991.98px) {\n padding-right: 200px;\n }\n @media screen and (max-width: 575.98px) {\n padding-right: 180px;\n }\n\n .question-header {\n margin-right: 40px;\n }\n\n .media {\n p {\n font-size: 20px;\n line-height: 1.1rem;\n }\n }\n`;\n\nexport const FatualFluencyInfo = styled.div`\n display: flex;\n flex-direction: row;\n border-top: 1px solid #dddddd;\n margin: 0 -15px;\n padding: 10px 15px 0 15px;\n font-size: 12px;\n div {\n margin-right: 20px;\n\n span {\n color: #ff5b00;\n font-weight: bold;\n }\n }\n`;\n","import React, { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport HeaderBox from 'components/CreateAndAssign/HeaderBox';\nimport WorksheetAssignTitle from 'components/CreateAndAssign/QuestionCart/WorksheetAssignTitle';\nimport NewBorder from 'components/Shared/NewBorder';\nimport QuestionHeader from 'components/Question/QuestionHeader';\nimport QuestionContent from 'components/Question/QuestionContent';\nimport AssignSidebar from 'components/CreateAndAssign/AssignSidebar';\nimport iconFactualFluency from 'assets/img/icon-factual-fluency.png';\nimport { getTimeType, renderTimes, secondsToTime } from 'helpers/timesParser';\nimport { isNil } from 'ramda';\nimport {\n AssignContent,\n FatualFluencyInfo\n} from './AssignSavedFactualFluency.styles';\n\nconst AssignSavedFactualFluency = ({ method }) => {\n const { t } = useTranslation(['create-assign-question']);\n const { title, assignmentType, timeLimit } = useSelector(\n state => state.worksheet\n );\n\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n const onPreview = useCallback(() => {\n const sessionSecret = sessionStorage.getItem('secret');\n const url = isNil(sessionSecret)\n ? `/factual-fluency/ready`\n : `/factual-fluency/ready?secret=${sessionSecret}`;\n const win = window.open(url, '_blank');\n if (win != null) {\n win.focus();\n }\n }, []);\n\n const timeType = getTimeType(assignmentType);\n\n const times = secondsToTime(timeLimit);\n\n const renderInfo = (time, times) => {\n const translation = name => {\n switch (name) {\n case 'Interval Time':\n return 'intervalTime';\n case 'Do not time me':\n return 'noTime';\n case 'Total Time':\n return 'totalTime';\n default:\n return '';\n }\n };\n const timeUnit = unit => {\n return `${t(`create-assign-question:timeSetting.${unit}`, unit)}`;\n };\n\n if (time.value === 6) {\n return (\n <div>\n {t(\n `create-assign-question:timeSetting.${translation(time.name)}`,\n time.name\n )}\n </div>\n );\n }\n\n return (\n <div>\n {t(\n `create-assign-question:timeSetting.${translation(time.name)}`,\n time.name\n )}\n : <span>{renderTimes(times, timeUnit)}</span>\n </div>\n );\n };\n\n return (\n <>\n <AssignContent>\n <HeaderBox>\n <WorksheetAssignTitle\n icon={iconFactualFluency}\n title={title}\n totalQuestions={createFactualFluencyItems.length}\n onPreview={onPreview}\n />\n </HeaderBox>\n <div className=\"box-white p-3 assign-content\">\n <FatualFluencyInfo>\n {renderInfo(timeType, times)}\n <div>\n {t('create-assign-question:timeSetting.noOfQn', 'No.of Qn :')}\n <span>\n {createFactualFluencyItems.length}{' '}\n {t('create-assign-question:timeSetting.qn', 'Qn')}\n </span>\n </div>\n </FatualFluencyInfo>\n <NewBorder />\n\n {createFactualFluencyItems.map((question, key) => {\n const order = key + 1;\n return (\n <>\n <div\n className=\"d-flex flex-row\"\n key={`question-factual-${order}`}\n >\n <QuestionHeader order={order} score={2} />\n <QuestionContent\n isFactualFluencyView\n question={question.CartQuestion}\n />\n </div>\n <NewBorder />\n </>\n );\n })}\n </div>\n </AssignContent>\n <AssignSidebar isCreateFactualFluency />\n </>\n );\n};\n\nexport default React.memo(AssignSavedFactualFluency);\n","import { useEffect } from 'react';\n\nconst useClickOutside = (ref, callback) => {\n const handleClick = e => {\n if (ref.current && !ref.current.contains(e.target)) {\n callback();\n }\n };\n useEffect(() => {\n document.addEventListener('click', handleClick);\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n};\n\nexport default useClickOutside;\n","import styled from 'styled-components';\n\nexport const WorksheetTimeStyled = styled.div`\n display: flex;\n background: #f7f7f7;\n justify-content: center;\n gap: 1.5rem;\n padding: 2rem 3rem;\n`;\n\nexport const SettingCard = styled.div`\n border-radius: 14px;\n background: #ffffff;\n height: 300px;\n width: 294px;\n background: ${({ selected }) => selected && '#FFFBF2'};\n border: ${({ selected }) => (selected ? ' 2px solid #FF5C00' : 'none')};\n cursor: pointer;\n &:hover {\n background: #fffaf0;\n .form-check .custom-radio {\n border-color: #ff5c02;\n }\n }\n @media (max-width: 1160px) {\n width: 250px;\n }\n`;\n\nexport const CardTop = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n padding: 1rem;\n border-bottom: 1px solid\n ${({ selected }) => (selected ? '#FFC7A3' : '#e0e0e0')};\n gap: 0.5rem;\n height: 112px;\n background: ${({ selected }) => selected && '#FFF2D5'};\n border-top-left-radius: 14px;\n border-top-right-radius: 14px;\n .interval-options {\n width: 143px;\n }\n .total-time {\n display: flex;\n align-items: center;\n gap: 10px;\n .total-time-input {\n width: 85px;\n text-align: center;\n }\n }\n\n .form-check {\n display: flex;\n gap: 10px;\n align-items: center;\n padding: 8px;\n color: #000000;\n .types-label {\n margin-bottom: 0.1rem;\n font-weight: 700;\n font-size: 16px;\n @media screen and (max-width: 562px) {\n font-size: 12px;\n }\n }\n .info {\n font-family: 'Linotte Light';\n font-size: 13px;\n border: 1px solid #c7c7c7;\n background: #fff;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n select {\n margin-left: 5px;\n width: auto;\n }\n }\n //hide the browser's default radio\n .form-check {\n input[type='radio'] {\n opacity: 0;\n cursor: pointer;\n }\n }\n\n //create a custom radio\n .form-check .custom-radio {\n position: absolute;\n left: 3px;\n height: 20px;\n width: 20px;\n border-radius: 50px;\n border: 1px solid #b1b1b1;\n background-color: white;\n pointer-events: none;\n }\n //when radio is checked\n .form-check input:checked ~ .custom-radio {\n background-color: none;\n border: 1px solid #ff5c02;\n }\n //create the indicator (hidden when not checked)\n .form-check .custom-radio:after {\n content: '';\n position: absolute;\n display: none;\n }\n //show the checkmark when checked\n .form-check input:checked ~ .custom-radio:after {\n display: block;\n }\n //style the indicator\n .form-check .custom-radio:after {\n margin: 4px;\n width: 10px;\n height: 10px;\n border-radius: 50px;\n background-color: #ff5c02;\n }\n`;\n\nexport const CardBottom = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 0.5rem;\n padding: 0.8rem 1.5rem 0;\n p {\n margin-bottom: 0;\n font-size: 12px;\n }\n .form-image {\n .rect {\n border: 1px solid #ff0000;\n border-radius: 4px;\n position: absolute;\n height: 25px;\n width: 55px;\n margin-top: -5px;\n margin-left: -3px;\n }\n img {\n max-width: 245px;\n @media (max-width: 1160px) {\n max-width: 200px;\n }\n }\n }\n`;\n\nexport const Overlay = styled.div`\n position: absolute;\n background: #ffffff;\n border: 1px solid #d8d1d1;\n border-radius: 3.5px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n font-size: 12px;\n padding: 0.5rem;\n bottom: 2.5rem;\n min-width: 168px;\n &:after,\n :before {\n content: '';\n position: absolute;\n border-left: 0.5rem solid transparent;\n border-right: 0.5rem solid transparent;\n top: 100%;\n left: 50%;\n margin-left: -0.5rem;\n }\n &:before {\n border-top: 0.5rem solid #d8d1d1;\n }\n &:after {\n border-top: 0.5rem solid white;\n margin-top: -2px;\n z-index: 1;\n }\n`;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n setAssigmentType,\n setSettingTimeValue\n} from 'stores/worksheet/actions';\nimport { assignmentTypes, timeSettingTypes } from 'constants/index';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport useClickOutside from 'helpers/useClickOutside';\nimport intervalTimeImg from 'assets/img/factual-fluency/interval-time.gif';\nimport totalTimeImg from 'assets/img/factual-fluency/total-time.png';\nimport noTimeImg from 'assets/img/factual-fluency/no-time.png';\nimport { range } from 'ramda';\nimport {\n SettingCard,\n WorksheetTimeStyled,\n CardTop,\n CardBottom,\n Overlay\n} from './ChooseWorkSheetTimeType.styles';\n\nconst ChooseWorkSheetTimeType = () => {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n\n const { assignmentType, timeLimit } = useSelector(state => state.worksheet);\n\n const [minute, setMinute] = useState(\n // eslint-disable-next-line no-nested-ternary\n timeLimit ? (timeLimit / 60 > 1 ? timeLimit / 60 : 3) : 3\n );\n const [second, setSecond] = useState(timeLimit || 3);\n const [toggleInfo, setToggleInfo] = useState(null);\n const [showInfo, setShowInfo] = useState(false);\n const clickRef = useRef();\n\n const currentSelected = document.getElementById('interval-options');\n const currentSecond = parseInt(\n currentSelected?.selectedOptions[0]?.value,\n 10\n );\n\n useClickOutside(clickRef, () => {\n if (showInfo) {\n setShowInfo(false);\n }\n });\n\n const assignmentTypeID = isNilOrEmpty(assignmentType)\n ? assignmentTypes.interval\n : parseInt(assignmentType, 10);\n\n useEffect(() => {\n dispatch(setAssigmentType(assignmentTypeID));\n }, [assignmentTypeID, dispatch]);\n\n useEffect(() => {\n switch (assignmentTypeID) {\n case assignmentTypes.interval:\n dispatch(setSettingTimeValue(second));\n break;\n case assignmentTypes.total:\n dispatch(setSettingTimeValue(minute * 60));\n break;\n default:\n dispatch(setSettingTimeValue(0));\n break;\n }\n // eslint-disable-next-line\n }, [assignmentTypeID]);\n\n const handleOnChange = value => {\n const type = Object.keys(assignmentTypes).find(\n key => assignmentTypes[key] === value\n );\n\n if (type === 'interval') {\n setSecond(currentSecond);\n }\n dispatch(setAssigmentType(value));\n };\n\n const images = {\n intervalTime: intervalTimeImg,\n totalTime: totalTimeImg,\n noTime: noTimeImg\n };\n\n const interval = range(3, 11);\n\n const infoHandler = (e, type) => {\n e.stopPropagation();\n setShowInfo(!showInfo);\n setToggleInfo(type);\n };\n\n return (\n <WorksheetTimeStyled>\n {Object.keys(timeSettingTypes).map(type => {\n const checked = assignmentTypeID === timeSettingTypes[type].value;\n return (\n <SettingCard\n key={`type-${type}`}\n selected={checked}\n onClick={() => handleOnChange(timeSettingTypes[type].value)}\n >\n <CardTop selected={checked}>\n <div className=\"form-check\">\n <input\n type=\"radio\"\n id={`type-${type}`}\n value={timeSettingTypes[type].value}\n label={t(\n `create-assign-question:timeSetting.${type}`,\n timeSettingTypes[type].name\n )}\n checked={checked}\n className=\"form-check-radio\"\n />\n <span className=\"custom-radio\" />\n <Form.Label className=\"types-label\" htmlFor={`type-${type}`}>\n {t(\n `create-assign-question:timeSetting.${type}`,\n timeSettingTypes[type].name\n )}\n </Form.Label>\n {type !== 'noTime' && (\n <button\n className=\"info\"\n type=\"button\"\n onClick={e => infoHandler(e, type)}\n id={type}\n >\n ?\n {showInfo && toggleInfo === type && (\n <Overlay ref={clickRef}>\n <p>\n {type === 'intervalTime'\n ? `${t(\n `create-assign-question:timeSetting.intervalTimeInfo`,\n 'You can set interval time between two questions'\n )}`\n : `${t(\n `create-assign-question:timeSetting.totalTimeInfo`,\n 'You can set total time for this worksheet'\n )}`}\n </p>\n </Overlay>\n )}\n </button>\n )}\n </div>\n\n {type === 'intervalTime' && (\n <Form.Control\n size=\"sm\"\n as=\"select\"\n onChange={e =>\n dispatch(setSettingTimeValue(parseInt(e.target.value, 10)))\n }\n defaultValue={second}\n className=\"interval-options\"\n id=\"interval-options\"\n >\n {interval.map(time => (\n <option\n value={time}\n key={`option-${time}`}\n className=\"option-list\"\n >\n {time}{' '}\n {t('create-assign-question:timeSetting.Sec', 'Sec')}\n </option>\n ))}\n </Form.Control>\n )}\n\n {type === 'totalTime' && (\n <div className=\"total-time\">\n <Form.Control\n className=\"total-time-input\"\n size=\"sm\"\n as=\"input\"\n onChange={e => {\n setMinute(e.target.value);\n dispatch(setSettingTimeValue(e.target.value * 60));\n }}\n value={minute}\n />\n <span>\n {t('create-assign-question:timeSetting.Min', 'min')}\n </span>\n </div>\n )}\n </CardTop>\n <CardBottom>\n <p>\n {t('create-assign-question:timeSetting.example', 'Example')}\n </p>\n <div className=\"form-image\">\n {type === 'totalTime' && <div className=\"rect\" />}\n <img\n src={images[type]}\n alt={`Choose Worksheet Time Type ${type}`}\n />\n </div>\n </CardBottom>\n </SettingCard>\n );\n })}\n </WorksheetTimeStyled>\n );\n};\n\nexport default React.memo(ChooseWorkSheetTimeType);\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n height: calc(100vh - 60px);\n overflow: hidden;\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 3.5rem;\n }\n`;\n\nexport const HeaderBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 1065px;\n background-color: #fff;\n padding: 15px 1px 0 1px;\n margin: 60px auto 0;\n font-family: 'Muli', sans-serif;\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n box-shadow: 0px 10px 5px rgba(0, 0, 0, 0.07);\n color: rgba(52, 52, 52, 0.8);\n div {\n display: flex;\n flex: 1;\n }\n\n .back-button-wrap {\n padding-left: 12px;\n }\n\n .title-wrap {\n align-items: center;\n .title-container {\n display: flex;\n flex-direction: column;\n flex: 2;\n .title {\n justify-content: center;\n align-items: center;\n h5 {\n margin-bottom: 0;\n }\n img {\n margin-right: 10px;\n height: 31px;\n width: 31px;\n }\n }\n .desc {\n text-align: center;\n font-size: 1rem;\n margin: 1.5rem 0 1.5rem;\n text-indent: 1.8rem;\n }\n }\n }\n`;\n\nexport const ContentBox = styled.div`\n max-width: 1065px;\n border-top: 1px solid rgba(112, 112, 112, 0.21);\n margin-left: auto;\n margin-right: auto;\n height: 80%;\n`;\n","import React, { useCallback, useEffect } from 'react';\nimport { useTranslation, Trans } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setPresentationType } from 'stores/worksheet/actions';\nimport NavigationWizard from 'components/CreateAndAssign/NavigationWizard';\nimport { presentationTypes } from 'constants/index';\nimport { nextStep } from 'stores/utils/step/actions';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport ButtonStepPrev from 'components/Shared/ButtonStepPrev';\nimport ChooseWorkSheetTimeType from 'components/CreateAndAssign/FactualFluency/ChooseWorkSheetTimeType';\nimport iconFactualFluency from 'assets/img/icon-factual-fluency.png';\nimport { Container, HeaderBox, ContentBox } from './WorksheetTimer.styles';\n\nexport default function WorksheetTimer() {\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const { presentationType } = useSelector(state => state.worksheet);\n\n const presentationTypeID = isNilOrEmpty(presentationType)\n ? presentationTypes.kooQuiz\n : parseInt(presentationType, 10);\n\n useEffect(() => {\n dispatch(setPresentationType(presentationTypeID));\n }, [presentationTypeID, dispatch]);\n\n const handleOnNext = useCallback(() => {\n dispatch(nextStep());\n }, [dispatch]);\n\n return (\n <Container className=\"timer-setting\">\n <HeaderBox>\n <div className=\"back-button-wrap\">\n <ButtonStepPrev\n title={t(`create-assign-question:editWo.back`, '< Back')}\n />\n </div>\n <div className=\"title-wrap\">\n <div className=\"spacer\" />\n <div className=\"title-container\">\n <div className=\"title\">\n <img src={iconFactualFluency} alt=\"iconFactualFluency\" />\n <h5>\n {t(\n `create-assign-question:timeSetting.chooseTimeType`,\n 'Factual Fluency Presentation Setting'\n )}\n </h5>\n </div>\n <p className=\"desc\">\n <Trans i18nKey=\"create-assign-question:timeSetting.desc\">\n Choose one <strong>time setting</strong> for your worksheet\n </Trans>\n </p>\n </div>\n <NavigationWizard onClick={handleOnNext} />\n </div>\n </HeaderBox>\n <ContentBox>\n <ChooseWorkSheetTimeType />\n </ContentBox>\n </Container>\n );\n}\n","import styled from 'styled-components';\n\nexport const CreateFactualFluencyContainer = styled.div`\n .question-cart-content {\n margin-top: 60px !important;\n }\n .content__stepper-block {\n width: ${props =>\n props.activeStep === 3 ? 'calc(100vw - 395px)' : 'calc(100vw - 195px)'};\n margin-left: 195px;\n }\n .question-cart-content__back {\n margin-top: 0;\n position: absolute;\n left: 1.5rem;\n }\n @media (max-width: 1024px) {\n .content__stepper-block {\n width: 100vw;\n margin-left: 0;\n }\n .topical-preview {\n padding-left: 55px;\n }\n }\n\n @media (max-width: 640px) {\n .content__stepper-block {\n width: calc(100vw + 20px);\n left: -20px;\n }\n .topical-preview {\n padding-left: 20px;\n }\n }\n`;\n","import React, { useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory, Link } from 'react-router-dom';\nimport { setStep } from 'stores/utils/step/actions';\nimport StepperWizard from 'components/Shared/StepperWizard';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport { isEmpty } from 'ramda';\nimport { setCreateFactualFluencyQuestions } from 'stores/factual-fluency/actions';\nimport CreateFactualFluencyWorksheet from './CreateFactualFluencyWorksheet';\nimport AssignSavedFactualFluency from './AssignSavedFactualFluency';\nimport WorksheetTimer from './WorksheetTimer';\nimport { CreateFactualFluencyContainer } from './CreateFactualFluency.styles';\n\nconst CreateFactualFluency = ({ match }) => {\n const { method } = match.params;\n\n const { t } = useTranslation(['create-assign-question']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { activeStep } = useSelector(state => state.step);\n const { title, assignmentType, editSavedWorksheetQuestions } = useSelector(\n state => state.worksheet\n );\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n // deactivate to prevent step 3 page crash when change the language\n // useEffect(() => {\n // return () => {\n // dispatch(resetSelectedWorksheet());\n // };\n // }, [dispatch]);\n\n useEffect(() => {\n isEmpty(createFactualFluencyItems) &&\n method === 'create' &&\n history.push('/create-and-assign/factual-fluency');\n }, [createFactualFluencyItems, history, method]);\n\n useEffect(() => {\n if (method === 'edit') {\n dispatch(setCreateFactualFluencyQuestions(editSavedWorksheetQuestions));\n }\n // eslint-disable-next-line\n }, [method, editSavedWorksheetQuestions]);\n const BackButton = (\n <Link\n to=\"/create-and-assign/saved-worksheet\"\n className=\"btn btn-link question-cart-content__back\"\n >\n &lt; {t(`create-assign-saved:scheduleWo.backList`, 'Back To List')}\n </Link>\n );\n const onSelect = useCallback(\n step => {\n let valid = true;\n switch (step) {\n case 2:\n valid = !!title.trim() && createFactualFluencyItems.length > 0;\n break;\n case 3:\n valid =\n !!title.trim() &&\n createFactualFluencyItems.length > 0 &&\n !isNilOrEmpty(assignmentType);\n break;\n default:\n valid = false;\n break;\n }\n if (valid) {\n dispatch(setStep(step));\n }\n },\n [title, createFactualFluencyItems, assignmentType, dispatch]\n );\n\n return (\n <CreateFactualFluencyContainer activeStep={activeStep}>\n <StepperWizard\n onSelect={onSelect}\n backButton={method === 'edit' && BackButton}\n >\n <CreateFactualFluencyWorksheet\n method={method}\n step=\"1\"\n title={t(`create-assign-question:stepper.editWo`, 'Edit Worksheet')}\n />\n <WorksheetTimer\n method={method}\n step=\"2\"\n title={t(\n `create-assign-question:stepper.presentation`,\n 'Presentation'\n )}\n />\n <AssignSavedFactualFluency\n method={method}\n step=\"3\"\n title={t(`create-assign-question:stepper.assign`, 'Assign')}\n />\n </StepperWizard>\n </CreateFactualFluencyContainer>\n );\n};\n\nexport default React.memo(CreateFactualFluency);\n","import React, { useEffect, useState } from 'react';\nimport { Route, Switch, useLocation } from 'react-router-dom';\nimport SidebarCreateAssign from 'components/Sidebar/SidebarCreateAssign';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport QuestionCart from 'pages/CreateAndAssign/QuestionCart';\nimport SavedWorksheet from 'pages/CreateAndAssign/SavedWorksheet';\nimport TopicalWorksheet from 'pages/CreateAndAssign/TopicalWorksheet/TopicalWorksheet';\nimport FactualFluency from 'pages/CreateAndAssign/FactualFluency/FactualFluency';\nimport Overlay from 'components/Content/Overlay';\nimport { useDispatch } from 'react-redux';\nimport { startStep } from 'stores/utils/step/actions';\nimport ImportQuestionList from 'pages/CreateAndAssign/ImportQuestionList';\nimport Header from 'components/Header/Header';\nimport ScheduleView from './Schedule/ScheduleView';\nimport AssignView from './Assign/AssignView';\nimport EditView from './Edit/EditView';\nimport CreateHomework from './CreateHomework/CreateHomework';\nimport CreateFactualFluency from './CreateFactualFluency/CreateFactualFluency';\n\nexport default function CreateAndAssign() {\n const dispatch = useDispatch();\n const [expanded, setExpanded] = useState(false);\n const toggleNavigation = () => setExpanded(!expanded);\n const { pathname } = useLocation();\n\n useEffect(() => {\n dispatch(startStep());\n }, [dispatch, pathname]);\n\n const getContentClassName = () =>\n `content content-sidebar-small${\n pathname === '/create-and-assign'\n ? ' content--centered content__inner-question-cart'\n : ''\n }`;\n\n return (\n <>\n <Header />\n <main>\n <Sidebar\n expanded={expanded}\n toggleNavigation={toggleNavigation}\n className=\"sidebar--auto\"\n >\n <SidebarCreateAssign />\n </Sidebar>\n <div className={getContentClassName()}>\n <Overlay isVisible={expanded} toggleVisible={toggleNavigation} />\n <Switch>\n <Route\n exact\n path=\"/create-and-assign\"\n component={() => <QuestionCart />}\n />\n <Route\n path=\"/create-and-assign/topic-revision\"\n component={() => <span>Topic Revision</span>}\n />\n <Route\n exact\n path=\"/create-and-assign/saved-worksheet\"\n component={() => <SavedWorksheet />}\n />\n <Route\n path=\"/create-and-assign/import-questions\"\n component={() => <ImportQuestionList />}\n />\n <Route\n path=\"/create-and-assign/saved-worksheet/schedule\"\n component={() => <ScheduleView />}\n />\n <Route\n path=\"/create-and-assign/saved-worksheet/assign-now\"\n component={() => <AssignView />}\n />\n <Route\n path=\"/create-and-assign/saved-worksheet/edit\"\n component={() => <EditView />}\n />\n <Route\n exact\n path=\"/create-and-assign/topical-worksheet\"\n component={() => <TopicalWorksheet />}\n />\n <Route\n path=\"/create-and-assign/topical-worksheet/create\"\n component={() => <CreateHomework />}\n />\n <Route\n exact\n path=\"/create-and-assign/factual-fluency\"\n component={() => <FactualFluency />}\n />\n <Route\n exact\n path=\"/create-and-assign/factual-fluency/:method\"\n component={props => <CreateFactualFluency {...props} />}\n />\n </Switch>\n </div>\n </main>\n </>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, withRouter } from 'react-router-dom';\nimport AssignedByMeIcon from 'assets/img/icon-track-assignment-assigned-by-me.svg';\nimport AssignedByOthersIcon from 'assets/img/icon-track-assignment-assigned-by-others.svg';\nimport AssignedByMeActiveIcon from 'assets/img/icon-track-assignment-assigned-by-me-active.svg';\nimport AssignedByOthersActiveIcon from 'assets/img/icon-track-assignment-assigned-by-others-active.svg';\n\nconst SidebarTrackAssignment = ({ pathname }) => {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n return (\n <div className=\"sidebar-create-assign\">\n <ul className=\"sidebar-create-assign__ul list-group\">\n <li className=\"list-group-item\">\n <Link\n className={`nav-link ${pathname === '/track-assignment' &&\n 'nav-link-active'}`}\n to=\"/track-assignment\"\n >\n <img\n src={\n pathname === '/track-assignment'\n ? AssignedByMeActiveIcon\n : AssignedByMeIcon\n }\n alt=\"icon-list\"\n className=\"track-assignment-sidebar-icon\"\n />\n <span>\n {t(\n `track-assignment-assigned-me:sidebar.assignedMe`,\n 'Assigned by me'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link ${pathname.startsWith(\n '/track-assignment/others'\n ) && 'nav-link-active'}`}\n to=\"/track-assignment/others\"\n >\n <img\n src={\n pathname.startsWith('/track-assignment/others')\n ? AssignedByOthersActiveIcon\n : AssignedByOthersIcon\n }\n alt=\"icon-list\"\n className=\"track-assignment-sidebar-icon\"\n />\n <span>\n {t(\n `track-assignment-assigned-me:sidebar.assignedOthers`,\n 'Assigned by others'\n )}\n </span>\n </Link>\n </li>\n </ul>\n </div>\n );\n};\n\nexport default withRouter(({ location }) => {\n return <SidebarTrackAssignment pathname={location.pathname} />;\n});\n","import React from 'react';\n\nexport default function MenuSvgIcon({ icon, fill }) {\n switch (icon) {\n case 'print':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"19.672\"\n height=\"21.185\"\n viewBox=\"0 0 19.672 21.185\"\n >\n <path\n d=\"M194.045,113.387h-.429v-3.88a.506.506,0,0,0-.506-.506H181.383a.506.506,0,0,0-.506.506v3.88h-.429a3.041,3.041,0,0,0-3.037,3.037v6.271a3.041,3.041,0,0,0,3.037,3.037h.429v3.948a.506.506,0,0,0,.506.506h11.727a.506.506,0,0,0,.506-.506v-3.948h.429a3.041,3.041,0,0,0,3.037-3.037v-6.271A3.041,3.041,0,0,0,194.045,113.387Zm-12.156-3.374H192.6v3.374H181.889ZM192.6,129.173H181.889V122.93H192.6Zm3.466-6.479a2.027,2.027,0,0,1-2.025,2.025h-.429V122.93h1.095a.506.506,0,1,0,0-1.012H179.932a.506.506,0,1,0,0,1.012h.945v1.789h-.429a2.027,2.027,0,0,1-2.025-2.025v-6.271a2.027,2.027,0,0,1,2.025-2.025h13.6a2.027,2.027,0,0,1,2.025,2.025v6.271Z\"\n transform=\"translate(-177.41 -109)\"\n fill={fill}\n />\n <path\n d=\"M523.38,279.646a.691.691,0,1,0,.691.691A.691.691,0,0,0,523.38,279.646Z\"\n transform=\"translate(-507.68 -272.228)\"\n fill={fill}\n />\n <path\n d=\"M296.478,447.455h8.352a.506.506,0,0,0,0-1.012h-8.352a.506.506,0,1,0,0,1.012Z\"\n transform=\"translate(-290.818 -431.775)\"\n fill={fill}\n />\n <path\n d=\"M296.478,490.647h8.352a.506.506,0,1,0,0-1.012h-8.352a.506.506,0,1,0,0,1.012Z\"\n transform=\"translate(-290.818 -473.09)\"\n fill={fill}\n />\n </svg>\n );\n case 'edit':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"21.336\"\n height=\"27.192\"\n viewBox=\"0 0 21.336 27.192\"\n >\n <path\n d=\"M126.137,60.308a2.193,2.193,0,0,0-2.235-2.15l-1.569-.031h-.05A2.2,2.2,0,0,0,120,60.186l-.045,1.884h0l-.448,19.237a.714.714,0,0,0,.115.4.678.678,0,0,0,.076.343l.948,1.835,1.116,2.16a.8.8,0,0,0,.7.413h.014a.8.8,0,0,0,.7-.387l.277-.483.761-1.324h0l.112-.2.059-.1.45-.785h0l.587-1.022,0,0a.685.685,0,0,0,.09-.333.731.731,0,0,0,.131-.4l.445-19.234h0Zm-3.855-1.089h.025l1.569.031a1.056,1.056,0,0,1,1.077,1.035l-.02.792-2.515-.052L121.166,61l.02-.792A1.06,1.06,0,0,1,122.282,59.219Zm.61,25.018-.394.684-.361-.7.2,0Zm-.99-1.112-.336-.008-.52-1,3.032.059-.565.983Zm3.007-20.956-.439,18.92-2.822-.057-.945-.018.439-18.92,1.27.026Z\"\n transform=\"matrix(0.829, 0.559, -0.559, 0.829, -50.733, -115.019)\"\n fill={fill}\n />\n </svg>\n );\n case 'delete':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"19.927\"\n height=\"23.195\"\n viewBox=\"0 0 19.927 23.195\"\n >\n <path\n d=\"M5487.611,1878.909H5468.58a.45.45,0,0,1,0-.9h19.031a.45.45,0,0,1,0,.9Z\"\n transform=\"translate(-5468.132 -1873.564)\"\n fill={fill}\n />\n <path\n d=\"M5509.876,1896.759H5500a2.949,2.949,0,0,1-2.947-2.946V1878.46a.45.45,0,0,1,.45-.449h14.867a.449.449,0,0,1,.451.449v15.354A2.95,2.95,0,0,1,5509.876,1896.759Zm-11.922-17.85v14.9a2.049,2.049,0,0,0,2.047,2.047h9.875a2.048,2.048,0,0,0,2.045-2.047v-14.9Z\"\n transform=\"translate(-5494.975 -1873.564)\"\n fill={fill}\n />\n <path\n d=\"M5548.328,1954.213a.45.45,0,0,1-.45-.45V1944.4a.449.449,0,1,1,.9,0v9.362A.449.449,0,0,1,5548.328,1954.213Z\"\n transform=\"translate(-5542.142 -1934.762)\"\n fill={fill}\n />\n <path\n d=\"M5600.82,1954.213a.451.451,0,0,1-.451-.45V1944.4a.45.45,0,0,1,.9,0v9.362A.449.449,0,0,1,5600.82,1954.213Z\"\n transform=\"translate(-5590.856 -1934.762)\"\n fill={fill}\n />\n <path\n d=\"M5653.313,1954.213a.449.449,0,0,1-.449-.45V1944.4a.449.449,0,0,1,.9,0v9.362A.45.45,0,0,1,5653.313,1954.213Z\"\n transform=\"translate(-5639.575 -1934.762)\"\n fill={fill}\n />\n <path\n d=\"M5571.507,1821.543h-4.932a.45.45,0,0,1-.45-.449v-1.981a2.915,2.915,0,1,1,5.83,0v1.981A.449.449,0,0,1,5571.507,1821.543Zm-4.482-.9h4.031v-1.532a2.016,2.016,0,1,0-4.031,0Z\"\n transform=\"translate(-5559.077 -1816.197)\"\n fill={fill}\n />\n </svg>\n );\n default:\n return null;\n }\n}\n","import React, { useState } from 'react';\nimport MenuSvgIcon from 'components/TrackAssignment/MenuSvgIcon';\n\nexport default function PopoverMenuItem({ icon, children }) {\n const [isActive, setIsActive] = useState(false);\n return (\n <div\n className=\"actions-item\"\n onMouseEnter={() => {\n setIsActive(true);\n }}\n onMouseLeave={() => {\n setIsActive(false);\n }}\n style={{ marginTop: '1rem' }}\n >\n <MenuSvgIcon icon={icon} fill={isActive ? '#FF5B00' : '#747474'} />\n {children}\n </div>\n );\n}\n","import styled from 'styled-components';\n\nexport const ActionsMenu = styled.div`\n position: relative;\n display: inline-block;\n &:hover .actions-dropdown-content {\n display: block;\n }\n .more-options {\n font-size: 30px;\n position: relative;\n bottom: 0.5rem;\n border: none;\n background: #fff;\n &:hover {\n color: #ff5b00;\n }\n }\n`;\n\nexport const MenuContent = styled.div`\n display: none;\n position: absolute;\n left: -2.5rem;\n background: #fff;\n min-width: 104.4px;\n padding: 0.5rem 1rem 1rem 1rem;\n margin-right: 1rem;\n box-shadow: 0 3px 6px rgba(45, 45, 45, 0.37);\n z-index: 1;\n .actions-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n font-size: 0.875rem;\n font-weight: 600;\n color: #727272;\n cursor: pointer;\n &:hover {\n color: #ff5b00;\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport PopoverMenuItem from 'components/TrackAssignment/PopoverMenuItem';\nimport { featureToggle } from 'constants/index';\nimport { resetError } from 'stores/assignments/actions';\nimport { isNil } from 'ramda';\nimport { ActionsMenu, MenuContent } from './PopoverMenu.styles';\n\nexport default function PopoverMenu({\n homeworkID,\n openDeleteModal,\n setSelectedHomeworkID\n}) {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const dispatch = useDispatch();\n return (\n <ActionsMenu>\n <button type=\"button\" className=\"more-options\">\n ...\n </button>\n <MenuContent className=\"actions-dropdown-content\">\n {featureToggle.popoverMenu && (\n <>\n <PopoverMenuItem icon=\"edit\">\n <span style={{ marginLeft: '1rem' }}>\n {t(`track-assignment-assigned-me:main.edit`, 'Edit')}\n </span>\n </PopoverMenuItem>\n </>\n )}\n <PopoverMenuItem icon=\"print\">\n <span\n style={{ marginLeft: '1rem' }}\n onClick={() => {\n const sessionSecret = sessionStorage.getItem('secret');\n const url = isNil(sessionSecret)\n ? `${process.env.REACT_APP_DOMAIN}${\n process.env.REACT_APP_SUBDOMAIN\n }${\n process.env.REACT_APP_SUBDOMAIN === '/' ? '' : '/'\n }print/${homeworkID}`\n : `${process.env.REACT_APP_DOMAIN}${\n process.env.REACT_APP_SUBDOMAIN\n }${\n process.env.REACT_APP_SUBDOMAIN === '/' ? '' : '/'\n }print/${homeworkID}?secret=${sessionSecret}`;\n const win = window.open(url, '_blank');\n if (win != null) {\n win.focus();\n }\n }}\n >\n {t(`track-assignment-assigned-me:main.print`, 'Print')}\n </span>\n </PopoverMenuItem>\n <PopoverMenuItem icon=\"delete\">\n <span\n style={{ marginLeft: '1rem' }}\n onClick={() => {\n setSelectedHomeworkID(homeworkID);\n dispatch(resetError());\n openDeleteModal();\n }}\n >\n {t(`track-assignment-assigned-me:main.delete`, 'Delete')}\n </span>\n </PopoverMenuItem>\n </MenuContent>\n </ActionsMenu>\n );\n}\n","import styled from 'styled-components';\n\nexport const AssignmentDate = styled.div`\n font-size: 0.75rem;\n color: rgba(114, 114, 114, 0.65);\n padding: 0 0.5rem 0.5rem 0.5rem;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n .edit-status {\n font-size: 0.875rem;\n color: #ff0000;\n }\n`;\n\nexport const StyledCard = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n background: #fff;\n border-radius: 5px;\n margin-bottom: 1rem;\n border: solid 1px #dfdfdf;\n color: #1e1e1e;\n .hw-link {\n color: #1e1e1e;\n &:hover {\n color: #ff7121;\n }\n }\n\n .bg-progress-bar-submission {\n background-color: #ff5b00;\n }\n\n .progress {\n border-radius: 30px;\n }\n .class-submission {\n display: flex;\n flex-direction: row;\n padding: 0.8rem 1rem;\n border-top: solid 1px #dfdfdf;\n background: #f7f9f9;\n &:hover {\n cursor: pointer;\n }\n .submission-class-student {\n padding-left: 2.7rem;\n margin-right: 1rem;\n width: 240px;\n }\n .submissions {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n }\n .details {\n display: flex;\n flex-direction: row;\n\n .title {\n flex-basis: 50%;\n font-size: 17px;\n font-weight: 600;\n padding: 1rem 1rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n .hw-type-icon {\n width: 31px;\n height: 31px;\n border-radius: 50%;\n padding: 0.5rem;\n font-family: Helvetica, sans-serif;\n font-size: 19px;\n font-weight: 100;\n color: #fff;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-right: 0.7rem;\n\n img {\n width: 31px;\n height: 31px;\n }\n }\n }\n .qn-count {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex-basis: 8%;\n border-left: solid 1px #c8c8c8;\n border-right: solid 1px #c8c8c8;\n }\n .dates {\n flex-basis: 17%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n .dates-title {\n font-size: 0.75rem;\n font-weight: 600;\n color: rgba(114, 114, 114, 0.55);\n }\n .start-end-dates {\n font-size: 0.8125rem;\n color: #1e1e1e;\n }\n .start-end-dates:hover {\n text-decoration-line: underline;\n cursor: pointer;\n color: #ff5b00;\n }\n .visible-date {\n font-size: 0.6875rem;\n color: #ff5b00;\n }\n }\n .actions {\n flex-basis: 25%;\n border-left: solid 1px #c8c8c8;\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n align-items: center;\n padding: 0 1rem;\n .btn-assign-button {\n height: 31px;\n width: 134px;\n padding: 0;\n border: solid 1px #d5d5d5;\n &:hover {\n border-color: #ff5b00;\n }\n }\n .btn-print-button {\n width: 57px;\n height: 31px;\n padding: 0 0 0.5rem 0;\n border: solid 1px #d5d5d5;\n &:hover {\n border-color: #ff5b00;\n }\n }\n .btn-open-button {\n height: 31px;\n width: 84px;\n padding: 0;\n }\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment-timezone';\nimport { Link, useHistory } from 'react-router-dom';\nimport { Button, ProgressBar } from 'react-bootstrap';\nimport PopoverMenu from 'components/TrackAssignment/PopoverMenu';\nimport checkIcon from 'assets/img/icon-check-orange.svg';\nimport printIcon from 'assets/img/icon-track-assignment-print-active.svg';\nimport { featureToggle, homeworkTypes } from 'constants/index';\nimport { AssignmentDate, StyledCard } from './AssignmentCard.styles';\nimport iconFactualFluency from 'assets/img/icon-factual-fluency.png';\n\nconst getIcon = homeworkType => {\n if (homeworkType === 13) {\n return <img src={iconFactualFluency} alt=\"iconFactualFluency\" />;\n }\n if (homeworkTypes[homeworkType]) {\n return homeworkTypes[homeworkType].logo;\n }\n\n return 'H';\n};\n\nexport default function AssignmentCard({\n homeworkID,\n homeworkName,\n homeworkType,\n homeworkStatus,\n visibleDate,\n homeworkQnCount,\n assignedDate,\n startDate,\n deadline,\n classes,\n individuals,\n isOthers,\n openDeleteModal,\n setSelectedHomeworkID,\n assignment,\n openChangeTitleModal\n}) {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const history = useHistory();\n\n return (\n <>\n <AssignmentDate>\n <span>{`${t(\n 'track-assignment-assigned-me:main.assignDate',\n 'Assign Date: '\n )}${moment\n .tz(assignedDate, 'Asia/singapore')\n .format('DD-MMM-YYYY')}`}</span>\n {homeworkStatus === 4 && (\n <span className=\"edit-status\">\n *\n {t(\n `track-assignment-assigned-me:main.editProgress`,\n 'Editing in progress'\n )}\n </span>\n )}\n </AssignmentDate>\n <StyledCard>\n <div className=\"details\">\n <div className=\"title\">\n <span\n className=\"hw-type-icon\"\n style={{\n background: homeworkTypes[homeworkType]\n ? homeworkTypes[homeworkType].bgColor\n : '#49C8AA'\n }}\n >\n {getIcon(homeworkType)}\n </span>\n <Link\n to={\n classes.length > 0 &&\n (individuals === null || individuals.TotalAssignee > 0)\n ? classes.length === 1\n ? `/track-assignment/homework/${homeworkID}/${classes[0].ClassID}`\n : `/track-assignment/homework/${homeworkID}`\n : `/track-assignment/homework/${homeworkID}/all`\n }\n className=\"hw-link\"\n >\n {homeworkName}\n </Link>\n </div>\n <div className=\"qn-count\">\n <span\n style={{\n fontSize: '0.75rem',\n color: '#727272',\n textAlign: 'center'\n }}\n >\n {t(`track-assignment-assigned-me:main.totalQn`, 'Total Qn')}\n </span>\n <span style={{ fontSize: '1rem', color: '#1E1E1E' }}>\n {homeworkQnCount}\n </span>\n </div>\n <div className=\"dates\">\n <span className=\"dates-title\">\n {t(\n `track-assignment-assigned-me:main.startEndDate`,\n 'Start/End date (dd/mm/yy)'\n )}\n </span>\n <span\n className=\"start-end-dates\"\n onClick={() => openChangeTitleModal(assignment)}\n >\n {moment.tz(startDate, 'Asia/singapore').format('DD/MM/YY')} -{' '}\n {moment.tz(deadline, 'Asia/singapore').format('DD/MM/YY')}\n </span>\n {homeworkStatus === 6 && (\n <span className=\"visible-date\">\n {t(`track-assignment-assigned-me:main.visible`, 'Visible on ')}\n {moment.tz(visibleDate, 'Asia/singapore').format('DD/MM/YY')}\n </span>\n )}\n </div>\n <div className=\"actions\">\n {featureToggle.assignAgainButton &&\n (isOthers ? (\n <Button\n variant=\"outline-primary\"\n size=\"print-button\"\n onClick={() => {}}\n >\n <img src={printIcon} alt=\"Print\" className=\"action-icon\" />\n </Button>\n ) : (\n <Button\n variant=\"outline-primary\"\n size=\"assign-button\"\n onClick={() => {}}\n >\n {t(\n `track-assignment-assigned-me:main.assignAgain`,\n 'Assign again'\n )}\n </Button>\n ))}\n <Button\n variant=\"primary\"\n size=\"open-button\"\n onClick={() => {\n history.push(\n classes.length > 0 &&\n (individuals === null || individuals.TotalAssignee > 0)\n ? classes.length === 1\n ? `/track-assignment/homework/${homeworkID}/${classes[0].ClassID}`\n : `/track-assignment/homework/${homeworkID}`\n : `/track-assignment/homework/${homeworkID}/all`\n );\n }}\n >\n {t(`track-assignment-assigned-me:main.open`, 'Open')}\n </Button>\n {!isOthers && (\n <PopoverMenu\n homeworkID={homeworkID}\n openDeleteModal={openDeleteModal}\n setSelectedHomeworkID={setSelectedHomeworkID}\n />\n )}\n </div>\n </div>\n {individuals !== null && (\n <div\n className=\"class-submission\"\n onClick={() => {\n history.push(`/track-assignment/homework/${homeworkID}/all`);\n }}\n >\n <span className=\"submission-class-student\">\n <Link\n to={`/track-assignment/homework/${homeworkID}/all`}\n className=\"hw-link\"\n >\n {`${individuals.TotalAssignee} Student${\n individuals.TotalAssignee > 1 ? 's' : ''\n }`}\n </Link>\n </span>\n <span className=\"submissions\">\n <span style={{ width: '180px' }}>{`${t(\n 'track-assignment-assigned-me:main.submission',\n 'Submission '\n )} ${individuals.TotalSubmission}/${\n individuals.TotalAssignee\n }`}</span>\n <ProgressBar\n variant=\"progress-bar-submission\"\n now={\n (individuals.TotalSubmission / individuals.TotalAssignee) *\n 100\n }\n style={{ margin: '0 1rem', width: '130px' }}\n />\n {individuals.TotalAssignee > 0 &&\n individuals.TotalSubmission === individuals.TotalAssignee && (\n <img\n src={checkIcon}\n alt=\"All submitted icon\"\n width=\"14.75px\"\n height=\"10.73px\"\n />\n )}\n </span>\n </div>\n )}\n {classes !== null &&\n classes.map(group => (\n <div\n className=\"class-submission\"\n key={group.ClassID}\n onClick={() => {\n history.push(\n `/track-assignment/homework/${homeworkID}/${group.ClassID}`\n );\n }}\n >\n <span className=\"submission-class-student\">\n <Link\n to={`/track-assignment/homework/${homeworkID}/${group.ClassID}`}\n className=\"hw-link\"\n >\n {group.ClassName}\n </Link>\n </span>\n <span className=\"submissions\">\n <span style={{ width: '180px' }}>{`${t(\n 'track-assignment-assigned-me:main.submission',\n 'Submission '\n )} ${group.TotalSubmission}/${group.TotalAssignee}`}</span>\n <ProgressBar\n variant=\"progress-bar-submission\"\n now={(group.TotalSubmission / group.TotalAssignee) * 100}\n style={{ margin: '0 1rem', width: '130px' }}\n />\n {group.TotalAssignee > 0 &&\n group.TotalSubmission === group.TotalAssignee && (\n <img\n src={checkIcon}\n alt=\"All submitted icon\"\n width=\"14.75px\"\n height=\"10.73px\"\n />\n )}\n </span>\n </div>\n ))}\n </StyledCard>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const PaginationContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.9375rem;\n font-weight: 600;\n color: #1c1b1b;\n padding: 2rem 1rem;\n input {\n border: solid 1px #cecece;\n }\n .next-prev-page {\n margin-right: 1rem;\n .btn-outline-page-primary {\n background: #fff;\n border: solid 1px #cecece;\n font-weight: 600;\n margin-left: 1rem;\n }\n .btn-outline-page-primary.selected {\n color: #fff;\n background: #ff5b00;\n }\n .btn-outline-page-primary.selected:hover {\n color: #fff;\n }\n .btn-outline-page-primary:hover {\n color: #ff5b00;\n }\n .btn-outline-page-primary.disabled,\n .btn-outline-page-primary:disabled {\n color: #d8d8d8;\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { PaginationContainer } from './Pagination.styles';\n\nexport default function Pagination({ currentPage, setPage }) {\n const { t } = useTranslation(['create-assign-saved']);\n const { numOfPages } = useSelector(state => state.assignments);\n const [debouncedCallback] = useDebouncedCallback(value => {\n setPage(value);\n }, 2000);\n return (\n <PaginationContainer>\n <div className=\"next-prev-page\">\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage <= 1}\n onClick={() => setPage(currentPage - 1)}\n >\n &lt; {t(`create-assign-saved:pagination.prev`, 'Prev')}\n </Button>\n {currentPage === 1 && (\n <>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n {numOfPages >= 2 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n )}\n {numOfPages >= 3 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 2)}\n >\n {currentPage + 2}\n </Button>\n )}\n </>\n )}\n {currentPage > 1 && currentPage < numOfPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n </>\n )}\n {currentPage === 2 && currentPage === numOfPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n {currentPage > 2 && currentPage === numOfPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 2)}\n >\n {currentPage - 2}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage >= numOfPages}\n onClick={() => setPage(currentPage + 1)}\n >\n {t(`create-assign-saved:pagination.next`, 'Next')} &gt;\n </Button>\n </div>\n <span>\n {t(`create-assign-saved:pagination.page`, 'Page')}{' '}\n <input\n name=\"page\"\n type=\"number\"\n placeholder={currentPage}\n min={1}\n max={numOfPages}\n onChange={e => {\n e.preventDefault();\n if (\n e.target.value !== currentPage &&\n e.target.value >= 1 &&\n e.target.value <= numOfPages\n ) {\n debouncedCallback(parseInt(e.target.value));\n }\n }}\n />{' '}\n {t(`create-assign-saved:pagination.of`, 'of')} {numOfPages}\n </span>\n </PaginationContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const EmptyAssignmentContainer = styled.div`\n padding-top: 5rem;\n color: #46535e;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n h1 {\n font-size: 1.5625rem;\n line-height: 1;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n margin-bottom: 1em;\n }\n\n &-btn {\n font-size: 1.375rem;\n line-height: 1.5;\n padding: 0.375em 3.5em;\n border-radius: 4px;\n }\n\n img {\n margin-bottom: 2rem;\n }\n\n @media (max-width: 968px) {\n padding: 0 2rem;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport emptyAssignmentImage from 'assets/img/empty-assignment.svg';\nimport { EmptyAssignmentContainer } from './EmptyAssignment.styles';\n\nexport default function EmptyAssignment() {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n return (\n <EmptyAssignmentContainer>\n <img src={emptyAssignmentImage} alt=\"Empty Assignment\" />\n <h1 className=\"text-center\">\n <b>\n {t(\n `track-assignment-assigned-me:emptyState.emptyMsg`,\n `You haven't assigned any homework yet.`\n )}\n </b>\n </h1>\n <h2 className=\"text-center\">\n {t(\n `track-assignment-assigned-me:emptyState.emptyDesc1`,\n 'You can click the '\n )}\n <b>\n {t(\n `track-assignment-assigned-me:emptyState.emptyDesc2`,\n 'Create & Assign '\n )}\n </b>\n {t(\n `track-assignment-assigned-me:emptyState.emptyDesc3`,\n 'at the top bar, and track assignment here.'\n )}\n </h2>\n <Link\n type=\"button\"\n className=\"btn btn-lg btn-primary page-empty-cart-btn\"\n to=\"/browse-content\"\n >\n {t(\n `track-assignment-assigned-me:emptyState.browseContent`,\n 'Browse Content'\n )}\n </Link>\n </EmptyAssignmentContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const StyledModal = styled.div`\n position: fixed; /* Stay in place */\n z-index: 1; /* Sit on top */\n padding-top: 90px;\n left: 0;\n top: 0;\n width: 100%; /* Full width */\n height: 100%; /* Full height */\n overflow: auto; /* Enable scroll if needed */\n background-color: rgb(0, 0, 0); /* Fallback color */\n background-color: rgba(0, 0, 0, 0.4); /* Black w/ opacity */\n .modal-content {\n position: relative;\n background-color: #fefefe;\n margin: auto;\n padding: 0;\n border: 1px solid #888;\n width: 40%;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n -webkit-animation-name: animatetop;\n -webkit-animation-duration: 0.4s;\n animation-name: animatetop;\n animation-duration: 0.4s;\n /* top: 20%; */\n }\n /* Add Animation */\n @-webkit-keyframes animatetop {\n from {\n top: -300px;\n opacity: 0;\n }\n to {\n top: 0;\n opacity: 1;\n }\n }\n\n @keyframes animatetop {\n from {\n top: -300px;\n opacity: 0;\n }\n to {\n top: 0;\n opacity: 1;\n }\n }\n`;\n","import React, { useEffect, useRef } from 'react';\nimport { StyledModal } from './CustomModal.styles';\n\nexport default function CustomModal({ children, hide }) {\n function useOutsideAlerter(ref) {\n useEffect(() => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n // hide();\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }, [ref]);\n }\n const wrapperRef = useRef(null);\n useOutsideAlerter(wrapperRef);\n\n return (\n <StyledModal>\n <div ref={wrapperRef} className=\"modal-content\">\n {children}\n </div>\n </StyledModal>\n );\n}\n","import styled from 'styled-components';\n\nconst DeleteModalBodyContnainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 550px;\n background: white;\n padding: 50px;\n align-items: center;\n .close-btn {\n position: absolute;\n right: 35px;\n top: 30px;\n border: none;\n font-size: 18px;\n background: none;\n }\n .title {\n color: #ff5b00;\n font-size: 18px;\n margin: 10px;\n }\n .text {\n color: #060606;\n margin: 10px 10px 30px 10px;\n font-size: 16px;\n }\n .btn-group {\n margin: 10px;\n button {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n }\n .no-btn {\n background: white;\n color: #ff5b00;\n border: 1px solid #d5d5d5;\n &:hover {\n background: #FFF7F3\n color: #f25008;\n border-color: #f25008;\n }\n }\n .yes-btn {\n background: #ff5b00;\n color: white;\n border: 1px solid #ff3d3d;\n &:hover {\n background: #f25008;\n }\n }\n }\n span {\n font-size: 16px;\n }\n .success-title {\n font-size: 18px;\n }\n .success-btn {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n background: #5ED46A;\n color: white;\n border: 1px solid #29C16A;\n }\n`;\n\nexport default DeleteModalBodyContnainer;\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { deleteAssignedHwRequest } from 'stores/assignments/actions';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport { Spinner } from 'react-bootstrap';\nimport DeleteModalBodyContnainer from './AssignmentCardDeleteModalBody.styles';\n\nconst DeleteModalBody = ({ hide, homeworkID }) => {\n const dispatch = useDispatch();\n // Redux states\n const { isLoading, deleteHwResult, error } = useSelector(\n state => state.assignments\n );\n\n return (\n <DeleteModalBodyContnainer>\n {deleteHwResult === true ? (\n <>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n Success!\n </span>\n <span style={{ margin: '2rem 0' }}>\n Homework is successfully deleted.\n </span>\n <button\n className=\"success-btn\"\n type=\"button\"\n onClick={() => {\n hide();\n }}\n >\n OK\n </button>\n </>\n ) : (\n <>\n <button\n className=\"close-btn\"\n type=\"button\"\n onClick={() => {\n hide();\n }}\n >\n X\n </button>\n <div className=\"title\">Delete Assignment</div>\n <p className=\"text\">\n Are you sure you want to delete this assignment?\n </p>\n {error && <span style={{ color: '#ff5b00' }}>{error}</span>}\n <div className=\"btn-group\">\n <button\n className=\"no-btn\"\n type=\"button\"\n onClick={() => {\n hide();\n }}\n >\n No\n </button>\n <button\n className=\"yes-btn\"\n type=\"button\"\n onClick={() => {\n dispatch(\n deleteAssignedHwRequest({\n homeworkID\n })\n );\n }}\n >\n Yes\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </button>\n </div>\n </>\n )}\n </DeleteModalBodyContnainer>\n );\n};\n\nexport default DeleteModalBody;\n","import React from 'react';\nimport DateTimeRangeContainer from 'react-advanced-datetimerange-picker';\nimport calendarIcon from 'assets/img/icon-calendar-white.svg';\nimport './DateTimePicker.styles.scss';\n\nexport default function DateTimeRangePicker(props) {\n const { startDate, endDate, applyCallback } = props;\n\n const config = {\n sundayFirst: true\n };\n\n const value = `${startDate.format('DD MMM YYYY, h:mm A')} - ${endDate.format(\n 'DD MMM YYYY, h:mm A'\n )}`;\n\n return (\n <DateTimeRangeContainer\n leftMode\n noMobileMode\n ranges={{}}\n start={startDate}\n end={endDate}\n local={config}\n applyCallback={applyCallback}\n autoApply\n >\n <div className=\"track-assignment-picker\">\n <span>{value}</span>\n <img src={calendarIcon} alt=\"calendar icon\" />\n </div>\n </DateTimeRangeContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const DatePickerStyle = styled.div`\n background: #ffffff;\n border: 0.5px solid #c4c4c4;\n border-radius: 2px;\n height: 30px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2px 10px;\n color: #202020;\n cursor: pointer;\n span {\n font-size: 15px;\n }\n`;\n","import React from 'react';\nimport 'bootstrap-daterangepicker/daterangepicker.css';\nimport 'components/CreateAndAssign/DateTimePicker.styles.scss';\nimport DateRangePicker from 'react-bootstrap-daterangepicker';\nimport calendarIcon from 'assets/img/icon-calendar-white.svg';\n\nimport { DatePickerStyle } from './DatePicker.styles.js';\n\nconst config = {\n sundayFirst: true\n};\n\nconst dateFormat = date => {\n return date.format('DD MMM YYYY, h:mm A');\n};\n\nexport default function DatePicker({ date, applyCallback, minDate }) {\n return (\n <DateRangePicker\n showDropdowns\n singleDatePicker\n startDate={date}\n local={config}\n onApply={applyCallback}\n minDate={minDate || new Date()}\n onHideCalendar={applyCallback}\n timePicker\n onEvent={applyCallback}\n >\n <DatePickerStyle>\n <span>{dateFormat(date)}</span>\n <img src={calendarIcon} alt=\"calendar icon\" />\n </DatePickerStyle>\n </DateRangePicker>\n );\n}\n","import styled from 'styled-components';\n\nexport const ChangeTitleDateContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 550px;\n background: white;\n padding: 10px;\n align-items: center;\n position: relative;\n .close {\n position: absolute;\n right: 20px;\n top: 20px;\n border: none;\n font-size: 18px;\n background: none;\n }\n .title {\n color: #000000;\n font-size: 18px;\n margin: 10px;\n }\n .text {\n color: #060606;\n margin: 10px 10px 30px 10px;\n font-size: 16px;\n }\n .btn-group {\n margin: 10px;\n button {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n }\n .no-btn {\n background: white;\n color: #ff5b00;\n border: 1px solid #d5d5d5;\n &:hover {\n background: #fff7f3;\n color: #f25008;\n border-color: #f25008;\n }\n }\n .yes-btn {\n background: #ff5b00;\n color: white;\n border: 1px solid #ff3d3d;\n &:hover {\n background: #f25008;\n }\n :disabled {\n cursor: not-allowed;\n }\n }\n }\n .success-title {\n font-size: 18px;\n }\n .success-btn {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n background: #5ed46a;\n color: white;\n border: 1px solid #29c16a;\n }\n .form-container {\n width: 100%;\n padding: 20px;\n .row-title {\n color: #727272;\n }\n .form-row {\n flex-direction: column;\n margin-bottom: 15px;\n }\n .hw-form-inp {\n background: #ffffff;\n border: 0.5px solid #c4c4c4;\n border-radius: 2px;\n height: 30px;\n padding: 0 8px;\n }\n .dropdown-menu.show {\n width: 100%;\n }\n .dropdown-item.active,\n .dropdown-item:active {\n background: transparent;\n }\n .release-dropdown {\n color: #202020;\n padding: 3px 10px;\n font-size: 15px;\n width: 100%;\n background-color: #ffffff;\n border: 1px solid rgb(197, 197, 197) !important;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .custom-dropdown {\n display: flex;\n justify-content: space-between;\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Spinner, Dropdown } from 'react-bootstrap';\nimport { changeTitleDateRequest } from 'stores/assignments/actions';\n\nimport DateTimeRangePicker from 'components/TrackAssignment/DateTimeRangePicker';\n\nimport moment from 'moment-timezone';\nimport { assignmentVisibilities } from 'constants/index';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport tickIcon from 'assets/img/icon-tick.svg';\nimport DatePicker from './DatePicker';\nimport { ChangeTitleDateContainer } from './ChangeTitleDateModal.styles';\n\nexport default function ChangeTitleDateModal({ hide, data }) {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const { changeTitleIsLoading, changeTitleDate } = useSelector(\n state => state.assignments\n );\n const dispatch = useDispatch();\n\n const [Title, setTitle] = useState(data.HomeWorkTitle);\n const [StartDate, setStartDate] = useState(setDate(data.StartDate));\n const [Deadline, setDeadline] = useState(setDate(data.Deadline));\n const [ResultDate, setResultDate] = useState(setDate(data.ResultDate, true));\n const [Visibility, setVisibility] = useState(data.AssignmentVisibilty);\n\n function setDate(date, deadLine) {\n if (deadLine) date = compareDate(date, data.Deadline);\n return moment.tz(date, 'Asia/singapore');\n }\n\n function compareDate(resDate, deadLineDate) {\n const result = new Date(resDate);\n const deadline = new Date(deadLineDate);\n if (deadline.getTime() > result.getTime()) {\n return deadLineDate;\n }\n return resDate;\n }\n\n const applyCallback = (startDateValue, endDateValue) => {\n setStartDate(startDateValue);\n setDeadline(endDateValue);\n setResultDate(compareDate(ResultDate, endDateValue));\n };\n\n const applyCallbackRelease = (e, picker) => {\n setResultDate(picker.startDate);\n };\n\n const update = () => {\n const obj = {\n HomeworkId: data.HomeWorkId,\n StartDate: StartDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n Deadline: Deadline.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ'),\n Title\n };\n if (data.HomeWorkStatus === 6) obj.Visibility = Visibility;\n if (data.HomeWorkType === 12)\n obj.ResultDate = ResultDate.format('YYYY-MM-DDTHH:mm:ss.SSSSSSSZZ');\n dispatch(changeTitleDateRequest(obj));\n };\n\n return (\n <ChangeTitleDateContainer>\n {changeTitleDate === true ? (\n <>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n {t(`track-assignment-assigned-me:editAssign.success`, 'Success!')}\n </span>\n <span style={{ margin: '2rem 0' }}>\n {t(\n `track-assignment-assigned-me:editAssign.changesSave`,\n 'Changes have been saved sucessfully!'\n )}\n </span>\n <button className=\"success-btn\" type=\"button\" onClick={hide}>\n {t(`track-assignment-assigned-me:editAssign.ok`, 'OK')}\n </button>\n </>\n ) : (\n <>\n <button className=\"close\" type=\"button\" onClick={hide}>\n X\n </button>\n <div className=\"title\">\n {t(\n `track-assignment-assigned-me:editAssign.editAssignment`,\n 'Edit Assignment'\n )}\n </div>\n\n <div className=\"form-container\">\n <div className=\"form-row\">\n <div className=\"row-title\">\n {t(\n `track-assignment-assigned-me:editAssign.hWTitle`,\n 'Homework Title'\n )}\n </div>\n <input\n type=\"text\"\n value={Title}\n className=\"hw-form-inp\"\n onChange={e => setTitle(e.target.value)}\n required\n />\n </div>\n\n <div className=\"form-row\">\n <div className=\"row-title\">\n {t(`track-assignment-assigned-me:editAssign.date`, 'Date')}\n </div>\n <DateTimeRangePicker\n startDate={StartDate}\n endDate={Deadline}\n applyCallback={applyCallback}\n />\n </div>\n\n {data.HomeWorkStatus === 6 && (\n <div className=\"form-row\">\n <div className=\"row-title\">\n {t(\n `track-assignment-assigned-me:editAssign.showWorksheet`,\n 'Show the worksheet in students’ account'\n )}\n </div>\n <Dropdown>\n <Dropdown.Toggle variant=\"light\" className=\"release-dropdown\">\n {assignmentVisibilities[Visibility]}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {Object.keys(assignmentVisibilities).map(key => (\n <Dropdown.Item\n value={key}\n key={key}\n onClick={() => setVisibility(key)}\n >\n <div className=\"custom-dropdown\">\n <span\n style={\n Visibility === key\n ? { color: '#FF5B00' }\n : { color: '#000000' }\n }\n >\n {assignmentVisibilities[key]}\n </span>\n {Visibility === key && (\n <img src={tickIcon} alt=\"tick-icon\" />\n )}\n </div>\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n )}\n\n {data.HomeWorkType === 12 && (\n <div className=\"form-row\">\n <div className=\"row-title\">\n {t(\n `track-assignment-assigned-me:editAssign.resRelease`,\n 'Result Release Date'\n )}\n </div>\n <DatePicker\n date={ResultDate}\n minDate={Deadline}\n applyCallback={applyCallbackRelease}\n />\n </div>\n )}\n </div>\n\n <Buttons\n hide={hide}\n update={update}\n isLoading={changeTitleIsLoading}\n disableBtn={Title === ''}\n t={t}\n />\n </>\n )}\n </ChangeTitleDateContainer>\n );\n}\n\nfunction Buttons({ hide, update, isLoading, disableBtn, t }) {\n return (\n <div className=\"btn-group\">\n <button className=\"no-btn\" type=\"button\" onClick={hide}>\n {t(`track-assignment-assigned-me:editAssign.cancel`, 'Cancel')}\n </button>\n <button\n disabled={disableBtn}\n className=\"yes-btn\"\n type=\"button\"\n onClick={update}\n >\n {t(`track-assignment-assigned-me:editAssign.confirm`, 'Confirm')}\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </button>\n </div>\n );\n}\n","import styled from 'styled-components';\n\nexport const AssignmentSummaryPage = styled.div`\n padding-top: 1rem;\n .summary-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n font-family: 'Muli';\n margin-bottom: 1rem;\n\n .title {\n font-size: 20px;\n color: #545454;\n margin-right: ${props => (props.isOthers === true ? '10%' : '25%')};\n }\n .year-selector {\n display: flex;\n .dropdown-container {\n margin-right: ${props => (props.isOthers === true ? '1rem' : '0')};\n }\n }\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n fetchAssignmentsRequest,\n fetchTeacherAssignmentsRequest,\n fetchTeachersRequest,\n setAssignmentSummaryHistory,\n setSelectedTeacher,\n resetDeleteHwResult,\n changeTitleDateReset\n} from 'stores/assignments/actions';\nimport AssignmentCard from 'components/TrackAssignment/AssignmentCard';\nimport Pagination from 'components/TrackAssignment/Pagination';\nimport EmptyAssignment from 'components/TrackAssignment/EmptyAssignment';\nimport assignmentIcon from 'assets/img/icon-track-assignment-summary.svg';\nimport Spinner from 'components/Shared/Spinner';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport PopupModal from 'components/Shared/PopupModal';\nimport CustomModal from 'components/TrackAssignment/CustomModal';\nimport DeleteModalBody from 'components/TrackAssignment/AssignmentCardDeleteModalBody';\nimport ChangeTitleDateModal from 'components/TrackAssignment/ChangeTitleDateModal';\n\nimport { AssignmentSummaryPage } from './AssignmentSummary.styles';\n\nexport default function AssignmentSummary({ isOthers, match }) {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const teacherID = isOthers ? parseInt(match.params.teacherID) : null;\n const dispatch = useDispatch();\n const history = useHistory();\n // Redux States\n const {\n assignments,\n isLoading,\n years,\n teachers,\n deleteHwResult,\n latestYearWithAssignments,\n changeTitleDate\n } = useSelector(state => state.assignments);\n // States\n const [currentPage, setCurrentPage] = useState(1);\n const [selectedYear, setSelectedYear] = useState(moment().year());\n const [selectedHomeworkID, setSelectedHomeworkID] = useState(null);\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n const [showChangeTitleModal, setShowChangeTitleModal] = useState(false);\n const [changeData, setChangeData] = useState({});\n const hideDeleteModal = () => {\n if (deleteHwResult) {\n dispatch(resetDeleteHwResult());\n dispatch(\n fetchAssignmentsRequest({\n date: selectedYear !== null ? `${selectedYear}` : null,\n pageSize: 20,\n pageIndex: currentPage\n })\n );\n }\n setShowDeleteModal(false);\n };\n const openDeleteModal = () => {\n setShowDeleteModal(true);\n };\n\n const openChangeTitleModal = data => {\n setShowChangeTitleModal(true);\n setChangeData(data);\n };\n\n const closeChangeTitleModal = () => {\n if (changeTitleDate) {\n dispatch(changeTitleDateReset());\n dispatch(\n fetchAssignmentsRequest({\n date: selectedYear !== null ? `${selectedYear}` : null,\n pageSize: 20,\n pageIndex: currentPage\n })\n );\n }\n setShowChangeTitleModal(false);\n };\n\n // Dropdown item click handler\n const handleSelectedTeacher = teacher => {\n history.replace(`/track-assignment/others/${teacher.ID}`);\n };\n // Fetch list of teachers\n useEffect(() => {\n if (isOthers === true) {\n dispatch(fetchTeachersRequest());\n }\n }, [dispatch, isOthers]);\n // Fetch assignment data\n useEffect(() => {\n if (isOthers === true) {\n dispatch(setAssignmentSummaryHistory('others'));\n dispatch(setSelectedTeacher(teacherID));\n dispatch(\n fetchTeacherAssignmentsRequest({\n teacherID,\n pageSize: 20,\n pageIndex: currentPage,\n year: selectedYear\n })\n );\n } else {\n dispatch(setAssignmentSummaryHistory('me'));\n dispatch(\n fetchAssignmentsRequest({\n date: selectedYear !== null ? `${selectedYear}` : null,\n pageSize: 20,\n pageIndex: currentPage\n })\n );\n }\n }, [currentPage, dispatch, isOthers, selectedYear, teacherID]);\n\n return (\n <AssignmentSummaryPage isOthers={isOthers}>\n {isLoading && <Spinner />}\n {!isLoading && (\n <>\n <div className=\"summary-header\">\n <span className=\"title\">\n <img\n src={assignmentIcon}\n alt=\"Track Assignment icon\"\n className=\"title-icon\"\n />\n {t(\n `track-assignment-assigned-me:main.trackAssign`,\n 'Track Assignment'\n )}\n </span>\n <span className=\"year-selector\">\n {isOthers && (\n <>\n <div className=\"dropdown-container\">\n {t(\n `track-assignment-assigned-me:main.assignBy`,\n 'Assigned by:'\n )}\n <DropdownMenu\n selectedValue={\n teachers.length > 0 &&\n teachers.find(teacher => teacher.ID === teacherID)\n .FullName\n }\n values={teachers}\n valueKey=\"FullName\"\n setValue={handleSelectedTeacher}\n />\n </div>\n <div className=\"dropdown-container\">\n {t(\n `track-assignment-assigned-me:main.assignByMeIn`,\n 'Assigned by me in:'\n )}\n <DropdownMenu\n selectedValue={\n selectedYear !== null\n ? selectedYear\n : latestYearWithAssignments !== null\n ? latestYearWithAssignments\n : null\n }\n values={years}\n valueKey={null}\n setValue={setSelectedYear}\n />\n </div>\n </>\n )}\n {!isOthers && (\n <div className=\"dropdown-container\">\n {t(\n `track-assignment-assigned-me:main.assignByMeIn`,\n 'Assigned by me in:'\n )}\n <DropdownMenu\n selectedValue={\n selectedYear !== null\n ? selectedYear\n : latestYearWithAssignments !== null\n ? latestYearWithAssignments\n : null\n }\n values={years}\n valueKey={null}\n setValue={setSelectedYear}\n />\n </div>\n )}\n </span>\n </div>\n <PopupModal show={showDeleteModal} hide={hideDeleteModal}>\n <DeleteModalBody\n hide={hideDeleteModal}\n homeworkID={selectedHomeworkID}\n />\n </PopupModal>\n {showChangeTitleModal && (\n <CustomModal hide={closeChangeTitleModal}>\n <ChangeTitleDateModal\n hide={closeChangeTitleModal}\n data={changeData}\n />\n </CustomModal>\n )}\n {assignments.length > 0 ? (\n <>\n {selectedYear !== null\n ? assignments\n .slice(0, 20)\n .map(assignment => (\n <AssignmentCard\n key={assignment.HomeWorkId}\n homeworkID={assignment.HomeWorkId}\n homeworkName={assignment.HomeWorkTitle}\n homeworkType={assignment.HomeWorkType}\n homeworkStatus={assignment.HomeWorkStatus}\n visibleDate={assignment.VisibleDate}\n homeworkQnCount={assignment.TotalQuestion}\n classes={assignment.TrackingGroup}\n individuals={assignment.TrackingIndividual}\n assignedDate={assignment.AssignedDate}\n startDate={assignment.StartDate}\n deadline={assignment.Deadline}\n isOthers={isOthers}\n openDeleteModal={openDeleteModal}\n setSelectedHomeworkID={setSelectedHomeworkID}\n assignment={assignment}\n openChangeTitleModal={openChangeTitleModal}\n />\n ))\n : assignments\n .filter(\n assignment =>\n moment(assignment.AssignedDate).year() ===\n moment(assignments[0].AssignedDate).year()\n )\n .slice(0, 20)\n .map(assignment => (\n <AssignmentCard\n key={assignment.HomeWorkId}\n homeworkID={assignment.HomeWorkId}\n homeworkName={assignment.HomeWorkTitle}\n homeworkType={assignment.HomeWorkType}\n homeworkStatus={assignment.HomeWorkStatus}\n visibleDate={assignment.VisibleDate}\n homeworkQnCount={assignment.TotalQuestion}\n classes={assignment.TrackingGroup}\n individuals={assignment.TrackingIndividual}\n assignedDate={assignment.AssignedDate}\n startDate={assignment.StartDate}\n deadline={assignment.Deadline}\n isOthers={isOthers}\n openDeleteModal={openDeleteModal}\n setSelectedHomeworkID={setSelectedHomeworkID}\n assignment={assignment}\n openChangeTitleModal={openChangeTitleModal}\n />\n ))}\n <Pagination currentPage={currentPage} setPage={setCurrentPage} />\n </>\n ) : (\n <EmptyAssignment />\n )}\n </>\n )}\n </AssignmentSummaryPage>\n );\n}\n","import styled from 'styled-components';\n\nexport const OtherAssignmentsPage = styled.div`\n padding-top: 5rem;\n color: #46535e;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n h1 {\n font-size: 1.5625rem;\n line-height: 1;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n margin-bottom: 1em;\n }\n\n &-btn {\n font-size: 1.375rem;\n line-height: 1.5;\n padding: 0.375em 3.5em;\n border-radius: 4px;\n }\n\n img {\n margin-bottom: 2rem;\n }\n\n .no-assignments-error {\n margin-top: 1rem;\n font-size: 1rem;\n color: #ff5b00;\n }\n\n .btn-show-button {\n width: 270px;\n &:disabled {\n background: #d8d8d8;\n border: 1px solid #d8d8d8;\n cursor: not-allowed;\n }\n }\n\n @media (max-width: 968px) {\n padding: 0 2rem;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { isEmpty } from 'ramda';\nimport { fetchTeachersRequest } from 'stores/assignments/actions';\nimport splash from 'assets/img/other-assignments-splash.svg';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport { OtherAssignmentsPage } from './OtherAssignments.styles';\n\nexport default function OtherAssignments() {\n const { t } = useTranslation(['track-assignment-assigned-others']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { teachers } = useSelector(state => state.assignments);\n const [selectedTeacher, setSelectedTeacher] = useState(\n teachers.length > 0\n ? teachers[0]\n : {\n FullName: t(\n `track-assignment-assigned-others:main.selectTeacher`,\n 'Select a teacher'\n )\n }\n );\n\n const handleShowButton = () => {\n history.push(`/track-assignment/others/${selectedTeacher.ID}`);\n };\n\n // Fetch teachers data\n useEffect(() => {\n dispatch(fetchTeachersRequest());\n }, [dispatch]);\n return (\n <OtherAssignmentsPage>\n <img src={splash} alt=\"Assigned by others\" />\n <h1 className=\"text-center\" style={{ marginBottom: '1rem' }}>\n <b>\n {t(\n `track-assignment-assigned-others:main.browseAssign`,\n 'Browse assignments created by'\n )}\n </b>\n </h1>\n <DropdownMenu\n selectedValue={selectedTeacher.FullName}\n values={teachers}\n valueKey=\"FullName\"\n setValue={setSelectedTeacher}\n width=\"max-content\"\n />\n <Button\n variant=\"primary\"\n size=\"show-button\"\n onClick={handleShowButton}\n style={{ marginTop: '1rem' }}\n disabled={\n isEmpty(teachers) ||\n selectedTeacher.FullName ===\n t(\n `track-assignment-assigned-others:main.selectTeacher`,\n 'Select a teacher'\n )\n }\n >\n {t(`track-assignment-assigned-others:main.show`, 'Show')}\n </Button>\n </OtherAssignmentsPage>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BarChart, Bar, XAxis, YAxis, CartesianGrid, Cell } from 'recharts';\n\nconst colors = ['#55C92B', '#49C8AA', '#FF7121', '#FFC043'];\n\nconst CustomYAxisTick = ({ x, y, payload }) => {\n return (\n <g transform={`translate(${x},${y})`}>\n <text\n x={0}\n y={0}\n dy={2}\n textAnchor=\"end\"\n fill=\"#79b0ff\"\n fontSize=\"0.8rem\"\n >\n {payload.value}\n </text>\n </g>\n );\n};\n\nexport default function SubmissionsBarChart({ data }) {\n const { t } = useTranslation(['track-assignment-multi-class']);\n return (\n <BarChart\n width={1000}\n height={400}\n data={data}\n margin={{ top: 5, right: 30, left: 20, bottom: 10 }}\n >\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis\n type=\"category\"\n dataKey=\"ClassName\"\n label={{\n value: t(\n `track-assignment-multi-class:barGraph.hWSubmission`,\n 'Homework Submission Status'\n ),\n position: 'insideBottom',\n offset: -10\n }}\n />\n <YAxis type=\"number\" allowDecimals={false} tick={<CustomYAxisTick />} />\n <Bar dataKey=\"TotalSubmission\" maxBarSize={100}>\n {data.map((entry, index) => (\n <Cell key={`cell-${index}`} fill={colors[index % 4]} />\n ))}\n </Bar>\n </BarChart>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Modal } from 'react-bootstrap';\nimport { isNil } from 'ramda';\nimport { useSelector, useDispatch } from 'react-redux';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport Collapse from 'components/Shared/Collapse';\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport {\n McqOptionsList,\n TableModal\n} from 'components/Question/QuestionContent.styles';\nimport Spinner from 'components/Shared/Spinner';\nimport {\n fetchSingleClassReportRequest,\n clearSingleClassReport\n} from 'stores/assignments/actions';\nimport { parseQnAnswer } from 'helpers/singleClassReport';\n\nconst QuestionContent = ({ data, qnNumber }) => {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const { Payload, Difficulty } = data;\n // States\n const [questionTitle, setQuestionTitle] = useState(null);\n const [questionSolution, setQuestionSolution] = useState(null);\n const [questionAnswerParsed, setQuestionAnswerParsed] = useState(null);\n const [mcqOptionsParsed, setMCQOptionsParsed] = useState([]);\n // Effects\n useEffect(() => {\n if (!isNil(Payload)) {\n const { title, solution, mcqOptions, questionAnswer } = questionParser({\n Payload\n });\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setMCQOptionsParsed(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.name === 'input') {\n return <input type=\"text\" />;\n }\n return domNode;\n }\n })\n );\n\n setQuestionSolution(HTMLReactParser(convertTagsToHTML(solution)));\n setQuestionAnswerParsed(parseQnAnswer(questionAnswer));\n }\n }, [Payload]);\n return (\n <div className=\"question-item-body\">\n <div className=\"media\">\n <div className=\"media-body\">\n <div className=\"qs-inner\">\n <div className=\"qs-attr\">\n <div className=\"row\">\n <div className=\"col-md\">\n <div className=\"d-flex\">\n <span>\n {t(\n 'track-assignment-assigned-me:openHwModal.qn',\n 'Question'\n )}{' '}\n {qnNumber}\n </span>\n <span>\n {t(\n 'track-assignment-assigned-me:openHwModal.difficulty',\n 'Difficulty:'\n )}{' '}\n <DifficultyChillis value={Difficulty.Max ?? 0} />\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"qs-text\">\n <TableModal>{questionTitle}</TableModal>\n {mcqOptionsParsed.length > 0 && (\n <McqOptionsList>\n {mcqOptionsParsed.map(option => (\n <li key={option}>{option}</li>\n ))}\n </McqOptionsList>\n )}\n </div>\n </div>\n <div className=\"qs-solution\">\n <Collapse\n collapsed={false}\n hideText={t(\n 'track-assignment-assigned-me:openHwModal.hideSol',\n 'Hide Solution'\n )}\n showText={t(\n 'track-assignment-assigned-me:openHwModal.showSol',\n 'Show Solution'\n )}\n >\n {questionAnswerParsed !== null &&\n questionAnswerParsed.length > 0 && (\n <>\n <p>\n <strong>\n {t(\n 'track-assignment-assigned-me:openHwModal.answer',\n 'Answer:'\n )}\n </strong>\n </p>\n <p>{questionAnswerParsed}</p>\n </>\n )}\n <p>\n <strong>\n {t(\n 'track-assignment-assigned-me:openHwModal.solution',\n 'Solution:'\n )}\n </strong>\n </p>\n {questionSolution}\n </Collapse>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nconst HomeworkQuestionsModal = ({\n show,\n hide,\n homeworkID,\n hwTitle,\n isSingleClassReportPage\n}) => {\n const dispatch = useDispatch();\n const { singleClassReport, isSingleClassReportLoading } = useSelector(\n state => state.assignments\n );\n\n useEffect(() => {\n if (show && !isSingleClassReportPage) {\n dispatch(\n fetchSingleClassReportRequest({\n homeworkID\n })\n );\n }\n return () => {\n if (!isSingleClassReportPage) {\n dispatch(clearSingleClassReport());\n }\n };\n }, [dispatch, homeworkID, isSingleClassReportPage, show]);\n return (\n <Modal show={show} onHide={() => hide()} className=\"question-summary\">\n <div className=\"student-summary-modal\">\n <div className=\"question-item-header\">\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={() => hide()}\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <h3>{hwTitle}</h3>\n </div>\n {isSingleClassReportLoading && (\n <div className=\"question-item-body\" style={{ height: '50vh' }}>\n <Spinner />\n </div>\n )}\n {!isSingleClassReportLoading &&\n singleClassReport.length > 0 &&\n singleClassReport[0].Questions.length > 0 &&\n singleClassReport[0].Questions.map((question, index) => (\n <QuestionContent\n key={`qn-${question.Id}`}\n data={question}\n qnNumber={index + 1}\n />\n ))}\n </div>\n </Modal>\n );\n};\n\nexport default HomeworkQuestionsModal;\n","import styled from 'styled-components';\nimport { Modal } from 'react-bootstrap';\n\nexport const StyledModal = styled(Modal)`\n .modal-custom {\n min-width: 30%;\n .modal-header-custom {\n border-bottom: none;\n z-index: 100;\n }\n }\n\n .modal-custom-large {\n min-width: 60%;\n .modal-header-custom {\n border-bottom: none;\n }\n }\n`;\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { StyledModal } from './PopupModal.styles';\n\nexport default function PopupModal({ children, show, hide, size }) {\n return (\n <StyledModal\n dialogClassName={size === 'sm' ? 'modal-custom' : 'modal-custom-large'}\n show={show}\n keyboard={false}\n onHide={() => {\n hide();\n }}\n >\n <Modal.Header closeButton className=\"modal-header-custom\" />\n <Modal.Body>{children}</Modal.Body>\n </StyledModal>\n );\n}\n","import styled from 'styled-components';\n\nexport const DownloadCSVModalContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: 0.875rem;\n margin-top: -50px;\n .success-title {\n font-size: 1.125rem;\n color: #000000;\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .btn-success-ok {\n width: 127px;\n color: #fffdfc;\n background: #5ed46a;\n margin-bottom: 1rem;\n }\n .title {\n margin-bottom: 2rem;\n display: flex;\n justify-content: center;\n color: #ff5b00;\n font-size: 1.25rem;\n .action-icon {\n margin-right: 1rem;\n }\n }\n .content-section {\n color: #000000;\n text-align: center;\n p {\n font-size: 16px;\n }\n .class-list {\n text-align: left;\n margin-left: 20px;\n margin-bottom: 10px;\n .form-check-input {\n margin-left: 0px;\n }\n .form-check-label {\n margin: 0px 30px;\n }\n }\n }\n .btn-section {\n display: flex;\n width: 500px;\n justify-content: space-evenly;\n margin-top: 20px;\n padding: 20px;\n border-top: solid 1px rgba(112, 112, 112, 0.22);\n .cancel-btn {\n color: #ff5b00;\n border: solid 1px #d5d5d5;\n width: 127px;\n background: #ffffff;\n &:hover {\n border-color: #ff5b00;\n background: #fff7f3;\n }\n }\n .download-btn {\n width: 127px;\n color: #fffdfc;\n background: #ff5b00;\n &:hover {\n background: #f25008;\n }\n }\n .download-btn:disabled {\n border: none;\n }\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from 'components/Shared/Spinner';\nimport { Button } from 'react-bootstrap';\nimport downloadIcon from 'assets/img/icon-track-assignment-download.svg';\nimport { fetchCSVClassReportRequest } from 'stores/assignments/actions';\n// import CsvDownload from 'react-csv-downloader';\nimport { CSVLink } from 'react-csv';\n\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport { DownloadCSVModalContainer } from './DownloadCSVModalBody.styles';\n\nconst DownloadCSVModalBody = ({ hide, homeworkID }) => {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n const dispatch = useDispatch();\n const {\n parsedCSVClassReport,\n CSVClassReport,\n isCSVClassReportLoading,\n error\n } = useSelector(state => state.assignments);\n\n // selected class state\n const [selectedClassID, setSelectedClassID] = useState([]);\n const [downloadSucces, setDownloadSuccess] = useState(false);\n\n // get list of class name\n const classList = CSVClassReport[0] && CSVClassReport[0].TrackingGroup;\n const individualList = CSVClassReport[0] &&\n CSVClassReport[0].TrackingIndividual && { ClassName: 'Assigned Students' };\n\n const downloadOptionList = () => {\n if (CSVClassReport[0] && CSVClassReport[0].TrackingIndividual !== null) {\n return classList && classList.concat(individualList);\n }\n if (CSVClassReport[0] && CSVClassReport[0].TrackingGroup === null) {\n return individualList;\n }\n return classList;\n };\n\n const combineList = downloadOptionList();\n\n // filtered csv data based on selected classID\n const filteredData =\n parsedCSVClassReport &&\n parsedCSVClassReport.filter(item => {\n return selectedClassID.indexOf(item.classID) >= 0;\n });\n\n // CSV Columns\n const columns = [\n {\n key: 'class',\n label: `${t('track-assignment-assigned-me:csvColumn.class', 'CLASS')}`\n },\n {\n key: 'studentName',\n label: `${t(\n 'track-assignment-assigned-me:csvColumn.studentName',\n 'STUDENT NAME'\n )}`\n },\n {\n key: 'homeworkTitle',\n label: `${t(\n 'track-assignment-assigned-me:csvColumn.hwName',\n 'HOMEWORK NAME'\n )}`\n },\n {\n key: 'homeworkID',\n label: `${t(\n 'track-assignment-assigned-me:csvColumn.hwId',\n 'HOMEWORK ID'\n )}`\n },\n {\n key: 'score',\n label: `${t('track-assignment-assigned-me:csvColumn.score', 'SCORE')}`\n },\n {\n key: 'maxScore',\n label: `${t(\n 'track-assignment-assigned-me:csvColumn.maxScore',\n 'MAX ATTAINABLE'\n )}`\n },\n {\n key: 'submissionDate',\n label: `${t(\n 'track-assignment-assigned-me:csvColumn.subDate',\n 'SUBMISSION DATE'\n )}`\n }\n ];\n\n useEffect(() => {\n dispatch(\n fetchCSVClassReportRequest({\n homeworkID\n })\n );\n }, [dispatch, homeworkID]);\n return (\n <DownloadCSVModalContainer>\n {downloadSucces === true ? (\n <>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n {t(\n 'track-assignment-assigned-me:downloadModal.success',\n 'Success!'\n )}\n </span>\n <span style={{ margin: '2rem 0', color: '#000000' }}>\n {t(\n 'track-assignment-assigned-me:downloadModal.downloadDes',\n 'Assignment downloaded successfully!'\n )}\n </span>\n <Button\n variant=\"success-ok\"\n onClick={() => {\n hide();\n }}\n >\n {t('track-assignment-assigned-me:editAssign.ok', 'OK')}\n </Button>\n </>\n ) : (\n <>\n <div className=\"title\">\n <img src={downloadIcon} alt=\"Download\" className=\"action-icon\" />\n <span>\n {t(\n 'track-assignment-assigned-me:downloadModal.xls',\n 'Download XLS'\n )}\n </span>\n </div>\n <div className=\"content-section\">\n {isCSVClassReportLoading ? (\n <Spinner />\n ) : (\n <>\n <p>\n {t(\n 'track-assignment-assigned-me:downloadModal.select',\n 'Select class to download'\n )}\n </p>\n {combineList &&\n combineList.map((item, index) => (\n <div className=\"class-list\" key={index}>\n <input\n className=\"form-check-input\"\n type=\"checkbox\"\n id={item.ClassID}\n value={item.ClassID}\n onChange={e => {\n if (e.target.checked) {\n setSelectedClassID([\n ...selectedClassID,\n item.ClassID\n ]);\n } else {\n setSelectedClassID(\n selectedClassID.filter(\n sth => sth !== item.ClassID\n )\n );\n }\n }}\n />\n <span className=\"custom-checkbox\" />\n {/* eslint-disable-next-line jsx-a11y/label-has-for */}\n <label\n className=\"form-check-label\"\n htmlFor={item.ClassID}\n >\n {item.ClassName}\n </label>\n </div>\n ))}\n </>\n )}\n {!isCSVClassReportLoading && error !== null && <p>{error}</p>}\n </div>\n <div className=\"btn-section\">\n <Button className=\"cancel-btn\" onClick={() => hide()}>\n {t('track-assignment-assigned-me:editAssign.cancel', 'Cancel')}\n </Button>\n <CSVLink\n text=\"Download\"\n filename={\n CSVClassReport[0] && `${CSVClassReport[0].HomeWorkTitle}.csv`\n }\n headers={columns}\n data={filteredData}\n >\n <Button\n className=\"download-btn\"\n disabled={filteredData.length < 1}\n onClick={() => setDownloadSuccess(true)}\n >\n {t(\n 'track-assignment-assigned-me:downloadModal.download',\n 'Download'\n )}\n </Button>\n </CSVLink>\n </div>\n </>\n )}\n </DownloadCSVModalContainer>\n );\n};\n\nexport default DownloadCSVModalBody;\n","import styled from 'styled-components';\n\nexport const MultiClassReportPage = styled.div`\n background: #fff;\n .report-navigation {\n padding: 1rem 1rem;\n cursor: pointer;\n width: 100px;\n &:hover {\n color: #ff5b00;\n }\n }\n .tab-container {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n .scroller-tab {\n text-align: center;\n color: rgba(84, 84, 84, 0.43);\n background: #f5f5f5;\n border-bottom: solid 1px rgba(112, 112, 112, 0.26);\n border-top: solid 1px rgba(112, 112, 112, 0.26);\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n flex-grow: 1;\n border-right: none;\n height: 53px;\n padding: 0.5rem 0.5rem;\n }\n }\n .report-tabs {\n display: flex;\n flex-direction: row;\n border-top: solid 1px rgba(112, 112, 112, 0.26);\n overflow-x: auto;\n .class-tab {\n cursor: pointer;\n flex-shrink: 0;\n &:hover {\n color: #ff5b00;\n background: #fff7f3;\n }\n }\n span {\n padding: 1rem 2rem;\n min-width: 6rem;\n text-align: center;\n color: rgba(84, 84, 84, 0.43);\n background: #f5f5f5;\n border-right: solid 1px rgba(112, 112, 112, 0.26);\n border-bottom: solid 1px rgba(112, 112, 112, 0.26);\n }\n .active {\n color: #ff5b00;\n border-bottom: none;\n background: #fff;\n flex-shrink: 0;\n }\n .placeholder {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n padding: 0 0.5rem;\n flex-grow: 1;\n border-right: none;\n }\n }\n .report-homework-details {\n display: flex;\n flex-direction: row;\n padding: 1rem 1rem;\n border-bottom: solid 1px rgba(112, 112, 112, 0.22);\n .report-actions {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n flex-basis: 40%;\n span {\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n margin-right: 1rem;\n font-size: 11px;\n .action-icon {\n margin-bottom: 0.3rem;\n }\n }\n }\n .report-homework-details-info {\n flex-basis: 60%;\n .report-dates {\n color: rgba(30, 30, 30, 0.46);\n }\n }\n p {\n font-size: 22px;\n color: #1e1e1e;\n }\n }\n .report-submission-details {\n padding: 1rem 1rem;\n .submission-details-url {\n display: flex;\n flex-direction: row;\n align-items: center;\n .url-text {\n color: #ff5b00;\n }\n .copy-button {\n border: solid 1px #d8d8d8;\n background: #fff;\n padding: 0.2rem 1rem;\n color: #ff5b00;\n margin-left: 1rem;\n border-radius: 2px;\n\n &:hover {\n border: solid 1px #ff5b00;\n background: #fff7f3;\n }\n }\n }\n }\n .report-submission-chart {\n padding-bottom: 1rem;\n .chart-empty-text {\n position: relative;\n bottom: 18rem;\n left: 24rem;\n width: 18rem;\n text-align: center;\n }\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport Clipboard from 'react-clipboard.js';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { ButtonGroup, Button } from 'react-bootstrap';\nimport {\n fetchMultiClassReportRequest,\n clearMultiClassReport\n} from 'stores/assignments/actions';\nimport SubmissionsBarChart from 'components/TrackAssignment/SubmissionsBarChart';\nimport HomeworkQuestionsModal from 'components/TrackAssignment/HomeworkQuestionsModal';\nimport printIcon from 'assets/img/icon-track-assignment-print-active.svg';\nimport downloadIcon from 'assets/img/icon-track-assignment-download.svg';\nimport leaderboardIcon from 'assets/img/icon-track-assignment-leaderboard.svg';\nimport openHWIcon from 'assets/img/icon-track-assignment-open-hw.svg';\nimport { featureToggle, homeworkLink } from 'constants/index';\nimport PopupModal from 'components/ManageClass/PopupModal';\nimport DownloadCSVModalBody from 'components/TrackAssignment/DownloadCSVModalBody';\nimport { isNil } from 'ramda';\nimport { MultiClassReportPage } from './MultiClassReport.styles';\n\nconst checkforSubmissions = classes => {\n for (const classObject of classes) {\n if (classObject.TotalSubmission > 0) {\n return true;\n }\n }\n return false;\n};\n\nexport default function MultiClassReport({ match }) {\n const { t } = useTranslation(['track-assignment-multi-class']);\n const homeworkID = parseInt(match.params.homeworkID);\n const dispatch = useDispatch();\n const history = useHistory();\n const {\n multiClassReport,\n assignmentSummaryHistory,\n selectedTeacher\n } = useSelector(state => state.assignments);\n\n // Component States\n const [showQuestionsModal, setShowQuestionsModal] = useState(false);\n const [showDownloadCSVModal, setShowDownloadCSVModal] = useState(false);\n\n // Modal Event Handlers\n const hideQuestionModal = () => {\n setShowQuestionsModal(false);\n };\n\n const hideDownloadCSVModal = () => {\n setShowDownloadCSVModal(false);\n };\n\n useEffect(() => {\n dispatch(\n fetchMultiClassReportRequest({\n homeworkID\n })\n );\n return () => {\n dispatch(clearMultiClassReport());\n };\n }, [dispatch, homeworkID]);\n\n return (\n <>\n {multiClassReport.length > 0 && (\n <MultiClassReportPage>\n <PopupModal\n show={showDownloadCSVModal}\n hide={hideDownloadCSVModal}\n size=\"sm\"\n >\n <DownloadCSVModalBody\n homeworkID={homeworkID}\n hide={hideDownloadCSVModal}\n />\n </PopupModal>\n <HomeworkQuestionsModal\n show={showQuestionsModal}\n hide={hideQuestionModal}\n homeworkID={homeworkID}\n hwTitle={multiClassReport[0].HomeWorkTitle}\n isSingleClassReportPage={false}\n />\n <div\n className=\"report-navigation\"\n onClick={() => {\n if (assignmentSummaryHistory === 'others') {\n history.push(`/track-assignment/others/${selectedTeacher}`);\n } else {\n history.push('/track-assignment');\n }\n }}\n >\n {`< ${t(`track-assignment-multi-class:main.back`, `Back`)}`}\n </div>\n <div className=\"tab-container\">\n <div className=\"report-tabs\">\n <span className=\"active\">\n {t(`track-assignment-multi-class:main.all`, `All`)}\n </span>\n {multiClassReport[0].TrackingIndividual !== null && (\n <span\n className=\"class-tab\"\n onClick={() => {\n history.push(\n `/track-assignment/homework/${homeworkID}/all`\n );\n }}\n >\n {t(\n `track-assignment-multi-class:main.assignedStud`,\n `Assigned Students`\n )}\n </span>\n )}\n {multiClassReport[0].TrackingGroup.length > 0 &&\n multiClassReport[0].TrackingGroup.map(classGroup => (\n <span\n key={classGroup.ClassID}\n className=\"class-tab\"\n onClick={() => {\n history.push(\n `/track-assignment/homework/${homeworkID}/${classGroup.ClassID}`\n );\n }}\n >\n {classGroup.ClassName}\n </span>\n ))}\n <span className=\"placeholder\" />\n </div>\n\n <span className=\"scroller-tab\">\n <ButtonGroup aria-label=\"Basic example\">\n <Button\n variant=\"light\"\n onClick={() => {\n const div = document.getElementsByClassName('report-tabs');\n div[0].scrollLeft -= 100;\n }}\n >\n {'<'}\n </Button>\n <Button\n variant=\"light\"\n onClick={() => {\n const div = document.getElementsByClassName('report-tabs');\n div[0].scrollLeft += 100;\n }}\n >\n {'>'}\n </Button>\n </ButtonGroup>\n </span>\n </div>\n <div className=\"report-homework-details\">\n <div className=\"report-homework-details-info\">\n <p>\n <strong>{multiClassReport[0].HomeWorkTitle}</strong>\n </p>\n <span style={{ marginRight: '1rem' }}>\n {t(\n `track-assignment-multi-class:main.assignBy`,\n 'Assigned by: '\n )}\n {multiClassReport[0].TeacherName}\n </span>\n <span className=\"report-dates\">{`${moment(\n multiClassReport[0].StartDate\n ).format('DD/MM/YYYY')} - ${moment(\n multiClassReport[0].Deadline\n ).format('DD/MM/YYYY')}`}</span>\n </div>\n\n <div className=\"report-actions\">\n <span\n onClick={() => {\n const sessionSecret = sessionStorage.getItem('secret');\n const url = isNil(sessionSecret)\n ? `${process.env.REACT_APP_DOMAIN}${\n process.env.REACT_APP_SUBDOMAIN\n }${\n process.env.REACT_APP_SUBDOMAIN === '/' ? '' : '/'\n }print/${homeworkID}`\n : `${process.env.REACT_APP_DOMAIN}${\n process.env.REACT_APP_SUBDOMAIN\n }${\n process.env.REACT_APP_SUBDOMAIN === '/' ? '' : '/'\n }print/${homeworkID}?secret=${sessionSecret}`;\n const win = window.open(url, '_blank');\n if (win != null) {\n win.focus();\n }\n }}\n >\n <img src={printIcon} alt=\"Print\" className=\"action-icon\" />\n {t(`track-assignment-multi-class:main.printHw`, 'Print HW')}\n </span>\n <span\n onClick={() => {\n setShowDownloadCSVModal(true);\n }}\n >\n <img\n src={downloadIcon}\n alt=\"Download\"\n className=\"action-icon\"\n />\n {t(`track-assignment-multi-class:main.download`, 'Download')}\n </span>\n {featureToggle.reportActionButtons &&\n multiClassReport[0].HomeWorkType === 13 && (\n <>\n <span>|</span>\n <span\n onClick={() => {\n history.push(`/leaderboard/${homeworkID}`);\n }}\n >\n <img\n src={leaderboardIcon}\n alt=\"Leaderboard\"\n className=\"action-icon\"\n />\n {t(\n `track-assignment-multi-class:main.leaderboard`,\n 'Leaderboard'\n )}\n </span>\n </>\n )}\n <span\n onClick={() => {\n setShowQuestionsModal(true);\n }}\n >\n <img src={openHWIcon} alt=\"Open HW\" className=\"action-icon\" />\n {t(`track-assignment-multi-class:main.openHw`, 'Open HW')}\n </span>\n </div>\n </div>\n <div className=\"report-submission-details\">\n <p>{`${t(\n `track-assignment-multi-class:main.startDate`,\n 'Start Date: '\n )}${moment(multiClassReport[0].StartDate).format(\n 'DD-MMM-YYYY HH:mm'\n )}`}</p>\n <p>{`${t(\n `track-assignment-multi-class:main.deadline`,\n 'Deadline '\n )}${moment(multiClassReport[0].Deadline).format(\n 'DD-MMM-YYYY HH:mm'\n )} ${!multiClassReport[0].CloseAfterDeadline &&\n t(\n `track-assignment-multi-class:main.accessible`,\n '(Accessible after deadline)'\n )}`}</p>\n <div className=\"submission-details-url\">\n <span>\n {t(`track-assignment-multi-class:main.url`, 'URL: ')}\n <span className=\"url-text\">{`${homeworkLink}${multiClassReport[0].HomeWorkId}`}</span>\n </span>\n <Clipboard\n data-clipboard-text={`${homeworkLink}${multiClassReport[0].HomeWorkId}`}\n className=\"copy-button\"\n >\n {t(`track-assignment-multi-class:main.copy`, 'Copy')}\n </Clipboard>\n </div>\n </div>\n <div className=\"report-submission-chart\">\n {multiClassReport[0].TrackingGroup.length > 0 && (\n <SubmissionsBarChart data={multiClassReport[0].TrackingGroup} />\n )}\n {multiClassReport[0].TrackingGroup.length > 0 &&\n !checkforSubmissions(multiClassReport[0].TrackingGroup) && (\n <div className=\"chart-empty-text\">\n <h3>\n {t(\n `track-assignment-multi-class:barGraph.emptyMsg`,\n 'No Submissions yet'\n )}\n </h3>\n <p>\n {t(\n `track-assignment-multi-class:barGraph.submissionMsg`,\n `When your students submit the homework, then you'll find the data here`\n )}\n </p>\n </div>\n )}\n </div>\n </MultiClassReportPage>\n )}\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const QuestionPaginationContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 1rem 0.5rem 1rem 0;\n .question-pagination-page {\n margin: 0.2rem auto;\n color: #f9625c;\n font-size: 12px;\n }\n .btn-container {\n display: flex;\n justify-content: center;\n gap: 6px;\n }\n .next-button,\n .prev-button {\n padding: 12px;\n position: relative;\n border-radius: 50%;\n background: #dfdfdf;\n border: none;\n && {\n &:active {\n background: #dfdfdf;\n }\n }\n\n span {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -60%);\n color: #727171;\n }\n }\n`;\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { QuestionPaginationContainer } from './QuestionPagination.styles';\n\nexport default function QuestionPagination({\n currentPage,\n numOfPages,\n setPage\n}) {\n return (\n <QuestionPaginationContainer currentPage={currentPage}>\n <span className=\"question-pagination-page\">{currentPage}</span>\n <div className=\"btn-container\">\n {currentPage > 1 && (\n <Button\n className=\"prev-button\"\n onClick={() => {\n setPage(currentPage - 1);\n }}\n >\n <span>{'<'}</span>\n </Button>\n )}\n {currentPage < numOfPages && (\n <Button\n className=\"next-button\"\n onClick={() => {\n setPage(currentPage + 1);\n }}\n >\n <span>{'>'}</span>\n </Button>\n )}\n </div>\n </QuestionPaginationContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const QuestionResultContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n .correct-answer {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #55c92b;\n }\n\n .no-attempt {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: solid 1.5px #dedede;\n }\n\n .wrong-answer {\n width: 8px;\n height: 8px;\n }\n`;\n","import React from 'react';\nimport wrongAnsIcon from 'assets/img/icon-track-assignment-wrong-ans.svg';\nimport { QuestionResultContainer } from './QuestionResultIcon.styles';\n\nexport default function QuestionResultIcon({ result }) {\n return (\n <QuestionResultContainer>\n {result === 'no-attempt' ? (\n <div className=\"no-attempt\" />\n ) : result ? (\n <div className=\"correct-answer\" />\n ) : (\n <img src={wrongAnsIcon} alt=\"Wrong Answer\" className=\"wrong-answer\" />\n )}\n </QuestionResultContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const StyledContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n visibility: ${({ num }) => (num === 0 ? 'hidden' : 'visible')};\n color: #484848;\n .correct-answer {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #75c649;\n margin-right: 4px;\n }\n img {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n }\n`;\n","import React from 'react';\nimport wrongAnsIcon from 'assets/img/icon-track-assignment-wrong-ans.svg';\nimport { StyledContainer } from './ScoreCount.styles';\n\nconst ScoreCount = ({ type, num }) => {\n return (\n <StyledContainer type={type} num={num}>\n {type === 'correct' ? (\n <span className=\"correct-answer\" />\n ) : (\n <img src={wrongAnsIcon} alt=\"Wrong Answer\" />\n )}\n {num}\n </StyledContainer>\n );\n};\n\nexport default ScoreCount;\n","import styled from 'styled-components';\nimport { Modal } from 'react-bootstrap';\n\nexport const ModalStyled = styled(Modal)`\n .modal-dialog {\n min-width: 50%;\n }\n .question-content {\n color: #008bbe;\n font-weight: bold;\n padding: 1rem;\n }\n .modal-body {\n padding: 0;\n }\n`;\n\nexport const StudentAnswers = styled.div`\n .answer {\n border-top: solid 1px #dbe0d9;\n margin-top: 1rem;\n }\n .correct-box,\n .wrong-box {\n padding: 0.5rem 1rem;\n .title {\n font-weight: 600;\n margin-bottom: 0.3rem;\n }\n .name {\n font-weight: bold;\n color: #363636;\n }\n p {\n margin-bottom: 0px;\n line-height: 20px;\n color: #363636;\n }\n }\n .correct-box {\n background-color: #f5fdf2;\n .title {\n color: #55c92b;\n }\n }\n .wrong-box {\n background-color: #fff6f5;\n .title {\n color: #d5463b;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { isNil } from 'ramda';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport { McqOptionsList } from 'components/Question/QuestionContent.styles';\nimport { ModalStyled, StudentAnswers } from './QuestionSummaryModal.styles';\n\nexport default function QuestionSummaryModal({ size, show, hide, data }) {\n const [questionTitle, setQuestionTitle] = useState(null);\n const [mcqOptions, setMCQOptions] = useState([]);\n const { question, answers } = data;\n useEffect(() => {\n if (!isNil(question.Payload)) {\n const { title, mcqOptions } = questionParser(question);\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setMCQOptions(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.type === 'text') {\n if (domNode.prev?.name === 'input') {\n return <span>{domNode.data}</span>;\n }\n }\n if (domNode.name === 'input') {\n return (\n <span\n style={{\n width: '5rem',\n border: 'solid 1px #cecece',\n height: '1rem',\n display: 'inline-block'\n }}\n />\n );\n }\n return domNode;\n }\n })\n );\n }\n }, [question]);\n return (\n <ModalStyled\n size={size}\n show={show}\n onHide={() => hide()}\n className=\"question-summary\"\n >\n <Modal.Header closeButton>\n <Modal.Title>{`Question ${question.DisplayOrder}`}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"question-content\">\n {questionTitle}\n {mcqOptions.length > 0 && (\n <McqOptionsList>\n {mcqOptions.map(option => (\n <li key={option}>{option}</li>\n ))}\n </McqOptionsList>\n )}\n </div>\n <StudentAnswers>\n <div\n className={\n (Object.keys(answers.correct).length > 0 ||\n Object.keys(answers.wrong).length > 0) &&\n 'answer'\n }\n >\n {Object.keys(answers.correct).length > 0 ? (\n <div className=\"correct-box\">\n <p className=\"title\">Correct Answer:</p>\n {Object.keys(answers.correct).map(key => (\n <>\n <p className=\"name\">{`${key} (${answers.correct[key].num} student)`}</p>\n <p>{answers.correct[key].students.join(', ')}</p>\n </>\n ))}\n </div>\n ) : null}\n {Object.keys(answers.wrong).length > 0 ? (\n <div className=\"wrong-box\">\n <p className=\"title\">Wrong Answer:</p>\n {Object.keys(answers.wrong).map(key => (\n <>\n <p className=\"name\">{`${key} (${answers.wrong[key].num} student)`}</p>\n <p>{answers.wrong[key].students.join(', ')}</p>\n </>\n ))}\n </div>\n ) : null}\n </div>\n </StudentAnswers>\n </Modal.Body>\n </ModalStyled>\n );\n}\n","import React from 'react';\nimport ReactSvgPieChart from 'react-svg-piechart';\n\nexport default function ScorePieChart({ submissions }) {\n const data = [];\n if (submissions.correct > 0) {\n data.push({\n title: 'Correct',\n value: submissions.correct,\n color: '#55C92B'\n });\n }\n if (submissions.wrong > 0) {\n data.push({\n title: 'Wrong',\n value: submissions.wrong,\n color: '#FF5E5E'\n });\n }\n if (submissions.notSubmitted > 0) {\n data.push({\n title: 'Not Submitted',\n value: submissions.notSubmitted,\n color: '#dedede'\n });\n }\n // Check if data array has only 1 item\n if (data.length === 1) {\n data.push(data[0]);\n }\n return (\n <div style={{ width: '24px' }}>\n <ReactSvgPieChart\n data={data}\n startAngle={270}\n strokeWidth={0}\n viewBoxSize={1}\n />\n </div>\n );\n}\n","import React, { useState, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Overlay, Tooltip } from 'react-bootstrap';\nimport {\n markAnswerRightRequest,\n fetchSingleClassReportRequest\n} from 'stores/assignments/actions';\nimport './MarkRightPopover.scss';\n\nfunction MarkRightPopover({ submissionId, homeworkID }) {\n const dispatch = useDispatch();\n const [showConfirmation, setShowConfirmation] = useState(false);\n const target = useRef(null);\n\n const confirmHandler = () => {\n dispatch(markAnswerRightRequest({ submissionId }));\n setShowConfirmation(false);\n dispatch(\n fetchSingleClassReportRequest({\n homeworkID\n })\n );\n };\n\n return (\n <div className=\"mark-right\">\n <button\n className=\"btn btn-lg mark-right-btn\"\n type=\"button\"\n ref={target}\n onClick={() => setShowConfirmation(true)}\n >\n Mark Right\n </button>\n <Overlay target={target.current} show={showConfirmation} placement=\"left\">\n <Tooltip id=\"popover-items\">\n <div className=\"popup-text\">\n <span onClick={() => setShowConfirmation(false)}>X</span>\n <p>Are you sure to mark this answer correct?</p>\n </div>\n <div className=\"btn-container\">\n <button\n className=\"btn btn-primary confirm-right-btn\"\n type=\"button\"\n onClick={confirmHandler}\n >\n Confirm\n </button>\n </div>\n </Tooltip>\n </Overlay>\n </div>\n );\n}\n\nexport default MarkRightPopover;\n","import React, { useEffect, useState } from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { isNil } from 'ramda';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport Collapse from 'components/Shared/Collapse';\nimport DifficultyChillis from 'components/Level/DifficultyChillis';\nimport wrongAnsIcon from 'assets/img/icon-track-assignment-wrong-ans.svg';\nimport './StudentSummaryModal.styles.scss';\nimport {\n McqOptionsList,\n TableModal\n} from 'components/Question/QuestionContent.styles';\nimport { parseQnAnswer } from 'helpers/singleClassReport';\nimport MarkRightPopover from './MarkRightPopover';\n\nconst TickIcon = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"25\"\n height=\"19\"\n viewBox=\"0 0 30.432 24.152\"\n >\n <path\n id=\"Path_1863\"\n data-name=\"Path 1863\"\n d=\"M6481,333.5l9.031,8.5,14.344-17\"\n transform=\"translate(-6477.466 -321.477)\"\n fill=\"none\"\n stroke=\"#55C92B\"\n strokeLinecap=\"round\"\n strokeWidth=\"5\"\n />\n </svg>\n );\n};\n\nconst Test = ({ data, qnNumber, hideModal, hwID }) => {\n const {\n isCorrect,\n questionDifficulty,\n questionPayload,\n studentAnswer,\n submissionId\n } = data;\n\n // States\n const [questionTitle, setQuestionTitle] = useState(null);\n const [questionSolution, setQuestionSolution] = useState(null);\n const [questionAnswerParsed, setQuestionAnswerParsed] = useState(null);\n const [questionMcqOptions, setQuestionMCQOptions] = useState([]);\n\n // Effects\n useEffect(() => {\n if (!isNil(questionPayload)) {\n const { title, solution, mcqOptions, questionAnswer } = questionParser({\n Payload: questionPayload\n });\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setQuestionMCQOptions(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.name === 'input') {\n return <input type=\"text\" />;\n }\n return domNode;\n }\n })\n );\n\n setQuestionSolution(HTMLReactParser(convertTagsToHTML(solution)));\n setQuestionAnswerParsed(parseQnAnswer(questionAnswer));\n }\n }, [questionPayload]);\n\n return (\n <>\n <div className=\"question-item-body\">\n <div className=\"media\">\n <div className=\"media-body\">\n <div className=\"qs-inner\">\n <div className=\"qs-attr\">\n <div className=\"row\">\n <div className=\"col-md\">\n <div className=\"d-flex\">\n <span>Question {qnNumber}</span>\n <span>\n Difficulty:{' '}\n <DifficultyChillis\n value={questionDifficulty.Max ?? 0}\n />\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"qs-text\">\n <TableModal>{questionTitle}</TableModal>\n {questionMcqOptions.length > 0 && (\n <McqOptionsList>\n {questionMcqOptions.map(option => (\n <li key={option}>{option}</li>\n ))}\n </McqOptionsList>\n )}\n </div>\n </div>\n <div className=\"qs-student-answer\">\n <p>Student's Answer:</p>\n <div className=\"answer-correction\">\n <div className=\"student-answer-result\">\n <span style={{ marginRight: '1rem' }}>{studentAnswer}</span>\n {isCorrect ? (\n <TickIcon />\n ) : (\n <img\n src={wrongAnsIcon}\n alt=\"Wrong Answer\"\n className=\"student-answer-wrong\"\n />\n )}\n </div>\n {!isCorrect && (\n <MarkRightPopover\n submissionId={submissionId}\n hide={hideModal}\n homeworkID={hwID}\n />\n )}\n </div>\n </div>\n <div className=\"qs-solution\">\n <Collapse\n collapsed={false}\n hideText=\"Hide Solution\"\n showText=\"Show Solution\"\n >\n {questionAnswerParsed !== null &&\n questionAnswerParsed.length > 0 && (\n <>\n <p>\n <strong>Answer:</strong>\n </p>\n <p>{questionAnswerParsed}</p>\n </>\n )}\n <p>\n <strong>Solution:</strong>\n </p>\n {questionSolution}\n </Collapse>\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default function StudentSummaryModal({ show, hide, data, id }) {\n return (\n <Modal show={show} onHide={() => hide()} className=\"question-summary\">\n {data && (\n <div className=\"student-summary-modal\">\n <div className=\"question-item-header\">\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={() => hide()}\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <h3>{data.hwTitle}</h3>\n <p className=\"text-muted\">{data.selectedStudent}</p>\n <p>Score: {data.studentScore}</p>\n </div>\n {data.questions &&\n data.questions\n .slice(1)\n .map((question, index) => (\n <Test\n key={`qn-${index}`}\n data={question}\n qnNumber={index + 1}\n hideModal={hide}\n hwID={id}\n />\n ))}\n </div>\n )}\n </Modal>\n );\n}\n","import styled, { css } from 'styled-components';\nimport { MultiClassReportPage } from './MultiClassReport.styles';\n\nexport const SingleClassReportPage = styled(MultiClassReportPage)`\n .report-progress {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 1rem;\n .bg-progress-bar-submission {\n background-color: #ff5b00;\n }\n }\n\n .submission-details-url {\n display: flex;\n flex-direction: row;\n align-items: center;\n .url-text {\n color: #ff5b00;\n }\n .copy-button {\n border: solid 1px #d8d8d8;\n background: #fff;\n padding: 0.2rem 1rem;\n color: #ff5b00;\n margin-left: 1rem;\n border-radius: 2px;\n\n &:hover {\n border: solid 1px #ff5b00;\n background: #fff7f3;\n }\n }\n }\n\n .report-scores {\n min-height: 350px;\n margin-top: 1rem;\n .report-scores-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n\n .select-sorting-order {\n padding-left: 1rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n .sorting-dropdown {\n margin-left: 1rem;\n }\n #dropdown-sorting {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n border: solid 1px #707070;\n width: 190px;\n font-size: 12px;\n }\n .sorting-dropdown-item {\n width: 190px;\n font-size: 12px;\n }\n }\n .bg-progress-bar-score {\n background-color: #55c92b;\n }\n .progress {\n background-color: #f9625c;\n }\n\n .progress-not-submitted.progress {\n background-color: #dedede;\n }\n .cell-score {\n display: flex;\n flex-direction: row;\n align-items: center;\n overflow-x: auto;\n white-space: nowrap;\n }\n .header-cell-question {\n display: flex;\n flex-direction: column;\n color: #9a9a9a;\n font-weight: 600;\n font-size: 14px;\n background: #f7f7f7;\n align-items: center;\n border-radius: 8px;\n height: 70px;\n width: 40px;\n padding: 6px 0;\n cursor: pointer;\n margin: 0 auto;\n &.chart {\n justify-content: space-between;\n padding: 10px 0 6px;\n }\n }\n }\n\n .score-table {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n .cell-answer {\n height: 43px;\n }\n .score-table-left {\n align-self: flex-end;\n .cell-student-name {\n overflow-x: hidden;\n white-space: nowrap;\n }\n }\n .score-table-right {\n flex-grow: 0;\n }\n }\n`;\nexport const StyledSwitchContainer = styled.div`\n background: #dddddd;\n color: #484848;\n padding: 3px 4px;\n border-radius: 4px;\n display: flex;\n margin-right: 1rem;\n`;\nexport const StyledSwitch = styled.div`\n min-width: 70px;\n min-height: 26px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 4px 0 0 4px;\n background: white;\n border: 1px solid #cbcbcb;\n /* border-right: none; */\n font-size: 12px;\n :last-child {\n border-radius: 0 4px 4px 0;\n border-left: ${({ active }) => (active ? '1px solid #ffac86' : 'none')};\n }\n :first-child {\n border-right: ${({ active }) => (active ? '1px solid #ffac86' : 'none')};\n }\n @media (max-width: 1223px) {\n min-width: 100px;\n }\n ${({ active }) =>\n active &&\n css`\n background: #fff7f2;\n border: 1px solid #ffac86;\n color: #ff5b00;\n `}\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport Clipboard from 'react-clipboard.js';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport {\n ButtonGroup,\n Button,\n ProgressBar,\n Table,\n Dropdown\n} from 'react-bootstrap';\nimport {\n fetchSingleClassReportRequest,\n clearSingleClassReport\n} from 'stores/assignments/actions';\nimport QuestionPagination from 'components/TrackAssignment/QuestionPagination';\nimport QuestionResultIcon from 'components/TrackAssignment/QuestionResultIcon';\nimport ScoreCount from 'components/TrackAssignment/ScoreCount';\nimport QuestionSummaryModal from 'components/TrackAssignment/QuestionSummaryModal';\nimport HomeworkQuestionsModal from 'components/TrackAssignment/HomeworkQuestionsModal';\nimport ScorePieChart from 'components/TrackAssignment/ScorePieChart';\nimport printIcon from 'assets/img/icon-track-assignment-print-active.svg';\nimport downloadIcon from 'assets/img/icon-track-assignment-download.svg';\nimport leaderboardIcon from 'assets/img/icon-track-assignment-leaderboard.svg';\nimport openHWIcon from 'assets/img/icon-track-assignment-open-hw.svg';\nimport {\n getClass,\n compareValues,\n parseQuestionResult\n} from 'helpers/singleClassReport';\nimport StudentSummaryModal from 'components/TrackAssignment/StudentSummaryModal';\nimport Spinner from 'components/Shared/Spinner';\nimport { featureToggle, homeworkLink } from 'constants/index';\nimport PopupModal from 'components/ManageClass/PopupModal';\nimport DownloadCSVModalBody from 'components/TrackAssignment/DownloadCSVModalBody';\nimport {\n SingleClassReportPage,\n StyledSwitchContainer,\n StyledSwitch\n} from './SingleClassReport.styles';\n\n// HELPERS\nconst createStudentSummaryData = (\n studentID,\n singleClassReport,\n studentByScores\n) => {\n const studentIndex = studentByScores.findIndex(\n student => student.ID === studentID\n );\n if (studentIndex !== -1) {\n const summaryData = {\n hwTitle: singleClassReport[0].HomeWorkTitle,\n studentScore: `${studentByScores[studentIndex].score}/${singleClassReport[0].TotalQuestion}`,\n selectedStudent: studentByScores[studentIndex].FullName,\n questions: studentByScores[studentIndex].answers\n };\n return summaryData;\n }\n return null;\n};\n// Constants\nconst TYPES = [\n {\n label: 'Chart',\n value: 'chart'\n },\n {\n label: 'Data',\n value: 'data'\n }\n];\nexport default function SingleClassReport({ match }) {\n const { t } = useTranslation(['track-assignment-multi-class']);\n const dispatch = useDispatch();\n const history = useHistory();\n const {\n isSingleClassReportLoading,\n singleClassReport,\n assignmentSummaryHistory,\n selectedTeacher\n } = useSelector(state => state.assignments);\n const homeworkID = parseInt(match.params.homeworkID);\n const [type, setType] = useState(TYPES[0].value);\n const setInitialClassID = () => {\n switch (match.params.classID) {\n case 'view':\n if (singleClassReport.length > 0) {\n if (singleClassReport[0].TrackingIndividual !== null) {\n return 'all';\n }\n if (singleClassReport[0].TrackingGroup.length > 0) {\n return singleClassReport[0].TrackingGroup[0].ClassID;\n }\n }\n return null;\n case 'all':\n return 'all';\n default:\n return Number(match.params.classID);\n }\n };\n\n // Selected Class ID State\n const [classID, setClassID] = useState(setInitialClassID());\n const sortingOrderHashmap = {\n 1: [\n 'score',\n 'desc',\n t(`track-assignment-multi-class:single.scoreHL`, 'Score ( High to Low )')\n ],\n 2: [\n 'score',\n 'asc',\n t(`track-assignment-multi-class:single.scoreLH`, 'Score ( Low to High )')\n ],\n 3: [\n 'FullName',\n 'asc',\n t(`track-assignment-multi-class:single.nameAZ`, 'Name ( A-Z )')\n ]\n };\n const [scoresOrder, setScoresOrder] = useState(3);\n // Question Pagination State\n const [questionsPage, setQuestionsPage] = useState(1);\n // Question Summary Modal States\n const [showQuestionSummary, setShowQuestionSummary] = useState(false);\n const [questionSummaryData, setQuestionSummaryData] = useState(null);\n // Student Summary Modal States\n const [showStudentSummary, setShowStudentSummary] = useState(false);\n const [selectedStudent, setSelectedStudent] = useState(null);\n // Questions Modal States (Triggered on click of Open HW button)\n const [showQuestionsModal, setShowQuestionsModal] = useState(false);\n const hideQuestionModal = () => {\n setShowQuestionsModal(false);\n };\n\n // Event handlers to hide modals\n const hideQuestionSummary = () => {\n setShowQuestionSummary(false);\n };\n const hideStudentSummary = () => {\n setShowStudentSummary(false);\n };\n\n let questions = null;\n let classDetails = null;\n let studentScores;\n if (singleClassReport.length > 0) {\n // Set questions\n if (singleClassReport[0].hasOwnProperty('Questions')) {\n questions = singleClassReport[0].Questions.sort(\n compareValues('DisplayOrder', 'asc')\n );\n }\n\n // Set classDetails\n if (classID === 'all') {\n if (singleClassReport[0].TrackingIndividual !== null) {\n classDetails = singleClassReport[0].TrackingIndividual;\n }\n } else if (singleClassReport[0].TrackingGroup.length > 0) {\n classDetails = getClass(singleClassReport[0].TrackingGroup, classID);\n }\n // Calculate scores\n if (classID === 'all') {\n if (singleClassReport[0].TrackingIndividual !== null) {\n studentScores = parseQuestionResult(\n singleClassReport[0].TrackingIndividual.QuestionResult,\n singleClassReport[0].Questions,\n singleClassReport[0].TrackingIndividual.Students\n );\n }\n } else if (singleClassReport[0].TrackingGroup.length > 0) {\n studentScores = parseQuestionResult(\n classDetails.QuestionResult,\n singleClassReport[0].Questions,\n classDetails.Students\n );\n }\n }\n\n // Popup States\n const [showDownloadCSVModal, setShowDownloadCSVModal] = useState(false);\n\n // Modal Event Handlers\n const hideDownloadCSVModal = () => {\n setShowDownloadCSVModal(false);\n };\n\n useEffect(() => {\n dispatch(\n fetchSingleClassReportRequest({\n homeworkID\n })\n );\n return () => {\n dispatch(clearSingleClassReport());\n };\n }, [dispatch, homeworkID]);\n\n const [classInfo, setClassInfo] = useState(null);\n // Set classDetails\n useEffect(() => {\n if (singleClassReport.length > 0) {\n // Set classDetails\n if (classID === 'all') {\n if (singleClassReport[0].TrackingIndividual !== null) {\n setClassInfo(singleClassReport[0].TrackingIndividual);\n }\n } else if (singleClassReport[0].TrackingGroup.length > 0) {\n setClassInfo(getClass(singleClassReport[0].TrackingGroup, classID));\n }\n }\n }, [classID, singleClassReport]);\n\n return (\n <>\n {isSingleClassReportLoading && <Spinner />}\n {!isSingleClassReportLoading &&\n singleClassReport.length > 0 &&\n studentScores !== null &&\n classID !== null &&\n classInfo !== null && (\n <SingleClassReportPage>\n <PopupModal\n show={showDownloadCSVModal}\n hide={hideDownloadCSVModal}\n size=\"sm\"\n >\n <DownloadCSVModalBody\n homeworkID={homeworkID}\n hide={hideDownloadCSVModal}\n />\n </PopupModal>\n <HomeworkQuestionsModal\n show={showQuestionsModal}\n hide={hideQuestionModal}\n homeworkID={homeworkID}\n hwTitle={singleClassReport[0].HomeWorkTitle}\n isSingleClassReportPage\n />\n <div\n className=\"report-navigation\"\n onClick={() => {\n if (assignmentSummaryHistory === 'others') {\n history.push(`/track-assignment/others/${selectedTeacher}`);\n } else {\n history.push('/track-assignment');\n }\n }}\n >\n {`< ${t(`track-assignment-multi-class:main.back`, `Back`)}`}\n </div>\n <div className=\"tab-container\">\n <div className=\"report-tabs\">\n {singleClassReport[0].TrackingGroup.length > 1 && (\n <span\n className=\"class-tab\"\n onClick={() => {\n history.push(`/track-assignment/homework/${homeworkID}`);\n }}\n >\n {t(`track-assignment-multi-class:main.all`, `All`)}\n </span>\n )}\n {singleClassReport[0].TrackingIndividual !== null && (\n <span\n className={classID === 'all' ? 'active' : 'class-tab'}\n onClick={() => {\n setClassID('all');\n }}\n >\n {t(\n `track-assignment-multi-class:main.assignedStud`,\n `Assigned Students`\n )}\n </span>\n )}\n {singleClassReport[0].TrackingGroup.length > 0 &&\n singleClassReport[0].TrackingGroup.map(classGroup => (\n <span\n key={classGroup.ClassID}\n className={\n parseInt(classID) === classGroup.ClassID\n ? 'active'\n : 'class-tab'\n }\n onClick={() => {\n setClassID(classGroup.ClassID);\n }}\n >\n {classGroup.ClassName}\n </span>\n ))}\n <span className=\"placeholder\" />\n </div>\n <span className=\"scroller-tab\">\n <ButtonGroup aria-label=\"Basic example\">\n <Button\n variant=\"light\"\n onClick={() => {\n const div = document.getElementsByClassName(\n 'report-tabs'\n );\n div[0].scrollLeft -= 100;\n }}\n >\n {'<'}\n </Button>\n <Button\n variant=\"light\"\n onClick={() => {\n const div = document.getElementsByClassName(\n 'report-tabs'\n );\n div[0].scrollLeft += 100;\n }}\n >\n {'>'}\n </Button>\n </ButtonGroup>\n </span>\n </div>\n\n <div className=\"report-homework-details\">\n <div className=\"report-homework-details-info\">\n <p>\n <strong>{singleClassReport[0].HomeWorkTitle}</strong>\n </p>\n <span style={{ marginRight: '1rem' }}>\n {t(\n `track-assignment-multi-class:main.assignBy`,\n 'Assigned by: '\n )}\n {singleClassReport[0].TeacherName}\n </span>\n <span className=\"report-dates\">{`${moment(\n singleClassReport[0].StartDate\n ).format('DD/MM/YYYY')} - ${moment(\n singleClassReport[0].Deadline\n ).format('DD/MM/YYYY')}`}</span>\n {classDetails && (\n <div className=\"report-progress\">\n {' '}\n <ProgressBar\n variant=\"progress-bar-submission\"\n now={\n (classDetails.TotalSubmission /\n classDetails.TotalAssignee) *\n 100\n }\n style={{\n width: '130px',\n height: '6px',\n margin: '0 1rem 0 0'\n }}\n />\n <span>\n {t(\n `track-assignment-multi-class:single.submitted`,\n 'Submitted'\n )}{' '}\n {`${classDetails.TotalSubmission}/${classDetails.TotalAssignee}`}\n </span>\n </div>\n )}\n <div className=\"submission-details-url\">\n <span>\n {t(`track-assignment-multi-class:main.url`, 'URL: ')}\n <span className=\"url-text\">{`${homeworkLink}${homeworkID}`}</span>\n </span>\n <Clipboard\n data-clipboard-text={`${homeworkLink}${homeworkID}`}\n className=\"copy-button\"\n >\n {t(`track-assignment-multi-class:main.copy`, 'Copy')}\n </Clipboard>\n </div>\n </div>\n <div className=\"report-actions\">\n <span\n onClick={() => {\n const win = window.open(\n `${process.env.REACT_APP_DOMAIN}${\n process.env.REACT_APP_SUBDOMAIN\n }${\n process.env.REACT_APP_SUBDOMAIN === '/' ? '' : '/'\n }print/${homeworkID}`,\n '_blank'\n );\n if (win != null) {\n win.focus();\n }\n }}\n >\n <img src={printIcon} alt=\"Print\" className=\"action-icon\" />\n {t(`track-assignment-multi-class:main.printHw`, 'Print HW')}\n </span>\n {featureToggle.reportActionButtons &&\n singleClassReport[0].HomeWorkType === 13 && (\n <span\n onClick={() => {\n history.push(`/leaderboard/${homeworkID}`);\n }}\n >\n <img\n src={leaderboardIcon}\n alt=\"Leaderboard\"\n className=\"action-icon\"\n />\n {t(\n `track-assignment-multi-class:main.leaderboard`,\n 'Leaderboard'\n )}\n </span>\n )}\n <span\n onClick={() => {\n setShowDownloadCSVModal(true);\n }}\n >\n <img\n src={downloadIcon}\n alt=\"Download\"\n className=\"action-icon\"\n />\n {t(`track-assignment-multi-class:main.download`, 'Download')}\n </span>\n <span\n onClick={() => {\n setShowQuestionsModal(true);\n }}\n >\n <img src={openHWIcon} alt=\"Open HW\" className=\"action-icon\" />\n {t(`track-assignment-multi-class:main.openHw`, 'Open HW')}\n </span>\n </div>\n </div>\n {questionSummaryData && (\n <QuestionSummaryModal\n size=\"sm\"\n data={questionSummaryData}\n show={showQuestionSummary}\n hide={hideQuestionSummary}\n />\n )}\n <StudentSummaryModal\n data={createStudentSummaryData(\n selectedStudent,\n singleClassReport,\n studentScores.byStudent\n )}\n show={showStudentSummary}\n hide={hideStudentSummary}\n id={homeworkID}\n />\n <div className=\"report-scores\">\n <div className=\"report-scores-header\">\n <div className=\"select-sorting-order\">\n <span>\n {t(`track-assignment-multi-class:single.sortBy`, 'Sort by')}\n </span>\n <Dropdown className=\"sorting-dropdown\">\n <Dropdown.Toggle variant=\"light\" id=\"dropdown-sorting\">\n {sortingOrderHashmap[scoresOrder][2]}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n <Dropdown.Item\n onClick={event => {\n event.preventDefault();\n setScoresOrder(1);\n }}\n className=\"sorting-dropdown-item\"\n >\n {t(\n `track-assignment-multi-class:single.scoreHL`,\n 'Score ( High to Low )'\n )}\n </Dropdown.Item>\n <Dropdown.Item\n onClick={event => {\n event.preventDefault();\n setScoresOrder(2);\n }}\n className=\"sorting-dropdown-item\"\n >\n {t(\n `track-assignment-multi-class:single.scoreLH`,\n 'Score ( Low to High )'\n )}\n </Dropdown.Item>\n <Dropdown.Item\n onClick={event => {\n event.preventDefault();\n setScoresOrder(3);\n }}\n className=\"sorting-dropdown-item\"\n >\n {t(\n `track-assignment-multi-class:single.nameAZ`,\n 'Name ( A-Z )'\n )}\n </Dropdown.Item>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <StyledSwitchContainer>\n {TYPES.map(item => (\n <StyledSwitch\n key={item.value}\n active={item.value === type}\n onClick={() => setType(item.value)}\n >\n {item.label}\n </StyledSwitch>\n ))}\n </StyledSwitchContainer>\n </div>\n <div className=\"score-table\">\n <Table hover borderless className=\"score-table-left\">\n <thead>\n <tr>\n <th style={{ height: '75px' }}>\n <span>\n {t(\n `track-assignment-multi-class:single.name`,\n 'Name'\n )}\n </span>\n </th>\n <th style={{ height: '75px' }}>\n <span>\n {t(\n `track-assignment-multi-class:single.score`,\n 'Score'\n )}\n </span>\n </th>\n {questions &&\n questions\n .slice((questionsPage - 1) * 10, questionsPage * 10)\n .map((question, index) => (\n <th key={question.Id}>\n <span\n className={`header-cell-question ${classDetails.TotalSubmission >\n 0 && 'has-submissions'} ${type}`}\n onClick={() => {\n setQuestionSummaryData({\n question,\n answers:\n studentScores.byQuestion[\n (questionsPage - 1) * 10 + index + 1\n ]\n });\n setShowQuestionSummary(true);\n }}\n >\n {type === TYPES[0].value ? (\n <ScorePieChart\n submissions={{\n correct: Object.values(\n studentScores.byQuestion[\n (questionsPage - 1) * 10 + index + 1\n ].correct\n ).reduce(\n (total, { num }) => total + num,\n 0\n ),\n wrong: Object.values(\n studentScores.byQuestion[\n (questionsPage - 1) * 10 + index + 1\n ].wrong\n ).reduce(\n (total, { num }) => total + num,\n 0\n ),\n notSubmitted:\n classDetails.TotalAssignee -\n classDetails.TotalSubmission\n }}\n />\n ) : (\n <>\n <ScoreCount\n type=\"wrong\"\n num={Object.values(\n studentScores.byQuestion[\n (questionsPage - 1) * 10 + index + 1\n ].wrong\n ).reduce(\n (total, { num }) => total + num,\n 0\n )}\n />\n <ScoreCount\n type=\"correct\"\n num={Object.values(\n studentScores.byQuestion[\n (questionsPage - 1) * 10 + index + 1\n ].correct\n ).reduce(\n (total, { num }) => total + num,\n 0\n )}\n />\n </>\n )}\n <span>{`Q${question.DisplayOrder}`}</span>\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {studentScores && (scoresOrder === 1 || scoresOrder === 2)\n ? studentScores.byStudent\n .filter(student => student.hasSubmitted === true)\n .sort(\n compareValues(\n sortingOrderHashmap[scoresOrder][0],\n sortingOrderHashmap[scoresOrder][1]\n )\n )\n .map(student => (\n <tr key={`left-${student.ID}`}>\n <td\n className=\"cell-student-name\"\n onClick={() => {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n }}\n >\n <strong>\n {student.FullName.toUpperCase()}\n </strong>\n </td>\n <td\n className=\"cell-score\"\n style={{ height: '43px', width: '10rem' }}\n onClick={() => {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n }}\n >\n {student.hasSubmitted ? (\n <>\n <ProgressBar\n variant=\"progress-bar-score\"\n now={\n (student.score /\n singleClassReport[0].TotalQuestion) *\n 100\n }\n style={{\n width: '42px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n <strong style={{ marginRight: '0.5rem' }}>\n {student.score}\n </strong>\n {` / ${singleClassReport[0].TotalQuestion}`}\n </>\n ) : (\n <ProgressBar\n className=\"progress-not-submitted\"\n now={0}\n style={{\n width: '41px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n )}\n </td>\n {student.questions.length > 0\n ? student.questions\n .slice(\n (questionsPage - 1) * 10 + 1,\n questionsPage * 10 + 1\n )\n .map((result, index) => (\n <td\n key={`qn${index}-result-${student.ID}`}\n className=\"cell-answer\"\n >\n <QuestionResultIcon result={result} />\n </td>\n ))\n : questions\n .slice(\n (questionsPage - 1) * 10,\n questionsPage * 10\n )\n .map((question, index) => (\n <td\n key={`qn${index}-result-${student.ID}`}\n className=\"cell-answer\"\n >\n <QuestionResultIcon result=\"no-attempt\" />\n </td>\n ))}\n </tr>\n ))\n : studentScores.byStudent\n .sort(\n compareValues(\n sortingOrderHashmap[scoresOrder][0],\n sortingOrderHashmap[scoresOrder][1]\n )\n )\n .map(student => (\n <tr key={`left-${student.ID}`}>\n <td\n onClick={() => {\n if (student.hasSubmitted === true) {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n } else {\n return null;\n }\n }}\n >\n <strong>\n {student.FullName.toUpperCase()}\n </strong>\n </td>\n <td\n className=\"cell-score\"\n onClick={() => {\n if (student.hasSubmitted === true) {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n } else {\n return null;\n }\n }}\n >\n {student.hasSubmitted ? (\n <>\n <ProgressBar\n variant=\"progress-bar-score\"\n now={\n (student.score /\n singleClassReport[0].TotalQuestion) *\n 100\n }\n style={{\n width: '41px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n <strong style={{ marginRight: '0.5rem' }}>\n {student.score}\n </strong>\n {` / ${singleClassReport[0].TotalQuestion}`}\n </>\n ) : (\n <ProgressBar\n className=\"progress-not-submitted\"\n now={0}\n style={{\n width: '41px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n )}\n </td>\n {student.questions.length > 0\n ? student.questions\n .slice(\n (questionsPage - 1) * 10 + 1,\n questionsPage * 10 + 1\n )\n .map((result, index) => (\n <td\n key={`qn${index}-result-${student.ID}`}\n className=\"cell-answer\"\n >\n <QuestionResultIcon result={result} />\n </td>\n ))\n : questions\n .slice(\n (questionsPage - 1) * 10,\n questionsPage * 10\n )\n .map((question, index) => (\n <td\n key={`qn${index}-result-${student.ID}`}\n className=\"cell-answer\"\n >\n <QuestionResultIcon result=\"no-attempt\" />\n </td>\n ))}\n </tr>\n ))}\n {studentScores &&\n (scoresOrder === 1 || scoresOrder === 2) &&\n studentScores.byStudent\n .filter(student => student.hasSubmitted === false)\n .sort(\n compareValues(\n sortingOrderHashmap[3][0],\n sortingOrderHashmap[3][1]\n )\n )\n .map(student => (\n <tr key={`left-${student.ID}`}>\n <td\n onClick={() => {\n if (student.hasSubmitted === true) {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n } else {\n return null;\n }\n }}\n >\n <strong>{student.FullName.toUpperCase()}</strong>\n </td>\n <td\n className=\"cell-score\"\n onClick={() => {\n if (student.hasSubmitted === true) {\n setSelectedStudent(student.ID);\n setShowStudentSummary(true);\n } else {\n return null;\n }\n }}\n >\n {student.hasSubmitted ? (\n <>\n <ProgressBar\n variant=\"progress-bar-score\"\n now={\n (student.score /\n singleClassReport[0].TotalQuestion) *\n 100\n }\n style={{\n width: '41px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n <strong style={{ marginRight: '0.5rem' }}>\n {student.score}\n </strong>\n {` / ${singleClassReport[0].TotalQuestion}`}\n </>\n ) : (\n <ProgressBar\n className=\"progress-not-submitted\"\n now={0}\n style={{\n width: '41px',\n height: '6px',\n margin: '0 0.5rem 0 0'\n }}\n />\n )}\n </td>\n {questions\n .slice(\n (questionsPage - 1) * 10,\n questionsPage * 10\n )\n .map((question, index) => (\n <td\n key={`qn${index}-result-${student.ID}`}\n className=\"cell-answer\"\n >\n <QuestionResultIcon result=\"no-attempt\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </Table>\n {questions.length > 10 && (\n <QuestionPagination\n currentPage={questionsPage}\n numOfPages={Math.ceil(questions.length / 10)}\n setPage={setQuestionsPage}\n />\n )}\n </div>\n </div>\n </SingleClassReportPage>\n )}\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const TrackAssignmentPage = styled.main`\n .assignment-content {\n padding-right: 2rem;\n position: absolute;\n top: 50px;\n left: 240px;\n width: calc(100vw - 240px);\n }\n\n @media (max-width: 1024px) {\n .assignment-content {\n padding-right: 2rem;\n position: absolute;\n top: 50px;\n left: 80px;\n width: calc(100vw - 80px);\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport SidebarTrackAssignment from 'components/Sidebar/SidebarTrackAssignment';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport Overlay from 'components/Content/Overlay';\nimport Header from 'components/Header/Header';\nimport AssignmentSummary from './AssignmentSummary';\nimport OtherAssignments from './OtherAssignments';\nimport MultiClassReport from './MultiClassReport';\nimport SingleClassReport from './SingleClassReport';\nimport { TrackAssignmentPage } from './TrackAssignment.styles';\n\nexport default function TrackAssignment() {\n const [expanded, setExpanded] = useState(false);\n const toggleNavigation = () => setExpanded(!expanded);\n\n return (\n <>\n <Header />\n <TrackAssignmentPage>\n <Sidebar\n expanded={expanded}\n toggleNavigation={toggleNavigation}\n className=\"sidebar--auto\"\n >\n <SidebarTrackAssignment />\n </Sidebar>\n <div className=\"assignment-content\">\n <Overlay isVisible={expanded} toggleVisible={toggleNavigation} />\n <Switch>\n <Route\n exact\n path=\"/track-assignment/homework/:homeworkID\"\n component={props => <MultiClassReport {...props} />}\n />\n <Route\n exact\n path=\"/track-assignment/homework/:homeworkID/:classID\"\n component={props => <SingleClassReport {...props} />}\n />\n <Route\n exact\n path=\"/track-assignment\"\n component={() => <AssignmentSummary isOthers={false} />}\n />\n <Route\n path=\"/track-assignment/others/:teacherID\"\n component={props => <AssignmentSummary isOthers {...props} />}\n />\n <Route\n exact\n path=\"/track-assignment/others\"\n component={() => <OtherAssignments />}\n />\n </Switch>\n </div>\n </TrackAssignmentPage>\n </>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { Link, useLocation } from 'react-router-dom';\nimport manageClass from 'assets/img/icon-manage-class-class.svg';\nimport myGroup from 'assets/img/icon-manage-class-group.svg';\nimport gameSetting from 'assets/img/icon-game-setting.svg';\nimport { featureToggle } from 'constants/index';\n\nexport default function SidebarManageClass() {\n const { t } = useTranslation(['manage-class']);\n const { isAdmin } = useSelector(state => state.login);\n const { pathname } = useLocation();\n const isActivePath = path => path === pathname;\n return (\n <div className=\"sidebar-create-assign\">\n <ul className=\"sidebar-create-assign__ul list-group\">\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class') ? ' nav-link-active' : ''\n }`}\n to=\"/manage-class\"\n >\n <img src={manageClass} alt=\"icon-list\" className=\"sidebar-icon\" />\n <span>{t(`manage-class:sidebar.manageClass`, 'Manage Class')}</span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class/show') ? ' nav-link-active' : ''\n }`}\n to=\"/manage-class/show\"\n >\n <img src={myGroup} alt=\"icon-list\" className=\"sidebar-icon\" />\n <span>{t(`manage-class:sidebar.myGroups`, 'My Groups')}</span>\n </Link>\n </li>\n {featureToggle.myGroups && (\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class/groups') ? ' nav-link-active' : ''\n }`}\n >\n <img\n src={myGroup}\n alt=\"icon-list\"\n className=\"sidebar-icon icon-question-cart\"\n />\n <span>{t(`manage-class:sidebar.myGroups`, 'My Groups')}</span>\n </Link>\n </li>\n )}\n {isAdmin && (\n <>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class/privategroups')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/manage-class/privategroups\"\n >\n <img\n src={myGroup}\n alt=\"icon-list\"\n className=\"sidebar-icon icon-question-cart\"\n />\n <span>\n {t(`manage-class:sidebar.allPvtGroups`, 'All Private Groups')}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class/add') ? ' nav-link-active' : ''\n }`}\n to=\"/manage-class/add\"\n >\n <img\n src={myGroup}\n alt=\"icon-list\"\n className=\"sidebar-icon icon-question-cart\"\n />\n <span>\n {t(`manage-class:sidebar.addPvtGroups`, 'Add Private Groups')}\n </span>\n </Link>\n </li>\n </>\n )}\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/manage-class/game-setting')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/manage-class/game-setting\"\n >\n <img src={gameSetting} alt=\"icon-list\" className=\"sidebar-icon\" />\n <span>\n {t(`manage-class:sidebar.mathGameSetting`, 'Math Game Setting')}\n </span>\n </Link>\n </li>\n </ul>\n </div>\n );\n}\n","export default (items, keyValue, keyLabel) => {\n const options = [];\n items.forEach(item => {\n options.push({\n value: item[keyValue],\n label: item[keyLabel]\n });\n });\n return options;\n};\n","import styled from 'styled-components';\n\nexport const StudentsListContainer = styled.div`\n position: relative;\n padding: 0 250px 0 205px;\n @media (max-width: 1024px) {\n padding: 0 250px 0 66px;\n }\n @media (max-width: 640px) {\n padding: 0 250px 0 0;\n }\n &.on-loading {\n background-color: rgba(114, 114, 114, 0.15);\n }\n\n .spinner-border {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -16px;\n margin-left: -16px;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { find, findIndex, propEq } from 'ramda';\nimport { selectStudents } from 'stores/privateGroup/actions';\nimport { fetchStudentsSearchRequest } from 'stores/utils/lookup/actions';\nimport { StudentsListContainer } from './StudentsList.styles';\n\nexport default function StudentList(props) {\n const { t } = useTranslation(['manage-class-private-group']);\n const { keyword } = props;\n const { isLoading, students } = useSelector(state => state.lookup);\n const dispatch = useDispatch();\n const [page, setPage] = useState(0);\n\n const { selectedStudents } = useSelector(state => state.privateGroup);\n const checkChecked = id => {\n return (\n findIndex(propEq('UserId', parseInt(id, 10)))(selectedStudents) !== -1\n );\n };\n const onChange = event => {\n const { value } = event.target;\n // Use new variable to avoid mutating state\n let updatedData;\n\n if (!checkChecked(value)) {\n const newData = find(propEq('UserId', parseInt(value, 10)))(students);\n\n updatedData = [...selectedStudents, newData];\n } else {\n const index = findIndex(propEq('UserId', parseInt(value, 10)))(\n selectedStudents\n );\n updatedData = [\n ...selectedStudents.slice(0, index),\n ...selectedStudents.slice(index + 1)\n ];\n }\n\n dispatch(selectStudents(updatedData));\n };\n\n const isAllQuestionsSelected = students\n .map(student => student.UserId)\n .every(\n v => selectedStudents.map(selected => selected.UserId).indexOf(v) !== -1\n );\n\n const toggleCheckAll = event => {\n let updatedData;\n if (event.target.checked) {\n updatedData = [...selectedStudents, ...students];\n } else {\n const studentIds = students.map(student => student.UserId);\n updatedData = selectedStudents.filter(\n student => studentIds.indexOf(student.UserId) === -1\n );\n }\n dispatch(selectStudents(updatedData));\n };\n\n // Reset page number when search term changes\n useEffect(() => {\n setPage(0);\n }, [keyword]);\n\n const onPrev = () => {\n const prev = page - 1;\n dispatch(fetchStudentsSearchRequest(keyword, prev));\n setPage(prev);\n };\n\n const onNext = () => {\n const next = page + 1;\n dispatch(fetchStudentsSearchRequest(keyword, next));\n setPage(next);\n };\n const dontHaveData = page === 0 && students.length === 0;\n return (\n <StudentsListContainer>\n {isLoading && (\n <Spinner animation=\"border\">\n <span className=\"sr-only\">\n {t('manage-class-private-group:add.loading', 'Loading...')}\n </span>\n </Spinner>\n )}\n {students.length > 0 ? (\n <>\n <div className=\"table-responsive\">\n <table className=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">\n {t(\n 'manage-class-private-group:add.table.username',\n 'Username'\n )}\n </th>\n <th scope=\"col\">\n {t('manage-class-private-group:add.table.name', 'Name')}\n </th>\n <th scope=\"col\">\n {t('manage-class-private-group:add.table.school', 'School')}\n </th>\n <th scope=\"col\">\n {t('manage-class-private-group:add.table.level', 'Level')}\n </th>\n <th scope=\"col\">\n {t('manage-class-private-group:add.table.class', 'Class')}\n </th>\n <th scope=\"col\">\n <Form.Check\n checked={isAllQuestionsSelected}\n type=\"checkbox\"\n onChange={toggleCheckAll}\n label={t(\n 'manage-class-private-group:add.table.addAll',\n 'Add all?'\n )}\n bsPrefix=\"form-check-visible\"\n />\n </th>\n </tr>\n </thead>\n <tbody>\n {students.map(student => (\n <tr key={student.UserId}>\n <td>{student.UserName}</td>\n <td>{student.DisplayName}</td>\n <td>{student.SchoolName}</td>\n <td>{student.LevelId}</td>\n <td>{student.ClassName}</td>\n <td>\n <Form.Check\n checked={checkChecked(student.UserId)}\n onChange={onChange}\n type=\"checkbox\"\n value={student.UserId}\n bsPrefix=\"form-check-visible\"\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n ) : (\n <div className=\"d-flex justify-content-center align-items-center p-5\">\n {dontHaveData && keyword === '' ? (\n <h4>\n {t(\n 'manage-class-private-group:add.studentSearch',\n 'Please do a Students Search'\n )}\n </h4>\n ) : (\n <h4>\n {t(\n 'manage-class-private-group:add.notFound',\n 'Student Not found'\n )}\n </h4>\n )}\n </div>\n )}\n {!dontHaveData && (\n <nav aria-label=\"Page navigation example\">\n <ul className=\"pagination table-pagination\">\n <li className=\"page-item pagination-prev\">\n <button\n type=\"button\"\n className=\"page-link\"\n disabled={page === 0}\n onClick={onPrev}\n >\n {t('manage-class-private-group:add.prev', 'Previous')}\n </button>\n </li>\n <li className=\"page-item pagination-next\">\n <button type=\"button\" className=\"page-link\" onClick={onNext}>\n {t('manage-class-private-group:add.next', 'Next')}\n </button>\n </li>\n </ul>\n </nav>\n )}\n </StudentsListContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const Header = styled.div`\n margin-top: 2rem;\n padding-right: 250px;\n padding-left: 205px;\n @media (max-width: 1024px) {\n padding-left: 66px;\n }\n @media (max-width: 640px) {\n padding-left: 0;\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SidebarRight from 'components/Sidebar/SidebarRight';\nimport { Form } from 'react-bootstrap';\n// eslint-disable-next-line no-unused-vars\nimport Select from 'react-select';\nimport optionsParser from 'helpers/optionsParser';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchStudentsSearchRequest } from 'stores/utils/lookup/actions';\nimport { groupBy, propEq, findIndex } from 'ramda';\nimport StudentList from 'components/ManageClass/StudentsList';\nimport { selectStudents, savePrivateGroup } from 'stores/privateGroup/actions';\nimport Border from 'components/Shared/Border';\nimport AlertModal from 'components/Alert/AlertModal';\nimport { Header } from './GroupAdd.styles';\n\n/**\n * @todo when the UI for empty cart questions done, use cartQuestions from reducer or other resources\n * @note client still not confirm whether cartQuestions is the data we will be use\n */\nexport default function GroupAdd() {\n const { t } = useTranslation(['manage-class-private-group']);\n const dispatch = useDispatch();\n const { levels } = useSelector(state => state.levels);\n // eslint-disable-next-line no-unused-vars\n const levelOptions = optionsParser(levels, 'ID', 'Name');\n const { classes } = useSelector(state => state.lookup);\n const { selectedStudents } = useSelector(state => state.privateGroup);\n\n // const [selectedLevel, setSelectedLevel] = useState([]);\n const [keyword, setKeyword] = useState('');\n const [searchTerm, setSearchTerm] = useState('');\n const [title, setTitle] = useState('');\n\n // message alertt\n const [showSuccess, setShowSuccess] = useState(false);\n const [showFailed, setShowFailed] = useState(false);\n\n // eslint-disable-next-line no-unused-vars\n // const onChangeLevel = value => {\n // if (!isNil(value)) {\n // setSelectedLevel(value[0].value);\n // }\n // };\n // Level on change effect\n // useEffect(() => {\n // dispatch(fetchClassRequest(selectedLevel));\n // }, [dispatch, selectedLevel]);\n\n // eslint-disable-next-line no-unused-vars\n const classOptions = optionsParser(classes, 'ID', 'Name');\n\n const onChangeKeyword = event => {\n setKeyword(event.target.value);\n };\n const onChangeTitle = event => {\n setTitle(event.target.value);\n };\n\n const onClick = () => {\n setSearchTerm(keyword);\n dispatch(fetchStudentsSearchRequest(keyword));\n };\n\n const groupedStudents = groupBy(\n student => student.SchoolName,\n selectedStudents\n );\n\n const saveGroup = () => {\n if (title.trim() !== '') {\n dispatch(savePrivateGroup(title));\n dispatch(selectStudents([]));\n setTitle('');\n setKeyword('');\n setShowSuccess(true);\n } else {\n setShowFailed(true);\n }\n };\n\n const onRemove = userId => {\n const index = findIndex(propEq('UserId', parseInt(userId, 10)))(\n selectedStudents\n );\n const updatedData = [\n ...selectedStudents.slice(0, index),\n ...selectedStudents.slice(index + 1)\n ];\n\n dispatch(selectStudents(updatedData));\n };\n\n return (\n <>\n <AlertModal\n title={t(\n 'manage-class-private-group:modal.titleFail',\n 'Save Private Group Failed!'\n )}\n message={t(\n 'manage-class-private-group:modal.messageFail',\n 'Private Group name must be filled'\n )}\n isShow={showFailed}\n handleClose={() => setShowFailed(false)}\n buttons={\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={() => setShowFailed(false)}\n >\n {t('manage-class-private-group:modal.ok', 'Ok')}\n </button>\n }\n />\n\n <AlertModal\n title={t(\n 'manage-class-private-group:modal.titleSuccess',\n 'Save Private Group Successfully!'\n )}\n message={t(\n 'manage-class-private-group:modal.messageSuccess',\n 'Private Group has been saved'\n )}\n isShow={showSuccess}\n handleClose={() => setShowSuccess(false)}\n buttons={\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={() => setShowSuccess(false)}\n >\n {t('manage-class-private-group:modal.ok', 'Ok')}\n </button>\n }\n />\n\n <Header>\n <div className=\"form-row align-items-center\">\n {/* @todo Multi select school */}\n {/* <Form.Group className=\"col-md-6\">\n <Form.Control as=\"select\" name=\"level\">\n <option value=\"class\">Class</option>\n <option value=\"group\">Group</option>\n </Form.Control>\n </Form.Group> */}\n {/* @todo Pending API allow search by level */}\n {/* <Form.Group className=\"col-md-6\">\n <Select\n placeholder=\"Select level(s)\"\n options={levelOptions}\n onChange={onChangeLevel}\n isMulti\n />\n </Form.Group> */}\n {/* @todo Pending API allow search by class */}\n {/* <Form.Group className=\"col-md-6\">\n <Select\n placeholder=\"Select class(es)\"\n options={classOptions}\n onChange={() => {}}\n isMulti\n />\n </Form.Group> */}\n <Form.Group className=\"col-md-12\">\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder={t(\n 'manage-class-private-group:add.placeholder',\n 'Search by student username'\n )}\n value={keyword}\n onChange={onChangeKeyword}\n />\n </Form.Group>\n <Form.Group className=\"col-md-12\">\n <button type=\"button\" onClick={onClick} className=\"btn btn-primary\">\n {t('manage-class-private-group:add.submitBtn', 'Submit')}\n </button>\n </Form.Group>\n </div>\n </Header>\n <StudentList keyword={searchTerm} />\n <SidebarRight className=\"sidebar-manage-class\">\n <div className=\"form-group\">\n <input\n type=\"text\"\n placeholder={t(\n 'manage-class-private-group:add.groupName',\n 'Group Name'\n )}\n className=\"form-control\"\n onChange={onChangeTitle}\n value={title}\n />\n </div>\n {selectStudents.length > 0 && (\n <div className=\"group-list students-list\">\n <h5>\n {t(\n 'manage-class-private-group:add.selectedStu',\n 'Selected Students'\n )}\n </h5>\n {Object.entries(groupedStudents).map(\n ([studentSchool, schoolOfStudents]) => {\n return (\n <React.Fragment key={studentSchool}>\n <p className=\"text-muted\">{studentSchool}</p>\n {schoolOfStudents.map(singleStudent => (\n <div key={singleStudent.UserId}>\n <p>\n {singleStudent.DisplayName}{' '}\n <button\n className=\"btn btn-link btn-selected-student\"\n type=\"button\"\n value={singleStudent.UserId}\n onClick={() => onRemove(singleStudent.UserId)}\n />\n </p>\n </div>\n ))}\n <Border />\n </React.Fragment>\n );\n }\n )}\n </div>\n )}\n <button type=\"button\" onClick={saveGroup} className=\"btn btn-primary\">\n {t('manage-class-private-group:add.submitBtn', 'Submit')}\n </button>\n </SidebarRight>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const GroupsListPage = styled.div`\n padding-left: 205px;\n @media (max-width: 1024px) {\n padding-left: 66px;\n }\n @media (max-width: 640px) {\n padding-left: 0;\n }\n h5 {\n width: 100%;\n margin: 0.625rem auto 1.875rem auto;\n text-align: center;\n }\n .btn-private {\n padding-bottom: 3px;\n padding-top: 3px;\n margin-left: 15px;\n float: right;\n border: solid 1px rgba(114, 114, 114, 0.15);\n color: #ff5b00;\n &-create {\n float: right;\n margin-top: -55px;\n }\n }\n .list-group {\n .list-group-item {\n vertical-align: center;\n font-size: 18px;\n .list-group-initial {\n min-width: 2.25rem;\n display: inline-block;\n padding-top: 5px;\n padding-bottom: 5px;\n text-transform: uppercase;\n text-align: center;\n border-radius: 50%;\n margin-right: 12px;\n color: #fff;\n background-color: #ff5b00;\n }\n }\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { fetchPrivateGroupsRequest } from 'stores/privateGroup/actions';\nimport { GroupsListPage } from './GroupsList.styles';\n\n/**\n * @todo when the UI for empty cart questions done, use cartQuestions from reducer or other resources\n * @note client still not confirm whether cartQuestions is the data we will be use\n */\nexport default function GroupList() {\n const dispatch = useDispatch();\n const { t } = useTranslation(['manage-class-private-group']);\n\n const [groupName, setGroupName] = useState('');\n const { privateGroups } = useSelector(state => state.privateGroup);\n\n const handleChangeGroupName = group => {\n setGroupName(group);\n };\n\n useEffect(() => {\n dispatch(fetchPrivateGroupsRequest(groupName));\n }, [dispatch, groupName]);\n\n return (\n <GroupsListPage>\n <h5>\n {t('manage-class-private-group:all.title', 'Search Private Groups')}\n </h5>\n <Link\n type=\"button\"\n className=\"btn btn-primary btn-private-create\"\n to=\"/manage-class/add\"\n style={{\n marginRight: '1rem'\n }}\n >\n {t('manage-class-private-group:all.createBtn', 'Create New')}\n </Link>\n <Form.Group className=\"col-md-12\">\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder={t(\n 'manage-class-private-group:all.placeholder',\n 'Search by group name'\n )}\n value={groupName}\n onChange={event => handleChangeGroupName(event.target.value)}\n />\n </Form.Group>\n\n <ul className=\"list-group\" style={{ padding: '0 1rem' }}>\n {privateGroups.map(group => (\n <li key={group.id} className=\"list-group-item\">\n <span className=\"list-group-initial\">\n {group.Name.substr(0, 1)}\n </span>{' '}\n {group.Name}\n {/* @todo pending API for edit and delete */}\n {/* <button type=\"button\" className=\"btn btn-private\">\n Edit\n </button>\n <button type=\"button\" className=\"btn btn-private\">\n Delete\n </button> */}\n </li>\n ))}\n </ul>\n </GroupsListPage>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchIconsRequest } from 'stores/manage-class/actions';\nimport {\n EditClassIconSelectorContainer,\n PaginationContainer\n} from './EditClassIconSelector.styles';\n\nexport default function EditClassIconSelector({\n level,\n selectedIconID,\n setSelectedIconID\n}) {\n const dispatch = useDispatch();\n const { icons, iconsLevel } = useSelector(state => state.manageClasses);\n const [currentPage, setCurrentPage] = useState(1);\n const maxPage = Math.ceil(icons.length / 10);\n\n useEffect(() => {\n if (iconsLevel !== level) {\n dispatch(\n fetchIconsRequest({\n level\n })\n );\n }\n }, [dispatch, iconsLevel, level]);\n return (\n <EditClassIconSelectorContainer>\n <div className=\"edit-classicon-selector\">\n {icons\n .slice((currentPage - 1) * 10, (currentPage - 1) * 10 + 10)\n .map(icon => (\n <div\n key={`icon-${icon.Id}`}\n className={`class-icon-container ${icon.Id === selectedIconID &&\n 'selected'}`}\n onClick={() => {\n setSelectedIconID(icon.Id);\n }}\n >\n <span className=\"class-icon\">\n <img\n src={icon.IconUrl}\n width=\"51.26px\"\n height=\"51.26px\"\n alt=\"Class Icon\"\n />\n </span>\n </div>\n ))}\n </div>\n <PaginationContainer>\n {currentPage > 1 && (\n <button\n type=\"button\"\n onClick={() => {\n setCurrentPage(currentPage - 1);\n }}\n >\n {'<'}\n </button>\n )}\n {currentPage < maxPage && (\n <button\n type=\"button\"\n onClick={() => {\n setCurrentPage(currentPage + 1);\n }}\n >\n {'>'}\n </button>\n )}\n </PaginationContainer>\n </EditClassIconSelectorContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const EditClassModalBodyContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #060606;\n font-size: 0.875rem;\n .field-title {\n font-size: 0.875rem;\n color: rgba(26, 26, 26, 0.45);\n font-weight: 600;\n margin-right: 0.5rem;\n width: 100px;\n text-align: right;\n }\n .edit-class-field {\n display: flex;\n width: 100%;\n flex-direction: row;\n justify-content: flex-start;\n input {\n width: 360px;\n height: 38px;\n padding: 0 0.5rem;\n border: solid 1px rgba(112, 112, 112, 0.36);\n }\n }\n .selected-class-icon {\n width: 82px;\n height: 82px;\n border-radius: 50%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 1rem 0;\n }\n .selection-action-buttons {\n display: flex;\n flex-direction: row;\n border-top: solid 1px rgba(112, 112, 112, 0.22);\n justify-content: space-evenly;\n padding-top: 1rem;\n width: 100%;\n .btn-outline-cancel {\n color: #ff5b00;\n border: solid 1px #d5d5d5;\n width: 127px;\n &:hover {\n border-color: #ff5b00;\n background: #fff7f3;\n }\n }\n .btn-ok {\n width: 127px;\n color: #fffdfc;\n background: #ff5b00;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button, Spinner } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { editClassRequest } from 'stores/manage-class/actions';\nimport { LevelColors } from 'constants/index';\nimport EditClassIconSelector from 'components/ManageClass/EditClassIconSelector';\nimport { EditClassModalBodyContainer } from './EditClassModalBody.styles';\n\nexport default function EditClassModalBody({\n hide,\n selectedClass,\n selectedYear\n}) {\n const { t } = useTranslation(['manage-class']);\n const dispatch = useDispatch();\n const { isLoading, editClassResult, error, icons } = useSelector(\n state => state.manageClasses\n );\n\n const [className, setClassName] = useState(selectedClass.Name);\n const [selectedIconID, setSelectedIconID] = useState(selectedClass.IconId);\n const currentIconIndex = icons.findIndex(icon => icon.Id === selectedIconID);\n\n useEffect(() => {\n if (editClassResult === true) {\n hide();\n }\n }, [editClassResult, hide]);\n return (\n <EditClassModalBodyContainer>\n <div className=\"edit-class-field\" style={{ marginBottom: '1rem' }}>\n <span className=\"field-title\">\n {t(`manage-class:editGroup.year`, 'Year')}\n </span>\n <p style={{ color: '#707070' }}>{selectedYear}</p>\n </div>\n <div className=\"edit-class-field\" style={{ alignItems: 'center' }}>\n <span className=\"field-title\">\n {t(`manage-class:editGroup.className`, 'Class name')}\n </span>\n <input\n type=\"text\"\n value={className}\n placeholder=\"Enter a class name\"\n onChange={e => {\n setClassName(e.target.value);\n }}\n />\n </div>\n\n <span\n className=\"selected-class-icon\"\n style={{\n background: LevelColors[selectedClass.LevelId],\n color: '#fff'\n }}\n >\n {currentIconIndex !== -1 ? (\n <img src={icons[currentIconIndex].IconUrl} alt=\"Current Class Icon\" />\n ) : (\n <h1>{selectedClass.Name.slice(0, 1).toUpperCase()}</h1>\n )}\n </span>\n\n <div className=\"edit-class-field\" style={{ height: '200px' }}>\n <span className=\"field-title\">\n {t(`manage-class:editGroup.classIcon`, 'Class icon')}\n </span>\n <EditClassIconSelector\n level={selectedClass.LevelId}\n selectedIconID={selectedIconID}\n setSelectedIconID={setSelectedIconID}\n />\n </div>\n\n {error && <span style={{ color: '#ff5b00' }}>{error}</span>}\n <div className=\"selection-action-buttons\">\n <Button\n variant=\"outline-cancel\"\n onClick={() => {\n hide();\n }}\n >\n {t(`manage-class:editGroup.cancel`, 'Cancel')}\n </Button>\n <Button\n variant=\"ok\"\n onClick={() => {\n dispatch(\n editClassRequest({\n classID: selectedClass.ID,\n className,\n iconID: selectedIconID\n })\n );\n }}\n >\n {t(`manage-class:editGroup.save`, 'Save')}\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </Button>\n </div>\n </EditClassModalBodyContainer>\n );\n}\n","const sortStudentsByClass = students => {\n const sortedStudents = [];\n for (const student of students) {\n const hasClass = sortedStudents.findIndex(\n item => item.classID === student.ClassID\n );\n if (hasClass === -1) {\n sortedStudents.push({\n classID: student.ClassID,\n students: [student]\n });\n } else {\n sortedStudents[hasClass].students.push(student);\n }\n }\n return sortedStudents;\n};\n\nexport default sortStudentsByClass;\n","import styled from 'styled-components';\n\nexport const ResetPwContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #060606;\n font-size: 0.875rem;\n gap: 1.8rem;\n p {\n margin-bottom: 0;\n }\n .success-title {\n font-size: 1.125rem;\n color: #4dae30;\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: -2.5rem;\n }\n .desc {\n width: 90%;\n padding: 0 2.5rem;\n }\n .btn-success-ok {\n width: 127px;\n color: #fffdfc;\n background: #5ed46a;\n margin-bottom: 1rem;\n }\n .reset-title {\n color: #ff5b00;\n font-size: 1.125rem;\n }\n .err {\n color: #ff5b00;\n }\n .selection-action-buttons {\n display: flex;\n flex-direction: row;\n border-top: solid 1px rgba(112, 112, 112, 0.22);\n justify-content: space-evenly;\n padding-top: 1rem;\n width: 100%;\n margin-top: 1rem;\n .btn-outline-cancel {\n color: #ff5b00;\n border: solid 1px #d5d5d5;\n width: 127px;\n &:hover {\n border-color: #ff5b00;\n background: #fff7f3;\n }\n }\n .btn-ok {\n width: 127px;\n color: #fffdfc;\n background: #ff5b00;\n }\n }\n`;\n\nexport const Sample = styled.div`\n border: 1px solid #d1d1d1;\n display: flex;\n padding: 0.8rem;\n gap: 2rem;\n`;\n","import React from 'react';\nimport { useTranslation, Trans } from 'react-i18next';\nimport { Button, Spinner } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { resetPwRequest } from 'stores/manage-class/actions';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport { ResetPwContainer, Sample } from './ResetPwModalBody.styles';\n\nexport default function ResetPwModalBody({ hide, studentID }) {\n const { t } = useTranslation(['manage-class']);\n const dispatch = useDispatch();\n const { isLoading, resetPwResult, error } = useSelector(\n state => state.manageClasses\n );\n return (\n <ResetPwContainer>\n {resetPwResult === true ? (\n <>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n {t(`manage-class:resetModal.success`, 'Success!')}\n </span>\n <p className=\"desc\">\n <Trans i18nKey=\"manage-class:resetModal.successMsg\">\n You have successfully reset the password\n <strong>to the same as the student’s Login ID!</strong>\n </Trans>\n </p>\n <Sample>\n <p>\n <Trans i18nKey=\"manage-class:resetModal.sample1\">\n e.g. Login ID: <strong>abc123</strong>\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"manage-class:resetModal.sample2\">\n Reset Password: <strong>abc123</strong>\n </Trans>\n </p>\n </Sample>\n <Button\n variant=\"success-ok\"\n onClick={() => {\n hide();\n }}\n >\n {t(`manage-class:studModal.ok`, 'OK')}\n </Button>\n </>\n ) : (\n <>\n <p className=\"reset-title\">\n {t(`manage-class:resetModal.resetPswd`, 'Reset Password')}\n </p>\n <p>\n {t(\n `manage-class:resetModal.resetConfirm`,\n 'Do you want to reset the password?'\n )}\n </p>\n {error && <span className=\"err\">{error}</span>}\n <div className=\"selection-action-buttons\">\n <Button\n variant=\"outline-cancel\"\n onClick={() => {\n hide();\n }}\n >\n {t(`manage-class:resetModal.no`, 'No')}\n </Button>\n <Button\n variant=\"ok\"\n onClick={() => {\n dispatch(\n resetPwRequest({\n studentID\n })\n );\n }}\n >\n {t(`manage-class:resetModal.yes`, 'Yes')}\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </Button>\n </div>\n </>\n )}\n </ResetPwContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const StudentDetailsModalContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #0a0a0a;\n font-size: 0.875rem;\n .student-details-section {\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 0 1rem;\n border-bottom: solid 1px rgba(112, 112, 112, 0.39);\n .student-details-name {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n span {\n margin-left: 0.5rem;\n color: #363636;\n }\n }\n .student-details-row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n margin-top: 0.5rem;\n @media (max-width: 975px) {\n flex-direction: column;\n align-items: flex-start;\n }\n .student-details-field {\n display: flex;\n flex-direction: row;\n margin-right: 1rem;\n margin-top: 1rem;\n }\n }\n }\n .placeholder-title {\n font-size: 0.75rem;\n color: rgba(10, 10, 10, 0.39);\n margin-right: 1rem;\n text-align: right;\n }\n .field-group-1 {\n width: 150px;\n }\n .field-group-2 {\n width: 100px;\n }\n .group-1 {\n width: 50px;\n @media (max-width: 1400px) {\n text-align: left;\n }\n @media (max-width: 975px) {\n width: initial;\n }\n }\n .group-2 {\n width: 100px;\n @media (max-width: 975px) {\n text-align: left;\n width: initial;\n }\n }\n .group-3 {\n width: 100px;\n @media (max-width: 1400px) {\n text-align: left;\n }\n @media (max-width: 975px) {\n width: initial;\n }\n }\n .parent-section {\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 1rem 1rem;\n border-bottom: solid 1px rgba(112, 112, 112, 0.39);\n .parent-details-row {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n .parent-details-field {\n margin-right: 1rem;\n width: 30%;\n .parent-detail-email {\n color: #ff5b00;\n text-decoration: underline;\n }\n }\n }\n }\n .selection-action-buttons {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding-top: 1rem;\n width: 100%;\n .btn-ok {\n width: 127px;\n color: #fffdfc;\n background: #ff5b00;\n }\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchStudentDetailsRequest } from 'stores/manage-class/actions';\nimport { Button } from 'react-bootstrap';\nimport moment from 'moment';\nimport { compareValues } from 'helpers/singleClassReport';\nimport SchoolPlanIcon from 'assets/img/icon-manage-class-student-list-plan-school.svg';\nimport StandardPlanIcon from 'assets/img/icon-manage-class-student-list-plan-standard.svg';\nimport PremiumPlanIcon from 'assets/img/icon-manage-class-student-list-plan-premium.svg';\nimport LinkedIcon from 'assets/img/icon-manage-class-linked-active.svg';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport Spinner from 'components/Shared/Spinner';\nimport { StudentDetailsModalContainer } from './StudentDetailsModalBody.styles';\n\n// Helper to parse parent/s details\nconst parseParents = data => {\n const parentTypes = {\n 0: 'Unlinked',\n 1: 'Father',\n 2: 'Mother',\n 3: 'Others'\n };\n const result = [];\n // Check for respective parent details\n for (const parent of data) {\n if (\n parent.ParentName !== null ||\n parent.ParentEmail !== null ||\n parent.PhoneNumber !== null\n ) {\n result.push({\n type:\n parent.RelationshipType !== 3 && parent.RelationshipType !== 0\n ? parentTypes[parent.RelationshipType]\n : '',\n order: parent.RelationshipType === 0 ? 4 : parent.RelationshipType,\n name: parent.ParentName,\n email: parent.ParentEmail,\n phone: parent.PhoneNumber,\n hasLinked: parent.RelationshipType !== 0\n });\n }\n }\n return result.sort(compareValues('order', 'asc'));\n};\n\nconst getPlanIcon = planID => {\n switch (planID) {\n case 0:\n return SchoolPlanIcon;\n case 2:\n return StandardPlanIcon;\n case 3:\n return PremiumPlanIcon;\n case 5:\n return PremiumPlanIcon;\n case 6:\n return PremiumPlanIcon;\n default:\n return null;\n }\n};\n\nexport default function StudentDetailsModalBody({ hide, studentID }) {\n const { t } = useTranslation(['manage-class']);\n const dispatch = useDispatch();\n const { studentDetails, isStudentDetailsLoading } = useSelector(\n state => state.manageClasses\n );\n let parents;\n if (\n studentDetails.hasOwnProperty('Parents') &&\n studentDetails.Parents.length\n ) {\n parents = parseParents(studentDetails.Parents);\n } else {\n parents = [];\n }\n useEffect(() => {\n dispatch(\n fetchStudentDetailsRequest({\n studentID\n })\n );\n }, [dispatch, studentID]);\n return (\n <StudentDetailsModalContainer>\n {isStudentDetailsLoading && <Spinner top=\"0px\" />}\n {!isStudentDetailsLoading && studentDetails.hasOwnProperty('UserId') && (\n <>\n <div className=\"student-details-section\">\n <div className=\"student-details-name\">\n <img\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n src={studentDetails.ProfileImage}\n alt=\"Student Profile\"\n width=\"40px\"\n height=\"40px\"\n style={{\n borderRadius: '50%'\n }}\n />\n <span>\n <strong>{studentDetails.DisplayName}</strong>\n </span>\n </div>\n <div className=\"student-details-row\">\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-1\">\n {t(`manage-class:searchResult.loginId`, 'Login ID')}\n </span>\n <span className=\"field-group-1\">{studentDetails.UserName}</span>\n </div>\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-2\">\n {t(`manage-class:searchResult.password`, 'Password')}\n </span>\n <span className=\"field-group-2\">\n {studentDetails.password === null\n ? 'N.A'\n : studentDetails.password}\n </span>\n </div>\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-3\">\n {t(\n `manage-class:studModal.accActiveDate`,\n 'Account Activation Date'\n )}\n </span>\n <span>\n {studentDetails.ActivationDate === null\n ? 'N.A'\n : moment(studentDetails.ActivationDate).format(\n 'DD/MM/YYYY'\n )}\n </span>\n </div>\n </div>\n <div\n className=\"student-details-row\"\n style={{ marginBottom: '0.5rem' }}\n >\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-1\">\n {t(`manage-class:studModal.class`, 'Class')}\n </span>\n <span className=\"field-group-1\">\n {studentDetails.ClassName}\n </span>\n </div>\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-2\">\n {t(`manage-class:studModal.subPlan`, 'Subscription Plan')}\n </span>\n <span className=\"field-group-2\">\n {getPlanIcon(studentDetails.PlanId) !== null && (\n <img\n src={getPlanIcon(studentDetails.PlanId)}\n alt=\"Plan Icon\"\n />\n )}\n {studentDetails.PlanName}\n </span>\n </div>\n {studentDetails.ValidStartDate !== null &&\n studentDetails.ValidEndDate !== null ? (\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-3\">\n {t(`manage-class:studModal.validPeriod`, 'Valid Period')}\n </span>\n <span>{`${moment(studentDetails.ValidStartDate).format(\n 'DD/MM/YYYY'\n )} - ${moment(studentDetails.ValidEndDate).format(\n 'DD/MM/YYYY'\n )}`}</span>\n </div>\n ) : (\n <div className=\"student-details-field\">\n <span className=\"placeholder-title group-3\">\n {t(`manage-class:studModal.validPeriod`, 'Valid Period')}\n </span>\n\n <span>N.A</span>\n </div>\n )}\n </div>\n </div>\n {parents !== null &&\n parents.map(parent => (\n <div className=\"parent-section\" key={parent.id}>\n <div className=\"parent-details-row\">\n <div>\n <span className=\"placeholder-title\">\n {parent.name === null ? (\n <span>N.A</span>\n ) : (\n <span>\n {parent.type} {t(`manage-class:search.name`, 'Name')}\n </span>\n )}\n </span>\n <span>{parent.name}</span>\n </div>\n </div>\n <div className=\"parent-details-row\">\n <div className=\"parent-details-field\">\n <span className=\"placeholder-title\">PH</span>\n {parent.phone === null || parent.phone.length === 0 ? (\n <span>N.A</span>\n ) : (\n <span>{parent.phone}</span>\n )}\n </div>\n <div className=\"parent-details-field\">\n <span className=\"placeholder-title\">\n {t(`manage-class:studModal.email`, 'Email')}\n </span>\n {parent.email === null ? (\n <span>N.A</span>\n ) : (\n <span className=\"parent-detail-email\">\n {parent.email}\n </span>\n )}\n </div>\n {parent.hasLinked && (\n <div className=\"parent-details-field\">\n <img src={LinkedIcon} alt=\"Linked Icon\" />\n <span style={{ marginLeft: '0.5rem', width: '153px' }}>\n {t(\n `manage-class:studModal.linkedParent`,\n 'Linked with Parent APP'\n )}\n </span>\n </div>\n )}\n </div>\n </div>\n ))}\n <div className=\"selection-action-buttons\">\n <Button\n variant=\"ok\"\n onClick={() => {\n hide();\n }}\n >\n {t(`manage-class:studModal.ok`, 'OK')}\n </Button>\n </div>\n </>\n )}\n </StudentDetailsModalContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const PaginationContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.9375rem;\n font-weight: 600;\n color: #1c1b1b;\n padding: 2rem 1rem;\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n }\n input {\n border: solid 1px #cecece;\n }\n .next-prev-page {\n margin-right: 1rem;\n @media only screen and (max-width: 768px) {\n margin-right: 5px;\n }\n .btn-outline-page-primary {\n background: #fff;\n border: solid 1px #cecece;\n font-weight: 600;\n margin-left: 1rem;\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n margin-left: 5px;\n }\n }\n .btn-outline-page-primary.selected {\n color: #fff;\n background: #ff5b00;\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n }\n }\n .btn-outline-page-primary:hover {\n color: #ff5b00;\n }\n .btn-outline-page-primary.disabled,\n .btn-outline-page-primary:disabled {\n color: #d8d8d8;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { PaginationContainer } from './Pagination.styles';\n\nexport default function Pagination({ currentPage, setPage }) {\n const { t } = useTranslation(['create-assign-saved']);\n const { maxSearchPages } = useSelector(state => state.manageClasses);\n const [debouncedCallback] = useDebouncedCallback(value => {\n setPage(value);\n }, 2000);\n return (\n <PaginationContainer>\n <div className=\"next-prev-page\">\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage <= 1}\n onClick={() => setPage(currentPage - 1)}\n >\n &lt; {t(`create-assign-saved:pagination.prev`, 'Prev')}\n </Button>\n {currentPage === 1 && (\n <>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n {maxSearchPages >= 2 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n )}\n {maxSearchPages >= 3 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 2)}\n >\n {currentPage + 2}\n </Button>\n )}\n </>\n )}\n {currentPage > 1 && currentPage < maxSearchPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n </>\n )}\n {currentPage === 2 && currentPage === maxSearchPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n {currentPage > 2 && currentPage === maxSearchPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 2)}\n >\n {currentPage - 2}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage >= maxSearchPages}\n onClick={() => setPage(currentPage + 1)}\n >\n {t(`create-assign-saved:pagination.next`, 'Next')} &gt;\n </Button>\n </div>\n <span>\n {t(`create-assign-saved:pagination.page`, 'Page')}\n <input\n name=\"page\"\n type=\"number\"\n placeholder={currentPage}\n min={1}\n max={maxSearchPages}\n onChange={e => {\n e.preventDefault();\n if (\n e.target.value !== currentPage &&\n e.target.value >= 1 &&\n e.target.value <= maxSearchPages\n ) {\n debouncedCallback(parseInt(e.target.value));\n }\n }}\n />{' '}\n {t(`create-assign-saved:pagination.of`, 'of')} {maxSearchPages}\n </span>\n </PaginationContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const MatchedResultSpan = styled.span`\n .result-highlighted-match {\n color: #ff5b00;\n background: #fff;\n }\n`;\n","import React from 'react';\nimport { MatchedResultSpan } from './MatchedResult.styles';\n\nexport default function MatchedResult({ result, searchTerm }) {\n const lowercaseResult = result.toLowerCase();\n const lowercaseSearchTerm = searchTerm.toLowerCase();\n const stringArray = lowercaseResult.split(lowercaseSearchTerm);\n const output = [];\n let originalStringIndex = 0;\n for (let i = 0; i < stringArray.length; i++) {\n if (i > 0) {\n output.push(\n result.slice(\n originalStringIndex,\n originalStringIndex + searchTerm.length\n )\n );\n originalStringIndex += searchTerm.length;\n }\n output.push(\n result.slice(\n originalStringIndex,\n originalStringIndex + stringArray[i].length\n )\n );\n originalStringIndex += stringArray[i].length;\n }\n return (\n <span>\n {output.map((text, index) => {\n if (text.toLowerCase() === searchTerm.toLowerCase()) {\n return (\n <MatchedResultSpan>\n <span\n key={`text-${index}`}\n className=\"result-highlighted-match\"\n >{`${text}`}</span>\n </MatchedResultSpan>\n );\n }\n return <>{`${text}`}</>;\n })}\n </span>\n );\n}\n","import styled from 'styled-components';\n\nexport const SearchResultContainer = styled.div`\n .empty-result {\n display: flex;\n justify-content: center;\n margin-top: 250px;\n }\n .search-result-labels {\n display: grid;\n grid-template-columns: repeat(15, 1fr);\n .login_id {\n grid-column: 6/8;\n text-align: center;\n }\n .pswd {\n grid-column: 8/10;\n text-align: center;\n }\n .activation_date {\n grid-column: 10/12;\n text-align: center;\n }\n .status {\n grid-column: 12/14;\n text-align: center;\n }\n }\n .search-result-container {\n display: flex;\n flex-direction: column;\n margin: 0px 50px;\n width: 100%;\n .class-name {\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 10px;\n }\n .table {\n background-color: white;\n .table-bordered {\n display: flex;\n flex-direction: column;\n border: none;\n .table-content {\n display: grid;\n grid-template-columns: repeat(15, 1fr);\n font-size: 14px;\n text-align: center;\n @media only screen and (max-width: 1024px) {\n font-size: 12px;\n }\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n }\n .name {\n grid-column: 1/6;\n display: flex;\n overflow-wrap: break-word;\n text-align: left;\n img {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n margin-right: 10px;\n @media only screen and (max-width: 768px) {\n width: 25px;\n height: 25px;\n margin-right: 5px;\n }\n }\n span {\n img {\n width: 22px;\n height: 22px;\n margin-left: -25px;\n margin-bottom: -40px;\n @media only screen and (max-width: 768px) {\n width: 15px;\n height: 15px;\n margin-left: -15px;\n margin-bottom: -30px;\n }\n }\n }\n p {\n margin-left: 3px;\n }\n }\n .login {\n grid-column: 6/8;\n overflow-wrap: break-word;\n }\n .password {\n grid-column: 8/10;\n overflow-wrap: break-word;\n .rest-pswd {\n background: none;\n border: none;\n color: #ff723d;\n font-size: 13px;\n text-decoration: underline;\n margin-left: 10px;\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n margin-left: 3px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n }\n }\n .active-date {\n grid-column: 10/12;\n overflow-wrap: break-word;\n }\n .link {\n grid-column: 12/14;\n }\n .details {\n grid-column: 14/16;\n button {\n @media only screen and (max-width: 768px) {\n padding: 5px;\n }\n }\n .btn-outline-primary:focus {\n background-color: transparent;\n color: #ff723d;\n }\n }\n }\n }\n }\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { isNil } from 'ramda';\nimport moment from 'moment';\nimport { useDebounce } from 'use-debounce';\nimport {\n searchStudentRequest,\n resetPwResultAction,\n resetError\n} from 'stores/manage-class/actions';\nimport EmptySearchResults from 'assets/img/empty-search-results.svg';\nimport SchoolPlanIcon from 'assets/img/icon-manage-class-student-list-plan-school.svg';\nimport StandardPlanIcon from 'assets/img/icon-manage-class-student-list-plan-standard.svg';\nimport PremiumPlanIcon from 'assets/img/icon-manage-class-student-list-plan-premium.svg';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport sortStudentsByClass from 'helpers/parseStudentSearchResults';\nimport Spinner from 'components/Shared/Spinner';\nimport PopupModal from './PopupModal';\nimport ResetPwModalBody from './ResetPwModalBody';\nimport StudentDetailsModalBody from './StudentDetailsModalBody';\nimport Pagination from './PaginationSearch';\nimport MatchedResult from './MatchedResult';\nimport { SearchResultContainer } from './SearchResults.styles';\n\nexport default function SearchResults({ searchTerm, searchType }) {\n const { t } = useTranslation(['manage-class']);\n const [debouncedSearchTerm] = useDebounce(searchTerm, 2000);\n const getPlanIcon = planID => {\n switch (planID) {\n case 0:\n return SchoolPlanIcon;\n case 2:\n return StandardPlanIcon;\n case 3:\n return PremiumPlanIcon;\n case 5:\n return PremiumPlanIcon;\n case 6:\n return PremiumPlanIcon;\n default:\n return null;\n }\n };\n\n const [showStudentDetailsModal, setShowStudentDetailsModal] = useState(false);\n const [selectedStudentID, setSelectedStudentID] = useState(null);\n\n const hideStudentDetailsModal = () => {\n setShowStudentDetailsModal(false);\n };\n\n const dispatch = useDispatch();\n const { searchResults, isLoading, classes, resetPwResult } = useSelector(\n state => state.manageClasses\n );\n const [currentPage, setCurrentPage] = useState(1);\n const sortedSearch = searchResults.hasOwnProperty('List')\n ? sortStudentsByClass(searchResults.List)\n : [];\n const [showResetPwModal, setShowResetPwModal] = useState(false);\n\n useEffect(() => {\n if (searchType === t(`manage-class:search.name`)) {\n dispatch(\n searchStudentRequest({\n pageNum: currentPage,\n searchName: debouncedSearchTerm.trim(),\n searchID: null,\n schoolID: classes.ID\n })\n );\n } else {\n dispatch(\n searchStudentRequest({\n pageNum: currentPage,\n searchName: null,\n searchID: debouncedSearchTerm.trim(),\n schoolID: classes.ID\n })\n );\n }\n // eslint-disable-next-line\n }, [currentPage, dispatch, debouncedSearchTerm, searchType, classes.ID]);\n\n const hideResetPwModal = () => {\n if (resetPwResult === true) {\n if (searchType === t(`manage-class:search.name`)) {\n dispatch(\n searchStudentRequest({\n pageNum: currentPage,\n searchName: debouncedSearchTerm.trim(),\n searchID: null,\n schoolID: classes.ID\n })\n );\n } else {\n dispatch(\n searchStudentRequest({\n pageNum: currentPage,\n searchName: null,\n searchID: debouncedSearchTerm.trim(),\n schoolID: classes.ID\n })\n );\n }\n }\n dispatch(resetError());\n dispatch(resetPwResultAction());\n setShowResetPwModal(false);\n };\n\n const openResetPwModal = () => {\n dispatch(resetError());\n setShowResetPwModal(true);\n };\n\n const passwordFormat = (pass, username) => {\n if (isNil(pass)) {\n return 'N.A';\n }\n if (pass === username) {\n return t(`manage-class:studList.sameAsId`, 'Same as the login ID');\n }\n return pass;\n };\n\n return (\n <SearchResultContainer>\n <PopupModal\n show={showStudentDetailsModal}\n hide={hideStudentDetailsModal}\n size=\"lg\"\n >\n <StudentDetailsModalBody\n hide={hideStudentDetailsModal}\n studentID={selectedStudentID}\n />\n </PopupModal>\n <PopupModal show={showResetPwModal} hide={hideResetPwModal} size=\"sm\">\n <ResetPwModalBody\n hide={hideResetPwModal}\n studentID={selectedStudentID}\n />\n </PopupModal>\n {isLoading && <Spinner top=\"200px\" />}\n {!isLoading &&\n (sortedSearch.length > 0 ? (\n <div className=\"empty-result\">\n <div className=\"search-result-container\">\n <div className=\"search-result-labels\">\n <div className=\"login_id\">\n {t(`manage-class:searchResult.loginId`, 'Login ID')}\n </div>\n <div className=\"pswd\">\n {t(`manage-class:searchResult.password`, 'Password')}\n </div>\n <div className=\"activation_date\">\n {t(\n `manage-class:searchResult.activeDate`,\n 'Activation Date '\n )}\n {t(`manage-class:searchResult.dateFormat`, '(dd/mm/yyyy)')}\n </div>\n <div className=\"status\">\n {t(\n `manage-class:searchResult.status`,\n 'Parent App Linking Status'\n )}\n </div>\n </div>\n {sortedSearch.map(classObject => (\n <div key=\"id\">\n <div className=\"class-name\">\n {classObject.students[0].ClassName}\n </div>\n <table className=\"table\">\n <tbody className=\"table-bordered\">\n {classObject.students.map(student => (\n <tr className=\"table-content\" key={student.UserId}>\n <td className=\"name\">\n <img\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n src={student.ProfileImage}\n alt=\"profile\"\n />\n <span>\n {getPlanIcon(student.PlanId) !== null && (\n <img\n src={getPlanIcon(student.PlanId)}\n alt=\"plan\"\n />\n )}\n </span>\n <p>\n {searchType === t(`manage-class:search.name`) ? (\n <MatchedResult\n result={student.DisplayName}\n searchTerm={debouncedSearchTerm}\n />\n ) : (\n <>{student.DisplayName}</>\n )}\n </p>\n </td>\n <td className=\"login\">\n {searchType !== t(`manage-class:search.name`) ? (\n <MatchedResult\n result={student.UserName}\n searchTerm={debouncedSearchTerm}\n />\n ) : (\n <>{student.UserName}</>\n )}\n </td>\n <td className=\"password\">\n {passwordFormat(student.password, student.UserName)}\n {student.password !== student.UserName && (\n <button\n type=\"button\"\n className=\"rest-pswd\"\n onClick={() => {\n setSelectedStudentID(student.UserId);\n openResetPwModal();\n }}\n >\n {t(`manage-class:studList.reset`, 'Reset')}\n </button>\n )}\n </td>\n <td className=\"active-date\">\n {student.ActivationDate === null\n ? 'N.A'\n : moment(student.ActivationDate).format(\n 'DD/MM/YYYY'\n )}\n </td>\n <td className=\"link\">\n {student.ParentAppLinkingStatus\n ? t(`manage-class:searchResult.linked`, 'Linked')\n : '-'}\n </td>\n <td className=\"details\">\n <button\n className=\"btn btn-outline-primary btn-details\"\n type=\"button\"\n onClick={() => {\n setSelectedStudentID(student.UserId);\n setShowStudentDetailsModal(true);\n }}\n >\n {t(\n `manage-class:searchResult.details`,\n 'Details'\n )}\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ))}\n <Pagination currentPage={currentPage} setPage={setCurrentPage} />\n </div>\n </div>\n ) : (\n <div className=\"empty-result\">\n <img src={EmptySearchResults} alt=\"No results found\" />\n </div>\n ))}\n </SearchResultContainer>\n );\n}\n","const sortClasses = classList => {\n const sortedClasses = [];\n for (const classObject of classList) {\n const hasLevel = sortedClasses.findIndex(\n item => item.level === classObject.LevelId\n );\n if (hasLevel === -1) {\n sortedClasses.push({\n level: classObject.LevelId,\n classes: [classObject]\n });\n } else {\n sortedClasses[hasLevel].classes.push(classObject);\n }\n }\n return sortedClasses;\n};\n\nexport default sortClasses;\n","import styled from 'styled-components';\nimport { LevelHoverColors } from 'constants/index';\n\nexport const CardContainer = styled.div`\n background-color: white;\n border-radius: 10px;\n box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.16);\n margin-bottom: 40px;\n margin-top: 10px;\n margin-right: 100px;\n border: solid 5px rgba(0, 0, 0, 0);\n :hover {\n border: ${props => `solid 5px ${LevelHoverColors[props.level]}`};\n }\n @media only screen and (max-width: 1024px) {\n margin-right: 90px;\n }\n`;\n\nexport const CardTopSection = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n justify-content: flex-start;\n`;\n","import React from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport report from 'assets/img/icon-manage-class-report.svg';\nimport edit from 'assets/img/icon-manage-class-edit.svg';\nimport student from 'assets/img/icon-manage-class-student.svg';\nimport { LevelColors } from 'constants/index';\nimport { CardContainer, CardTopSection } from './ClassCard.styles';\n\nexport default function ClassCard({ showModal, card, setSelectedClass }) {\n const history = useHistory();\n return (\n <CardContainer className=\"class-list__container__card\" level={card.LevelId}>\n <CardTopSection>\n <div className=\"class-list__container__card__top\">\n <div\n className=\"class-list__container__card__top__img\"\n onClick={() => {\n history.push(`/manage-class/${card.ID}`);\n }}\n style={{\n background: LevelColors[card.LevelId],\n cursor: 'pointer'\n }}\n >\n {card.IconUrl !== 'No Path found' ? (\n <img src={card.IconUrl} alt=\"class-icon\" />\n ) : (\n <h1>{card.Name.slice(0, 1).toUpperCase()}</h1>\n )}\n </div>\n </div>\n <div className=\"class-list__container__card__name\">\n <p>{card.Name}</p>\n </div>\n </CardTopSection>\n <div className=\"class-list__container__card__button card-footer\">\n <img\n src={report}\n alt=\"report\"\n className=\"class-list__container__card__button__icon\"\n />\n <img\n src={edit}\n alt=\"report\"\n className=\"class-list__container__card__button__icon\"\n onClick={() => {\n setSelectedClass(card);\n showModal(true);\n }}\n style={{\n cursor: 'pointer'\n }}\n />\n <Link to={`/manage-class/${card.ID}`}>\n <img\n src={student}\n alt=\"report\"\n className=\"class-list__container__card__button__icon\"\n />\n </Link>\n </div>\n </CardContainer>\n );\n}\n\n// rgba(255, 203, 81, 1);\n// rgba(255, 230, 146, 0.74);\n","import styled from 'styled-components';\n\nexport const ClassCollection = styled.div`\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n border-bottom: 1px solid #d9d9d9;\n font-family: 'Muli';\n margin-top: 50px;\n .class-list__level {\n grid-column: 3/17;\n color: #1a1a1a;\n }\n .class-list__container {\n grid-column: 3/17;\n display: flex;\n flex-wrap: wrap;\n &__card {\n width: 171px;\n min-height: 140px;\n background-color: white;\n border-radius: 10px;\n box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.16);\n margin-bottom: 40px;\n margin-top: 10px;\n margin-right: 100px;\n outline-style: solid;\n outline: #ffe692 solid 5px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n @media only screen and (max-width: 1024px) {\n margin-right: 90px;\n }\n\n &__top {\n display: flex;\n justify-content: center;\n &__img {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 82px;\n height: 82px;\n border-radius: 50%;\n margin: 20px;\n color: #fff;\n }\n }\n &__name {\n display: flex;\n justify-content: center;\n color: #1a1a1a;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n }\n .card-footer {\n background-color: transparent;\n padding: 10px 5px;\n display: flex;\n justify-content: center;\n margin-top: 10px;\n }\n &__button {\n img {\n color: red;\n margin: 0px 10px;\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport sortClasses from 'helpers/parseClassList';\nimport { compareValues } from 'helpers/singleClassReport';\nimport ClassCard from './ClassCard';\nimport { ClassCollection } from './ClassCardCollection.styles';\n\nconst ClassCardCollection = ({ showModal, setSelectedClass, filterLevel }) => {\n const { t } = useTranslation(['manage-class']);\n const { classes } = useSelector(state => state.manageClasses);\n\n const sortData = classes.hasOwnProperty('ClassList')\n ? sortClasses(classes.ClassList).sort(compareValues('level', 'asc'))\n : [];\n\n const filteredData =\n filterLevel === parseInt(filterLevel, 10)\n ? sortData.filter(levelObject => levelObject.level === filterLevel)\n : sortData;\n\n const cardList = filteredData.map(item => (\n <>\n <ClassCollection>\n <div className=\"class-list__level\">\n <h5>\n {t('manage-class:main.primary', 'Primary')} {item.level}\n </h5>\n </div>\n <div className=\"class-list__container\">\n {item.classes.map(singleCard => (\n <ClassCard\n showModal={showModal}\n card={singleCard}\n setSelectedClass={setSelectedClass}\n />\n ))}\n </div>\n </ClassCollection>\n </>\n ));\n\n return <div>{cardList}</div>;\n};\n\nexport default ClassCardCollection;\n","import styled from 'styled-components';\n\nexport const DisplayClassPage = styled.div`\n .error {\n width: 100%;\n text-align: center;\n margin-top: 20rem;\n }\n #dropdown-custom {\n width: 160px;\n margin-left: 10px;\n border: 1px solid #c5c5c5;\n background-color: #ffffff;\n @media only screen and (max-width: 870px) {\n width: 120px;\n margin-top: 5px;\n font-size: 14px;\n }\n @media only screen and (max-width: 768px) {\n width: 120px;\n margin-top: 5px;\n }\n }\n #search {\n background-image: ${props => `url(${props.searchIcon})`};\n background-repeat: no-repeat;\n text-indent: 20px;\n background-position: left;\n background-position-x: 10px;\n @media only screen and (max-width: 870px) {\n margin-top: 5px;\n font-size: 14px;\n }\n }\n #search:focus {\n background-image: none;\n text-indent: 0px;\n }\n .btn {\n @media only screen and (max-width: 768px) {\n font-size: 12px;\n }\n }\n display: flex;\n flex-direction: column;\n padding-left: 195px;\n z-index: 100;\n @media (max-width: 1024px) {\n padding: 0;\n }\n\n .top-bar {\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n position: fixed;\n right: 0px;\n left: 195px;\n background-color: #ffffff;\n box-shadow: 0px 3px 6px #818181;\n padding: 10px 0px;\n font-family: 'Muli';\n margin-bottom: 10px;\n z-index: 10;\n @media only screen and (max-width: 1024px) {\n left: 55px;\n }\n .calendar-year {\n grid-column: 2/5;\n display: flex;\n font-size: 16px;\n p {\n margin-top: 8px;\n }\n }\n .school {\n grid-column: 7/11;\n display: flex;\n img {\n height: 42px;\n width: 42px;\n }\n p {\n font-size: 20px;\n color: #545454;\n font-weight: 500;\n line-height: 25px;\n margin-top: 8px;\n margin-left: 10px;\n @media only screen and (max-width: 1024px) {\n margin-top: 0px;\n text-align: center;\n }\n @media only screen and (max-width: 1142px) {\n font-size: 16px;\n }\n @media only screen and (max-width: 1024px) {\n font-size: 20px;\n margin-top: 8px;\n }\n @media only screen and (max-width: 916px) {\n font-size: 16px;\n }\n }\n }\n .level {\n grid-column: 13/16;\n display: flex;\n p {\n margin-top: 8px;\n }\n }\n }\n .search-bar {\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n padding: 40px 0px 10px 0px;\n margin-top: 60px;\n position: fixed;\n background-color: #f1f1f1;\n z-index: 9;\n .search-type-dropdown {\n grid-column: 6/7;\n }\n .search {\n grid-column: 7/12;\n .form-control:focus {\n border-color: #ffa200;\n }\n }\n }\n .text-information {\n display: flex;\n justify-content: center;\n margin-top: 145px;\n padding: 10px;\n text-align: center;\n width: calc(100vw - 195px);\n position: fixed;\n background-color: #f1f1f1;\n z-index: 8;\n span {\n color: #ff5b00;\n }\n @media (max-width: 1024px) {\n width: calc(100vw - 56x);\n }\n }\n .class-card {\n margin-top: 160px;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Dropdown, Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchClassesRequest,\n resetEditClassResult,\n resetError\n} from 'stores/manage-class/actions';\nimport moment from 'moment';\nimport PopupModal from 'components/ManageClass/PopupModal';\nimport EditClassModalBody from 'components/ManageClass/EditClassModalBody';\nimport SearchResults from 'components/ManageClass/SearchResults';\nimport ClassCardCollection from 'components/ManageClass/ClassCardCollection';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport SearchIcon from 'assets/img/icon-manage-class-lup.svg';\nimport { DisplayClassPage } from './DisplayClass.styles';\n\n// Helper\nfunction* range(start, end, step) {\n while (start >= end) {\n yield start;\n start += step;\n }\n}\n\nconst generateYears = () => {\n return Array.from(range(moment().year(), 2020, -1));\n};\n\nconst LevelMenuOption = value => `P${value}`;\n\nconst DisplayClass = () => {\n const { t } = useTranslation(['manage-class']);\n const searchTypes = [\n t(`manage-class:search.id`, 'ID'),\n t(`manage-class:search.name`, 'Name')\n ];\n const dispatch = useDispatch();\n const { levels } = useSelector(state => state.levels);\n const { classes, editClassResult } = useSelector(\n state => state.manageClasses\n );\n // Modal State\n const [showEditClassModal, setEditClassModal] = useState(false);\n const [selectedClass, setSelectedClass] = useState(null);\n // Search State\n const [searchTerm, setSearchTerm] = useState('');\n // Filter State\n const [filterLevel, setFilterLevel] = useState('');\n const [filterYear, setFilterYear] = useState(moment().year());\n const [filterType, setFilterType] = useState(\n t(`manage-class:search.name`, 'Name')\n );\n // Years Dropdown Options\n const years = generateYears();\n // Event handlers for popup modal\n const openEditClassModal = () => {\n dispatch(resetError());\n setEditClassModal(true);\n };\n const hideEditClassModal = () => {\n if (editClassResult === true) {\n dispatch(\n fetchClassesRequest({\n year: filterYear\n })\n );\n dispatch(resetEditClassResult());\n }\n setEditClassModal(false);\n };\n useEffect(() => {\n // for translating language in state\n if (filterType === t(`manage-class:search.id`)) {\n setFilterType(t(`manage-class:search.id`));\n } else {\n setFilterType(t(`manage-class:search.name`));\n }\n }, [filterType, searchTypes, t]);\n // useEffect to fetch classes data via redux saga\n useEffect(() => {\n dispatch(\n fetchClassesRequest({\n year: filterYear\n })\n );\n }, [dispatch, filterYear]);\n\n const schoolInfo = classes\n ? {\n logo: classes.SchoolLogo,\n name: classes.Name\n }\n : null;\n\n return (\n <DisplayClassPage searchIcon={SearchIcon}>\n {classes && classes.length === 0 && (\n <div className=\"error\">\n <h3>No classes found</h3>\n </div>\n )}\n {classes && (\n <>\n <PopupModal\n show={showEditClassModal}\n hide={hideEditClassModal}\n size=\"sm\"\n >\n <EditClassModalBody\n hide={hideEditClassModal}\n selectedClass={selectedClass}\n selectedYear={classes.Year}\n />\n </PopupModal>\n <div className=\"top-bar\">\n <div className=\"calendar-year\">\n <p>{t(`manage-class:header.year`, 'Year: ')}</p>\n <DropdownMenu\n selectedValue={filterYear}\n valueKey={null}\n values={years}\n setValue={setFilterYear}\n width=\"160px\"\n />\n </div>\n <div className=\"school\">\n {classes.hasOwnProperty('ClassList') && (\n <img\n onError={e => {\n e.target.style.display = 'none';\n }}\n src={schoolInfo.logo}\n alt=\"school-logo\"\n />\n )}\n <p>{schoolInfo.name}</p>\n </div>\n <div className=\"level\">\n <p>{t(`manage-class:header.level`, 'Level:')}</p>\n <DropdownMenu\n selectedValue={\n filterLevel !== ''\n ? `Primary ${filterLevel}`\n : t(`manage-class:header.all`, 'All')\n }\n valueKey={null}\n values={levels.map(level => level.ID)}\n setValue={setFilterLevel}\n valueTemplate={LevelMenuOption}\n width=\"160px\"\n >\n <Dropdown.Item\n onClick={event => {\n event.preventDefault();\n setFilterLevel('');\n }}\n >\n {t(`manage-class:header.all`, 'All')}\n </Dropdown.Item>\n </DropdownMenu>\n </div>\n </div>\n <div className=\"search-bar\">\n <div className=\"search-type-dropdown\">\n <DropdownMenu\n selectedValue={filterType}\n valueKey={null}\n values={searchTypes}\n setValue={setFilterType}\n width=\"160px\"\n />\n </div>\n <Form className=\"search col-sm-12\">\n <input\n type=\"search\"\n id=\"search\"\n className=\"form-control\"\n placeholder={t(`manage-class:search.search`, 'Search')}\n value={searchTerm}\n onChange={e => {\n setSearchTerm(e.target.value);\n }}\n />\n </Form>\n </div>\n <div className=\"text-information\">\n <p>\n {t(`manage-class:search.resetMsg`, 'You can click to ')}\n <span>\n {t(`manage-class:search.resetMsg1`, `reset student's password`)}\n </span>\n {t(`manage-class:search.resetMsg2`, `and edit other settings.`)}\n </p>\n </div>\n {searchTerm.length >= 3 ? (\n <SearchResults searchTerm={searchTerm} searchType={filterType} />\n ) : (\n <div className=\"class-card\">\n <ClassCardCollection\n showModal={openEditClassModal}\n setSelectedClass={setSelectedClass}\n filterLevel={filterLevel}\n />\n </div>\n )}\n </>\n )}\n </DisplayClassPage>\n );\n};\nexport default DisplayClass;\n","import styled from 'styled-components';\n\nexport const StudentTableContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n margin-top: 130px;\n margin-right: 20px;\n width: 100%;\n @media only screen and (max-width: 800px) {\n margin-top: 130px;\n }\n .table {\n grid-column: 1/17;\n tbody {\n height: 200px;\n overflow-y: auto;\n width: 100%;\n }\n td {\n vertical-align: middle;\n @media only screen and (max-width: 768px) {\n padding: 0px;\n }\n }\n .table-head {\n th {\n color: rgba($color: #0a0a0a, $alpha: 0.42);\n font-size: 14px;\n font-weight: 100;\n vertical-align: middle;\n text-align: center;\n @media only screen and (max-width: 1260px) {\n font-size: 12px;\n }\n @media only screen and (max-width: 1132px) {\n font-size: 10px;\n }\n @media only screen and (max-width: 768px) {\n font-size: 6px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n span {\n display: flex;\n justify-content: center;\n }\n }\n }\n .table-row {\n font-size: 14px;\n padding: 12px 5px;\n text-align: center;\n @media only screen and (max-width: 1132px) {\n font-size: 12px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n .plan {\n font-size: 11px;\n text-align: left;\n @media only screen and (max-width: 800px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n img {\n grid-column: 1/3;\n height: 22px;\n width: 22px;\n margin-right: 5px;\n @media only screen and (max-width: 800px) {\n height: 0px;\n width: 0px;\n }\n }\n p {\n grid-column: 3/8;\n margin-top: 7px;\n margin-left: 0px;\n }\n }\n &--student {\n font-weight: 600;\n text-align: left;\n @media only screen and (max-width: 800px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n img {\n margin-right: 10px;\n height: 40px;\n width: 40px;\n border-radius: 50%;\n @media only screen and (max-width: 800px) {\n height: 20px;\n width: 20px;\n margin-left: 5px;\n margin-right: 5px;\n }\n @media only screen and (max-width: 639px) {\n height: 0px;\n width: 0px;\n margin-left: 3px;\n margin-right: 0px;\n }\n }\n }\n &--student-id {\n text-align: left;\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n text-align: center;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n }\n &--password {\n text-align: center;\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n button {\n background: none;\n border: none;\n color: #ff723d;\n font-size: 13px;\n text-decoration: underline;\n margin-left: 10px;\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n margin-left: 3px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n }\n }\n &--active-date {\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n }\n .btn-details {\n width: 83px;\n height: 27px;\n padding: 0;\n border: 1px solid #d5d5d5;\n @media only screen and (max-width: 1044px) {\n font-size: 10px;\n width: 40px;\n height: 20px;\n }\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n width: 35px;\n height: 15px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 2px;\n width: 15px;\n height: 5px;\n }\n }\n .btn-outline-primary:focus {\n background-color: transparent;\n color: #ff723d;\n }\n }\n //the container\n .container-checkbox {\n display: flex;\n justify-content: center;\n padding: 10px;\n margin-top: 5px;\n @media only screen and (max-width: 1440px) {\n margin-top: 10px;\n }\n @media only screen and (max-width: 1260px) {\n margin-top: 12px;\n }\n @media only screen and (max-width: 1132px) {\n margin-top: 14px;\n }\n @media only screen and (max-width: 1024px) {\n margin-top: 20px;\n }\n @media only screen and (max-width: 768px) {\n margin-top: 6px;\n }\n }\n //hide the browser's default check-box\n .container-checkbox input {\n opacity: 0;\n cursor: pointer;\n }\n //create a custom checkbox\n .container-checkbox .checkmark {\n position: absolute;\n left: 255px;\n height: 25px;\n width: 25px;\n border-radius: 4px;\n border: 1px solid #9e9e9e;\n background-color: white;\n @media only screen and (max-width: 1024px) {\n left: 90px;\n }\n @media only screen and (max-width: 1132px) {\n height: 17px;\n width: 17px;\n }\n @media only screen and (max-width: 768px) {\n height: 18px;\n width: 18px;\n left: 95px;\n }\n @media only screen and (max-width: 587px) {\n height: 10px;\n width: 10px;\n left: 95px;\n }\n }\n //on mouse hover\n .container-checkbox:hover input ~ .checkmark {\n background-color: #ffc400;\n border: none;\n }\n //when checkbox is checked\n .container-checkbox input:checked ~ .checkmark {\n background-color: #ef7836;\n border: none;\n }\n //create the checkmark/indicator (hidden when not checked)\n .container-checkbox .checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n //show the checkmark when checked\n .container-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n //style the checkmark/indicator\n .container-checkbox .checkmark:after {\n left: 8px;\n top: 2px;\n width: 8px;\n height: 16px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n @media only screen and (max-width: 1132px) {\n width: 6px;\n height: 10px;\n border-width: 0 2px 2px 0;\n left: 6px;\n }\n @media only screen and (max-width: 768px) {\n width: 6px;\n height: 10px;\n border-width: 0 2px 2px 0;\n left: 6px;\n }\n @media only screen and (max-width: 587px) {\n width: 4px;\n height: 6px;\n border-width: 0 1.5px 1.5px 0;\n left: 3px;\n top: 1px;\n }\n }\n .student-check-box {\n position: inherit;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { isNil } from 'ramda';\nimport {\n fetchStudentsRequest,\n resetPwResultAction,\n resetError\n} from 'stores/manage-class/actions';\nimport moment from 'moment';\nimport SchoolPlanIcon from 'assets/img/icon-manage-class-student-list-plan-school.svg';\nimport StandardPlanIcon from 'assets/img/icon-manage-class-student-list-plan-standard.svg';\nimport PremiumPlanIcon from 'assets/img/icon-manage-class-student-list-plan-premium.svg';\nimport LinkApp from 'assets/img/icon-manage-class-student-list-link.svg';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport Spinner from 'components/Shared/Spinner';\nimport PopupModal from './PopupModal';\nimport StudentDetailsModalBody from './StudentDetailsModalBody';\nimport ResetPwModalBody from './ResetPwModalBody';\nimport { StudentTableContainer } from './StudentTable.styles';\n\n// Helpers\nconst setCheckboxesToChecked = check => {\n const checkboxes = document.getElementsByClassName('individual');\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < checkboxes.length; i++) {\n checkboxes[i].checked = check;\n }\n};\n\nconst getPlanIcon = planID => {\n switch (planID) {\n case 0:\n return SchoolPlanIcon;\n case 2:\n return StandardPlanIcon;\n case 3:\n return PremiumPlanIcon;\n case 5:\n return PremiumPlanIcon;\n case 6:\n return PremiumPlanIcon;\n default:\n return null;\n }\n};\n\nexport default function StudentTable({\n selectedStudentIDs,\n setSelectedStudentIDs,\n classID,\n currentPage,\n setPage\n}) {\n const { t } = useTranslation(['manage-class']);\n const dispatch = useDispatch();\n const { students, resetPwResult, isLoading } = useSelector(\n state => state.manageClasses\n );\n // Modal States\n const [showStudentDetailsModal, setShowStudentDetailsModal] = useState(false);\n const [showResetPwModal, setShowResetPwModal] = useState(false);\n // Stores selected studentID for reset pw & student details modal\n const [selectedStudentID, setSelectedStudentID] = useState(null);\n const openResetPwModal = () => {\n dispatch(resetError());\n setShowResetPwModal(true);\n };\n // Event handlers to hide popup modals\n const hideStudentDetailsModal = () => {\n setShowStudentDetailsModal(false);\n };\n const hideResetPwModal = () => {\n if (resetPwResult === true) {\n dispatch(\n fetchStudentsRequest({\n classID,\n pageNum: currentPage\n })\n );\n }\n dispatch(resetError());\n dispatch(resetPwResultAction());\n setShowResetPwModal(false);\n };\n\n const studentIDsArray = students?.hasOwnProperty('List')\n ? students.List.map(student => student.UserId)\n : [];\n\n const passwordFormat = (pass, username) => {\n if (isNil(pass)) {\n return 'N.A';\n }\n if (pass === username) {\n return t(`manage-class:studList.sameAsId`, 'Same as the login ID');\n }\n return pass;\n };\n\n // Effect to fetch data via redux saga\n useEffect(() => {\n dispatch(\n fetchStudentsRequest({\n classID,\n pageNum: currentPage\n })\n );\n // eslint-disable-next-line\n }, [currentPage, dispatch]);\n\n useEffect(() => {\n setPage(1);\n dispatch(\n fetchStudentsRequest({\n classID,\n pageNum: 1\n })\n );\n // eslint-disable-next-line\n }, [classID]);\n return (\n <StudentTableContainer>\n {isLoading && <Spinner position=\"inherit\" gridColumn=\"1/17\" />}\n {!isLoading && students?.hasOwnProperty('List') === false && (\n <span\n style={{\n gridColumn: '1/17',\n textAlign: 'center',\n marginTop: '1rem',\n height: '70vh'\n }}\n >\n No students\n </span>\n )}\n {!isLoading && students?.hasOwnProperty('List') && (\n <>\n <PopupModal show={showResetPwModal} hide={hideResetPwModal} size=\"sm\">\n <ResetPwModalBody\n hide={hideResetPwModal}\n studentID={selectedStudentID}\n />\n </PopupModal>\n <PopupModal\n show={showStudentDetailsModal}\n hide={hideStudentDetailsModal}\n size=\"lg\"\n >\n <StudentDetailsModalBody\n hide={hideStudentDetailsModal}\n studentID={selectedStudentID}\n />\n </PopupModal>\n <table className=\"table\">\n <thead className=\"table-borderless\">\n <tr className=\"table-head\">\n <div className=\"container-checkbox\">\n <input\n type=\"checkbox\"\n className=\"student-check-box\"\n onChange={event => {\n if (event.target.checked) {\n setCheckboxesToChecked(true);\n setSelectedStudentIDs(studentIDsArray);\n } else {\n setCheckboxesToChecked(false);\n setSelectedStudentIDs([]);\n }\n }}\n />\n <span className=\"checkmark\" />\n </div>\n <th scope=\"col\">{t(`manage-class:studList.plan`, 'Plan')}</th>\n <th scope=\"col\">\n {t(`manage-class:studList.studName`, 'Student Name')}\n </th>\n <th scope=\"col\">\n {t(`manage-class:searchResult.loginId`, 'Login ID')}\n </th>\n <th scope=\"col\">\n {t(`manage-class:searchResult.password`, 'Password')}\n </th>\n <th scope=\"col\">\n {t(`manage-class:searchResult.activeDate`, 'Activation Date')}\n <span>\n {t(`manage-class:searchResult.dateFormat`, '(dd/mm/yyyy)')}\n </span>\n </th>\n <th scope=\"col\">\n {t(\n `manage-class:searchResult.status`,\n 'Parent App Linking Status'\n )}\n </th>\n <th scope=\"col\"> </th>\n </tr>\n </thead>\n <tbody className=\"table-bordered\">\n {students?.hasOwnProperty('List') &&\n students.List.map(item => (\n <tr className=\"table-row\" key={item.UserId}>\n <div className=\"container-checkbox\">\n <input\n type=\"checkbox\"\n className=\"student-check-box individual\"\n name=\"check\"\n onChange={event => {\n if (event.target.checked) {\n setSelectedStudentIDs([\n ...selectedStudentIDs,\n item.UserId\n ]);\n } else {\n setSelectedStudentIDs(\n selectedStudentIDs.filter(\n sth => sth !== item.UserId\n )\n );\n }\n }}\n />\n <span className=\"checkmark\" />\n </div>\n <td\n className=\"plan\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderLeft:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n {getPlanIcon(item.PlanId) !== null && (\n <img src={getPlanIcon(item.PlanId)} alt=\"Plan Icon\" />\n )}\n {item.PlanName}\n </td>\n <td\n className=\"table-row--student\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n <img\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n src={item.ProfileImage}\n alt=\"profile\"\n />\n {item.DisplayName}\n </td>\n <td\n className=\"table-row--student-id\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n {item.UserName}\n </td>\n <td\n className=\"table-row--password\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n <span>\n {passwordFormat(item.password, item.UserName)}\n </span>\n {item.password !== item.UserName && (\n <button\n type=\"button\"\n onClick={() => {\n setSelectedStudentID(item.UserId);\n openResetPwModal();\n }}\n >\n {t(`manage-class:studList.reset`, 'Reset')}\n </button>\n )}\n </td>\n <td\n className=\"table-row--active-date\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n {item.ActivationDate === null\n ? 'N.A'\n : moment(item.ActivationDate).format('DD/MM/YYYY')}\n </td>\n <td\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n {item.ParentAppLinkingStatus ? (\n <img src={LinkApp} alt=\"Linked\" />\n ) : (\n '-'\n )}\n </td>\n <td\n className=\"table-row--detail\"\n style={{\n background:\n selectedStudentIDs.includes(item.UserId) &&\n 'rgba(255, 196, 0, 0.33)',\n borderTop:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderBottom:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)',\n borderRight:\n selectedStudentIDs.includes(item.UserId) &&\n 'solid 1px rgba(255, 162, 0, 0.33)'\n }}\n >\n <button\n className=\"btn btn-outline-primary btn-details\"\n type=\"button\"\n onClick={() => {\n setSelectedStudentID(item.UserId);\n setShowStudentDetailsModal(true);\n }}\n >\n {t(`manage-class:searchResult.details`, 'Details')}\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n )}\n </StudentTableContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const ChangeClassModalContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: #060606;\n font-size: 0.875rem;\n .success-title {\n font-size: 1.125rem;\n color: #4dae30;\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .btn-success-ok {\n width: 127px;\n color: #fffdfc;\n background: #5ed46a;\n margin-bottom: 1rem;\n }\n .change-class-selector {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 1rem;\n span {\n margin-right: 1rem;\n }\n .dropdown-menu {\n min-width: 200px;\n }\n }\n .selection-action-buttons {\n display: flex;\n flex-direction: row;\n border-top: solid 1px rgba(112, 112, 112, 0.22);\n justify-content: space-evenly;\n padding-top: 1rem;\n width: 100%;\n .btn-outline-cancel {\n color: #ff5b00;\n border: solid 1px #d5d5d5;\n width: 127px;\n &:hover {\n border-color: #ff5b00;\n background: #fff7f3;\n }\n }\n .btn-ok {\n width: 127px;\n color: #fffdfc;\n background: #ff5b00;\n }\n }\n #dropdown-change-class {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n border: solid 1px #707070;\n width: 200px;\n font-size: 0.875rem;\n }\n`;\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { changeClassRequest } from 'stores/manage-class/actions';\nimport { Button, Dropdown, Spinner } from 'react-bootstrap';\nimport sortClasses from 'helpers/parseClassList';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport { ChangeClassModalContainer } from './ChangeClassModalBody.styles';\n\nexport default function ChangeClassModalBody({\n hide,\n selectedStudentIDs,\n currentLevel,\n currentClassID\n}) {\n const dispatch = useDispatch();\n const { classes, changeClassResult, error, isLoading } = useSelector(\n state => state.manageClasses\n );\n const sortedClasses = Object.prototype.hasOwnProperty.call(\n classes,\n 'ClassList'\n )\n ? sortClasses(classes.ClassList)\n : [];\n // TODO: filter out the current class of selected student\n const [selectedLevel, setSelectedLevel] = useState(currentLevel);\n const selectedLevelIndex = sortedClasses.findIndex(\n item => item.level === selectedLevel\n );\n const [selectedClass, setSelectedClass] = useState(\n sortedClasses[selectedLevelIndex].classes.filter(\n classObject => classObject.ID !== currentClassID\n )[0]\n );\n return (\n <ChangeClassModalContainer>\n {changeClassResult === true ? (\n <>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n Success!\n </span>\n <span style={{ margin: '2rem 0' }}>\n {`The selected student(s) have been moved to Class ${selectedClass.Name}.`}\n </span>\n <Button\n variant=\"success-ok\"\n onClick={() => {\n hide();\n }}\n >\n OK\n </Button>\n </>\n ) : (\n <>\n <p style={{ color: '#FF5B00', fontSize: '1.125rem' }}>\n Move to another class\n </p>\n <p>The student(s) you selected will move to</p>\n <div className=\"change-class-selector\">\n <span>Level</span>\n <Dropdown className=\"other-assignments-dropdown\">\n <Dropdown.Toggle variant=\"light\" id=\"dropdown-change-class\">\n {sortedClasses.length ? `P${selectedLevel}` : 'Select level'}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {sortedClasses.map(item => (\n <Dropdown.Item\n key={`${item.level}`}\n onClick={() => {\n setSelectedLevel(item.level);\n const newLevelIndex = sortedClasses.findIndex(\n sortedObject => sortedObject.level === item.level\n );\n setSelectedClass(sortedClasses[newLevelIndex].classes[0]);\n }}\n >{`P${item.level}`}</Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <div className=\"change-class-selector\">\n <span>Class</span>\n <Dropdown className=\"other-assignments-dropdown\">\n <Dropdown.Toggle variant=\"light\" id=\"dropdown-change-class\">\n {selectedClass.Name}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {sortedClasses[selectedLevelIndex].classes\n .filter(classObject => classObject.ID !== currentClassID)\n .map(item => (\n <Dropdown.Item\n key={item.ID}\n onClick={() => {\n setSelectedClass(item);\n }}\n >\n {item.Name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n {error && <span style={{ color: '#ff5b00' }}>{error}</span>}\n <div className=\"selection-action-buttons\">\n <Button\n variant=\"outline-cancel\"\n onClick={() => {\n hide();\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"ok\"\n onClick={() => {\n dispatch(\n changeClassRequest({\n StudentIDs: selectedStudentIDs,\n classID: selectedClass.ID\n })\n );\n }}\n >\n OK\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </Button>\n </div>\n </>\n )}\n </ChangeClassModalContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const ActionButtonsContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n position: fixed;\n margin-top: 85px;\n z-index: 99;\n background-color: white;\n right: 50px;\n left: 245px;\n @media only screen and (max-width: 1024px) {\n right: 80px;\n left: 130px;\n }\n .buttons {\n grid-column: 1/17;\n margin: 10px 10px;\n @media only screen and (max-width: 768px) {\n margin: 8px 5px;\n }\n @media only screen and (max-width: 587px) {\n margin: 5px 0px;\n }\n button {\n font-size: 11px;\n img {\n margin-right: 6px;\n @media only screen and (max-width: 768px) {\n margin-right: 5px;\n width: 15px;\n height: 15px;\n }\n @media only screen and (max-width: 768px) {\n margin-right: 3px;\n width: 10px;\n height: 10px;\n }\n }\n &:hover {\n color: #e84b05;\n }\n @media only screen and (max-width: 768px) {\n font-size: 8px;\n margin-right: 3px;\n }\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n resetChangeClassResult,\n resetError\n} from 'stores/manage-class/actions';\nimport RemoveIcon from 'assets/img/icon-manage-class-remove.svg';\nimport MailIcon from 'assets/img/icon-manage-class-mail.svg';\nimport ChangeClassIcon from 'assets/img/icon-manage-class-change-class.svg';\nimport Notification from 'assets/img/icon-manage-class-notification.svg';\nimport { featureToggle } from 'constants/index';\nimport PopupModal from './PopupModal';\nimport ChangeClassModalBody from './ChangeClassModalBody';\nimport { ActionButtonsContainer } from './ActionButtons.styles';\n\nexport default function ActionButtons({\n selectedStudentIDs,\n classID,\n currentLevel\n}) {\n const { t } = useTranslation(['manage-class']);\n const dispatch = useDispatch();\n const { isSchoolAdmin } = useSelector(state => state.login);\n // Modal States\n const [showChangeClassModal, setShowChangeClassModal] = useState(false);\n\n const openChangeClassModal = () => {\n dispatch(resetError());\n dispatch(resetChangeClassResult());\n setShowChangeClassModal(true);\n };\n // Event handlers to hide popup modals\n const hideChangeClassModal = () => {\n setShowChangeClassModal(false);\n };\n\n return (\n <ActionButtonsContainer>\n <div className=\"buttons\">\n <PopupModal\n show={showChangeClassModal}\n hide={hideChangeClassModal}\n size=\"sm\"\n >\n <ChangeClassModalBody\n hide={hideChangeClassModal}\n selectedStudentIDs={selectedStudentIDs}\n currentLevel={currentLevel}\n currentClassID={classID}\n />\n </PopupModal>\n {featureToggle.classListActions && (\n <>\n <button className=\"btn\" type=\"button\">\n <img src={RemoveIcon} alt=\"remove\" />\n <span>{t(`manage-class:actions.remove`, 'Remove')}</span>\n </button>\n <button className=\"btn\" type=\"button\">\n <img src={MailIcon} alt=\"email-parent\" />\n <span>\n {t(`manage-class:actions.emailParent`, 'Email Parent')}\n </span>\n </button>\n </>\n )}\n {isSchoolAdmin && (\n <button\n className=\"btn\"\n type=\"button\"\n onClick={() => {\n openChangeClassModal();\n }}\n disabled={!(selectedStudentIDs.length > 0)}\n >\n <img src={ChangeClassIcon} alt=\"change-class\" />\n <span>{t(`manage-class:actions.changeClass`, 'Change Class')}</span>\n </button>\n )}\n {featureToggle.classListActions && (\n <button className=\"btn\" type=\"button\">\n <img src={Notification} alt=\"send-notification\" />\n <span>\n {t(`manage-class:actions.sendNotif`, 'Send Notification')}\n </span>\n </button>\n )}\n </div>\n </ActionButtonsContainer>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { PaginationContainer } from './Pagination.styles';\n\nexport default function Pagination({ currentPage, setPage }) {\n const { t } = useTranslation(['create-assign-saved']);\n const { maxStudentPages } = useSelector(state => state.manageClasses);\n const [debouncedCallback] = useDebouncedCallback(value => {\n setPage(value);\n }, 2000);\n return (\n <PaginationContainer>\n <div className=\"next-prev-page\">\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage <= 1}\n onClick={() => setPage(currentPage - 1)}\n >\n &lt; {t(`create-assign-saved:pagination.prev`, 'Prev')}\n </Button>\n {currentPage === 1 && (\n <>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n {maxStudentPages >= 2 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n )}\n {maxStudentPages >= 3 && (\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 2)}\n >\n {currentPage + 2}\n </Button>\n )}\n </>\n )}\n {currentPage > 1 && currentPage < maxStudentPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage + 1)}\n >\n {currentPage + 1}\n </Button>\n </>\n )}\n {currentPage === 2 && currentPage === maxStudentPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n {currentPage > 2 && currentPage === maxStudentPages && (\n <>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 2)}\n >\n {currentPage - 2}\n </Button>\n <Button\n variant=\"outline-page-primary\"\n onClick={() => setPage(currentPage - 1)}\n >\n {currentPage - 1}\n </Button>\n <Button variant=\"outline-page-primary selected\">\n {currentPage}\n </Button>\n </>\n )}\n <Button\n variant=\"outline-page-primary\"\n disabled={currentPage >= maxStudentPages}\n onClick={() => setPage(currentPage + 1)}\n >\n {t(`create-assign-saved:pagination.next`, 'Next')} &gt;\n </Button>\n </div>\n <span>\n {t(`create-assign-saved:pagination.page`, 'Page')}{' '}\n <input\n name=\"page\"\n type=\"number\"\n placeholder={currentPage}\n min={1}\n max={maxStudentPages}\n onChange={e => {\n e.preventDefault();\n if (\n e.target.value !== currentPage &&\n e.target.value >= 1 &&\n e.target.value <= maxStudentPages\n ) {\n debouncedCallback(parseInt(e.target.value));\n }\n }}\n />{' '}\n {t(`create-assign-saved:pagination.of`, 'of')} {maxStudentPages}\n </span>\n </PaginationContainer>\n );\n}\n","import styled from 'styled-components';\n\nexport const StudentListPage = styled.div`\n display: flex;\n flex-direction: column;\n background-color: white;\n width: calc(100vw - 280px);\n margin-left: 245px;\n margin-right: 35px;\n -webkit-box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);\n -moz-box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);\n box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);\n @media (max-width: 1024px) {\n width: calc(100vw - 106px);\n margin-left: 81px;\n margin-right: 25px;\n }\n .top-bar {\n display: grid;\n grid-template-columns: repeat(16, 1fr);\n padding: 20px 0px;\n border-bottom: solid 1px rgba(112, 112, 112, 0.11);\n position: fixed;\n z-index: 100;\n background-color: white;\n width: calc(100vw - 280px);\n @media only screen and (max-width: 1024px) {\n left: 81px;\n width: calc(100vw - 106px);\n }\n .navigation-back {\n grid-column: 1/5;\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n }\n cursor: pointer;\n padding-left: 20px;\n margin: auto;\n margin-left: 0px;\n &:hover {\n color: #ff5b00;\n }\n }\n .dropdown {\n grid-column: 6/12;\n display: flex;\n @media only screen and (max-width: 768px) {\n grid-column: 6/13;\n }\n .dropdown-item {\n min-width: 200px;\n }\n #dropdown-custom {\n width: 200px;\n margin-left: 10px;\n border: 1px solid #c5c5c5;\n background-color: #ffffff;\n @media only screen and (max-width: 1132px) {\n width: 125px;\n margin-top: 3px;\n font-size: 14px;\n }\n @media only screen and (max-width: 768px) {\n width: 120px;\n margin-top: 5px;\n font-size: 10px;\n }\n }\n img {\n margin-right: 10px;\n @media only screen and (max-width: 1132px) {\n margin-right: 2px;\n }\n @media only screen and (max-width: 768px) {\n height: 25px;\n width: 25px;\n margin-right: 5px;\n margin-top: 5px;\n }\n }\n p {\n font-size: 16px;\n margin-top: 8px;\n margin-left: 5px;\n @media only screen and (max-width: 768px) {\n font-size: 14px;\n }\n }\n }\n .total-stud {\n margin-left: 10px;\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n }\n .total-count {\n color: #ff5b00;\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport StudentTable from 'components/ManageClass/StudentTable';\nimport { LevelColors } from 'constants/index';\nimport sortClasses from 'helpers/parseClassList';\nimport ActionButtons from 'components/ManageClass/ActionButtons';\nimport Pagination from 'components/ManageClass/Pagination';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport { StudentListPage } from './StudentList.styles.js';\n\nexport default function StudentList({ match }) {\n const { t } = useTranslation(['manage-class']);\n const classID = parseInt(match.params.classID, 10);\n const { classes, students, isLoading } = useSelector(\n state => state.manageClasses\n );\n const currentClass = classes.hasOwnProperty('ClassList')\n ? classes.ClassList.find(classObject => classObject.ID === classID)\n : null;\n const sameLevelClasses = Object.prototype.hasOwnProperty.call(\n classes,\n 'ClassList'\n )\n ? sortClasses(classes.ClassList).find(\n classObject => classObject.level === currentClass.LevelId\n ).classes\n : [];\n const history = useHistory();\n // Stores selected student IDs as checked in the table\n const [selectedStudentIDs, setSelectedStudentIDs] = useState([]);\n const [currentPage, setCurrentPage] = useState(1);\n\n // Event handler for dropdown menu item\n const handleSelectedClass = classObject => {\n history.push(`/manage-class/${classObject.ID}`);\n };\n\n return (\n <StudentListPage>\n <div className=\"top-bar\">\n <div\n className=\"navigation-back\"\n onClick={() => {\n history.push('/manage-class');\n }}\n >\n {t(`manage-class:studList.back`, '< Back')}\n </div>\n <div className=\"dropdown\" style={{ zIndex: '100' }}>\n {currentClass.IconUrl !== 'No Path found' ? (\n <img\n src={currentClass.IconUrl}\n alt=\"class-icon\"\n width=\"35px\"\n height=\"35px\"\n />\n ) : (\n <div\n style={{\n width: '35px',\n height: '35px',\n background: LevelColors[currentClass.LevelId],\n borderRadius: '50%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'white'\n }}\n >\n <strong>{currentClass.Name.slice(0, 1).toUpperCase()}</strong>\n </div>\n )}\n\n <p>{t(`manage-class:studModal.class`, 'Class')}</p>\n <DropdownMenu\n selectedValue={currentClass.Name}\n values={sameLevelClasses}\n valueKey=\"Name\"\n setValue={handleSelectedClass}\n width=\"200px\"\n />\n {students.TotalCount ? (\n <div className=\"total-stud\">\n <div>{t(`manage-class:studList.total`, 'Total:')}</div>\n <div className=\"total-count\">\n {students.TotalCount +\n (students.TotalCount === 1\n ? t(`manage-class:studList.student`, ' student')\n : t(`manage-class:studList.students`, ' students'))}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n <ActionButtons\n selectedStudentIDs={selectedStudentIDs}\n setSelectedStudentIDs={setSelectedStudentIDs}\n classID={classID}\n currentLevel={currentClass.LevelId}\n />\n <StudentTable\n selectedStudentIDs={selectedStudentIDs}\n setSelectedStudentIDs={setSelectedStudentIDs}\n classID={classID}\n currentPage={currentPage}\n setPage={setCurrentPage}\n />\n {!isLoading && students.hasOwnProperty('List') && (\n <Pagination currentPage={currentPage} setPage={setCurrentPage} />\n )}\n </StudentListPage>\n );\n}\n","import styled from 'styled-components';\n\nexport const ActionsMenu = styled.div`\n position: relative;\n display: inline-block;\n &:hover .actions-dropdown-content {\n display: block;\n }\n .more-options {\n font-size: 30px;\n position: relative;\n bottom: 0.5rem;\n border: none;\n background-color: transparent;\n &:hover {\n color: #ff5b00;\n }\n }\n`;\n\nexport const MenuContent = styled.div`\n display: none;\n position: absolute;\n left: -2.5rem;\n background: #fff;\n min-width: 104.4px;\n padding: 0.5rem 1rem 1rem 1rem;\n margin-right: 1rem;\n box-shadow: 0 3px 6px rgba(45, 45, 45, 0.37);\n z-index: 1;\n .actions-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n font-size: 0.875rem;\n font-weight: 600;\n color: #727272;\n cursor: pointer;\n &:hover {\n color: #ff5b00;\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PopoverMenuItem from 'components/TrackAssignment/PopoverMenuItem';\nimport { ActionsMenu, MenuContent } from './GroupPopoverMenu.styles';\n\nexport default function GroupPopoverMenu({\n openDeleteModal,\n setIdNameForDelete,\n editGroup\n}) {\n const { t } = useTranslation(['manage-class-group']);\n return (\n <ActionsMenu>\n <button type=\"button\" className=\"more-options\">\n ...\n </button>\n <MenuContent className=\"actions-dropdown-content\">\n <PopoverMenuItem icon=\"edit\">\n <span style={{ marginLeft: '1rem' }} onClick={editGroup}>\n {t(`manage-class-group:table.edit`, 'Edit')}\n </span>\n </PopoverMenuItem>\n <PopoverMenuItem icon=\"delete\">\n <span\n style={{ marginLeft: '1rem' }}\n onClick={() => {\n setIdNameForDelete();\n openDeleteModal();\n }}\n >\n {t(`manage-class-group:table.delete`, 'Delete')}\n </span>\n </PopoverMenuItem>\n {/* <PopoverMenuItem icon=\"email\">\n <span\n style={{ marginLeft: '1rem' }}\n onClick={console.log('email')}>\n Email\n </span>\n </PopoverMenuItem>\n <PopoverMenuItem icon=\"notification\">\n <span\n style={{ marginLeft: '1rem' }}\n onClick={() => console.log('notification')}\n >\n Notification\n </span>\n </PopoverMenuItem> */}\n </MenuContent>\n </ActionsMenu>\n );\n}\n","import styled from 'styled-components';\n\nconst GroupDeleteModalContnainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 550px;\n background: white;\n padding: 40px;\n align-items: center;\n .close-btn {\n position: absolute;\n right: 35px;\n top: 30px;\n border: none;\n font-size: 18px;\n background: none;\n }\n .title {\n color: #ff5b00;\n font-size: 18px;\n margin: 10px;\n }\n .text {\n color: #060606;\n margin: 10px 10px 30px 10px;\n font-size: 16px;\n }\n .btn-group {\n margin: 10px;\n button {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n }\n .no-btn {\n background: white;\n color: #ff5b00;\n border: 1px solid #d5d5d5;\n &:hover {\n background: #FFF7F3\n color: #f25008;\n border-color: #f25008;\n }\n }\n .yes-btn {\n background: #ff5b00;\n color: white;\n border: 1px solid #ff3d3d;\n &:hover {\n background: #f25008;\n }\n }\n }\n span {\n font-size: 16px;\n }\n .success-title {\n font-size: 18px;\n }\n .success-btn {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n background: #5ED46A;\n color: white;\n border: 1px solid #29C16A;\n }\n`;\n\nexport default GroupDeleteModalContnainer;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n deleteGroupRequest,\n resetDeleteRequest\n} from 'stores/createGroup/actions';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport { Spinner } from 'react-bootstrap';\nimport GroupDeleteModalContnainer from './GroupDeleteModal.styles';\n\nconst GroupDeleteModal = ({ groupName, hide, groupId, deleteSuccess }) => {\n const { t } = useTranslation(['manage-class-group']);\n const dispatch = useDispatch();\n const { isDelLoading, deleteGroup, error } = useSelector(\n state => state.createGroups\n );\n\n const deleteGroupSuccess = () => {\n dispatch(resetDeleteRequest());\n deleteSuccess();\n };\n\n return (\n <GroupDeleteModalContnainer>\n {deleteGroup === true ? (\n <>\n <button\n className=\"close-btn\"\n type=\"button\"\n onClick={deleteGroupSuccess}\n >\n X\n </button>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n {t(`manage-class-group:deleteModal.success`, 'Success!')}\n </span>\n <span style={{ margin: '2rem 0' }}>\n \"{groupName}\"\n {t(\n `manage-class-group:deleteModal.delConfirmMsg`,\n ' has been deleted sucessfully!'\n )}\n </span>\n <button\n className=\"success-btn\"\n type=\"button\"\n onClick={deleteGroupSuccess}\n >\n {t(`manage-class-group:deleteModal.ok`, 'OK')}\n </button>\n </>\n ) : (\n <>\n <button className=\"close-btn\" type=\"button\" onClick={hide}>\n X\n </button>\n <div className=\"title\">\n {t(`manage-class-group:deleteModal.delGroup`, 'Delete Group')}\n </div>\n <p className=\"text\">\n {t(\n `manage-class-group:deleteModal.delConfirm`,\n 'Are you sure you want to delete '\n )}\n \"{groupName}\"?\n <div style={{ textAlign: 'center' }}>\n {t(\n `manage-class-group:deleteModal.actionUndone`,\n 'This action cannot be undone.'\n )}\n </div>\n </p>\n {error && <span style={{ color: '#ff5b00' }}>{error}</span>}\n <div className=\"btn-group\">\n <button\n className=\"yes-btn\"\n type=\"button\"\n onClick={() => {\n dispatch(deleteGroupRequest(groupId));\n }}\n >\n {t(`manage-class-group:deleteModal.yes`, 'Yes')}\n </button>\n <button className=\"no-btn\" type=\"button\" onClick={hide}>\n {t(`manage-class-group:deleteModal.no`, 'No')}\n {isDelLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </button>\n </div>\n </>\n )}\n </GroupDeleteModalContnainer>\n );\n};\n\nexport default GroupDeleteModal;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Polygon_33\",\n \"data-name\": \"Polygon 33\",\n d: \"M3.132,1.519a1,1,0,0,1,1.736,0L7.145,5.5A1,1,0,0,1,6.277,7H1.723A1,1,0,0,1,.855,5.5Z\",\n transform: \"translate(8 7) rotate(180)\",\n fill: \"currentColor\"\n});\n\nvar SvgTriangle = function SvgTriangle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 8,\n height: 7,\n viewBox: \"0 0 8 7\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTriangle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/triangle.af2f501e.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\n\nexport const NoGroupList = styled.div`\n text-align: center;\n align-self: center;\n .no-group-text {\n margin: 10px 0;\n }\n .first-line {\n font-weight: 700;\n font-size: 16px;\n }\n`;\n\nexport const GroupLists = styled.div`\n width: 100%;\n padding: 20px 80px 20px 40px;\n .group-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n .my-group-heading {\n margin-left: 100px;\n display: flex;\n align-items: flex-start;\n span {\n font-size: 19px;\n color: #545454;\n margin-left: 10px;\n }\n }\n }\n .group-list-body {\n margin-top: 20px;\n .header-grp-name {\n width: 39%;\n display: flex;\n align-items: center;\n }\n .header-members {\n justify-content: center;\n }\n .header-created-time,\n .header-members {\n text-align: center;\n width: 20%;\n display: flex;\n align-items: center;\n }\n\n .f1 {\n flex: 1;\n }\n .f2 {\n flex: 2;\n }\n .group-list-body-header {\n display: flex;\n margin-bottom: 4px;\n }\n .group-list-body-container {\n }\n }\n`;\n\nexport const GroupCard = styled.div`\n display: flex;\n border: 1px solid rgb(200, 200, 200);\n box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 8px;\n background-color: #ffffff;\n margin-bottom: 15px;\n color: #1e1e1e;\n border-radius: 4px;\n .group-name {\n font-size: 18px;\n font-weight: 600;\n font-size: 17px;\n font-weight: 600;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 5px 10px;\n border-right: 1px solid rgb(200, 200, 200);\n }\n .group-date,\n .group-stu,\n .group-more {\n display: flex;\n align-items: center;\n border-right: 1px solid rgb(200, 200, 200);\n padding: 5px 10px;\n justify-content: center;\n }\n .group-stu {\n text-decoration: underline;\n cursor: pointer;\n img {\n margin-right: 5px;\n }\n }\n .group-more {\n border-right: none;\n display: flex;\n justify-content: space-around;\n }\n .report-gtp-btn {\n background-color: transparent;\n color: #ff5b00;\n padding: 5px 25px 4px 6px;\n box-shadow: none !important;\n border: 1px solid rgb(200, 200, 200);\n font-size: 16px;\n img {\n margin-right: 5px;\n }\n }\n .group-text-stu {\n position: relative;\n }\n .show-added-students {\n position: absolute;\n max-height: 200px;\n width: 230px;\n padding: 10px;\n background-color: #707070;\n color: #ffffff;\n z-index: 9;\n top: 30px;\n left: -100%;\n transition: opacity 0.3s;\n visibility: hidden;\n opacity: 0;\n .scroll-list-stu {\n height: 100%;\n max-height: 160px;\n overflow: auto;\n ::-webkit-scrollbar {\n width: 8px !important;\n overscroll-behavior-y: none;\n }\n ::-webkit-scrollbar-thumb {\n background: #949494 !important;\n }\n }\n .list-class-title {\n span {\n margin-bottom: 10px;\n font-weight: 600;\n font-size: 15px;\n }\n margin-bottom: 20px;\n }\n }\n .show-added-students::before {\n content: '';\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -5px;\n border-width: 10px;\n border-style: solid;\n border-color: transparent transparent #707070 transparent;\n }\n .group-text-stu:focus .show-added-students {\n visibility: visible;\n opacity: 1;\n }\n`;\nexport const StyledSortingBtnGroup = styled.div`\n display: flex;\n margin-right: 10px;\n`;\nexport const StyledSortingBtn = styled.div`\n cursor: pointer;\n padding: 9px 13px 7px;\n background: ${({ active }) => (active ? '#9A9A9A' : 'white')};\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid #e9e9e9;\n border-right: none;\n path {\n fill: ${({ active }) => (active ? 'white' : '#DBDBDB')};\n }\n &.up-btn {\n border-left: 1px solid #e9e9e9;\n svg {\n transform: rotate(180deg) translateY(2px);\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\n\nimport groupIcon from 'assets/img/Group_icon.svg';\nimport groupLogo from 'assets/img/group-logo-white.svg';\nimport smallGrpIcon from 'assets/img/icon-small-group.svg';\n// import reportIcon from 'assets/img/icon-report-group.svg';\n\nimport GroupPopoverMenu from 'components/ManageClass/GroupPopoverMenu';\nimport GroupDeleteModal from 'components/ManageClass/GroupDeleteModal';\nimport PopupModal from 'components/Shared/PopupModal';\nimport moment from 'moment';\nimport history from 'helpers/history';\nimport { fetchMyGroupRequest } from 'stores/createGroup/actions';\nimport { ReactComponent as Triangle } from './triangle.svg';\nimport {\n NoGroupList,\n GroupLists,\n GroupCard,\n StyledSortingBtnGroup,\n StyledSortingBtn\n} from './GroupList.styles';\n\nconst GroupList = ({ list }) => {\n const { t } = useTranslation(['manage-class-group']);\n const dispatch = useDispatch();\n\n const [showModal, setShowModal] = useState(false);\n const [selectedGroupID, setSelectedGroupID] = useState('');\n const [selectedGroupName, setSelectedGroupName] = useState('');\n const [selectSorting, setSelectSorting] = useState('name-asc'); // ['name-asc', 'name-desc','time-asc', 'time-desc']\n const showDeleteModal = () => setShowModal(true);\n\n const createSelectedList = val => {\n const finalObj = {};\n val.forEach(elem => {\n const keyName = elem.ClassID;\n if (finalObj[keyName] === undefined) {\n finalObj[keyName] = [\n {\n userId: elem.UserId,\n userName: elem.FullName,\n classname: elem.ClassName || ''\n }\n ];\n } else {\n finalObj[keyName].push({\n userId: elem.UserId,\n userName: elem.FullName,\n classname: elem.ClassName || ''\n });\n }\n });\n return finalObj;\n };\n\n const editGroup = user => {\n const Students = user.Students.map(elem => {\n return { userId: elem.UserId };\n });\n const selectedStudents = createSelectedList(user.Students);\n\n history.push({\n pathname: '/manage-class/create-group',\n state: {\n Students,\n selectedStudents,\n groupName: user.Name,\n id: user.ID\n }\n });\n };\n\n const goToCreateGroup = () => history.push('/manage-class/create-group');\n\n const deleteSuccess = () => {\n setShowModal(false);\n dispatch(fetchMyGroupRequest());\n };\n\n return (list && list.length) === 0 ? (\n <NoGroupFound goToCreateGroup={goToCreateGroup} t={t} />\n ) : (\n <GroupLists>\n <div className=\"group-list-header\">\n <div />\n <div className=\"my-group-heading\">\n <img src={groupLogo} alt=\"icon-group-logo\" />\n <span>{t(`manage-class-group:header.myGroup`, 'My Groups')}</span>\n </div>\n <button\n type=\"submit\"\n className=\"btn btn-lg btn-primary create-group-btn\"\n onClick={goToCreateGroup}\n >\n + {t(`manage-class-group:header.createGroup`, 'Create New Group')}\n </button>\n </div>\n\n <div className=\"group-list-body\">\n <div className=\"group-list-body-header\">\n <div className=\"header-grp-name\">\n <StyledSortingBtnGroup>\n <StyledSortingBtn\n onClick={() => setSelectSorting('name-desc')}\n active={selectSorting === 'name-desc'}\n >\n <Triangle />\n </StyledSortingBtn>\n <StyledSortingBtn\n className=\"up-btn\"\n onClick={() => setSelectSorting('name-asc')}\n active={selectSorting === 'name-asc'}\n >\n <Triangle />\n </StyledSortingBtn>\n </StyledSortingBtnGroup>\n {t(`manage-class-group:table.grpName`, 'Group name')}\n </div>\n <div className=\"header-created-time\">\n <StyledSortingBtnGroup>\n <StyledSortingBtn\n onClick={() => setSelectSorting('time-desc')}\n active={selectSorting === 'time-desc'}\n >\n <Triangle />\n </StyledSortingBtn>\n <StyledSortingBtn\n className=\"up-btn\"\n onClick={() => setSelectSorting('time-asc')}\n active={selectSorting === 'time-asc'}\n >\n <Triangle />\n </StyledSortingBtn>\n </StyledSortingBtnGroup>\n {t(`manage-class-group:table.creationTime`, 'Creation Time')}\n </div>\n <div className=\"header-members\">\n {t(`manage-class-group:table.members`, 'Members')}\n </div>\n </div>\n {(list || [])\n .toSorted((a, b) => {\n if (selectSorting === 'name-asc')\n return a.Name.localeCompare(b.Name);\n if (selectSorting === 'name-desc')\n return b.Name.localeCompare(a.Name);\n if (selectSorting === 'time-asc')\n return moment(a.CreateDate).isBefore(b.CreateDate) ? -1 : 1;\n if (selectSorting === 'time-desc')\n return moment(a.CreateDate).isBefore(b.CreateDate) ? 1 : -1;\n return 0;\n })\n .map(elem => (\n <GroupCard key={elem.ID}>\n <div className=\"f2 group-name\">{elem.Name}</div>\n <div className=\"f1 group-date\">\n {moment(elem.CreateDate).format('hh:mm a DD/MM/YYYY')}\n </div>\n <div className=\"f1 group-stu\">\n <img src={smallGrpIcon} alt=\"students\" />\n <span className=\"group-text-stu\" tabIndex=\"1\">\n {elem.Students.length}\n {t(`manage-class-group:table.students`, ' students')}\n <div className=\"show-added-students\">\n <ShowList list={createSelectedList(elem.Students)} />\n </div>\n </span>\n </div>\n <div className=\"f1 group-more\">\n {/* <button className=\"report-gtp-btn\">\n <img src={reportIcon} alt=\"icon-group-report\" />\n Report\n </button> */}\n <GroupPopoverMenu\n openDeleteModal={showDeleteModal}\n setIdNameForDelete={() => {\n setSelectedGroupID(elem.ID);\n setSelectedGroupName(elem.Name);\n }}\n editGroup={() => editGroup(elem)}\n />\n </div>\n </GroupCard>\n ))}\n <PopupModal show={showModal} hide={() => setShowModal(false)}>\n <GroupDeleteModal\n hide={() => setShowModal(false)}\n deleteSuccess={deleteSuccess}\n groupId={selectedGroupID}\n groupName={selectedGroupName}\n />\n </PopupModal>\n </div>\n </GroupLists>\n );\n};\n\nexport default GroupList;\n\nconst NoGroupFound = ({ goToCreateGroup, t }) => (\n <NoGroupList>\n <div>\n <img src={groupIcon} alt=\"create-group-icon\" className=\"show-hide\" />\n </div>\n <div className=\"no-group-text\">\n <div className=\"first-line\">\n {t(\n `manage-class-group:table.noGroupMsg`,\n `You haven't created any groups.`\n )}\n </div>\n <div className=\"second-line\">\n {t(\n `manage-class-group:table.noGroupDesc`,\n 'Click the button below to create new group.'\n )}\n </div>\n </div>\n <button\n type=\"submit\"\n className=\"btn btn-lg btn-primary create-group-btn\"\n onClick={goToCreateGroup}\n >\n {t(`manage-class-group:header.createGroup`, 'Create New Group')}\n </button>\n </NoGroupList>\n);\n\nconst ShowList = ({ list }) => {\n return (\n <div className=\"scroll-list-stu\">\n {Object.keys(list).map(val => (\n <div key={val} className=\"list-class-title\">\n <span>\n {val && list[val] && list[val].length ? list[val][0].classname : ''}\n </span>\n {list[val].map(elem => (\n <div key={elem.userId}>{elem.userName}</div>\n ))}\n </div>\n ))}\n </div>\n );\n};\n","import styled from 'styled-components';\n\nexport const ShowGroupWrapper = styled.div`\n padding-left: 205px;\n min-height: calc(100vh - 100px);\n display: flex;\n justify-content: center;\n @media (max-width: 1024px) {\n padding-left: 66px;\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchMyGroupRequest } from 'stores/createGroup/actions';\n\nimport GroupList from './GroupList';\nimport Spinner from 'components/Shared/Spinner';\nimport { ShowGroupWrapper } from './ShowGroup.styles';\n\nconst ShowGroup = () => {\n const dispatch = useDispatch();\n const { allGroups, isLoading } = useSelector(state => state.createGroups);\n\n useEffect(() => {\n dispatch(fetchMyGroupRequest());\n // eslint-disable-next-line\n }, []);\n\n return (\n <ShowGroupWrapper>\n {isLoading && <Spinner />}\n {!isLoading && <GroupList list={allGroups} />}\n </ShowGroupWrapper>\n );\n};\n\nexport default ShowGroup;\n","import styled from 'styled-components';\nimport PopupModal from 'components/Shared/PopupModal';\n\nexport const CreateGroupWrapper = styled.div`\n padding-left: 190px;\n min-height: calc(100vh - 100px);\n @media (max-width: 1024px) {\n padding-left: 66px;\n }\n`;\n\nexport const CreateGroupHeaderStyle = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-bottom: 1px solid #707070;\n padding: 30px;\n height: 100px;\n width: 100%;\n background-color: #ffffff;\n .back-list {\n font-size: 16px;\n flex: 2;\n span {\n cursor: pointer;\n }\n }\n .grp-name-container {\n flex: 6;\n span {\n font-size: 17px;\n font-weight: 700;\n }\n input {\n width: 360px;\n height: 40px;\n padding: 0 1.5rem;\n border: solid 1px rgba(112, 112, 112, 0.36);\n color: #202020;\n font-weight: 600;\n margin: 0 10px;\n }\n button {\n padding: 2px;\n height: 40px;\n min-width: 140px;\n border-radius: 3px;\n }\n .show-err {\n color: red;\n width: 50%;\n text-align: center;\n }\n }\n`;\n\nexport const CreateGroupBody = styled.div`\n display: flex;\n padding-left: 5px;\n min-height: calc(100vh - 160px);\n`;\nexport const StyledCreateSuccessModal = styled(PopupModal)`\n text-align: center;\n .modal-body {\n max-width: 500px;\n padding: 0 1rem;\n background: white;\n width: 100%;\n }\n h5 {\n color: #ff5b00;\n font-size: 20px;\n margin: 36px 0;\n font-weight: 400;\n }\n .btn-primary {\n padding: 8px 40px;\n margin-bottom: 50px;\n font-size: 18px;\n }\n`;\n","import React, { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport history from 'helpers/history';\nimport { useDispatch } from 'react-redux';\nimport { getStudentByClassReset } from 'stores/createGroup/actions';\nimport { CreateGroupHeaderStyle } from './CreateGroup.styles';\n\nconst CreateGroup = ({\n Name,\n changeNameHandler,\n callCreateGroup,\n showErr,\n buttonName\n}) => {\n const { t } = useTranslation(['manage-class-group']);\n const dispatch = useDispatch();\n const goBack = () => {\n history.goBack();\n dispatch(getStudentByClassReset());\n };\n\n return (\n <CreateGroupHeaderStyle>\n <div className=\"back-list\">\n <span onClick={goBack}>\n &lt; {t(`manage-class-group:createGroup.backList`, 'Back to list')}\n </span>\n </div>\n <div className=\"grp-name-container\">\n <form onSubmit={callCreateGroup}>\n <span className=\"field-title\">\n {t(`manage-class-group:table.grpName`, 'Group Name')}\n </span>\n <input\n type=\"text\"\n value={Name}\n className=\"profile-form-inp\"\n onChange={e => changeNameHandler(e.target.value)}\n placeholder={t(\n `manage-class-group:createGroup.enterName`,\n 'Enter the group name here'\n )}\n required\n />\n <button\n type=\"submit\"\n className=\"btn btn-lg btn-primary create-grp-btn\"\n >\n {buttonName}\n </button>\n <div className=\"show-err\">{showErr}</div>\n </form>\n </div>\n </CreateGroupHeaderStyle>\n );\n};\n\nexport default memo(CreateGroup);\n","import styled from 'styled-components';\n\nexport const CreateGroupLevelWrapper = styled.div`\n width: 30%;\n border-right: 1px solid #c4c4c4;\n height: calc(100vh - 160px);\n overflow: auto;\n background-color: #fbfbfb;\n .group-select-level {\n margin: 20px;\n button {\n background-color: #ffffff;\n width: 95% !important;\n }\n }\n .group-select-class {\n margin: 10px 0;\n div {\n font-weight: 600;\n font-size: 16px;\n padding: 10px 30px;\n cursor: pointer;\n position: relative;\n }\n .select-class-img {\n position: absolute;\n right: 15px;\n top: 15px;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport { compareValues } from 'helpers/singleClassReport';\nimport sortClasses from 'helpers/parseClassList';\nimport { useSelector } from 'react-redux';\nimport temp from '../../../assets/img/icon-right-arrow.svg';\nimport { CreateGroupLevelWrapper } from './CreateGroupLevels.styles';\n\nlet sortData = null;\nconst CreateGroupLevels = ({ selectClass, callStudents }) => {\n const { t } = useTranslation(['manage-class-group']);\n const { levels } = useSelector(state => state.levels);\n const { classes } = useSelector(state => state.manageClasses);\n const [filterLevel, setFilterLevel] = useState();\n const [classId, setClassId] = useState('');\n const [classData, setClassData] = useState([]);\n const LevelMenuOption = value => `P${value}`;\n\n useEffect(() => {\n sortData =\n classes && classes.hasOwnProperty('ClassList')\n ? sortClasses(classes.ClassList).sort(compareValues('level', 'asc'))\n : [];\n\n setClassData(sortData && sortData[0].classes);\n setFilterLevel(sortData[0].level);\n }, [classes]);\n\n const changeLevel = e => {\n setFilterLevel(e);\n let tempClass = [...classData];\n tempClass = sortData.find(elem => elem.level === e)\n ? sortData.find(elem => elem.level === e).classes\n : [];\n setClassData(tempClass);\n };\n\n const showStudents = val => {\n setClassId(val);\n callStudents(val);\n };\n\n return (\n <CreateGroupLevelWrapper>\n <div className=\"group-select-level\">\n <DropdownMenu\n selectedValue={`${t(\n 'manage-class-group:createGroup.primary',\n 'Primary'\n )} ${filterLevel}`}\n valueKey={null}\n values={levels.map(level => level.ID)}\n setValue={changeLevel}\n valueTemplate={LevelMenuOption}\n />\n </div>\n <div className=\"group-select-class\">\n {classData.map(obj => (\n <div\n key={obj.ID}\n style={\n classId === obj.ID\n ? { backgroundColor: '#FFC400' }\n : { backgroundColor: 'transparent' }\n }\n onClick={() => {\n showStudents(obj.ID);\n selectClass(obj.Name, obj.ID);\n }}\n >\n {obj.Name}\n {classId === obj.ID && (\n <img className=\"select-class-img\" src={temp} alt=\"tem\" />\n )}\n </div>\n ))}\n </div>\n </CreateGroupLevelWrapper>\n );\n};\n\nexport default CreateGroupLevels;\n","import styled from 'styled-components';\n\nexport const CreateGroupStudentsWrapper = styled.div`\n width: 35%;\n border-right: 1px solid #c4c4c4;\n height: calc(100vh - 160px);\n overflow: auto;\n background-color: #fbfbfb;\n .crt-grp-classname {\n margin: 20px 10px 5px;\n font-weight: 700;\n font-size: 17px;\n color: #1e1e1e;\n }\n #search-student {\n background-image: ${props => `url(${props.searchIcon})`};\n background-repeat: no-repeat;\n text-indent: 20px;\n background-position: left;\n background-position-x: 10px;\n background-color: #ffffff;\n @media only screen and (max-width: 870px) {\n margin-top: 5px;\n font-size: 14px;\n }\n }\n #search-student:focus {\n border-color: #ffa200;\n }\n #search-student:focus {\n background-image: none;\n text-indent: 0px;\n }\n`;\n\nexport const GroupStudentsContainer = styled.div`\n margin-top: 10px;\n cursor: pointer;\n .no-student {\n font-size: 16px;\n color: #545454;\n text-align: center;\n }\n .active-student {\n background-color: #ffc400;\n }\n .group-students-lists {\n display: flex;\n padding: 5px 20px;\n align-items: center;\n margin-bottom: 5px;\n .check-container {\n position: relative;\n bottom: 10px;\n padding-left: 35px;\n cursor: pointer;\n user-select: none;\n }\n input {\n height: 23px;\n width: 25px;\n position: absolute;\n opacity: 0;\n cursor: pointer;\n left: 1px;\n }\n .group-checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: transparent;\n border: 2px solid #707070;\n }\n input:checked ~ .group-checkmark {\n background-color: #ef7836;\n }\n .group-checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n input:checked ~ .group-checkmark:after {\n display: block;\n }\n .group-checkmark:after {\n left: 7px;\n top: 1px;\n width: 9px;\n height: 16px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(25deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n img {\n width: 35px;\n height: 35px;\n border-radius: 50%;\n border: 2px solid #fff;\n margin: 0 10px;\n }\n .grp-img-name {\n color: #1e1e1e;\n font-size: 15px;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport SearchIcon from 'assets/img/icon-manage-class-lup.svg';\nimport MatchedResult from 'components/ManageClass/MatchedResult';\nimport {\n CreateGroupStudentsWrapper,\n GroupStudentsContainer\n} from './CreateGroupStudents.styles';\n\nconst CreateGroupStudents = ({\n classSelected,\n classIdSelected,\n getStudents,\n selectedList,\n changeStudents,\n changeSelectedList,\n Students\n}) => {\n const { t } = useTranslation(['manage-class-group']);\n const [searchTerm, setSearchTerm] = useState('');\n const [showStudents, setShowStudents] = useState(getStudents);\n const [selectedStudents, setSelectedStudents] = useState(Students);\n\n useEffect(() => {\n setShowStudents(getStudents);\n }, [getStudents]);\n\n useEffect(() => {\n setSelectedStudents(Students);\n }, [Students]);\n\n const searchStudent = val => {\n setSearchTerm(val);\n const searchedStudents = getStudents.filter(\n student =>\n student.DisplayName.toLowerCase().indexOf(val.toLowerCase()) >= 0\n );\n setShowStudents(searchedStudents);\n };\n\n const isStudentSelected = UserId => {\n return selectedStudents.some(obj => obj.userId === UserId);\n };\n\n const selectStudent = (userId, userName) => {\n const tempStudents = [...selectedStudents];\n const stuIndex = tempStudents.findIndex(obj => obj.userId === userId);\n if (stuIndex === -1) tempStudents.push({ userId });\n else tempStudents.splice(stuIndex, 1);\n setSelectedStudents(tempStudents);\n changeStudents(tempStudents); // save in parent component\n changeList(userId, userName); // save for showing list in CreateGroupList\n };\n\n const changeList = (userId, userName) => {\n const tempList = { ...selectedList };\n if (tempList[classIdSelected]) {\n const tempListIndex = tempList[classIdSelected].findIndex(\n obj => obj.userId === userId\n );\n if (tempListIndex === -1)\n tempList[classIdSelected].push({\n userId,\n userName,\n classname: classSelected\n });\n else tempList[classIdSelected].splice(tempListIndex, 1);\n } else {\n tempList[classIdSelected] = [];\n tempList[classIdSelected].push({\n userId,\n userName,\n classname: classSelected\n });\n }\n changeSelectedList(tempList);\n };\n\n return (\n <CreateGroupStudentsWrapper searchIcon={SearchIcon}>\n <div className=\"crt-grp-classname\">\n {classSelected ||\n t(`manage-class-group:createGroup.className`, 'Class name')}\n </div>\n <Form className=\"search-form col-sm-12\">\n <input\n type=\"search\"\n id=\"search-student\"\n className=\"form-control\"\n placeholder={t('manage-class-group:createGroup.search', 'Search')}\n value={searchTerm}\n onChange={e => searchStudent(e.target.value)}\n autoComplete=\"off\"\n />\n </Form>\n <GroupStudentsContainer>\n {showStudents.length === 0 ? (\n <div className=\"no-student\">\n {t(\n `manage-class-group:createGroup.noStudent`,\n 'No students in this class.'\n )}\n </div>\n ) : (\n showStudents.map(student => (\n <div\n key={student.UserId}\n className={\n isStudentSelected(student.UserId)\n ? 'group-students-lists active-student'\n : 'group-students-lists'\n }\n >\n <div className=\"check-container\">\n <input\n type=\"checkbox\"\n checked={isStudentSelected(student.UserId)}\n value={student.UserId}\n onChange={() =>\n selectStudent(student.UserId, student.DisplayName)\n }\n />\n <span className=\"group-checkmark\" />\n </div>\n\n <div className=\"grp-img-container\">\n <img\n src={student.ProfileImage}\n alt=\"student-img\"\n onError={e => (e.target.src = avatarPlaceholder)}\n />\n </div>\n\n <div className=\"grp-img-name\">\n <MatchedResult\n result={student.DisplayName}\n searchTerm={searchTerm}\n />\n </div>\n </div>\n ))\n )}\n </GroupStudentsContainer>\n </CreateGroupStudentsWrapper>\n );\n};\n\nexport default CreateGroupStudents;\n","import styled from 'styled-components';\n\nexport const CreateGroupListsWrapper = styled.div`\n width: 35%;\n border-right: 1px solid #c4c4c4;\n height: calc(100vh - 160px);\n overflow: auto;\n background-color: #fbfbfb;\n .no-student-container {\n margin: 60px 20px;\n }\n .no-studnet-selected {\n font-size: 16px;\n color: #545454;\n margin-bottom: 3px;\n }\n .group-list-title {\n margin: 20px;\n font-weight: 700;\n font-size: 17px;\n color: #1e1e1e;\n }\n .group-list-container {\n margin: 20px;\n }\n .list-class-title {\n color: #989898;\n margin-bottom: 20px;\n }\n .list-class-students {\n margin: 10px 0;\n color: #ff5b00;\n display: flex;\n align-items: center;\n }\n .delete-student {\n cursor: pointer;\n height: 15px;\n width: 15px;\n margin-left: 10px;\n background-color: #c4c4c4;\n color: #fff;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n font-size: 11px;\n }\n`;\n","import React, { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CreateGroupListsWrapper } from './CreateGroupLists.styles';\n\nconst CreateGroupLists = ({\n grpName,\n Students,\n selectedList,\n deleteStudent\n}) => {\n const { t } = useTranslation(['manage-class-group']);\n return (\n <CreateGroupListsWrapper>\n {Students.length === 0 ? (\n <div className=\"no-student-container\">\n <div className=\"no-studnet-selected\">\n {t(\n `manage-class-group:createGroup.noSelected`,\n 'No student selected'\n )}\n </div>\n <div>\n {t(\n `manage-class-group:createGroup.selectMsg`,\n 'Select students from the list to add to this group'\n )}\n </div>\n </div>\n ) : (\n <>\n <div className=\"group-list-title\">\n {grpName ||\n t(\n `manage-class-group:createGroup.nameList`,\n 'Name list of the group'\n )}\n </div>\n <div className=\"group-list-container\">\n {Object.keys(selectedList).map(val => (\n <div key={val} className=\"list-class-title\">\n {val && selectedList[val] && selectedList[val].length\n ? selectedList[val][0].classname\n : ''}\n {selectedList[val].map(elem => (\n <div key={elem.userId} className=\"list-class-students\">\n {elem.userName}\n <div\n className=\"delete-student\"\n onClick={() => deleteStudent(elem.userId)}\n >\n x\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n </>\n )}\n </CreateGroupListsWrapper>\n );\n};\n\nexport default memo(CreateGroupLists);\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n getStudentByClassRequest,\n createMyGroupRequest,\n createMyGroupReset,\n updateGroupRequest,\n updateGroupReset,\n getStudentByClassReset\n} from 'stores/createGroup/actions';\n\nimport { isEmpty, clone } from 'ramda';\nimport history from 'helpers/history';\nimport { useLocation } from 'react-router-dom';\nimport { Button } from 'react-bootstrap';\nimport CreateGroupHeader from './CreateGroupHeader';\nimport CreateGroupLevels from './CreateGroupLevels';\nimport CreateGroupStudents from './CreateGroupStudents';\nimport CreateGroupLists from './CreateGroupLists';\n\nimport {\n CreateGroupWrapper,\n CreateGroupBody,\n StyledCreateSuccessModal\n} from './CreateGroup.styles';\n\nconst CreateGroup = () => {\n const { t } = useTranslation(['manage-class-group']);\n const dispatch = useDispatch();\n const location = useLocation();\n\n const getSelectedStudents =\n location.state && location.state.Students ? location.state.Students : []; // get student while editing group\n const getSelectedList =\n location.state && location.state.selectedStudents\n ? location.state.selectedStudents\n : {}; // get selected list while editing group\n const name =\n location.state && location.state.groupName ? location.state.groupName : ''; // get groupname while editing group\n const groupID = location.state && location.state.id ? location.state.id : ''; // get group-id while editing group\n\n const { getStudents, error, createGroup, updateGroup } = useSelector(\n state => state.createGroups\n );\n\n const [grpName, setGrpName] = useState(name);\n const [Students, setStudents] = useState(getSelectedStudents);\n const [selectedList, setSelectedList] = useState(getSelectedList);\n const [classSelected, setClassSelected] = useState('');\n const [classIdSelected, setClassIdSelected] = useState('');\n const [showErr, setShowErr] = useState('');\n const [showSuccess, setShowSuccess] = useState(false);\n useEffect(() => {\n dispatch(getStudentByClassReset());\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (!isEmpty(error)) {\n setShowErr(error);\n }\n }, [error]);\n\n useEffect(() => {\n if (!isEmpty(createGroup)) {\n resetStates('create');\n }\n // eslint-disable-next-line\n }, [createGroup]);\n\n useEffect(() => {\n if (!isEmpty(updateGroup)) {\n resetStates('update');\n }\n // eslint-disable-next-line\n }, [updateGroup]);\n\n const resetStates = actionType => {\n if (actionType === 'create') {\n dispatch(createMyGroupReset());\n setShowSuccess(true);\n return;\n }\n dispatch(updateGroupReset());\n\n history.push('/manage-class/show');\n };\n\n const changeNameHandler = val => setGrpName(val);\n\n const callCreateGroup = async e => {\n e.preventDefault();\n if (Students.length === 0) {\n setShowErr('Please select at least one student.');\n return;\n }\n setShowErr('');\n const reqObj = {\n Name: grpName,\n Students\n };\n if (groupID) {\n reqObj.ID = groupID;\n dispatch(updateGroupRequest(reqObj));\n return;\n }\n dispatch(createMyGroupRequest(reqObj));\n };\n\n const setClassAndId = (name, id) => {\n setClassSelected(name);\n setClassIdSelected(id);\n };\n\n const callStudents = id => dispatch(getStudentByClassRequest(id));\n\n const changeStudents = val => setStudents(val);\n\n const changeSelectedList = value => {\n // for showing list in right panel(Name list of group) when selecting a student\n let tempList = { ...selectedList };\n tempList = value;\n setSelectedList(tempList);\n };\n\n const deleteSelectedStudent = userId => {\n const stuIndex = Students.findIndex(elem => elem.userId === userId);\n const tempStudents = [...Students];\n tempStudents.splice(stuIndex, 1);\n setStudents(tempStudents);\n\n const tempList = clone(selectedList);\n Object.keys(tempList).forEach(elem => {\n const listIndex = tempList[elem].findIndex(key => key.userId === userId);\n if (listIndex !== -1) tempList[elem].splice(listIndex, 1);\n });\n setSelectedList(tempList);\n };\n const hidePopup = () => {\n setShowSuccess(false);\n history.push('/manage-class/show');\n };\n return (\n <>\n <StyledCreateSuccessModal show={showSuccess} hide={hidePopup}>\n <h5>\n {t(\n 'manage-class-group:successModal.title',\n 'Group Created Successfully!'\n )}\n </h5>\n <Button onClick={hidePopup}>\n {t('manage-class-group:successModal.btn', 'See My Groups')}\n </Button>\n </StyledCreateSuccessModal>\n <CreateGroupWrapper>\n <CreateGroupHeader\n Name={grpName}\n changeNameHandler={changeNameHandler}\n callCreateGroup={callCreateGroup}\n showErr={showErr}\n buttonName={\n groupID\n ? t(`manage-class-group:createGroup.save`, 'Save')\n : t(`manage-class-group:createGroup.create`, 'Create')\n }\n />\n <CreateGroupBody>\n <CreateGroupLevels\n selectClass={setClassAndId}\n callStudents={callStudents}\n />\n <CreateGroupStudents\n classSelected={classSelected}\n classIdSelected={classIdSelected}\n getStudents={getStudents}\n selectedList={selectedList}\n changeStudents={changeStudents}\n changeSelectedList={changeSelectedList}\n Students={Students}\n />\n <CreateGroupLists\n grpName={grpName}\n selectedList={selectedList}\n Students={Students}\n deleteStudent={deleteSelectedStudent}\n />\n </CreateGroupBody>\n </CreateGroupWrapper>\n </>\n );\n};\n\nexport default CreateGroup;\n","import styled from 'styled-components';\n\nconst GameSettingStudentTable = styled.div`\n display: grid;\n margin-top: 60px;\n margin-right: 20px;\n width: 100%;\n @media only screen and (max-width: 800px) {\n margin-top: 60px;\n }\n .table {\n tbody {\n height: 200px;\n overflow-y: auto;\n width: 100%;\n }\n td {\n vertical-align: middle;\n @media only screen and (max-width: 768px) {\n padding: 0px;\n }\n }\n .table-head {\n th {\n color: rgba($color: #0a0a0a, $alpha: 0.42);\n font-size: 14px;\n font-weight: 100;\n vertical-align: middle;\n text-align: center;\n border-bottom: none;\n @media only screen and (max-width: 1260px) {\n font-size: 12px;\n }\n @media only screen and (max-width: 1132px) {\n font-size: 10px;\n }\n @media only screen and (max-width: 768px) {\n font-size: 6px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n span {\n display: flex;\n justify-content: center;\n }\n }\n }\n .table-row {\n font-size: 14px;\n padding: 12px 5px;\n text-align: center;\n @media only screen and (max-width: 1132px) {\n font-size: 12px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n .plan {\n width: 1%;\n font-size: 11px;\n text-align: center;\n @media only screen and (max-width: 800px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n img {\n height: 22px;\n width: 22px;\n @media only screen and (max-width: 800px) {\n height: 0px;\n width: 0px;\n }\n }\n }\n &--student {\n font-weight: 600;\n text-align: left;\n @media only screen and (max-width: 800px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n img {\n margin-right: 10px;\n height: 40px;\n width: 40px;\n border-radius: 50%;\n @media only screen and (max-width: 800px) {\n height: 20px;\n width: 20px;\n margin-left: 5px;\n margin-right: 5px;\n }\n @media only screen and (max-width: 639px) {\n height: 0px;\n width: 0px;\n margin-left: 3px;\n margin-right: 0px;\n }\n }\n }\n }\n //the container\n .container-checkbox {\n position: relative;\n display: flex;\n align-items: center;\n }\n //hide the browser's default check-box\n .container-checkbox input {\n opacity: 0;\n cursor: pointer;\n }\n .container-checkbox label {\n margin-bottom: 0;\n margin-left: 35px;\n @media only screen and (max-width: 800px) {\n font-size: 8px;\n }\n @media only screen and (max-width: 587px) {\n font-size: 4px;\n }\n }\n //create a custom checkbox\n .container-checkbox .checkmark {\n position: absolute;\n height: 25px;\n width: 25px;\n border-radius: 4px;\n border: 1px solid #9e9e9e;\n background-color: white;\n @media only screen and (max-width: 1132px) {\n height: 17px;\n width: 17px;\n }\n @media only screen and (max-width: 768px) {\n height: 18px;\n width: 18px;\n }\n @media only screen and (max-width: 587px) {\n height: 10px;\n width: 10px;\n }\n }\n //on mouse hover\n .container-checkbox:hover input ~ .checkmark {\n background-color: #ffc400;\n border: none;\n }\n //when checkbox is checked\n .container-checkbox input:checked ~ .checkmark {\n background-color: #ef7836;\n border: none;\n }\n //create the checkmark/indicator (hidden when not checked)\n .container-checkbox .checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n //show the checkmark when checked\n .container-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n //style the checkmark/indicator\n .container-checkbox .checkmark:after {\n left: 8px;\n top: 2px;\n width: 8px;\n height: 16px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n @media only screen and (max-width: 1132px) {\n width: 6px;\n height: 10px;\n border-width: 0 2px 2px 0;\n left: 6px;\n }\n @media only screen and (max-width: 768px) {\n width: 6px;\n height: 10px;\n border-width: 0 2px 2px 0;\n left: 6px;\n }\n @media only screen and (max-width: 587px) {\n width: 4px;\n height: 6px;\n border-width: 0 1.5px 1.5px 0;\n left: 3px;\n top: 1px;\n }\n }\n }\n`;\n\nexport default GameSettingStudentTable;\n","import React, { useCallback } from 'react';\nimport SchoolPlanIcon from 'assets/img/icon-manage-class-student-list-plan-school.svg';\nimport StandardPlanIcon from 'assets/img/icon-manage-class-student-list-plan-standard.svg';\nimport PremiumPlanIcon from 'assets/img/icon-manage-class-student-list-plan-premium.svg';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport Spinner from 'components/Shared/Spinner';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from 'react-bootstrap';\nimport GameSettingStudentTable from './GameSettingStudentList.styles';\n\nconst getPlanIcon = planID => {\n switch (planID) {\n case 0:\n return SchoolPlanIcon;\n case 2:\n return StandardPlanIcon;\n case 3:\n return PremiumPlanIcon;\n case 5:\n return PremiumPlanIcon;\n case 6:\n return PremiumPlanIcon;\n default:\n return null;\n }\n};\n\nconst GameSettingStudentList = ({\n students,\n allowedStudentIDs,\n setAllowedStudentIDs,\n isLoading\n}) => {\n const { t } = useTranslation(['manage-class']);\n\n const handleOnChange = useCallback(\n event => {\n const userID = parseInt(event.target.value, 10);\n if (event.target.checked) {\n setAllowedStudentIDs([...allowedStudentIDs, userID]);\n } else {\n setAllowedStudentIDs(\n allowedStudentIDs.filter(studentID => studentID !== userID)\n );\n }\n },\n [allowedStudentIDs, setAllowedStudentIDs]\n );\n return (\n <GameSettingStudentTable>\n {isLoading && <Spinner position=\"inherit\" gridColumn=\"1/17\" />}\n {!isLoading && students === 0 && (\n <span\n style={{\n gridColumn: '1/17',\n textAlign: 'center',\n marginTop: '1rem',\n height: '70vh'\n }}\n >\n No students\n </span>\n )}\n {!isLoading && students && allowedStudentIDs && (\n <table className=\"table table-striped table-hover\">\n <thead className=\"table-borderless\">\n <tr className=\"table-head\">\n <th scope=\"col\">{t(`manage-class:studList.plan`, 'Plan')}</th>\n <th scope=\"col\">\n {t(`manage-class:studList.studName`, 'Student Name')}\n </th>\n <th scope=\"col\" />\n </tr>\n </thead>\n <tbody className=\"table-bordered\">\n {students &&\n students.map(item => (\n <tr className=\"table-row\" key={item.UserId}>\n <td className=\"plan\">\n {getPlanIcon(item.PlanId) !== null && (\n <img src={getPlanIcon(item.PlanId)} alt=\"Plan Icon\" />\n )}\n {item.PlanName}\n </td>\n <td className=\"table-row--student\">\n <img\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n src={item.ProfilePictureUrl}\n alt=\"profile\"\n />\n {item.Name}\n </td>\n <td>\n <div className=\"container-checkbox\">\n <input\n value={item.UserId}\n id={`check-${item.UserId}`}\n type=\"checkbox\"\n className=\"student-check-box individual\"\n name=\"check\"\n checked={allowedStudentIDs.includes(item.UserId)}\n onChange={handleOnChange}\n />\n <Form.Label htmlFor={`check-${item.UserId}`}>\n {t(`manage-class:gameSettings.allow`, 'Allow access')}\n </Form.Label>\n <span className=\"checkmark\" />\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </GameSettingStudentTable>\n );\n};\n\nexport default React.memo(GameSettingStudentList);\n","import styled from 'styled-components';\n\nconst GameSettingContainer = styled.div`\n background-color: white;\n width: calc(100vw - 280px);\n margin-left: 245px;\n margin-right: 35px;\n box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);\n @media (max-width: 1024px) {\n width: calc(100vw - 106px);\n margin-left: 81px;\n margin-right: 25px;\n }\n span {\n font-size: 16px;\n }\n\n .navigation-back {\n color: #727272;\n text-decoration: none;\n @media only screen and (max-width: 768px) {\n font-size: 10px;\n }\n &:hover {\n color: #ff5b00;\n }\n }\n`;\n\nexport default GameSettingContainer;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport iconToga from 'assets/img/icon-toga.svg';\nimport GameSettingStudentList from 'components/ManageClass/GameSettingStudentList';\nimport {\n fetchGameSettingClassRequest,\n fetchGameSettingStudentRequest,\n resetError,\n saveGameSettingRequest\n} from 'stores/gameSetting/actions';\nimport AlertModal from 'components/Alert/AlertModal';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport GameSettingContainer from './GameSetting.styles';\n\nconst GameSetting = () => {\n const { t } = useTranslation(['manage-class', 'common']);\n const dispatch = useDispatch();\n const {\n classes,\n students,\n error,\n isLoading,\n saveSettingResult\n } = useSelector(state => state.gameSetting);\n\n const [selectedClass, setSelectedClass] = useState(null);\n const [allowedStudentIDs, setAllowedStudentIDs] = useState([]);\n const [isShowModal, setIsShowModal] = useState(false);\n const [alertMessage, setAlertMessage] = useState('');\n\n const onModalClose = () => {\n setAlertMessage('');\n setIsShowModal(false);\n dispatch(resetError());\n };\n\n const handleSelectedClass = classObject => {\n setSelectedClass(classObject);\n };\n\n useEffect(() => {\n dispatch(fetchGameSettingClassRequest());\n }, [dispatch]);\n\n useEffect(() => {\n setSelectedClass(classes[0]);\n }, [classes]);\n\n useEffect(() => {\n if (selectedClass) {\n dispatch(fetchGameSettingStudentRequest(selectedClass.Id));\n }\n }, [dispatch, selectedClass]);\n\n useEffect(() => {\n if (students) {\n const allowed = students\n .filter(student => student.Access === true)\n .map(student => student.UserId);\n setAllowedStudentIDs(allowed);\n }\n }, [students]);\n\n useEffect(() => {\n if (!isNilOrEmpty(error)) {\n setIsShowModal(true);\n setAlertMessage(error);\n }\n }, [error]);\n\n useEffect(() => {\n if (saveSettingResult) {\n setIsShowModal(true);\n setAlertMessage(\n t(\n `manage-class:gameSettings.modal.desc`,\n 'Game Setting Change Successfully!'\n )\n );\n }\n }, [saveSettingResult, t]);\n\n const handleOnSave = useCallback(() => {\n const disallowed = students\n .map(student => student.UserId)\n .filter(id => !allowedStudentIDs.includes(id));\n const params = {\n Groupid: selectedClass.Id,\n AllowedUsers: allowedStudentIDs,\n DeniedUsers: disallowed\n };\n\n dispatch(saveGameSettingRequest(params));\n }, [dispatch, allowedStudentIDs, students, selectedClass]);\n\n return (\n <>\n <AlertModal\n title={t(`manage-class:gameSettings.modal.info`, 'Info')}\n isShow={isShowModal}\n handleClose={onModalClose}\n buttons={\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={onModalClose}\n >\n {t('common:close', 'Close')}\n </button>\n }\n >\n <p>{alertMessage}</p>\n </AlertModal>\n <GameSettingContainer>\n <div className=\"d-flex justify-content-between align-items-center mx-auto px-3 py-4 border-bottom\">\n <Link to=\"/\" className=\"navigation-back\">\n &lt; {t(`common:back`, 'Back')}\n </Link>\n\n <div className=\"d-flex align-items-center\">\n <img\n className=\"mr-2\"\n src={iconToga}\n alt=\"class-icon\"\n width=\"35px\"\n height=\"35px\"\n />\n <span className=\"mr-2\">\n {t(`manage-class:studModal.class`, 'Class')}\n </span>\n <div className=\"mr-2\">\n <DropdownMenu\n selectedValue={selectedClass && selectedClass.Name}\n values={classes}\n valueKey=\"Name\"\n setValue={handleSelectedClass}\n width=\"200px\"\n />\n </div>\n <span>\n {t(\n `manage-class:gameSettings.desc`,\n 'Math Games Setting for Individual Students'\n )}\n </span>\n </div>\n\n <button\n type=\"button\"\n className=\"btn btn-primary btn-next-qn question-cart-content__right-btn\"\n onClick={handleOnSave}\n >\n {t(`manage-class:editGroup.save`, 'Save')}\n </button>\n </div>\n <div className=\"px-5\">\n <GameSettingStudentList\n students={students}\n allowedStudentIDs={allowedStudentIDs}\n setAllowedStudentIDs={setAllowedStudentIDs}\n isLoading={isLoading}\n />\n </div>\n </GameSettingContainer>\n </>\n );\n};\nexport default React.memo(GameSetting);\n","import React, { useState } from 'react';\nimport { Route, Switch, useLocation } from 'react-router-dom';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport SidebarManageClass from 'components/Sidebar/SidebarManageClass';\nimport Overlay from 'components/Content/Overlay';\nimport Header from 'components/Header/Header';\nimport GroupAdd from './GroupAdd';\nimport GroupsList from './GroupsList';\nimport DisplayClass from './DisplayClass';\nimport StudentList from './StudentList';\nimport ShowGroup from './ShowGroup/ShowGroup';\nimport CreateGroup from './CreateGroup/CreateGroup';\nimport GameSetting from './GameSetting';\n\nexport default function ManageClass() {\n const [expanded, setExpanded] = useState(false);\n const toggleNavigation = () => setExpanded(!expanded);\n const { pathname } = useLocation();\n const getContentClassName = () =>\n `content ${\n pathname === '/manage-class/add'\n ? ' content-sidebar-small'\n : ' content-sidebar-none'\n }`;\n\n return (\n <>\n <Header />\n <main>\n <Sidebar\n expanded={expanded}\n toggleNavigation={toggleNavigation}\n className=\"sidebar--auto\"\n >\n <SidebarManageClass />\n </Sidebar>\n <div className={getContentClassName()}>\n <Overlay isVisible={expanded} toggleVisible={toggleNavigation} />\n <Switch>\n <Route exact path=\"/manage-class\" component={DisplayClass} />\n <Route exact path=\"/manage-class/show\" component={ShowGroup} />\n <Route\n exact\n path=\"/manage-class/create-group\"\n component={CreateGroup}\n />\n <Route exact path=\"/manage-class/add\" component={GroupAdd} />\n <Route\n exact\n path=\"/manage-class/privategroups\"\n component={GroupsList}\n />\n <Route path=\"/manage-class/game-setting\" component={GameSetting} />\n <Route path=\"/manage-class/:classID\" component={StudentList} />\n </Switch>\n </div>\n </main>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const ProfileImageStyle = styled.div`\n position: relative;\n margin-bottom: 30px;\n .profile-img {\n width: auto;\n height: 90px;\n border-radius: 50%;\n }\n .camera-border {\n position: absolute;\n bottom: -4px;\n right: -4px;\n background: #ffffff;\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.161);\n border-radius: 50%;\n width: 30px;\n height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n img {\n width: 20px;\n }\n }\n`;\n\nexport const ProfileModal = styled.div`\n .modal-content {\n max-width: 700px;\n }\n h5 {\n height: 60px;\n background: #ededed;\n text-align: center;\n color: #202020;\n font-size: 16px;\n font-weight: 600;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .img-modal-body {\n height: 300px;\n overflow: auto;\n padding: 20px 10px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-wrap: wrap;\n .imgs-container {\n transition: all 0.2s;\n margin: 10px 15px;\n border: 3px solid transparent;\n cursor: pointer;\n border: 3px solid transparent;\n }\n .img-active {\n border-color: #ff5b00;\n filter: drop-shadow(0px 3px 6px rgba(0, 0, 0, 0.161));\n }\n .all-imgs {\n width: 100px;\n height: 100px;\n }\n }\n .img-modal-footer {\n padding: 20px 30px;\n text-align: right;\n button {\n margin-left: 5px;\n }\n .btn-outline-light {\n color: #545454;\n border: 1px solid #c4c4c4;\n border-radius: 2px;\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Modal } from 'react-bootstrap';\nimport { ProfileModal } from './ProfileImage.style';\n\nconst ProfileImageModal = props => {\n const { t } = useTranslation(['profile-settings']);\n const { show, handleClose, avatarId, saveImage, resultImages } = props;\n const [selectedId, setSelectedId] = useState(avatarId);\n\n const setImage = () => {\n const altImg = resultImages[selectedId];\n saveImage(altImg, selectedId);\n handleClose();\n };\n\n return (\n <Modal show={show} onHide={handleClose}>\n <ProfileModal>\n <h5>\n {t(`profile-settings:profilePic.changePic`, 'Change Profile Picture')}\n </h5>\n <div className=\"img-modal-body\">\n {Object.keys(resultImages).map(item => (\n <div\n onClick={() => setSelectedId(item)}\n className={`imgs-container ${selectedId === item &&\n 'img-active'}`}\n key={item}\n >\n <img\n className=\"all-imgs\"\n src={resultImages[item]}\n alt=\"default-pic\"\n />\n </div>\n ))}\n </div>\n <div className=\"img-modal-footer\">\n <button\n type=\"button\"\n className=\"btn btn-outline-light\"\n onClick={handleClose}\n >\n {t(`profile-settings:profilePic.cancel`, 'Cancel')}\n </button>\n <button type=\"button\" className=\"btn btn-primary\" onClick={setImage}>\n {t(`profile-settings:profilePic.confirm`, 'Confirm')}\n </button>\n </div>\n </ProfileModal>\n </Modal>\n );\n};\n\nexport default ProfileImageModal;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchAvatarsRequest } from 'stores/profileSettings/actions';\nimport defaultIcon from 'assets/img/defaulticon.svg';\nimport cameraIcon from 'assets/img/profile-camera.svg';\nimport Avatar from 'assets/img/avatar.png';\nimport ProfileImageModal from './ProfileImageModal';\nimport { ProfileImageStyle } from './ProfileImage.style';\n\nexport default function ProfileImage({\n profileImage,\n profileAvatarId,\n setProfileAvatarId,\n removeDisableButton\n}) {\n const dispatch = useDispatch();\n const { avatars } = useSelector(state => state.profileSettings);\n const [showModal, setShowModal] = useState(false);\n const [mainImage, setMainImage] = useState(profileImage);\n\n useEffect(() => {\n dispatch(fetchAvatarsRequest());\n }, [dispatch]);\n\n useEffect(() => {\n if (profileImage !== undefined) setMainImage(profileImage);\n }, [profileImage]);\n\n const openModal = () => setShowModal(true);\n\n const closeModal = () => setShowModal(false);\n\n const setImageAndId = (img, id) => {\n removeDisableButton();\n setMainImage(img);\n setProfileAvatarId(id);\n };\n\n return (\n <ProfileImageStyle>\n <img\n src={mainImage || defaultIcon}\n alt=\"default-icon\"\n className=\"profile-img\"\n onError={e => {\n e.target.src = Avatar;\n }}\n />\n <span className=\"camera-border\" onClick={openModal}>\n <img src={cameraIcon} alt=\"camera-icon\" />\n </span>\n {showModal && (\n <ProfileImageModal\n show={showModal}\n handleClose={closeModal}\n avatarId={profileAvatarId}\n saveImage={setImageAndId}\n resultImages={avatars}\n />\n )}\n </ProfileImageStyle>\n );\n}\n","import styled from 'styled-components';\n\nexport const ProfileFormContainer = styled.div`\n text-align: center;\n .edit-profile-field {\n display: flex;\n width: 100%;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 20px;\n font-size: 16px;\n .field-title {\n width: 210px;\n text-align: right;\n margin-right: 10px;\n color: #202020;\n }\n .profile-form-inp {\n width: 360px;\n height: 38px;\n padding: 0 1.5rem;\n border: solid 1px rgba(112, 112, 112, 0.36);\n color: #202020;\n font-weight: 600;\n }\n .password-button {\n display: flex;\n width: 360px;\n height: 38px;\n padding: 0 0.3rem 0 1.5rem;\n border: solid 1px rgba(112, 112, 112, 0.36);\n color: #202020;\n font-weight: 600;\n background-color: #fff;\n align-items: center;\n }\n .change-pswd-inp {\n flex-grow: 2;\n background: transparent;\n border: none;\n }\n .change-pswd {\n color: #ff5b00;\n cursor: pointer;\n }\n .show-hide {\n cursor: pointer;\n }\n }\n .cancel-pswd-container {\n margin-bottom: 20px;\n display: flex;\n justify-content: flex-end;\n .pswd-border-line {\n width: 60%;\n margin: 8px;\n border-color: #c4c4c4;\n }\n .cancel-pswd {\n color: #ff5b00;\n cursor: pointer;\n font-weight: 600px;\n }\n }\n .profile-err {\n color: red;\n margin-bottom: 5px;\n }\n .save-profile {\n font-weight: 600;\n font-size: 16px;\n padding: 5px 20px;\n min-width: auto;\n }\n .save-profile:disabled {\n background-color: #ff5b00;\n border-color: #ff5b00;\n opacity: 0.4;\n cursor: not-allowed;\n }\n`;\n","import styled from 'styled-components';\n\nconst ProfilSuccessModalContnainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 550px;\n background: white;\n padding: 40px;\n align-items: center;\n .close-btn {\n position: absolute;\n right: 35px;\n top: 30px;\n border: none;\n font-size: 18px;\n background: none;\n }\n .title {\n color: #ff5b00;\n font-size: 18px;\n margin: 10px;\n }\n .text {\n color: #060606;\n margin: 10px 10px 30px 10px;\n font-size: 16px;\n }\n .btn-group {\n margin: 10px;\n button {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n }\n .no-btn {\n background: white;\n color: #ff5b00;\n border: 1px solid #d5d5d5;\n &:hover {\n background: #FFF7F3\n color: #f25008;\n border-color: #f25008;\n }\n }\n .yes-btn {\n background: #ff5b00;\n color: white;\n border: 1px solid #ff3d3d;\n &:hover {\n background: #f25008;\n }\n }\n }\n span {\n font-size: 16px;\n }\n .success-title {\n font-size: 18px;\n }\n .success-btn {\n width: 180px;\n padding: 8px;\n border-radius: 2px;\n font-size: 16px;\n margin: 0px 20px;\n background: #5ED46A;\n color: white;\n border: 1px solid #29C16A;\n }\n`;\n\nexport default ProfilSuccessModalContnainer;\n","import React from 'react';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport ProfileSuccessModalContnainer from './ProfileSuccessModal.styles';\n\nconst ProfileSuccessModal = ({ hide }) => {\n return (\n <ProfileSuccessModalContnainer>\n <button className=\"close-btn\" type=\"button\" onClick={hide}>\n X\n </button>\n <span className=\"success-title\">\n <img\n src={successIcon}\n alt=\"Success icon\"\n style={{ marginRight: '0.5rem' }}\n />\n Success!\n </span>\n <span style={{ margin: '2rem 0' }}>\n Your changes have been saved succesfully.\n </span>\n <button className=\"success-btn\" type=\"button\" onClick={hide}>\n OK\n </button>\n </ProfileSuccessModalContnainer>\n );\n};\n\nexport default ProfileSuccessModal;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Spinner } from 'react-bootstrap';\nimport {\n fetchProfileDataRequest,\n updateProfileRequest,\n emptyUpdateProfile\n} from 'stores/profileSettings/actions';\nimport ShowPswd from 'assets/img/icon-show-pswd.svg';\nimport HidePswd from 'assets/img/icon-hide-pswd.svg';\nimport ProfileImage from './ProfileImage';\nimport { ProfileFormContainer } from './ProfileForm.style';\nimport { isEmpty } from 'ramda';\n\nimport ProfileSuccessModal from './ProfileSuccessModal';\nimport PopupModal from 'components/Shared/PopupModal';\n\nexport default function ProfileForm() {\n const { t } = useTranslation(['profile-settings']);\n const dispatch = useDispatch();\n const { isLoading } = useSelector(state => state.profileSettings);\n const { profileData } = useSelector(state => state.profileSettings);\n const { updateData } = useSelector(state => state.profileSettings);\n const { error } = useSelector(state => state.profileSettings);\n\n const [name, setName] = useState('');\n const [nameInClass, setNameInClass] = useState('');\n const [email, setEmail] = useState('');\n const [profileImage, setProfileImage] = useState('');\n const [profileAvatarId, setProfileAvatarId] = useState('');\n const [changePwd, setChangePwd] = useState(false);\n const [passwords, setPasswords] = useState({\n oldPassword: '',\n newPassword: '',\n confirmPassword: ''\n });\n const [showPswd, setShowPswd] = useState(false);\n const [showConfirmPswd, setShowConfirmPswd] = useState(false);\n const [showErr, setShowErr] = useState('');\n const [disableButton, setDisableButton] = useState(true);\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n\n useEffect(() => {\n if (!profileData.error) {\n setName(profileData.FullName);\n setNameInClass(profileData.NameInClass);\n setEmail(profileData.TeacherEmail);\n setProfileImage(profileData.ProfileImage);\n setProfileAvatarId(profileData.ProfileAvatarId);\n }\n }, [profileData]);\n\n useEffect(() => {\n if (!isEmpty(updateData)) {\n if (updateData) setChangePwd(false);\n dispatch(fetchProfileDataRequest());\n dispatch(emptyUpdateProfile());\n setDisableButton(true);\n showModal();\n }\n // eslint-disable-next-line\n }, [updateData]);\n\n useEffect(() => {\n if (error) {\n setShowErr(error);\n }\n }, [error]);\n\n const changePassword = (val, type) => {\n setDisableButton(false);\n const tempPswd = { ...passwords };\n tempPswd[type] = val;\n setPasswords(tempPswd);\n };\n\n const createReqObj = () => {\n const obj = {\n UserId: profileData.UserId,\n FullName: name,\n NameInClass: nameInClass,\n TeacherEmail: email,\n ProfileAvatarId: profileAvatarId,\n CurrentPassword: changePwd ? passwords.oldPassword : null,\n NewPassword: changePwd ? passwords.newPassword : null,\n ConfirmPassword: changePwd ? passwords.confirmPassword : null\n };\n return obj;\n };\n\n const handleSubmit = e => {\n e.preventDefault();\n setShowErr('');\n if (changePwd) {\n if (passwords.newPassword !== passwords.confirmPassword) {\n setShowErr(\n t(\n `profile-settings:main.pswdErr`,\n 'New and confirm password should be same.'\n )\n );\n return;\n }\n }\n const obj = createReqObj();\n dispatch(updateProfileRequest(obj, changePwd));\n cancelChangePswd();\n };\n\n const setAvatarId = val => {\n setProfileAvatarId(val);\n };\n\n const cancelChangePswd = () => {\n setShowErr('');\n setChangePwd(false);\n setPasswords({\n ...passwords,\n oldPassword: '',\n newPassword: '',\n confirmPassword: ''\n });\n };\n\n const showModal = () => setShowSuccessModal(true);\n\n return (\n <>\n <ProfileImage\n profileImage={profileImage}\n profileAvatarId={profileAvatarId}\n setProfileAvatarId={setAvatarId}\n removeDisableButton={() => setDisableButton(false)}\n />\n <ProfileFormContainer>\n <form onSubmit={handleSubmit}>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.name`, 'Name')}\n </span>\n <input\n type=\"text\"\n value={name}\n className=\"profile-form-inp\"\n onChange={e => {\n setName(e.target.value);\n setDisableButton(false);\n }}\n required\n />\n </div>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.nameClass`, 'Name in class')}\n </span>\n <input\n type=\"text\"\n value={nameInClass}\n className=\"profile-form-inp\"\n onChange={e => {\n setNameInClass(e.target.value);\n setDisableButton(false);\n }}\n required\n />\n </div>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.email`, 'Email')}\n </span>\n <input\n type=\"text\"\n value={email}\n className=\"profile-form-inp\"\n onChange={e => {\n setEmail(e.target.value);\n setDisableButton(false);\n }}\n required\n />\n </div>\n\n {!changePwd ? (\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.password`, 'Password')}\n </span>\n <div className=\"password-button\">\n <input\n type=\"text\"\n value=\"●●●●●●●●●\"\n className=\"change-pswd-inp\"\n />\n <span\n onClick={() => setChangePwd(true)}\n className=\"change-pswd\"\n >\n {t(`profile-settings:main.changePswd`, 'Change Password')}\n </span>\n </div>\n </div>\n ) : (\n <>\n <div onClick={cancelChangePswd} className=\"cancel-pswd-container\">\n <hr className=\"pswd-border-line\" />\n <span className=\"cancel-pswd\">\n {t(\n `profile-settings:main.cancelChangePswd`,\n 'Cancel Change Password'\n )}\n </span>\n </div>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.oldPswd`, 'Old Password')}\n </span>\n <input\n type=\"password\"\n value={passwords.oldPassword}\n className=\"profile-form-inp\"\n onChange={e => changePassword(e.target.value, 'oldPassword')}\n autoComplete={false}\n required\n />\n </div>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(`profile-settings:main.newPswd`, 'New Password')}\n </span>\n <div className=\"password-button\">\n <input\n type={showPswd ? 'text' : 'password'}\n value={passwords.newPassword}\n className=\"change-pswd-inp\"\n onChange={e =>\n changePassword(e.target.value, 'newPassword')\n }\n autoComplete=\"off\"\n required\n />\n <img\n src={showPswd ? HidePswd : ShowPswd}\n alt=\"show-hide-icon\"\n className=\"show-hide\"\n onClick={() => setShowPswd(!showPswd)}\n />\n </div>\n </div>\n <div className=\"edit-profile-field\">\n <span className=\"field-title\">\n {t(\n `profile-settings:main.confirmPswd`,\n 'Confirm New Password'\n )}\n </span>\n <div className=\"password-button\">\n <input\n type={showConfirmPswd ? 'text' : 'password'}\n value={passwords.confirmPassword}\n className=\"change-pswd-inp\"\n onChange={e =>\n changePassword(e.target.value, 'confirmPassword')\n }\n autoComplete=\"off\"\n required\n />\n <img\n src={showConfirmPswd ? HidePswd : ShowPswd}\n alt=\"show-hide-icon\"\n className=\"show-hide\"\n onClick={() => setShowConfirmPswd(!showConfirmPswd)}\n />\n </div>\n </div>\n </>\n )}\n {showErr && <div className=\"profile-err\">{showErr}</div>}\n <button\n disabled={disableButton}\n type=\"submit\"\n className=\"btn btn-lg btn-primary save-profile\"\n >\n {t(`profile-settings:main.saveChanges`, 'Save Changes')}\n </button>\n {isLoading && (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className=\"ml-2\"\n />\n )}\n </form>\n <PopupModal\n show={showSuccessModal}\n hide={() => setShowSuccessModal(false)}\n >\n <ProfileSuccessModal hide={() => setShowSuccessModal(false)} />\n </PopupModal>\n </ProfileFormContainer>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const ProfileSettingHeader = styled.div`\n background: #ffffff;\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.161);\n padding: 25px;\n text-align: center;\n color: #202020;\n font-size: 16px;\n font-weight: bold;\n`;\n\nexport const ProfileFormWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n flex-direction: column;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Header from 'components/Header/Header';\nimport ProfileForm from './ProfileForm/ProfileForm';\nimport {\n ProfileSettingHeader,\n ProfileFormWrapper\n} from './ProfileSettings.style';\n\nexport default function ManageClass() {\n const { t } = useTranslation(['profile-settings']);\n return (\n <>\n <Header />\n <ProfileSettingHeader>\n {t(`profile-settings:main.profileSettings`, 'Profile and Settings')}\n </ProfileSettingHeader>\n <ProfileFormWrapper>\n <ProfileForm />\n </ProfileFormWrapper>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const CPContainer = styled.div`\n background: white;\n grid-column: 1 / span 6;\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: -53px;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI',\n 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',\n 'Helvetica Neue', sans-serif;\n\n @media only screen and (max-width: 1024px) {\n grid-column: 1 / span 5;\n }\n\n @media only screen and (max-width: 480px) {\n grid-column: 1 / span 10;\n justify-content: center;\n padding: 0 1rem 1rem;\n }\n\n .mascot {\n position: absolute;\n width: 60%;\n bottom: 0;\n @media only screen and (max-width: 1024px) {\n width: 50%;\n }\n }\n`;\n\nexport const RealTimeContainer = styled.div`\n width: 90%;\n margin-top: 25px;\n font-size: 16px;\n @media only screen and (min-width: 1920px) {\n font-size: 20px;\n }\n @media only screen and (max-width: 1024px) {\n font-size: 12px;\n padding: 2rem 1.5rem;\n }\n .title {\n font-size: 22px;\n color: #7486ff;\n margin-bottom: 1rem;\n font-family: 'Linotte Semibold', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n }\n .student-name {\n width: 28%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n @media only screen and (max-width: 1024px) {\n width: 18%;\n }\n }\n .school {\n display: flex;\n width: 21.5vw;\n @media only screen and (max-width: 1024px) {\n width: auto;\n }\n img {\n width: 21px;\n height: 21px;\n }\n span {\n margin-left: 10px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n @media only screen and (max-width: 1024px) {\n display: none;\n }\n }\n }\n .latest-CP {\n text-align: center;\n width: 12%;\n @media only screen and (max-width: 1024px) {\n width: 17%;\n }\n }\n .time {\n width: 19%;\n @media only screen and (max-width: 1024px) {\n width: 30%;\n }\n }\n .flag {\n width: 5%;\n img {\n width: 23px;\n height: 23px;\n @media only screen and (max-width: 1024px) {\n width: 18px;\n height: 18px;\n }\n }\n }\n\n table td {\n padding: 0.3rem;\n color: #707070;\n }\n .table-title {\n color: #7e7e7e;\n font-family: 'Linotte Semibold', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n tr {\n border-top: hidden;\n border-bottom: hidden;\n }\n @media only screen and (max-width: 1366px) {\n font-size: 14px;\n }\n }\n .table-body {\n td {\n border-top: none;\n font-family: 'Linotte Light', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 0.8125rem;\n @media (min-width: 1920px) {\n font-size: 1rem;\n }\n }\n tr {\n border-bottom: 1px solid #858dff;\n width: 100%;\n }\n }\n`;\n","import React from 'react';\nimport { CPContainer, RealTimeContainer } from './CPSection.styles';\nimport Mascot from './mascot.svg';\n\nconst CPErrorFallback = () => {\n return (\n <CPContainer>\n <RealTimeContainer>\n <p className=\"title\">Latest CP Submitted</p>\n </RealTimeContainer>\n <img className=\"mascot\" src={Mascot} alt=\"Welcome to KooBits\" />\n </CPContainer>\n );\n};\n\nexport default CPErrorFallback;\n","import React, { useEffect, useState } from 'react';\nimport Mascot from './mascot.svg';\nimport { CPContainer, RealTimeContainer } from './CPSection.styles';\n\n// Reference to jquery\nconst { $ } = window;\n\n// Helpers\n// const compareArray = (arr1, arr2) => {\n// // Check if first item is the same\n// return JSON.stringify(arr1[0]) === JSON.stringify(arr2[0]);\n// };\n\n// Component\nconst CPSection = () => {\n // Component States\n const [connectionStatus, setConnectionStatus] = useState(false);\n const [submissionsData, setSubmissionsData] = useState([]);\n const [batchedData, setBatchedData] = useState([]);\n\n // UseEffects\n // Fetch latest submission\n useEffect(() => {\n $.connection.hub.url = process.env.REACT_APP_SIGNALR_ENDPOINT;\n $.connection.hub.logging = true;\n const psHub = $.connection.ProblemSumsBroadcast;\n // Connect to SignalR endpoint\n $.connection.hub\n .start()\n .done(() => {\n // console.log('Connected');\n setConnectionStatus(true);\n psHub.server\n .getLatestSubmissions()\n .done(data => {\n // console.log(JSON.parse(data));\n if (psHub.client.prevState.length === 0) {\n setSubmissionsData(JSON.parse(data));\n setBatchedData(JSON.parse(data));\n }\n })\n .fail(err => {\n console.log(err);\n });\n })\n .fail(err => {\n setConnectionStatus(false);\n console.log(err);\n });\n return () => $.connection.hub.stop();\n }, []);\n useEffect(() => {\n const psHub = $.connection.ProblemSumsBroadcast;\n if (submissionsData.length > 0) {\n psHub.client.prevState = [...submissionsData];\n // console.log('Set prevState', psHub.client.prevState);\n } else {\n psHub.client.prevState = [];\n }\n }, [submissionsData]);\n\n useEffect(() => {\n const psHub = $.connection.ProblemSumsBroadcast;\n psHub.client.broadCastLatestCP = data => {\n // console.log('Received broadcast', JSON.parse(data));\n const newData = [...psHub.client.prevState];\n // console.log('Function', newData);\n newData.unshift(JSON.parse(data));\n setSubmissionsData(newData.slice(0, 6));\n if (psHub.client.prevState.length === 3) {\n setBatchedData(newData.slice(0, 6));\n }\n };\n }, []);\n\n // Mock broadcast update\n // useEffect(() => {\n // const interval = setInterval(() => {\n // console.log('Broadcast update');\n // setSubmissionsData([\n // {\n // FullName: 'Penared******************',\n // School: 'Sacred Heart Academy Pasig',\n // SchoolCode: '1509934585',\n // Points: 2,\n // SDate: '11:31, 2020-Jul-04',\n // Flag: '/Content/images/flag/169.png',\n // CountryId: '169'\n // }\n // ]);\n // }, 1000);\n // return () => clearInterval(interval);\n // }, []);\n\n // Update data in batches every 3 seconds\n useEffect(() => {\n const interval = setInterval(() => {\n const { prevState } = $.connection.ProblemSumsBroadcast.client;\n // console.log('Interval batch');\n if (batchedData.length > 0) {\n setBatchedData(prevState);\n }\n }, 3000);\n return () => clearInterval(interval);\n }, [batchedData.length]);\n return (\n <CPContainer>\n <RealTimeContainer>\n <p className=\"title\">Latest CP Submitted</p>\n <table className=\"table\">\n <thead className=\"table-title\">\n <tr>\n <td>Name</td>\n <td>School</td>\n <td>Latest CP</td>\n <td>Submission Time</td>\n <td />\n </tr>\n </thead>\n <tbody className=\"table-body\">\n {connectionStatus &&\n batchedData.slice(0, 4).map((item, index) => (\n <tr className=\"border_bottom\" key={`${item.FullName}-${index}`}>\n <td className=\"student-name\">{item.FullName}</td>\n <td className=\"school\">\n <img\n onError={e => {\n e.target.style.display = 'none';\n }}\n src={`https://static.koobits.com/eduresources/schlogo/${item.SchoolCode}.png`}\n alt=\"school-logo\"\n />\n <span>{item.School}</span>\n </td>\n <td className=\"latest-CP\">{item.Points}</td>\n <td className=\"time\">{item.SDate}</td>\n <td className=\"flag\">\n <img\n onError={e => {\n e.target.style.display = 'none';\n }}\n src={`https://problemsums.koobits.com/Content/images/flag/${item.CountryId}.png`}\n alt=\"flag\"\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </RealTimeContainer>\n <img className=\"mascot\" src={Mascot} alt=\"Welcome to KooBits\" />\n </CPContainer>\n );\n};\n\nexport default CPSection;\n","import styled from 'styled-components';\n\nexport const LoginButton = styled.div`\n width: 100%;\n .custom-button,\n .login-button {\n background: #ffae0c;\n color: #fff;\n font-size: calc(20 / 1366 * 100vw);\n font-family: 'Linotte Semibold', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n border: none;\n width: 100%;\n padding: 0.5rem 2rem;\n border-radius: 2rem;\n -webkit-box-shadow: 0px 9px 0px 0px #e39f16;\n -moz-box-shadow: 0px 9px 0px 0px #e39f16;\n box-shadow: 0px 9px 0px 0px #e39f16;\n margin-bottom: 1rem;\n cursor: pointer;\n @media only screen and (max-width: 1024px) {\n font-size: calc(20 / 1024 * 100vw);\n }\n }\n\n .custom-button:hover,\n .login-button:hover {\n background: #ff9e0c;\n box-shadow: 0px 9px 0px 0px #e39116;\n -webkit-box-shadow: 0px 9px 0px 0px #e39116;\n -moz-box-shadow: 0px 9px 0px 0px #e39116;\n }\n\n @media only screen and (max-width: 480px) {\n .custom-button,\n .login-button {\n width: 90%;\n font-size: 24px;\n position: relative;\n top: -4rem;\n }\n .login-button {\n position: static;\n align-self: center;\n }\n }\n`;\n","import React from 'react';\n\nimport { LoginButton } from './LoginButton.styles';\n\nconst CustomButton = ({ children, ...otherProps }) => (\n <LoginButton>\n <button className=\"custom-button\" {...otherProps}>\n {children}\n </button>\n </LoginButton>\n);\n\nexport default CustomButton;\n","import styled from 'styled-components';\n\nexport const PasswordContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n @media only screen and (max-width: 480px) {\n width: 89%;\n }\n .show-password {\n display: flex;\n flex-direction: row;\n margin-left: 1rem;\n @media only screen and (max-width: 480px) {\n margin: 0.5rem;\n }\n @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) {\n margin-left: 1.1rem;\n }\n span {\n margin-top: 0.2rem;\n margin-left: 1.5rem;\n font-size: 15px;\n color: #4852b5;\n opacity: 1;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n @media only screen and (min-width: 1920px) {\n font-size: 20px;\n }\n }\n }\n input[type='checkbox'] {\n width: 12px;\n height: 12px;\n position: absolute;\n z-index: 1;\n margin-top: 0.3rem;\n }\n .show-password input {\n cursor: pointer;\n /* Increase size of checkbox */\n -ms-transform: scale(2); /* IE */\n -moz-transform: scale(2); /* FF */\n -webkit-transform: scale(2); /* Safari and Chrome */\n -o-transform: scale(2); /* Opera */\n transform: scale(2);\n }\n #password {\n background: #fff;\n padding: 0.5rem 1.5rem;\n border: none;\n border-radius: 2rem;\n font-size: 1rem;\n color: #4852b5;\n width: calc(100% - 3rem);\n margin-bottom: 1rem;\n @media only screen and (min-width: 1920px) {\n padding: 0.8rem 1.5rem;\n font-size: 1.2rem;\n }\n @media only screen and (max-width: 1366px) {\n padding: 0.5rem 1.5rem;\n }\n @media only screen and (max-width: 480px) {\n padding: 0.5rem 1.5rem;\n font-size: 18px;\n margin-bottom: 1rem;\n }\n }\n #password::placeholder {\n color: #8b96c5;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n }\n`;\n\nexport const LoginFormContainer = styled.div`\n background-color: rgba(255, 255, 255, 0.22);\n width: 70%;\n border-radius: 1rem;\n padding: 2rem 2rem;\n @media only screen and (max-width: 480px) {\n background-color: rgba(255, 255, 255, 0);\n width: 100%;\n padding: 1.5rem 2rem;\n }\n @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) {\n padding: 1.5rem 0rem;\n }\n .login-form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n #login-id {\n background: #fff;\n padding: 0.5rem 1.5rem;\n border: none;\n border-radius: 2rem;\n font-size: 1rem;\n color: #4852b5;\n width: 100%;\n margin-bottom: 1rem;\n @media only screen and (min-width: 1920px) {\n font-size: 1.2rem;\n padding: 0.8rem 1.5rem;\n }\n @media only screen and (max-width: 480px) {\n width: 75%;\n padding: 0.5rem 1.5rem;\n font-size: 18px;\n margin-bottom: 1rem;\n }\n @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) {\n width: 100%;\n }\n }\n #login-id::placeholder {\n color: #8b96c5;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n }\n .help-container {\n text-align: left;\n width: 100%;\n margin-bottom: 1rem;\n padding-left: 0.3rem;\n font-size: 15px;\n a {\n color: #4852b5;\n text-decoration: underline;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n }\n @media only screen and (min-width: 1920px) {\n font-size: 1.2rem;\n }\n @media only screen and (max-width: 480px) {\n padding-left: 4rem;\n }\n @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) {\n padding-left: 2rem;\n }\n }\n`;\nexport const StyledErrorMessageContainer = styled.div`\n color: #ff2e35;\n padding-left: 1rem;\n margin-bottom: 0.5rem;\n text-align: left;\n a {\n color: #ff2e35;\n text-decoration: underline;\n }\n`;\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loginRequest } from 'stores/login/actions';\nimport LoginButton from '../LoginButton/LoginButton';\nimport {\n PasswordContainer,\n LoginFormContainer,\n StyledErrorMessageContainer\n} from './LoginForm.styles';\n\nconst Password = ({ password, handleChange }) => {\n const [type, setType] = useState('password');\n const togglePasswordHandler = e => {\n if (type === 'password') {\n setType('text');\n } else {\n setType('password');\n }\n };\n\n return (\n <PasswordContainer>\n <input\n type={type}\n name=\"password\"\n id=\"password\"\n placeholder=\"Enter your password\"\n onChange={handleChange}\n value={password}\n required\n />\n <div className=\"show-password\">\n <input\n type=\"checkbox\"\n name=\"show-password\"\n onClick={togglePasswordHandler}\n />\n <span>Show</span>\n </div>\n </PasswordContainer>\n );\n};\n\nconst LoginErrors = ({ error, username }) => {\n const errorTypes = {\n 'Invalid Password.': (\n <>\n Your Password is wrong.{' '}\n <a\n href={`${process.env.REACT_APP_KOOBITS_DOMAIN}/Recover?uid=${username}`}\n >\n Forgot password?\n </a>\n </>\n ),\n 'Invalid Username.': (\n <>\n Your Username is invalid.{' '}\n <a href=\"https://support.koobits.com/hc/en-gb/articles/212117966-Forgot-Login-ID-\">\n Check Login ID Format\n </a>\n </>\n ),\n 'connection-issue': \"Sorry, we can't connect to internet or our server.\",\n \"You don't have permission to access\":\n 'Sorry, your account does not have permission to access.',\n 'account expired': (\n <>\n This teacher’s account has expired. You can contact{' '}\n <a href=\"https://www.koobits.com/contact\">support</a> for assistance.\n </>\n )\n };\n\n return (\n <StyledErrorMessageContainer>\n {errorTypes[error] || error}\n </StyledErrorMessageContainer>\n );\n};\n\nconst LoginForm = () => {\n const dispatch = useDispatch();\n const { isLoading, error } = useSelector(state => state.login);\n // STATES\n // Stores user-entered fields\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n\n // Event handler for when user changes the value in input fields\n const handleChange = event => {\n const { value, name } = event.target;\n if (name === 'login-id') {\n setUsername(value);\n } else {\n setPassword(value);\n }\n };\n\n // Event handler for when form is submitted by clicking Login button\n const handleSubmit = event => {\n event.preventDefault();\n // Clear any errors from the previous login attempt\n dispatch(loginRequest(username, password));\n };\n\n return (\n <LoginFormContainer>\n <form className=\"login-form\" onSubmit={handleSubmit}>\n <PasswordContainer>\n <input\n type=\"text\"\n name=\"login-id\"\n id=\"login-id\"\n placeholder=\"Enter your Login ID\"\n onChange={handleChange}\n value={username}\n required\n />\n </PasswordContainer>\n <Password password={password} handleChange={handleChange} />\n {error.length > 0 && <LoginErrors error={error} username={username} />}\n <span className=\"help-container\">\n <a href=\"https://support.koobits.com/hc/en-gb?utm_source=kps&utm_medium=login&utm_campaign=help\">\n Need Help?\n </a>\n </span>\n <LoginButton className=\"login-button\" type=\"submit\">\n {!isLoading ? 'Login' : 'Logging In...'}\n </LoginButton>\n </form>\n </LoginFormContainer>\n );\n};\n\nexport default LoginForm;\n","import styled from 'styled-components';\n\nexport const LoginSectionContainer = styled.div`\n grid-column: 7 / span 4;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n @media only screen and (max-width: 1024px) {\n grid-column: 6 / span 5;\n }\n\n .gradient-bg {\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: 63vw;\n background-image: radial-gradient(circle, #9adaff, #8077f6);\n z-index: -1;\n @media only screen and (max-width: 480px) {\n width: 100vw;\n }\n }\n\n .home-icon {\n width: calc(20 / 1366 * 100vw);\n height: calc(20 / 1366 * 100vw);\n }\n\n .home-text {\n color: white;\n margin-left: 0.5rem;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n @media only screen and (max-width: 1290px) {\n display: none;\n }\n }\n\n .brandname-container {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n margin: 6rem 0 1rem;\n @media only screen and (max-width: 480px) {\n margin: 3rem 0 1rem;\n }\n }\n\n .brandname-container img {\n position: relative;\n top: 0.4rem;\n }\n\n .brandname-logo {\n width: calc(147 / 1366 * 100vw);\n height: calc(55 / 1366 * 100vw);\n @media only screen and (max-width: 1024px) {\n width: calc(147 / 1024 * 100vw);\n height: calc(55 / 1024 * 100vw);\n }\n }\n\n .brandname-divider {\n position: relative;\n top: 0.4rem;\n margin-right: 1rem;\n color: white;\n }\n\n .brandname-tagline {\n display: flex;\n flex-direction: row;\n height: 40px;\n position: relative;\n top: -0.1rem;\n }\n\n .brandname-tagline-text {\n font-size: 19px;\n color: #e5ffeb;\n align-self: flex-end;\n text-shadow: 3px 0px 6px rgba(0, 0, 0, 0.14);\n }\n\n .brandname-tagline-star {\n align-self: flex-start;\n width: 24.3px;\n height: 23.15px;\n }\n\n .stars {\n position: absolute;\n right: 0;\n bottom: 0;\n pointer-events: none;\n @media only screen and (max-width: 480px) {\n display: none;\n }\n }\n .mascot {\n position: relative;\n top: 2rem;\n pointer-events: none;\n }\n\n footer {\n color: #4852b5;\n font-size: 12px;\n position: fixed;\n bottom: 1rem;\n }\n\n @media (max-width: 480px) {\n grid-column: 1 / span 10;\n padding: 1.5rem 1rem 1rem;\n\n .login-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n }\n .login-title {\n position: static;\n }\n\n .brandname-container img {\n position: relative;\n top: 0.4rem;\n }\n\n .brandname-logo {\n width: 134px;\n height: 49.94px;\n }\n\n .brandname-divider {\n margin-right: 0.5rem;\n }\n\n .home-icon {\n width: 23px;\n height: 23px;\n }\n .stars {\n margin-top: 2rem;\n right: -5.5rem;\n width: 140vw;\n height: 73vh;\n flex-shrink: 0;\n }\n }\n\n @media (min-width: 1920px) {\n .brandname-container {\n margin: 10rem 0 1rem;\n }\n .brandname-tagline {\n height: 50px;\n position: relative;\n top: -0.1rem;\n }\n .brandname-tagline-text {\n font-size: 26px;\n }\n .brandname-tagline-star {\n width: 32.42px;\n height: 30.89px;\n }\n\n footer {\n font-size: 16px;\n bottom: 2rem;\n }\n }\n`;\n\nexport const LoginHeader = styled.div`\n position: absolute;\n top: 1rem;\n right: 2.5rem;\n font-size: calc(15 / 1366 * 100vw);\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 35%;\n justify-content: space-between;\n @media (min-width: 1920px) {\n top: 2rem;\n }\n @media (max-width: 1024px) {\n top: 1.5rem;\n width: 42%;\n }\n @media (max-width: 480px) {\n width: 85%;\n }\n .links {\n a {\n .link-text {\n background: none;\n border: none;\n color: white;\n font-size: 14px;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',\n 'Droid Sans', 'Helvetica Neue', sans-serif;\n @media only screen and (min-width: 1920px) {\n font-size: 22px;\n }\n @media only screen and (max-width: 480px) {\n display: none;\n }\n }\n .link-icon {\n display: none;\n @media only screen and (max-width: 480px) {\n display: inline-block;\n }\n }\n }\n a:hover {\n color: white;\n }\n span {\n color: white;\n font-size: 18px;\n margin-left: 5px;\n margin-right: 5px;\n @media only screen and (max-width: 480px) {\n font-size: 15px;\n }\n }\n @media only screen and (min-width: 1920px) {\n span {\n font-size: 20px;\n }\n }\n }\n`;\n\nexport const SignupContainer = styled.div`\n color: white;\n margin-top: 15px;\n z-index: 100;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI',\n 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',\n 'Helvetica Neue', sans-serif;\n @media only screen and (min-width: 1920px) {\n font-size: 1.2rem;\n }\n @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) {\n margin-top: 0px;\n }\n a {\n border: 1px solid white;\n background: none;\n color: white;\n padding: 0.5rem 0.75rem;\n border-radius: 5px;\n margin-left: 0.25rem;\n }\n a:hover {\n text-decoration: none;\n background: rgba(255, 255, 255, 0.2);\n }\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M-338.612,393.905l-12.025-10.939a1.787,1.787,0,0,0-2.4,0l-12.025,10.939a1.778,1.778,0,0,0-.113,2.51h0a1.808,1.808,0,0,0,1.318.579,1.77,1.77,0,0,0,1.205-.466l10.813-9.848,10.82,9.848a1.787,1.787,0,0,0,2.517-.113,1.772,1.772,0,0,0-.107-2.51Z\",\n transform: \"translate(365.643 -382.501)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M-345.442,396.784-355,405.446v11.133a.951.951,0,0,0,.481.831,1.423,1.423,0,0,0,.734.212h16.519a1.747,1.747,0,0,0,.821-.212,1.019,1.019,0,0,0,.568-.831V405.446Zm3.868,15.142h-7.73v-5.289h7.73Z\",\n transform: \"translate(359.33 -390.973)\",\n fill: \"#fff\"\n})));\n\nvar SvgHomeIcon = function SvgHomeIcon(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 27.608,\n height: 26.649,\n viewBox: \"0 0 27.608 26.649\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgHomeIcon, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/homeIcon.71de17ea.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"a\",\n x: 77.858,\n y: 36.848,\n width: 39.834,\n height: 40.945,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"b\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"b\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"c\",\n x: 103.175,\n y: 36.848,\n width: 39.835,\n height: 40.945,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"d\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"d\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"e\",\n x: 129.528,\n y: 29.697,\n width: 38.978,\n height: 48.873,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"f\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"f\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"g\",\n x: 154.42,\n y: 29.445,\n width: 24.259,\n height: 24.076,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"h\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"h\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"i\",\n x: 154.939,\n y: 37.662,\n width: 23.308,\n height: 41.161,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"j\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"j\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"k\",\n x: 163.501,\n y: 30.51,\n width: 30.361,\n height: 48.313,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"l\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"l\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"m\",\n x: 176.872,\n y: 36.849,\n width: 36.644,\n height: 41.973,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"n\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"n\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"o\",\n x: 0,\n y: 0,\n width: 90.943,\n height: 90.864,\n filterUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3,\n input: \"SourceAlpha\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 3,\n result: \"p\"\n}), /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0.161\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n operator: \"in\",\n in2: \"p\"\n}), /*#__PURE__*/React.createElement(\"feComposite\", {\n in: \"SourceGraphic\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(9 6)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M249.9,150.638a10.582,10.582,0,0,0-3.806-4.217,11.2,11.2,0,0,0-11.4-.144,10.426,10.426,0,0,0-3.916,4.129,12.339,12.339,0,0,0-1.4,5.87,12.52,12.52,0,0,0,1.313,5.658,10.417,10.417,0,0,0,3.828,4.223,11.473,11.473,0,0,0,11.579.016,10.339,10.339,0,0,0,3.808-4.206,12.617,12.617,0,0,0,1.306-5.691A12.415,12.415,0,0,0,249.9,150.638Zm-4.036,5.618a10.63,10.63,0,0,1-.681,3.615,5.3,5.3,0,0,1-1.852,2.444,5.179,5.179,0,0,1-3.1.893,4.48,4.48,0,0,1-4.1-2.024,8.948,8.948,0,0,1-1.4-4.907,9.5,9.5,0,0,1,.676-3.666,5.358,5.358,0,0,1,1.9-2.431,5.082,5.082,0,0,1,3.008-.864,4.862,4.862,0,0,1,3,.9,5.576,5.576,0,0,1,1.888,2.48A9.411,9.411,0,0,1,245.864,156.256Z\",\n transform: \"translate(-142.52 -101.94)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M263.762,150.638a10.586,10.586,0,0,0-3.808-4.217,10.773,10.773,0,0,0-5.771-1.633,10.884,10.884,0,0,0-5.633,1.488,10.42,10.42,0,0,0-3.914,4.129,12.338,12.338,0,0,0-1.4,5.87,12.518,12.518,0,0,0,1.311,5.658,10.429,10.429,0,0,0,3.828,4.223,11.473,11.473,0,0,0,11.579.016,10.339,10.339,0,0,0,3.808-4.206,12.619,12.619,0,0,0,1.308-5.691A12.415,12.415,0,0,0,263.762,150.638Zm-4.036,5.618a10.674,10.674,0,0,1-.683,3.615,5.287,5.287,0,0,1-1.852,2.444,5.175,5.175,0,0,1-3.1.893,4.48,4.48,0,0,1-4.1-2.024,8.962,8.962,0,0,1-1.4-4.907,9.5,9.5,0,0,1,.674-3.666,5.358,5.358,0,0,1,1.9-2.431,5.086,5.086,0,0,1,3.008-.864,4.868,4.868,0,0,1,3,.9,5.6,5.6,0,0,1,1.888,2.48A9.413,9.413,0,0,1,259.726,156.256Z\",\n transform: \"translate(-131.07 -101.94)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#e)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M278.085,159.48a7.491,7.491,0,0,0-2.226-3.12,7.986,7.986,0,0,0-2.572-1.465,5.683,5.683,0,0,0,1-.884,7.3,7.3,0,0,0,1.527-2.645,9.287,9.287,0,0,0,.449-2.842,7.319,7.319,0,0,0-1.284-3.863,8.371,8.371,0,0,0-3.214-2.78,9.821,9.821,0,0,0-4.453-1.01h-6.922a2.772,2.772,0,0,0-1.907.681,2.565,2.565,0,0,0-.809,2.02v25.462a2.529,2.529,0,0,0,2.844,2.71h7.618a11.552,11.552,0,0,0,5.585-1.3A9.368,9.368,0,0,0,277.388,167a8.661,8.661,0,0,0,1.26-4.466A9.284,9.284,0,0,0,278.085,159.48Zm-7.664-8.208a3.559,3.559,0,0,1-1.439,1.421,4.754,4.754,0,0,1-2.362.553h-3.646v-7.705h4.078a3.588,3.588,0,0,1,2.823,1.107,4.044,4.044,0,0,1,.544,4.624ZM273.3,162.43a4.763,4.763,0,0,1-.677,2.354,4.344,4.344,0,0,1-1.925,1.646,7.886,7.886,0,0,1-3.384.648h-4.336v-9.324H267.7a6.692,6.692,0,0,1,3.149.674,4.379,4.379,0,0,1,1.836,1.717A4.546,4.546,0,0,1,273.3,162.43Z\",\n transform: \"translate(-119.14 -105.18)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(154.42 29.445)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -163.42, -35.45)\",\n filter: \"url(#g)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M274.45,146.811a3.027,3.027,0,0,0,2.179-.9,2.933,2.933,0,0,0,0-4.281,3.147,3.147,0,0,0-4.4.013,2.9,2.9,0,0,0,.011,4.265A3.073,3.073,0,0,0,274.45,146.811Z\",\n transform: \"translate(-107.88 -105.29)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -163.42, -35.45)\",\n filter: \"url(#i)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M276.065,145.9a2.765,2.765,0,0,0-1.85-.661,2.644,2.644,0,0,0-1.837.7,2.514,2.514,0,0,0-.794,1.94V165.83a2.43,2.43,0,0,0,.82,1.89,2.682,2.682,0,0,0,1.812.674,2.779,2.779,0,0,0,1.843-.658,2.413,2.413,0,0,0,.833-1.907V147.8A2.412,2.412,0,0,0,276.065,145.9Z\",\n transform: \"translate(-107.64 -101.57)\",\n fill: \"#fff\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#k)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M287.945,148.569a2.569,2.569,0,0,0-1.861-.661h-.908v-4.038a2.353,2.353,0,0,0-.849-1.936,2.926,2.926,0,0,0-1.872-.615,2.764,2.764,0,0,0-1.808.619,2.292,2.292,0,0,0-.82,1.841v4.129h-.908a2.414,2.414,0,0,0-2.637,2.3l-.011.091.013.09a2.463,2.463,0,0,0,.82,1.552,2.619,2.619,0,0,0,1.815.636h.908V169a2.47,2.47,0,0,0,2.544,2.632,3,3,0,0,0,1.921-.647,2.356,2.356,0,0,0,.884-1.9v-16.5h1.087a2.321,2.321,0,0,0,1.7-.683,2.251,2.251,0,0,0,.665-1.605A2.333,2.333,0,0,0,287.945,148.569Z\",\n transform: \"translate(-103.77 -104.81)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#m)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M300.932,157.831a9.624,9.624,0,0,0-3.965-2.522c-.415-.183-1.118-.433-2.15-.767-.975-.316-1.815-.626-2.5-.92a6.271,6.271,0,0,1-1.671-1.047,2.234,2.234,0,0,1-.736-1.183,1.856,1.856,0,0,1,.8-1.3,4.3,4.3,0,0,1,2.583-.636,3.73,3.73,0,0,1,1.361.267c.42.192,1.094.539,2,1.035a10.5,10.5,0,0,0,2.325,1.016l.124.031.126-.011a2.694,2.694,0,0,0,1.662-.742,2.224,2.224,0,0,0,.736-1.633,3.224,3.224,0,0,0-1.171-2.263,9.291,9.291,0,0,0-3.178-1.651,13.471,13.471,0,0,0-4.376-.718H292.9a10.8,10.8,0,0,0-4.226.983,7.363,7.363,0,0,0-2.962,2.453,5.958,5.958,0,0,0-1.076,3.426,5.066,5.066,0,0,0,1.2,3.424,8.066,8.066,0,0,0,2.57,2c.891.435,2.163.964,3.779,1.576a22.359,22.359,0,0,1,3.238,1.426c1.361.747,1.361,1.529,1.361,1.784a1.629,1.629,0,0,1-1.006,1.593,6.429,6.429,0,0,1-2.884.641,6.889,6.889,0,0,1-2.878-.73l-.073-.035a6.838,6.838,0,0,1-1.028-.632,14.65,14.65,0,0,0-1.443-.9,2.674,2.674,0,0,0-3.191.327,2.331,2.331,0,0,0-.694,1.671l.007.1a3.06,3.06,0,0,0,1.326,2.263,12.381,12.381,0,0,0,8.009,2.6h.013a12.055,12.055,0,0,0,5-1.019,7.537,7.537,0,0,0,3.163-2.626,6.754,6.754,0,0,0,1.125-3.547A5.608,5.608,0,0,0,300.932,157.831Z\",\n transform: \"translate(-97.72 -101.94)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1, 0, 0, 1, -9, -6)\",\n filter: \"url(#o)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M222.73,197.477c-6.639,0-13.176-.024-19.424-.071a16.529,16.529,0,0,1-11.534-4.836,16.272,16.272,0,0,1-4.92-11.455c-.135-12.956-.137-26.474-.006-40.172a16.281,16.281,0,0,1,4.816-11.322,16.1,16.1,0,0,1,11.263-4.891c6.107-.079,12.374-.117,19.152-.117,6.528,0,13.473.035,21.23.108a16.128,16.128,0,0,1,9.919,3.627,17.227,17.227,0,0,1,5.808,8.913,3.593,3.593,0,0,1-1,3.949c-2.758,2.758-5.5,5.616-8.148,8.392-1.806,1.887-3.671,3.837-5.527,5.731a12.005,12.005,0,0,0-2.981,4.024,54.344,54.344,0,0,0-1.337,8.034l-7.517-10.177,9.068-10.14a4.68,4.68,0,0,0-.369-6.608l-.82-.734a4.678,4.678,0,0,0-6.606.369L215.73,160.31V143.182a4.679,4.679,0,0,0-4.679-4.679h-3.51a4.679,4.679,0,0,0-4.679,4.679v37.07a4.679,4.679,0,0,0,4.679,4.679h3.51a4.721,4.721,0,0,0,4.5-4.9l.179-4.383a4.686,4.686,0,0,0,1.156-.935l8.515-9.525,11.479,15.534a4.7,4.7,0,0,0,3.768,1.9,4.618,4.618,0,0,0,2.776-.915l.889-.656a4.68,4.68,0,0,0,.983-6.544l-1.149-1.118c.11.029.29-.179.406-.179.152,0,.183-.312.329-.36.91-.274,1.852-.535,2.762-.787a57.462,57.462,0,0,0,6.217-1.982,13.149,13.149,0,0,0,4.687-3.748c.254-.27.517-.552.793-.842-.005,2.029.082,4.066.17,6.034a56.519,56.519,0,0,1-.349,12.31,16.347,16.347,0,0,1-5.6,9.687,16.543,16.543,0,0,1-10.5,3.885C236.054,197.453,229.214,197.477,222.73,197.477Z\",\n transform: \"translate(-177.75 -118.61)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M236.646,127.942c3.79-.09,8.422,3.927,8.853,7.516a4.211,4.211,0,0,1-1.07,2.878c-.97,1.428-2.758,2.188-3.158,4.117-.144.694-.747.3-1.1-.11a82.991,82.991,0,0,0-9.373-9.143c-.42-.351-.78-.964-.181-1.184,2.069-.756,3.149-2.782,5.039-3.722A7.147,7.147,0,0,1,236.646,127.942Z\",\n transform: \"translate(-150.763 -121.863)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M204.562,173.156c.042,1.538-.561,3.377-2.139,3.129.079-.813.223-2.741.225-3.554q.019-18.262.02-36.521a9.293,9.293,0,0,0-.405-2.971c2.088-.415,2.246-.289,2.285,1.872C204.548,140.394,204.562,171.085,204.562,173.156Z\",\n transform: \"translate(-173.93 -117.641)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M221.66,149.025c-3.834,3.835-7.2,8.087-10.854,12.083-1.374,1.558-2.778,3.087-4.108,4.679-.986,1.182-2.544,2.022-3.563.791.6-.557,1.872-1.768,2.409-2.376q12.093-13.687,24.169-27.38a9.346,9.346,0,0,0,1.662-2.495c1.839,1.07,1.87,1.269.479,2.911C228.485,141.2,224.845,144.916,221.66,149.025Z\",\n transform: \"translate(-173.209 -116.585)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M216.067,148.889a8.023,8.023,0,0,1,4.427,4.151s-3.627,1.9-4.361,1.414S214.6,150.4,216.067,148.889Z\",\n transform: \"translate(-163.201 -104.551)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M215.876,144.316,214.5,156.562s-.219,5.03,5,3.835,10.995-3.1,10.995-3.1,2.193-2.847,1-2.424-12.763,3.667-12.763,3.667l-1.9-3,1.536-12.5A2.467,2.467,0,0,0,215.876,144.316Z\",\n transform: \"translate(-163.819 -109.405)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 13.444,\n height: 28.87,\n rx: 2,\n transform: \"translate(78.448 12.415) rotate(43.657)\",\n fill: \"#fff\"\n}));\n\nvar SvgKoobitsLogo = function SvgKoobitsLogo(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 213.516,\n height: 90.864,\n viewBox: \"0 0 213.516 90.864\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgKoobitsLogo, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Koobits Logo.0b2b7bba.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip-path\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_569\",\n \"data-name\": \"Rectangle 569\",\n width: 768,\n height: 261,\n transform: \"translate(1152 827)\",\n fill: \"#fff\",\n stroke: \"#707070\",\n strokeWidth: 1\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip-path-2\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_541\",\n \"data-name\": \"Rectangle 541\",\n width: 890,\n height: 334,\n transform: \"translate(-0.222 0.44)\",\n fill: \"#fff\",\n stroke: \"#707070\",\n strokeWidth: 1\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2264\",\n \"data-name\": \"Group 2264\",\n transform: \"translate(-530.991 13.552)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2262\",\n \"data-name\": \"Group 2262\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10565\",\n \"data-name\": \"Path 10565\",\n d: \"M519.738,173.915a6.493,6.493,0,1,0,6.495-6.492A6.491,6.491,0,0,0,519.738,173.915Z\",\n transform: \"translate(1003.576 306.64)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10566\",\n \"data-name\": \"Path 10566\",\n d: \"M28.738,47.415a6.493,6.493,0,1,0,6.495-6.492A6.491,6.491,0,0,0,28.738,47.415Z\",\n transform: \"translate(39.805 58.336)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10568\",\n \"data-name\": \"Path 10568\",\n d: \"M268.908,97.962a6.492,6.492,0,1,0,6.492-6.495A6.494,6.494,0,0,0,268.908,97.962Z\",\n transform: \"translate(511.228 157.548)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10569\",\n \"data-name\": \"Path 10569\",\n d: \"M53.87,119.514a6.492,6.492,0,1,0,6.492-6.492A6.494,6.494,0,0,0,53.87,119.514Z\",\n transform: \"translate(89.136 199.857)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10571\",\n \"data-name\": \"Path 10571\",\n d: \"M250.535,150.992a3.653,3.653,0,1,0,3.656-3.653A3.655,3.655,0,0,0,250.535,150.992Z\",\n transform: \"translate(475.165 267.217)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10572\",\n \"data-name\": \"Path 10572\",\n d: \"M267.984,171.518a3.653,3.653,0,1,0,3.659-3.65A3.656,3.656,0,0,0,267.984,171.518Z\",\n transform: \"translate(509.415 307.513)\",\n fill: \"#48c4f5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10573\",\n \"data-name\": \"Path 10573\",\n d: \"M145.446,221.287a3.653,3.653,0,1,0,3.659-3.656A3.656,3.656,0,0,0,145.446,221.287Z\",\n transform: \"translate(268.888 405.192)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10574\",\n \"data-name\": \"Path 10574\",\n d: \"M231.595,281.033a3.652,3.652,0,1,0,3.656-3.656A3.653,3.653,0,0,0,231.595,281.033Z\",\n transform: \"translate(437.988 522.466)\",\n fill: \"#48c4f5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10575\",\n \"data-name\": \"Path 10575\",\n d: \"M43.709,310.388a3.653,3.653,0,1,0,3.653-3.65A3.656,3.656,0,0,0,43.709,310.388Z\",\n transform: \"translate(69.191 580.098)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10576\",\n \"data-name\": \"Path 10576\",\n d: \"M76.029,104.365a3.653,3.653,0,1,0,3.653-3.65A3.653,3.653,0,0,0,76.029,104.365Z\",\n transform: \"translate(132.631 175.7)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10578\",\n \"data-name\": \"Path 10578\",\n d: \"M335.348,144.85a2.51,2.51,0,1,0,2.507-2.513A2.507,2.507,0,0,0,335.348,144.85Z\",\n transform: \"translate(641.642 257.399)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10579\",\n \"data-name\": \"Path 10579\",\n d: \"M407.485,98.914A2.511,2.511,0,1,0,410,96.4,2.509,2.509,0,0,0,407.485,98.914Z\",\n transform: \"translate(783.238 167.238)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10580\",\n \"data-name\": \"Path 10580\",\n d: \"M412.1,130.731a2.511,2.511,0,1,0,2.513-2.507A2.507,2.507,0,0,0,412.1,130.731Z\",\n transform: \"translate(792.304 229.697)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10581\",\n \"data-name\": \"Path 10581\",\n d: \"M381.311,125.6a2.511,2.511,0,1,0,2.513-2.51A2.509,2.509,0,0,0,381.311,125.6Z\",\n transform: \"translate(731.861 219.622)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_526\",\n \"data-name\": \"Ellipse 526\",\n cx: 2.509,\n cy: 2.509,\n r: 2.509,\n transform: \"translate(1110.037 458.182)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10582\",\n \"data-name\": \"Path 10582\",\n d: \"M349.973,150.714a2.51,2.51,0,1,0,2.51-2.507A2.509,2.509,0,0,0,349.973,150.714Z\",\n transform: \"translate(670.349 268.921)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10583\",\n \"data-name\": \"Path 10583\",\n d: \"M391.171,144.439a3.763,3.763,0,1,0,3.763-3.763A3.763,3.763,0,0,0,391.171,144.439Z\",\n transform: \"translate(751.215 254.139)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10584\",\n \"data-name\": \"Path 10584\",\n d: \"M369.659,147.836a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,369.659,147.836Z\",\n transform: \"translate(708.99 260.807)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10585\",\n \"data-name\": \"Path 10585\",\n d: \"M363.659,161.836a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,363.659,161.836Z\",\n transform: \"translate(697.213 288.287)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10586\",\n \"data-name\": \"Path 10586\",\n d: \"M449.171,110.209a3.763,3.763,0,1,0,3.763-3.763A3.761,3.761,0,0,0,449.171,110.209Z\",\n transform: \"translate(865.062 186.95)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10587\",\n \"data-name\": \"Path 10587\",\n d: \"M421.659,127.606a3.763,3.763,0,1,0,3.766-3.763A3.762,3.762,0,0,0,421.659,127.606Z\",\n transform: \"translate(811.059 221.098)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10589\",\n \"data-name\": \"Path 10589\",\n d: \"M347.941,170.71a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,347.941,170.71Z\",\n transform: \"translate(666.36 305.705)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10590\",\n \"data-name\": \"Path 10590\",\n d: \"M329.564,189.107a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,329.564,189.107Z\",\n transform: \"translate(630.289 341.816)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10591\",\n \"data-name\": \"Path 10591\",\n d: \"M327.671,200.941a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,327.671,200.941Z\",\n transform: \"translate(626.573 365.039)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10592\",\n \"data-name\": \"Path 10592\",\n d: \"M300.159,218.333a3.763,3.763,0,1,0,3.766-3.76A3.764,3.764,0,0,0,300.159,218.333Z\",\n transform: \"translate(572.57 399.189)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10593\",\n \"data-name\": \"Path 10593\",\n d: \"M252.43,213.109a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,252.43,213.109Z\",\n transform: \"translate(478.884 388.923)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10594\",\n \"data-name\": \"Path 10594\",\n d: \"M100.991,259.167a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,100.991,259.167Z\",\n transform: \"translate(181.629 479.335)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10595\",\n \"data-name\": \"Path 10595\",\n d: \"M150.324,309.833a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,150.324,309.833Z\",\n transform: \"translate(278.463 578.786)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10596\",\n \"data-name\": \"Path 10596\",\n d: \"M226.671,209.441a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,226.671,209.441Z\",\n transform: \"translate(428.323 381.724)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10597\",\n \"data-name\": \"Path 10597\",\n d: \"M199.159,226.833a3.763,3.763,0,1,0,3.766-3.76A3.764,3.764,0,0,0,199.159,226.833Z\",\n transform: \"translate(374.32 415.874)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10598\",\n \"data-name\": \"Path 10598\",\n d: \"M178.992,253.109a3.763,3.763,0,1,0,3.766-3.766A3.761,3.761,0,0,0,178.992,253.109Z\",\n transform: \"translate(334.735 467.438)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10599\",\n \"data-name\": \"Path 10599\",\n d: \"M175.063,268.609a3.763,3.763,0,1,0,3.766-3.766A3.763,3.763,0,0,0,175.063,268.609Z\",\n transform: \"translate(327.023 497.863)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10600\",\n \"data-name\": \"Path 10600\",\n d: \"M168.659,301.414a3.763,3.763,0,1,0,3.766-3.76A3.764,3.764,0,0,0,168.659,301.414Z\",\n transform: \"translate(314.452 562.267)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10601\",\n \"data-name\": \"Path 10601\",\n d: \"M120.93,265.609a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,120.93,265.609Z\",\n transform: \"translate(220.766 491.974)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10602\",\n \"data-name\": \"Path 10602\",\n d: \"M254.171,226.941a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,254.171,226.941Z\",\n transform: \"translate(482.302 416.074)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10603\",\n \"data-name\": \"Path 10603\",\n d: \"M306.324,291.167a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,306.324,291.167Z\",\n transform: \"translate(584.671 542.147)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10604\",\n \"data-name\": \"Path 10604\",\n d: \"M478.659,318.188a3.763,3.763,0,1,0,3.766-3.763A3.762,3.762,0,0,0,478.659,318.188Z\",\n transform: \"translate(922.943 595.186)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10605\",\n \"data-name\": \"Path 10605\",\n d: \"M503.159,332.414a3.763,3.763,0,1,0,3.766-3.76A3.764,3.764,0,0,0,503.159,332.414Z\",\n transform: \"translate(971.034 623.116)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10611\",\n \"data-name\": \"Path 10611\",\n d: \"M278.93,79.609a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,278.93,79.609Z\",\n transform: \"translate(530.9 126.88)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10612\",\n \"data-name\": \"Path 10612\",\n d: \"M198.93,104.109a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,198.93,104.109Z\",\n transform: \"translate(373.87 174.97)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10613\",\n \"data-name\": \"Path 10613\",\n d: \"M486.389,59.108a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,486.389,59.108Z\",\n transform: \"translate(938.116 86.639)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10619\",\n \"data-name\": \"Path 10619\",\n d: \"M317.671,51.441a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,317.671,51.441Z\",\n transform: \"translate(606.944 71.59)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10620\",\n \"data-name\": \"Path 10620\",\n d: \"M290.159,68.833a3.763,3.763,0,1,0,3.766-3.76A3.764,3.764,0,0,0,290.159,68.833Z\",\n transform: \"translate(552.942 105.74)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10621\",\n \"data-name\": \"Path 10621\",\n d: \"M242.43,63.609a3.763,3.763,0,1,0,3.763-3.766A3.761,3.761,0,0,0,242.43,63.609Z\",\n transform: \"translate(459.256 95.474)\",\n fill: \"#48c4f5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10622\",\n \"data-name\": \"Path 10622\",\n d: \"M225.659,102.336a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,225.659,102.336Z\",\n transform: \"translate(426.336 171.496)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10623\",\n \"data-name\": \"Path 10623\",\n d: \"M236.889,91.565a3.763,3.763,0,1,0,3.763-3.763A3.761,3.761,0,0,0,236.889,91.565Z\",\n transform: \"translate(448.379 150.354)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10624\",\n \"data-name\": \"Path 10624\",\n d: \"M189.159,86.336a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,189.159,86.336Z\",\n transform: \"translate(354.691 140.09)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10625\",\n \"data-name\": \"Path 10625\",\n d: \"M147.992,110.377a3.763,3.763,0,1,0,3.766-3.763A3.764,3.764,0,0,0,147.992,110.377Z\",\n transform: \"translate(273.886 187.279)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10626\",\n \"data-name\": \"Path 10626\",\n d: \"M163.89,113.607a3.763,3.763,0,1,0,3.763-3.763A3.761,3.761,0,0,0,163.89,113.607Z\",\n transform: \"translate(305.091 193.619)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10627\",\n \"data-name\": \"Path 10627\",\n d: \"M92.326,100.44a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,92.326,100.44Z\",\n transform: \"translate(164.62 167.774)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10628\",\n \"data-name\": \"Path 10628\",\n d: \"M84.324,29.708a3.763,3.763,0,1,0,3.766-3.763A3.766,3.766,0,0,0,84.324,29.708Z\",\n transform: \"translate(148.913 28.936)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10629\",\n \"data-name\": \"Path 10629\",\n d: \"M123.722,19.1a3.763,3.763,0,1,0,3.763-3.763A3.763,3.763,0,0,0,123.722,19.1Z\",\n transform: \"translate(226.247 8.122)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10630\",\n \"data-name\": \"Path 10630\",\n d: \"M386.083,79.93a2.508,2.508,0,1,0,2.509-2.51A2.509,2.509,0,0,0,386.083,79.93Z\",\n transform: \"translate(741.228 129.975)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10631\",\n \"data-name\": \"Path 10631\",\n d: \"M400.708,85.8a2.508,2.508,0,1,0,2.51-2.51A2.509,2.509,0,0,0,400.708,85.8Z\",\n transform: \"translate(769.935 141.495)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10632\",\n \"data-name\": \"Path 10632\",\n d: \"M372.994,81.18a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,372.994,81.18Z\",\n transform: \"translate(715.536 132.429)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10633\",\n \"data-name\": \"Path 10633\",\n d: \"M321.083,66.43a2.508,2.508,0,1,0,2.509-2.51A2.509,2.509,0,0,0,321.083,66.43Z\",\n transform: \"translate(613.641 103.476)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10635\",\n \"data-name\": \"Path 10635\",\n d: \"M307.994,67.68a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,307.994,67.68Z\",\n transform: \"translate(587.949 105.93)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10636\",\n \"data-name\": \"Path 10636\",\n d: \"M89.083,85.93a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,89.083,85.93Z\",\n transform: \"translate(158.255 141.752)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10637\",\n \"data-name\": \"Path 10637\",\n d: \"M103.708,91.8a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,103.708,91.8Z\",\n transform: \"translate(186.962 153.273)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10638\",\n \"data-name\": \"Path 10638\",\n d: \"M75.994,87.18a2.511,2.511,0,1,0,2.513-2.51A2.509,2.509,0,0,0,75.994,87.18Z\",\n transform: \"translate(132.563 144.206)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10639\",\n \"data-name\": \"Path 10639\",\n d: \"M304.083,85.43a2.51,2.51,0,1,0,2.509-2.51A2.509,2.509,0,0,0,304.083,85.43Z\",\n transform: \"translate(580.273 140.771)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10640\",\n \"data-name\": \"Path 10640\",\n d: \"M318.708,91.3a2.51,2.51,0,1,0,2.509-2.51A2.509,2.509,0,0,0,318.708,91.3Z\",\n transform: \"translate(608.98 152.291)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10641\",\n \"data-name\": \"Path 10641\",\n d: \"M290.994,86.68a2.51,2.51,0,1,0,2.513-2.51A2.509,2.509,0,0,0,290.994,86.68Z\",\n transform: \"translate(554.581 143.225)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10642\",\n \"data-name\": \"Path 10642\",\n d: \"M330.93,124.777a2.51,2.51,0,1,0,2.507-2.51A2.506,2.506,0,0,0,330.93,124.777Z\",\n transform: \"translate(632.97 218.004)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10643\",\n \"data-name\": \"Path 10643\",\n d: \"M345.555,130.643a2.51,2.51,0,1,0,2.507-2.507A2.509,2.509,0,0,0,345.555,130.643Z\",\n transform: \"translate(661.677 229.524)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10644\",\n \"data-name\": \"Path 10644\",\n d: \"M282.083,190.43a2.51,2.51,0,1,0,2.509-2.51A2.509,2.509,0,0,0,282.083,190.43Z\",\n transform: \"translate(537.089 346.873)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10645\",\n \"data-name\": \"Path 10645\",\n d: \"M351.487,178.275a2.511,2.511,0,1,0,2.51-2.507A2.507,2.507,0,0,0,351.487,178.275Z\",\n transform: \"translate(673.321 323.02)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10646\",\n \"data-name\": \"Path 10646\",\n d: \"M255.153,162.441a2.509,2.509,0,1,0,2.507-2.507A2.508,2.508,0,0,0,255.153,162.441Z\",\n transform: \"translate(484.229 291.94)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10647\",\n \"data-name\": \"Path 10647\",\n d: \"M297.208,159.794a2.51,2.51,0,1,0,2.509-2.5A2.509,2.509,0,0,0,297.208,159.794Z\",\n transform: \"translate(566.778 286.75)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10648\",\n \"data-name\": \"Path 10648\",\n d: \"M228.083,186.93a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,228.083,186.93Z\",\n transform: \"translate(431.094 340.003)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10649\",\n \"data-name\": \"Path 10649\",\n d: \"M242.708,192.794a2.51,2.51,0,1,0,2.51-2.5A2.509,2.509,0,0,0,242.708,192.794Z\",\n transform: \"translate(459.801 351.525)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10650\",\n \"data-name\": \"Path 10650\",\n d: \"M214.994,188.18a2.51,2.51,0,1,0,2.512-2.51A2.509,2.509,0,0,0,214.994,188.18Z\",\n transform: \"translate(405.402 342.456)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10651\",\n \"data-name\": \"Path 10651\",\n d: \"M197.583,308.51a2.51,2.51,0,1,0,2.51-2.509A2.509,2.509,0,0,0,197.583,308.51Z\",\n transform: \"translate(371.227 578.651)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10652\",\n \"data-name\": \"Path 10652\",\n d: \"M212.208,314.375a2.51,2.51,0,1,0,2.51-2.5A2.509,2.509,0,0,0,212.208,314.375Z\",\n transform: \"translate(399.934 590.173)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10653\",\n \"data-name\": \"Path 10653\",\n d: \"M184.494,309.76a2.51,2.51,0,1,0,2.512-2.509A2.509,2.509,0,0,0,184.494,309.76Z\",\n transform: \"translate(345.534 581.104)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10654\",\n \"data-name\": \"Path 10654\",\n d: \"M302.208,313.375a2.51,2.51,0,1,0,2.509-2.5A2.509,2.509,0,0,0,302.208,313.375Z\",\n transform: \"translate(576.592 588.21)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10655\",\n \"data-name\": \"Path 10655\",\n d: \"M264.986,318.444a2.511,2.511,0,1,0,2.513-2.51A2.507,2.507,0,0,0,264.986,318.444Z\",\n transform: \"translate(503.53 598.148)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10656\",\n \"data-name\": \"Path 10656\",\n d: \"M183.735,194.277a2.511,2.511,0,1,0,2.51-2.51A2.506,2.506,0,0,0,183.735,194.277Z\",\n transform: \"translate(344.045 354.424)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10657\",\n \"data-name\": \"Path 10657\",\n d: \"M198.36,200.143a2.511,2.511,0,1,0,2.51-2.507A2.509,2.509,0,0,0,198.36,200.143Z\",\n transform: \"translate(372.752 365.944)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10658\",\n \"data-name\": \"Path 10658\",\n d: \"M170.646,195.527a2.511,2.511,0,1,0,2.513-2.51A2.507,2.507,0,0,0,170.646,195.527Z\",\n transform: \"translate(318.353 356.878)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10659\",\n \"data-name\": \"Path 10659\",\n d: \"M293.006,142.57a2.51,2.51,0,1,0,2.507-2.51A2.508,2.508,0,0,0,293.006,142.57Z\",\n transform: \"translate(558.53 252.93)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10660\",\n \"data-name\": \"Path 10660\",\n d: \"M216.568,167.685a2.513,2.513,0,1,0,2.513-2.51A2.511,2.511,0,0,0,216.568,167.685Z\",\n transform: \"translate(408.492 302.227)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10661\",\n \"data-name\": \"Path 10661\",\n d: \"M343.814,189.21a2.511,2.511,0,1,0,2.51-2.512A2.511,2.511,0,0,0,343.814,189.21Z\",\n transform: \"translate(658.26 344.472)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10662\",\n \"data-name\": \"Path 10662\",\n d: \"M280.688,227.187a2.511,2.511,0,1,0,2.513-2.512A2.512,2.512,0,0,0,280.688,227.187Z\",\n transform: \"translate(534.351 419.018)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10663\",\n \"data-name\": \"Path 10663\",\n d: \"M435.68,17.738a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,435.68,17.738Z\",\n transform: \"translate(838.581 7.894)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10664\",\n \"data-name\": \"Path 10664\",\n d: \"M231.934,51.185a2.508,2.508,0,1,0,2.507-2.51A2.506,2.506,0,0,0,231.934,51.185Z\",\n transform: \"translate(438.653 73.552)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10665\",\n \"data-name\": \"Path 10665\",\n d: \"M89.263,59.279a2.508,2.508,0,1,0,2.507-2.513A2.507,2.507,0,0,0,89.263,59.279Z\",\n transform: \"translate(158.608 89.434)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10666\",\n \"data-name\": \"Path 10666\",\n d: \"M65.9,69.279a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,65.9,69.279Z\",\n transform: \"translate(112.753 109.063)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10667\",\n \"data-name\": \"Path 10667\",\n d: \"M394.9,38.61a2.51,2.51,0,1,0,2.51-2.51A2.506,2.506,0,0,0,394.9,38.61Z\",\n transform: \"translate(758.539 48.869)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10668\",\n \"data-name\": \"Path 10668\",\n d: \"M273.083,14.487a2.508,2.508,0,1,0,2.509-2.513A2.508,2.508,0,0,0,273.083,14.487Z\",\n transform: \"translate(519.423 1.513)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10669\",\n \"data-name\": \"Path 10669\",\n d: \"M181.083,11.64a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,181.083,11.64Z\",\n transform: \"translate(338.839 -4.075)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10670\",\n \"data-name\": \"Path 10670\",\n d: \"M13.736,230.279a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,13.736,230.279Z\",\n transform: \"translate(10.358 425.085)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10671\",\n \"data-name\": \"Path 10671\",\n d: \"M69.236,249.279a2.51,2.51,0,1,0,2.51-2.512A2.506,2.506,0,0,0,69.236,249.279Z\",\n transform: \"translate(119.298 462.38)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10672\",\n \"data-name\": \"Path 10672\",\n d: \"M48.583,231.433a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,48.583,231.433Z\",\n transform: \"translate(78.758 427.351)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10673\",\n \"data-name\": \"Path 10673\",\n d: \"M480.583,328.514a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,480.583,328.514Z\",\n transform: \"translate(926.72 617.908)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10674\",\n \"data-name\": \"Path 10674\",\n d: \"M480.583,300.514a2.508,2.508,0,1,0,2.51-2.512A2.508,2.508,0,0,0,480.583,300.514Z\",\n transform: \"translate(926.72 562.948)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10675\",\n \"data-name\": \"Path 10675\",\n d: \"M112.835,44a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,112.835,44Z\",\n transform: \"translate(204.877 59.447)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10676\",\n \"data-name\": \"Path 10676\",\n d: \"M45.636,17.222a2.508,2.508,0,1,0,2.507-2.51A2.508,2.508,0,0,0,45.636,17.222Z\",\n transform: \"translate(72.974 6.887)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10677\",\n \"data-name\": \"Path 10677\",\n d: \"M23.054,97.342a2.51,2.51,0,1,0,2.507-2.51A2.508,2.508,0,0,0,23.054,97.342Z\",\n transform: \"translate(28.648 164.153)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10678\",\n \"data-name\": \"Path 10678\",\n d: \"M178.045,111.2a2.51,2.51,0,1,0,2.513-2.513A2.509,2.509,0,0,0,178.045,111.2Z\",\n transform: \"translate(332.876 191.35)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10679\",\n \"data-name\": \"Path 10679\",\n d: \"M359.211,91.183a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,359.211,91.183Z\",\n transform: \"translate(688.482 152.063)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10680\",\n \"data-name\": \"Path 10680\",\n d: \"M419.257,58.34a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,419.257,58.34Z\",\n transform: \"translate(806.345 87.591)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10683\",\n \"data-name\": \"Path 10683\",\n d: \"M473.416,65.613a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,473.416,65.613Z\",\n transform: \"translate(912.652 101.867)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10684\",\n \"data-name\": \"Path 10684\",\n d: \"M392.1,97.274a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,392.1,97.274Z\",\n transform: \"translate(753.039 166.055)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10685\",\n \"data-name\": \"Path 10685\",\n d: \"M385.433,71.528a1.471,1.471,0,1,0,1.472-1.473A1.47,1.47,0,0,0,385.433,71.528Z\",\n transform: \"translate(739.952 115.519)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10686\",\n \"data-name\": \"Path 10686\",\n d: \"M348.263,82.09a1.471,1.471,0,1,0,1.47-1.473A1.468,1.468,0,0,0,348.263,82.09Z\",\n transform: \"translate(666.992 136.251)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10687\",\n \"data-name\": \"Path 10687\",\n d: \"M346.1,101.094a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,346.1,101.094Z\",\n transform: \"translate(662.747 173.553)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10688\",\n \"data-name\": \"Path 10688\",\n d: \"M349.1,116.427a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,349.1,116.427Z\",\n transform: \"translate(668.635 203.65)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10689\",\n \"data-name\": \"Path 10689\",\n d: \"M380.263,97.09a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,380.263,97.09Z\",\n transform: \"translate(729.804 165.694)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10690\",\n \"data-name\": \"Path 10690\",\n d: \"M443.436,125.442a1.473,1.473,0,1,0,1.473-1.473A1.47,1.47,0,0,0,443.436,125.442Z\",\n transform: \"translate(853.805 221.345)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10691\",\n \"data-name\": \"Path 10691\",\n d: \"M436.769,99.695a1.473,1.473,0,1,0,1.476-1.473A1.473,1.473,0,0,0,436.769,99.695Z\",\n transform: \"translate(840.718 170.807)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10692\",\n \"data-name\": \"Path 10692\",\n d: \"M399.6,110.257a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,399.6,110.257Z\",\n transform: \"translate(767.76 191.539)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10693\",\n \"data-name\": \"Path 10693\",\n d: \"M431.6,125.257a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,431.6,125.257Z\",\n transform: \"translate(830.572 220.982)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10694\",\n \"data-name\": \"Path 10694\",\n d: \"M388.436,50.6a1.473,1.473,0,1,0,1.472-1.473A1.47,1.47,0,0,0,388.436,50.6Z\",\n transform: \"translate(745.847 74.449)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10695\",\n \"data-name\": \"Path 10695\",\n d: \"M381.769,24.858a1.472,1.472,0,1,0,1.475-1.473A1.472,1.472,0,0,0,381.769,24.858Z\",\n transform: \"translate(732.76 23.911)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10696\",\n \"data-name\": \"Path 10696\",\n d: \"M344.6,35.42a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,344.6,35.42Z\",\n transform: \"translate(659.802 44.643)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10697\",\n \"data-name\": \"Path 10697\",\n d: \"M376.6,50.42a1.471,1.471,0,1,0,1.47-1.473A1.467,1.467,0,0,0,376.6,50.42Z\",\n transform: \"translate(722.614 74.086)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10698\",\n \"data-name\": \"Path 10698\",\n d: \"M266.267,77.108a1.471,1.471,0,1,0,1.473-1.473A1.468,1.468,0,0,0,266.267,77.108Z\",\n transform: \"translate(506.045 126.472)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10699\",\n \"data-name\": \"Path 10699\",\n d: \"M259.6,51.361a1.472,1.472,0,1,0,1.472-1.473A1.47,1.47,0,0,0,259.6,51.361Z\",\n transform: \"translate(492.958 75.933)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10700\",\n \"data-name\": \"Path 10700\",\n d: \"M222.43,61.923a1.471,1.471,0,1,0,1.47-1.473A1.469,1.469,0,0,0,222.43,61.923Z\",\n transform: \"translate(419.998 96.665)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10701\",\n \"data-name\": \"Path 10701\",\n d: \"M254.43,76.923a1.471,1.471,0,1,0,1.47-1.473A1.469,1.469,0,0,0,254.43,76.923Z\",\n transform: \"translate(482.81 126.108)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10702\",\n \"data-name\": \"Path 10702\",\n d: \"M309.77,146.108a1.473,1.473,0,1,0,1.476-1.473A1.471,1.471,0,0,0,309.77,146.108Z\",\n transform: \"translate(591.435 261.91)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10703\",\n \"data-name\": \"Path 10703\",\n d: \"M303.1,120.362a1.474,1.474,0,1,0,1.476-1.473A1.473,1.473,0,0,0,303.1,120.362Z\",\n transform: \"translate(578.349 211.374)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10704\",\n \"data-name\": \"Path 10704\",\n d: \"M265.934,130.924a1.471,1.471,0,1,0,1.47-1.473A1.469,1.469,0,0,0,265.934,130.924Z\",\n transform: \"translate(505.391 232.105)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10705\",\n \"data-name\": \"Path 10705\",\n d: \"M297.934,145.924a1.471,1.471,0,1,0,1.47-1.473A1.469,1.469,0,0,0,297.934,145.924Z\",\n transform: \"translate(568.203 261.549)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10706\",\n \"data-name\": \"Path 10706\",\n d: \"M131.77,306.778a1.473,1.473,0,1,0,1.476-1.473A1.469,1.469,0,0,0,131.77,306.778Z\",\n transform: \"translate(242.044 577.285)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_527\",\n \"data-name\": \"Ellipse 527\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(354.063 806.306)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10707\",\n \"data-name\": \"Path 10707\",\n d: \"M87.934,291.594a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,87.934,291.594Z\",\n transform: \"translate(155.999 547.48)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10708\",\n \"data-name\": \"Path 10708\",\n d: \"M119.934,306.594a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,119.934,306.594Z\",\n transform: \"translate(218.811 576.923)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10709\",\n \"data-name\": \"Path 10709\",\n d: \"M247.273,289.774a1.473,1.473,0,1,0,1.473-1.473A1.471,1.471,0,0,0,247.273,289.774Z\",\n transform: \"translate(468.762 543.908)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_528\",\n \"data-name\": \"Ellipse 528\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(696.284 755.926)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10710\",\n \"data-name\": \"Path 10710\",\n d: \"M203.436,274.59a1.473,1.473,0,1,0,1.473-1.473A1.474,1.474,0,0,0,203.436,274.59Z\",\n transform: \"translate(382.715 514.104)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10711\",\n \"data-name\": \"Path 10711\",\n d: \"M235.436,289.59a1.473,1.473,0,1,0,1.473-1.473A1.474,1.474,0,0,0,235.436,289.59Z\",\n transform: \"translate(445.527 543.547)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10712\",\n \"data-name\": \"Path 10712\",\n d: \"M344.273,299.774a1.473,1.473,0,1,0,1.473-1.473A1.471,1.471,0,0,0,344.273,299.774Z\",\n transform: \"translate(659.161 563.537)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_529\",\n \"data-name\": \"Ellipse 529\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(983.683 785.555)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10713\",\n \"data-name\": \"Path 10713\",\n d: \"M300.436,284.59a1.473,1.473,0,1,0,1.473-1.473A1.474,1.474,0,0,0,300.436,284.59Z\",\n transform: \"translate(573.114 533.732)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10714\",\n \"data-name\": \"Path 10714\",\n d: \"M319.337,307.09a1.471,1.471,0,1,0,1.47-1.472A1.473,1.473,0,0,0,319.337,307.09Z\",\n transform: \"translate(610.214 577.899)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10715\",\n \"data-name\": \"Path 10715\",\n d: \"M419.27,294.278a1.473,1.473,0,1,0,1.476-1.473A1.469,1.469,0,0,0,419.27,294.278Z\",\n transform: \"translate(806.37 552.749)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_530\",\n \"data-name\": \"Ellipse 530\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(1205.89 769.27)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10716\",\n \"data-name\": \"Path 10716\",\n d: \"M375.434,279.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,375.434,279.094Z\",\n transform: \"translate(720.326 522.945)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10717\",\n \"data-name\": \"Path 10717\",\n d: \"M407.434,294.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,407.434,294.094Z\",\n transform: \"translate(783.137 552.388)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10718\",\n \"data-name\": \"Path 10718\",\n d: \"M175.27,96.278a1.473,1.473,0,1,0,1.475-1.473A1.469,1.469,0,0,0,175.27,96.278Z\",\n transform: \"translate(327.429 164.1)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_531\",\n \"data-name\": \"Ellipse 531\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(482.948 182.621)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10719\",\n \"data-name\": \"Path 10719\",\n d: \"M131.434,81.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,131.434,81.094Z\",\n transform: \"translate(241.384 134.295)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10720\",\n \"data-name\": \"Path 10720\",\n d: \"M163.434,96.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,163.434,96.094Z\",\n transform: \"translate(304.196 163.739)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10721\",\n \"data-name\": \"Path 10721\",\n d: \"M78.27,43.278a1.473,1.473,0,1,0,1.476-1.473A1.469,1.469,0,0,0,78.27,43.278Z\",\n transform: \"translate(137.03 60.067)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_532\",\n \"data-name\": \"Ellipse 532\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(195.55 25.589)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10722\",\n \"data-name\": \"Path 10722\",\n d: \"M34.434,28.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,34.434,28.094Z\",\n transform: \"translate(50.986 30.263)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10723\",\n \"data-name\": \"Path 10723\",\n d: \"M66.434,43.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,66.434,43.094Z\",\n transform: \"translate(113.798 59.706)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10724\",\n \"data-name\": \"Path 10724\",\n d: \"M313,227.425a1.471,1.471,0,1,0,1.473-1.473A1.47,1.47,0,0,0,313,227.425Z\",\n transform: \"translate(597.781 421.525)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_533\",\n \"data-name\": \"Ellipse 533\",\n cx: 1.471,\n cy: 1.471,\n r: 1.471,\n transform: \"translate(822.197 585.572)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10725\",\n \"data-name\": \"Path 10725\",\n d: \"M245.934,217.094a1.471,1.471,0,1,0,1.47-1.473A1.471,1.471,0,0,0,245.934,217.094Z\",\n transform: \"translate(466.133 401.246)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10726\",\n \"data-name\": \"Path 10726\",\n d: \"M429.416,46.613a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,429.416,46.613Z\",\n transform: \"translate(826.285 64.572)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10727\",\n \"data-name\": \"Path 10727\",\n d: \"M490.595,10.553A2.508,2.508,0,1,0,493.1,8.04,2.507,2.507,0,0,0,490.595,10.553Z\",\n transform: \"translate(946.372 -6.209)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10728\",\n \"data-name\": \"Path 10728\",\n d: \"M398.728,172.789a2.511,2.511,0,1,0,2.51-2.515A2.51,2.51,0,0,0,398.728,172.789Z\",\n transform: \"translate(766.049 312.236)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10729\",\n \"data-name\": \"Path 10729\",\n d: \"M422.817,169.227a2.51,2.51,0,1,0,2.51-2.512A2.508,2.508,0,0,0,422.817,169.227Z\",\n transform: \"translate(813.332 305.248)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10730\",\n \"data-name\": \"Path 10730\",\n d: \"M285.34,58.883a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,285.34,58.883Z\",\n transform: \"translate(543.482 88.663)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10731\",\n \"data-name\": \"Path 10731\",\n d: \"M253.488,92.723a2.511,2.511,0,1,0,2.51-2.51A2.509,2.509,0,0,0,253.488,92.723Z\",\n transform: \"translate(480.961 155.086)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10732\",\n \"data-name\": \"Path 10732\",\n d: \"M223.209,78.866a2.508,2.508,0,1,0,2.51-2.51A2.509,2.509,0,0,0,223.209,78.866Z\",\n transform: \"translate(421.527 127.887)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10733\",\n \"data-name\": \"Path 10733\",\n d: \"M217.05,117.36a2.51,2.51,0,1,0,2.507-2.513A2.506,2.506,0,0,0,217.05,117.36Z\",\n transform: \"translate(409.438 203.44)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10734\",\n \"data-name\": \"Path 10734\",\n d: \"M296.053,97.374a2.508,2.508,0,1,0,2.507-2.51A2.508,2.508,0,0,0,296.053,97.374Z\",\n transform: \"translate(564.511 164.216)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10735\",\n \"data-name\": \"Path 10735\",\n d: \"M397.222,14.688a2.508,2.508,0,1,0,2.507-2.51A2.509,2.509,0,0,0,397.222,14.688Z\",\n transform: \"translate(763.093 1.913)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10738\",\n \"data-name\": \"Path 10738\",\n d: \"M354.567,38.941a2.511,2.511,0,1,0,2.513-2.51A2.509,2.509,0,0,0,354.567,38.941Z\",\n transform: \"translate(679.366 49.519)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10739\",\n \"data-name\": \"Path 10739\",\n d: \"M399.9,30.274a2.511,2.511,0,1,0,2.513-2.51A2.509,2.509,0,0,0,399.9,30.274Z\",\n transform: \"translate(768.349 32.507)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10740\",\n \"data-name\": \"Path 10740\",\n d: \"M404.081,46.1a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,404.081,46.1Z\",\n transform: \"translate(776.556 63.559)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10741\",\n \"data-name\": \"Path 10741\",\n d: \"M325.414,10.761a2.509,2.509,0,1,0,2.512-2.51A2.509,2.509,0,0,0,325.414,10.761Z\",\n transform: \"translate(622.143 -5.795)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10742\",\n \"data-name\": \"Path 10742\",\n d: \"M100.748,16.1a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,100.748,16.1Z\",\n transform: \"translate(181.152 4.673)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10743\",\n \"data-name\": \"Path 10743\",\n d: \"M328.931,95.8a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,328.931,95.8Z\",\n transform: \"translate(629.046 161.13)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10744\",\n \"data-name\": \"Path 10744\",\n d: \"M407.934,75.819a2.51,2.51,0,1,0,2.509-2.51A2.507,2.507,0,0,0,407.934,75.819Z\",\n transform: \"translate(784.119 121.906)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10745\",\n \"data-name\": \"Path 10745\",\n d: \"M493.706,90.7a2.51,2.51,0,1,0,2.512-2.512A2.509,2.509,0,0,0,493.706,90.7Z\",\n transform: \"translate(952.479 151.119)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10746\",\n \"data-name\": \"Path 10746\",\n d: \"M461.854,124.542a2.51,2.51,0,1,0,2.51-2.51A2.509,2.509,0,0,0,461.854,124.542Z\",\n transform: \"translate(889.957 217.543)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10747\",\n \"data-name\": \"Path 10747\",\n d: \"M431.574,110.685a2.511,2.511,0,1,0,2.513-2.51A2.51,2.51,0,0,0,431.574,110.685Z\",\n transform: \"translate(830.521 190.343)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10748\",\n \"data-name\": \"Path 10748\",\n d: \"M425.416,149.179a2.508,2.508,0,1,0,2.509-2.513A2.509,2.509,0,0,0,425.416,149.179Z\",\n transform: \"translate(818.434 265.896)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10749\",\n \"data-name\": \"Path 10749\",\n d: \"M504.419,129.2a2.508,2.508,0,1,0,2.51-2.513A2.506,2.506,0,0,0,504.419,129.2Z\",\n transform: \"translate(973.507 226.672)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10750\",\n \"data-name\": \"Path 10750\",\n d: \"M448.543,180a2.51,2.51,0,1,0,2.512-2.51A2.511,2.511,0,0,0,448.543,180Z\",\n transform: \"translate(863.829 326.404)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10751\",\n \"data-name\": \"Path 10751\",\n d: \"M456.082,176.457a2.51,2.51,0,1,0,2.512-2.51A2.511,2.511,0,0,0,456.082,176.457Z\",\n transform: \"translate(878.627 319.445)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10752\",\n \"data-name\": \"Path 10752\",\n d: \"M465.263,181.946a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,465.263,181.946Z\",\n transform: \"translate(896.649 330.214)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10753\",\n \"data-name\": \"Path 10753\",\n d: \"M525.263,210.612a2.509,2.509,0,1,0,2.51-2.512A2.508,2.508,0,0,0,525.263,210.612Z\",\n transform: \"translate(1014.421 386.484)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10754\",\n \"data-name\": \"Path 10754\",\n d: \"M531.6,241.946a2.509,2.509,0,1,0,2.51-2.513A2.508,2.508,0,0,0,531.6,241.946Z\",\n transform: \"translate(1026.852 447.986)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10755\",\n \"data-name\": \"Path 10755\",\n d: \"M521.6,226.946a2.509,2.509,0,1,0,2.51-2.513A2.508,2.508,0,0,0,521.6,226.946Z\",\n transform: \"translate(1007.223 418.543)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10756\",\n \"data-name\": \"Path 10756\",\n d: \"M548.93,222.279a2.508,2.508,0,1,0,2.507-2.512A2.508,2.508,0,0,0,548.93,222.279Z\",\n transform: \"translate(1060.876 409.382)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10757\",\n \"data-name\": \"Path 10757\",\n d: \"M550.082,252.766a2.51,2.51,0,1,0,2.513-2.512A2.511,2.511,0,0,0,550.082,252.766Z\",\n transform: \"translate(1063.137 469.225)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10758\",\n \"data-name\": \"Path 10758\",\n d: \"M553.235,264.279a2.511,2.511,0,1,0,2.513-2.513A2.509,2.509,0,0,0,553.235,264.279Z\",\n transform: \"translate(1069.326 491.823)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10759\",\n \"data-name\": \"Path 10759\",\n d: \"M537.749,258.279a2.508,2.508,0,1,0,2.509-2.512A2.508,2.508,0,0,0,537.749,258.279Z\",\n transform: \"translate(1038.93 480.046)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10760\",\n \"data-name\": \"Path 10760\",\n d: \"M554.416,280.279a2.509,2.509,0,1,0,2.512-2.513A2.509,2.509,0,0,0,554.416,280.279Z\",\n transform: \"translate(1071.645 523.229)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10761\",\n \"data-name\": \"Path 10761\",\n d: \"M473.263,175.946a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,473.263,175.946Z\",\n transform: \"translate(912.351 318.437)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10762\",\n \"data-name\": \"Path 10762\",\n d: \"M485.6,179.612a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,485.6,179.612Z\",\n transform: \"translate(936.56 325.633)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10763\",\n \"data-name\": \"Path 10763\",\n d: \"M490.749,186.613a2.508,2.508,0,1,0,2.51-2.513A2.508,2.508,0,0,0,490.749,186.613Z\",\n transform: \"translate(946.674 339.375)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10764\",\n \"data-name\": \"Path 10764\",\n d: \"M492.749,199.946a2.51,2.51,0,1,0,2.513-2.513A2.509,2.509,0,0,0,492.749,199.946Z\",\n transform: \"translate(950.6 365.546)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10765\",\n \"data-name\": \"Path 10765\",\n d: \"M504.235,203.613a2.511,2.511,0,1,0,2.513-2.513A2.509,2.509,0,0,0,504.235,203.613Z\",\n transform: \"translate(973.146 372.743)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10766\",\n \"data-name\": \"Path 10766\",\n d: \"M483.6,217.612a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,483.6,217.612Z\",\n transform: \"translate(932.634 400.222)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10767\",\n \"data-name\": \"Path 10767\",\n d: \"M539.863,329.106a2.511,2.511,0,1,0,2.51-2.513A2.511,2.511,0,0,0,539.863,329.106Z\",\n transform: \"translate(1043.079 619.07)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10768\",\n \"data-name\": \"Path 10768\",\n d: \"M5.6,317.85a2.511,2.511,0,1,0,2.51-2.516A2.511,2.511,0,0,0,5.6,317.85Z\",\n transform: \"translate(-5.604 596.97)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10769\",\n \"data-name\": \"Path 10769\",\n d: \"M305.355,213.364a2.511,2.511,0,1,0,2.51-2.513A2.508,2.508,0,0,0,305.355,213.364Z\",\n transform: \"translate(582.769 391.883)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10770\",\n \"data-name\": \"Path 10770\",\n d: \"M279.806,257.112a2.51,2.51,0,1,0,2.507-2.512A2.507,2.507,0,0,0,279.806,257.112Z\",\n transform: \"translate(532.62 477.757)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10771\",\n \"data-name\": \"Path 10771\",\n d: \"M237.065,302.419a2.511,2.511,0,1,0,2.51-2.513A2.511,2.511,0,0,0,237.065,302.419Z\",\n transform: \"translate(448.725 566.687)\",\n fill: \"#48c4f5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10772\",\n \"data-name\": \"Path 10772\",\n d: \"M316.068,251.857a2.51,2.51,0,1,0,2.51-2.515A2.511,2.511,0,0,0,316.068,251.857Z\",\n transform: \"translate(603.798 467.434)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10773\",\n \"data-name\": \"Path 10773\",\n d: \"M385.417,244.157a2.51,2.51,0,1,0,2.513-2.513A2.509,2.509,0,0,0,385.417,244.157Z\",\n transform: \"translate(739.921 452.326)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10774\",\n \"data-name\": \"Path 10774\",\n d: \"M353.565,308.578a2.511,2.511,0,1,0,2.509-2.513A2.51,2.51,0,0,0,353.565,308.578Z\",\n transform: \"translate(677.399 578.776)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10775\",\n \"data-name\": \"Path 10775\",\n d: \"M323.285,264.141a2.51,2.51,0,1,0,2.513-2.515A2.511,2.511,0,0,0,323.285,264.141Z\",\n transform: \"translate(617.964 491.548)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10776\",\n \"data-name\": \"Path 10776\",\n d: \"M401.233,283.612a2.511,2.511,0,1,0,2.512-2.516A2.509,2.509,0,0,0,401.233,283.612Z\",\n transform: \"translate(770.966 529.765)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10777\",\n \"data-name\": \"Path 10777\",\n d: \"M317.127,333.212a2.51,2.51,0,1,0,2.509-2.513A2.511,2.511,0,0,0,317.127,333.212Z\",\n transform: \"translate(605.876 627.13)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10778\",\n \"data-name\": \"Path 10778\",\n d: \"M396.13,313.231a2.51,2.51,0,1,0,2.509-2.516A2.511,2.511,0,0,0,396.13,313.231Z\",\n transform: \"translate(760.949 587.904)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10779\",\n \"data-name\": \"Path 10779\",\n d: \"M434.686,250.829a2.51,2.51,0,1,0,2.509-2.513A2.508,2.508,0,0,0,434.686,250.829Z\",\n transform: \"translate(836.63 465.422)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10780\",\n \"data-name\": \"Path 10780\",\n d: \"M464.42,315.247a2.51,2.51,0,1,0,2.513-2.51A2.511,2.511,0,0,0,464.42,315.247Z\",\n transform: \"translate(894.994 591.873)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10781\",\n \"data-name\": \"Path 10781\",\n d: \"M434.141,301.394a2.51,2.51,0,1,0,2.507-2.515A2.508,2.508,0,0,0,434.141,301.394Z\",\n transform: \"translate(835.56 564.671)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10782\",\n \"data-name\": \"Path 10782\",\n d: \"M427.414,332.1a2.51,2.51,0,1,0,2.513-2.512A2.511,2.511,0,0,0,427.414,332.1Z\",\n transform: \"translate(822.356 624.939)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10783\",\n \"data-name\": \"Path 10783\",\n d: \"M506.984,319.9a2.511,2.511,0,1,0,2.513-2.516A2.511,2.511,0,0,0,506.984,319.9Z\",\n transform: \"translate(978.542 601)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10784\",\n \"data-name\": \"Path 10784\",\n d: \"M170.9,214.611a2.512,2.512,0,1,0,2.512-2.51A2.511,2.511,0,0,0,170.9,214.611Z\",\n transform: \"translate(318.853 394.337)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10785\",\n \"data-name\": \"Path 10785\",\n d: \"M129.8,249.771a2.51,2.51,0,1,0,2.51-2.515A2.511,2.511,0,0,0,129.8,249.771Z\",\n transform: \"translate(238.183 463.342)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10786\",\n \"data-name\": \"Path 10786\",\n d: \"M99.523,235.913a2.51,2.51,0,1,0,2.51-2.513A2.511,2.511,0,0,0,99.523,235.913Z\",\n transform: \"translate(178.747 436.144)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10787\",\n \"data-name\": \"Path 10787\",\n d: \"M93.364,304.985a2.511,2.511,0,1,0,2.513-2.513A2.509,2.509,0,0,0,93.364,304.985Z\",\n transform: \"translate(166.658 571.724)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10788\",\n \"data-name\": \"Path 10788\",\n d: \"M151.083,254.613A2.51,2.51,0,1,0,153.6,252.1,2.511,2.511,0,0,0,151.083,254.613Z\",\n transform: \"translate(279.953 472.85)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10789\",\n \"data-name\": \"Path 10789\",\n d: \"M54.393,132.789a2.51,2.51,0,1,0,2.51-2.513A2.51,2.51,0,0,0,54.393,132.789Z\",\n transform: \"translate(90.163 233.725)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10790\",\n \"data-name\": \"Path 10790\",\n d: \"M547.529,184.11a2.51,2.51,0,1,0,2.51-2.513A2.509,2.509,0,0,0,547.529,184.11Z\",\n transform: \"translate(1058.126 334.461)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10791\",\n \"data-name\": \"Path 10791\",\n d: \"M535.725,53.753a2.51,2.51,0,1,0,2.51-2.513A2.507,2.507,0,0,0,535.725,53.753Z\",\n transform: \"translate(1034.957 78.587)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10792\",\n \"data-name\": \"Path 10792\",\n d: \"M12.757,49.645a2.51,2.51,0,1,0,2.513-2.51A2.511,2.511,0,0,0,12.757,49.645Z\",\n transform: \"translate(8.436 70.53)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10793\",\n \"data-name\": \"Path 10793\",\n d: \"M178.077,53.238a2.511,2.511,0,1,0,2.513-2.51A2.511,2.511,0,0,0,178.077,53.238Z\",\n transform: \"translate(332.939 77.582)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10794\",\n \"data-name\": \"Path 10794\",\n d: \"M146.226,87.08a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,146.226,87.08Z\",\n transform: \"translate(270.419 144.004)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10795\",\n \"data-name\": \"Path 10795\",\n d: \"M552.082,103.624a2.51,2.51,0,1,0,2.513-2.51A2.509,2.509,0,0,0,552.082,103.624Z\",\n transform: \"translate(1067.063 176.484)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10796\",\n \"data-name\": \"Path 10796\",\n d: \"M480.43,199.779a2.51,2.51,0,1,0,2.51-2.513A2.506,2.506,0,0,0,480.43,199.779Z\",\n transform: \"translate(926.42 365.218)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10797\",\n \"data-name\": \"Path 10797\",\n d: \"M442.749,164.947a2.51,2.51,0,1,0,2.513-2.513A2.506,2.506,0,0,0,442.749,164.947Z\",\n transform: \"translate(852.456 296.847)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10798\",\n \"data-name\": \"Path 10798\",\n d: \"M504.235,219.613a2.511,2.511,0,1,0,2.513-2.512A2.506,2.506,0,0,0,504.235,219.613Z\",\n transform: \"translate(973.146 404.149)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10799\",\n \"data-name\": \"Path 10799\",\n d: \"M550.082,13.291a2.51,2.51,0,1,0,2.513-2.51A2.509,2.509,0,0,0,550.082,13.291Z\",\n transform: \"translate(1063.137 -0.829)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10800\",\n \"data-name\": \"Path 10800\",\n d: \"M144.082,63.933a2.51,2.51,0,1,0,2.512-2.513A2.509,2.509,0,0,0,144.082,63.933Z\",\n transform: \"translate(266.211 98.569)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10801\",\n \"data-name\": \"Path 10801\",\n d: \"M79.582,12.791a2.51,2.51,0,1,0,2.512-2.51A2.509,2.509,0,0,0,79.582,12.791Z\",\n transform: \"translate(139.605 -1.81)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10802\",\n \"data-name\": \"Path 10802\",\n d: \"M115.946,73.223a2.511,2.511,0,1,0,2.51-2.513A2.509,2.509,0,0,0,115.946,73.223Z\",\n transform: \"translate(210.983 116.804)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10803\",\n \"data-name\": \"Path 10803\",\n d: \"M124.749,97.277a2.51,2.51,0,1,0,2.512-2.51A2.509,2.509,0,0,0,124.749,97.277Z\",\n transform: \"translate(228.263 164.025)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10804\",\n \"data-name\": \"Path 10804\",\n d: \"M188.79,91.731a2.511,2.511,0,1,0,2.513-2.513A2.511,2.511,0,0,0,188.79,91.731Z\",\n transform: \"translate(353.967 153.133)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10805\",\n \"data-name\": \"Path 10805\",\n d: \"M391.544,207.686a2.508,2.508,0,1,0,2.509-2.513A2.511,2.511,0,0,0,391.544,207.686Z\",\n transform: \"translate(751.948 380.738)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10806\",\n \"data-name\": \"Path 10806\",\n d: \"M415.119,142.024a2.51,2.51,0,1,0,2.513-2.509A2.509,2.509,0,0,0,415.119,142.024Z\",\n transform: \"translate(798.222 251.858)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10807\",\n \"data-name\": \"Path 10807\",\n d: \"M481.837,107.063a2.51,2.51,0,1,0,2.513-2.513A2.509,2.509,0,0,0,481.837,107.063Z\",\n transform: \"translate(929.181 183.228)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10808\",\n \"data-name\": \"Path 10808\",\n d: \"M78.568,268.945a2.51,2.51,0,1,0,2.51-2.516A2.508,2.508,0,0,0,78.568,268.945Z\",\n transform: \"translate(137.615 500.976)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10809\",\n \"data-name\": \"Path 10809\",\n d: \"M52.568,290.277a2.51,2.51,0,1,0,2.51-2.515A2.511,2.511,0,0,0,52.568,290.277Z\",\n transform: \"translate(86.58 542.85)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10810\",\n \"data-name\": \"Path 10810\",\n d: \"M231.934,320.926a2.508,2.508,0,1,0,2.507-2.512A2.508,2.508,0,0,0,231.934,320.926Z\",\n transform: \"translate(438.653 603.016)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10811\",\n \"data-name\": \"Path 10811\",\n d: \"M239.086,217.954a2.51,2.51,0,1,0,2.513-2.518A2.513,2.513,0,0,0,239.086,217.954Z\",\n transform: \"translate(452.692 400.883)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10812\",\n \"data-name\": \"Path 10812\",\n d: \"M310.423,192.8a2.508,2.508,0,1,0,2.507-2.512A2.513,2.513,0,0,0,310.423,192.8Z\",\n transform: \"translate(592.717 351.523)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10813\",\n \"data-name\": \"Path 10813\",\n d: \"M69.789,301.422a2.508,2.508,0,1,0,2.51-2.51A2.511,2.511,0,0,0,69.789,301.422Z\",\n transform: \"translate(120.383 564.736)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10814\",\n \"data-name\": \"Path 10814\",\n d: \"M74.407,333.246a2.511,2.511,0,1,0,2.513-2.515A2.511,2.511,0,0,0,74.407,333.246Z\",\n transform: \"translate(129.448 627.193)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10815\",\n \"data-name\": \"Path 10815\",\n d: \"M64.624,232.9a2.51,2.51,0,1,0,2.513-2.518A2.513,2.513,0,0,0,64.624,232.9Z\",\n transform: \"translate(110.245 430.226)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10816\",\n \"data-name\": \"Path 10816\",\n d: \"M163.915,174.46a2.51,2.51,0,1,0,2.513-2.513A2.514,2.514,0,0,0,163.915,174.46Z\",\n transform: \"translate(305.141 315.52)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10817\",\n \"data-name\": \"Path 10817\",\n d: \"M58.98,99.975a2.508,2.508,0,1,0,2.507-2.513A2.506,2.506,0,0,0,58.98,99.975Z\",\n transform: \"translate(99.166 169.315)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10818\",\n \"data-name\": \"Path 10818\",\n d: \"M143.179,132.273a2.51,2.51,0,1,0,2.507-2.51A2.508,2.508,0,0,0,143.179,132.273Z\",\n transform: \"translate(264.438 232.718)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10819\",\n \"data-name\": \"Path 10819\",\n d: \"M70.751,59.4a2.51,2.51,0,1,0,2.51-2.513A2.511,2.511,0,0,0,70.751,59.4Z\",\n transform: \"translate(122.271 89.668)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10820\",\n \"data-name\": \"Path 10820\",\n d: \"M13.93,145.78a2.51,2.51,0,1,0,2.507-2.515A2.509,2.509,0,0,0,13.93,145.78Z\",\n transform: \"translate(10.739 259.221)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10821\",\n \"data-name\": \"Path 10821\",\n d: \"M80.833,165.03a2.51,2.51,0,1,0,2.51-2.513A2.508,2.508,0,0,0,80.833,165.03Z\",\n transform: \"translate(142.061 297.01)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10822\",\n \"data-name\": \"Path 10822\",\n d: \"M124.583,198.436a2.51,2.51,0,1,0,2.51-2.518A2.51,2.51,0,0,0,124.583,198.436Z\",\n transform: \"translate(227.937 362.572)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10823\",\n \"data-name\": \"Path 10823\",\n d: \"M124.235,160.032a2.511,2.511,0,1,0,2.51-2.518A2.507,2.507,0,0,0,124.235,160.032Z\",\n transform: \"translate(227.254 287.19)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10824\",\n \"data-name\": \"Path 10824\",\n d: \"M259.735,118.782a2.511,2.511,0,1,0,2.51-2.518A2.508,2.508,0,0,0,259.735,118.782Z\",\n transform: \"translate(493.223 206.221)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10825\",\n \"data-name\": \"Path 10825\",\n d: \"M203.735,153.782a2.511,2.511,0,1,0,2.51-2.518A2.507,2.507,0,0,0,203.735,153.782Z\",\n transform: \"translate(383.302 274.922)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10826\",\n \"data-name\": \"Path 10826\",\n d: \"M439.083,213.436a2.51,2.51,0,1,0,2.509-2.518A2.51,2.51,0,0,0,439.083,213.436Z\",\n transform: \"translate(845.26 392.015)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10827\",\n \"data-name\": \"Path 10827\",\n d: \"M512.735,266.783a2.511,2.511,0,1,0,2.509-2.518A2.508,2.508,0,0,0,512.735,266.783Z\",\n transform: \"translate(989.83 496.726)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10828\",\n \"data-name\": \"Path 10828\",\n d: \"M359.583,242.936a2.51,2.51,0,1,0,2.509-2.518A2.51,2.51,0,0,0,359.583,242.936Z\",\n transform: \"translate(689.212 449.92)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10829\",\n \"data-name\": \"Path 10829\",\n d: \"M390.748,295.793a2.51,2.51,0,1,0,2.51-2.515A2.51,2.51,0,0,0,390.748,295.793Z\",\n transform: \"translate(750.385 553.677)\",\n fill: \"#ffe358\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10830\",\n \"data-name\": \"Path 10830\",\n d: \"M95.6,274.947a2.51,2.51,0,1,0,2.507-2.518A2.509,2.509,0,0,0,95.6,274.947Z\",\n transform: \"translate(171.037 512.751)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10831\",\n \"data-name\": \"Path 10831\",\n d: \"M11.583,181.936a2.51,2.51,0,1,0,2.51-2.518A2.51,2.51,0,0,0,11.583,181.936Z\",\n transform: \"translate(6.132 330.184)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10832\",\n \"data-name\": \"Path 10832\",\n d: \"M142.088,11.611A2.51,2.51,0,1,0,144.6,9.1,2.508,2.508,0,0,0,142.088,11.611Z\",\n transform: \"translate(262.297 -4.132)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10833\",\n \"data-name\": \"Path 10833\",\n d: \"M463.009,143.292a3.652,3.652,0,1,0,3.65-3.65A3.651,3.651,0,0,0,463.009,143.292Z\",\n transform: \"translate(892.224 252.109)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10834\",\n \"data-name\": \"Path 10834\",\n d: \"M405.015,179.732a3.65,3.65,0,1,0,3.65-3.653A3.648,3.648,0,0,0,405.015,179.732Z\",\n transform: \"translate(778.389 323.63)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10835\",\n \"data-name\": \"Path 10835\",\n d: \"M116.587,242.342a3.653,3.653,0,1,0,3.65-3.65A3.655,3.655,0,0,0,116.587,242.342Z\",\n transform: \"translate(212.242 446.532)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10836\",\n \"data-name\": \"Path 10836\",\n d: \"M27.8,329.379a3.653,3.653,0,1,0,3.653-3.653A3.653,3.653,0,0,0,27.8,329.379Z\",\n transform: \"translate(37.964 617.368)\",\n fill: \"#48c4f5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10837\",\n \"data-name\": \"Path 10837\",\n d: \"M408.607,313.467a3.652,3.652,0,1,0,3.653-3.65A3.656,3.656,0,0,0,408.607,313.467Z\",\n transform: \"translate(785.44 586.141)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10838\",\n \"data-name\": \"Path 10838\",\n d: \"M339.731,219.081a6.492,6.492,0,1,0,6.495-6.495A6.492,6.492,0,0,0,339.731,219.081Z\",\n transform: \"translate(650.245 395.289)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_534\",\n \"data-name\": \"Ellipse 534\",\n cx: 2.841,\n cy: 2.841,\n r: 2.841,\n transform: \"translate(520.576 182.413)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_536\",\n \"data-name\": \"Ellipse 536\",\n cx: 2.841,\n cy: 2.841,\n r: 2.841,\n transform: \"translate(706.25 457.095)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10839\",\n \"data-name\": \"Path 10839\",\n d: \"M228.218,175.28a7.545,7.545,0,1,0,7.546-7.546A7.547,7.547,0,0,0,228.218,175.28Z\",\n transform: \"translate(431.359 307.25)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_537\",\n \"data-name\": \"Ellipse 537\",\n cx: 2.841,\n cy: 2.841,\n r: 2.841,\n transform: \"translate(541.195 827.331)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_538\",\n \"data-name\": \"Ellipse 538\",\n cx: 2.841,\n cy: 2.841,\n r: 2.841,\n transform: \"translate(1073.525 853.011)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Ellipse_539\",\n \"data-name\": \"Ellipse 539\",\n cx: 2.841,\n cy: 2.841,\n r: 2.841,\n transform: \"translate(138.365 245.62)\",\n fill: \"#d55549\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10840\",\n \"data-name\": \"Path 10840\",\n d: \"M440.238,315.5A6.492,6.492,0,1,0,446.733,309,6.493,6.493,0,0,0,440.238,315.5Z\",\n transform: \"translate(847.528 584.543)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10841\",\n \"data-name\": \"Path 10841\",\n d: \"M357.4,291.1a6.492,6.492,0,1,0,6.495-6.492A6.5,6.5,0,0,0,357.4,291.1Z\",\n transform: \"translate(684.933 536.665)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_540\",\n \"data-name\": \"Ellipse 540\",\n cx: 6.493,\n cy: 6.493,\n rx: 6.493,\n ry: 6.493,\n transform: \"translate(130.764 154.071)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_541\",\n \"data-name\": \"Ellipse 541\",\n cx: 6.493,\n cy: 6.493,\n rx: 6.493,\n ry: 6.493,\n transform: \"translate(1603.313 655.711)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_542\",\n \"data-name\": \"Ellipse 542\",\n cx: 6.493,\n cy: 6.493,\n rx: 6.493,\n ry: 6.493,\n transform: \"translate(77.433 503.69)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10842\",\n \"data-name\": \"Path 10842\",\n d: \"M107.93,333.83a6.492,6.492,0,1,0,6.492-6.495A6.489,6.489,0,0,0,107.93,333.83Z\",\n transform: \"translate(195.249 620.527)\",\n fill: \"#b9e0f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10843\",\n \"data-name\": \"Path 10843\",\n d: \"M256.524,303.414a10.62,10.62,0,1,0,10.622-10.619A10.618,10.618,0,0,0,256.524,303.414Z\",\n transform: \"translate(486.92 552.729)\",\n fill: \"#b9e0f1\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2263\",\n \"data-name\": \"Group 2263\",\n transform: \"translate(170.83 50.736)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10844\",\n \"data-name\": \"Path 10844\",\n d: \"M167.636,60.892a6.6,6.6,0,0,0,5.855-5.852c.2-2.453,1.837-13.259,1.837-13.259s1.4,10.835,1.84,13.259c.652,3.591,2.791,5.425,5.855,5.849,2.438.335,13.256,1.846,13.256,1.843s-10.817,1.523-13.256,1.846a6.26,6.26,0,0,0-5.846,5.849c-.329,2.435-1.849,13.259-1.849,13.259s-1.6-10.812-1.849-13.259a6.4,6.4,0,0,0-5.843-5.852c-2.447-.273-13.259-1.843-13.259-1.843S165.191,61.173,167.636,60.892Z\",\n transform: \"translate(115.588 9.284)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10845\",\n \"data-name\": \"Path 10845\",\n d: \"M435.728,247.928a10.371,10.371,0,0,0,9.188-9.185c.308-3.846,2.88-20.8,2.88-20.8s2.2,17,2.889,20.8c1.019,5.641,4.376,8.512,9.182,9.179,3.822.524,20.8,2.895,20.8,2.895s-16.968,2.385-20.8,2.889c-6.11.812-8.575,4.711-9.173,9.179-.516,3.822-2.9,20.8-2.9,20.8s-2.5-16.957-2.895-20.8a10.059,10.059,0,0,0-9.173-9.188c-3.837-.421-20.8-2.886-20.8-2.88S431.894,248.37,435.728,247.928Z\",\n transform: \"translate(627.019 355.076)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10846\",\n \"data-name\": \"Path 10846\",\n d: \"M77.981,286.992a7.327,7.327,0,0,0,6.5-6.5c.219-2.72,2.038-14.714,2.038-14.714s1.561,12.026,2.047,14.714c.717,3.991,3.093,6.024,6.492,6.495,2.705.367,14.72,2.047,14.72,2.047s-12.011,1.689-14.72,2.044a6.957,6.957,0,0,0-6.489,6.495c-.361,2.705-2.05,14.714-2.05,14.714s-1.772-12-2.047-14.714a7.123,7.123,0,0,0-6.489-6.5c-2.714-.3-14.72-2.042-14.72-2.035S75.267,287.306,77.981,286.992Z\",\n transform: \"translate(-63.261 448.968)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10847\",\n \"data-name\": \"Path 10847\",\n d: \"M330.326,41.129a4.059,4.059,0,0,0,3.594-3.6c.124-1.508,1.129-8.142,1.129-8.142s.862,6.655,1.132,8.142a4,4,0,0,0,3.594,3.594c1.5.2,8.142,1.132,8.142,1.132s-6.643.933-8.142,1.132a3.853,3.853,0,0,0-3.594,3.594c-.2,1.5-1.132,8.142-1.132,8.142s-.981-6.64-1.132-8.142a3.942,3.942,0,0,0-3.591-3.6c-1.5-.163-8.145-1.132-8.145-1.129S328.824,41.3,330.326,41.129Z\",\n transform: \"translate(585.954 -29.39)\",\n fill: \"#fff\"\n})));\n\nvar SvgStars = function SvgStars(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 768,\n height: 261,\n viewBox: \"0 0 768 261\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mask_Group_16\",\n \"data-name\": \"Mask Group 16\",\n transform: \"translate(-1152 -827)\",\n clipPath: \"url(#clip-path)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mask_Group_3\",\n \"data-name\": \"Mask Group 3\",\n transform: \"translate(1217.223 906.56)\",\n clipPath: \"url(#clip-path-2)\",\n style: {\n mixBlendMode: \"color-dodge\",\n isolation: \"isolate\"\n }\n }, _ref3)));\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgStars, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/stars.df42e9a5.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip-path\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_569\",\n \"data-name\": \"Rectangle 569\",\n width: 375,\n height: 302,\n transform: \"translate(0 510)\",\n fill: \"#fff\",\n stroke: \"#707070\",\n strokeWidth: 1\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"linear-gradient\",\n x1: 0.965,\n y1: 0.247,\n x2: 0.245,\n y2: 0.884,\n gradientUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#fff3d5\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#ffefc9\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"linear-gradient-2\",\n x1: 1.314,\n y1: 0.439,\n x2: 0,\n y2: 0.577,\n gradientUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#acb2fa\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#798df3\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"linear-gradient-3\",\n x1: 0.351,\n y1: 0.619,\n x2: 0.722,\n y2: 0.572,\n gradientUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#848dff\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#d2c9ef\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"linear-gradient-4\",\n x1: 0.5,\n x2: 0.5,\n y2: 1,\n gradientUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#f6f6f6\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#c9e1ff\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2214\",\n \"data-name\": \"Group 2214\",\n transform: \"matrix(0.469, 0.883, -0.883, 0.469, 278.97, 603.154)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9153\",\n \"data-name\": \"Path 9153\",\n d: \"M7.337,231.709A180.835,180.835,0,0,1,130.066,7.336c95.847-28.067,196.342,26.87,224.41,122.718a180.853,180.853,0,0,1-301.15,179A180.413,180.413,0,0,1,7.337,231.709Z\",\n transform: \"translate(0.003 0)\",\n fill: \"#8077f6\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9154\",\n \"data-name\": \"Path 9154\",\n d: \"M0,177.61a131.887,131.887,0,0,0,14.646-9.658c50.422-39.015,38.2-104.6,71.737-151.19,20.5-28.476,50.822-15.5,74.846.932,25.954,17.806,48.848,27.136,77.208,40.188,26.01,11.922,46.413,28.135,61.274,47A180.584,180.584,0,0,1,178.381,223a179.9,179.9,0,0,1-100.82.234A174.706,174.706,0,0,1,59.029,216.8,182.181,182.181,0,0,1,0,177.61Z\",\n transform: \"translate(53.328 131.439)\",\n fill: \"#8481ec\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9155\",\n \"data-name\": \"Path 9155\",\n d: \"M7.34,231.709A180.8,180.8,0,0,1,61,45.45a178.79,178.79,0,0,1,44.672-29.027,181,181,0,0,1,24.4-9.088c95.847-28.067,196.342,26.87,224.41,122.718a179.969,179.969,0,0,1,6.994,39.97c-22.275-14.837-45.307-43.126-57.622-53.57C281.152,97.2,252.8,81.087,223.2,84.259c-28.115,3.029-53.356,23.06-81.582,21.2-11.114-.71-22.164-4.869-33.1-2.867-17.965,3.279-29.114,21.914-32.5,39.843-3.433,17.9-1.487,36.544-5.269,54.383-5.916,27.762-26.517,51.932-52.9,62.3A178.037,178.037,0,0,1,7.34,231.709Z\",\n transform: \"translate(0 0)\",\n fill: \"#7f7ffb\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9156\",\n \"data-name\": \"Path 9156\",\n d: \"M.379,15.277C-1.366,9.322,3.083,2.78,10.311.663s14.5,1,16.244,6.95-2.7,12.5-9.932,14.611S2.123,21.232.379,15.277Z\",\n transform: \"translate(125.095 301.721)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9157\",\n \"data-name\": \"Path 9157\",\n d: \"M.379,15.277C-1.366,9.322,3.079,2.78,10.307.663s14.5,1,16.244,6.95-2.7,12.5-9.928,14.611S2.123,21.232.379,15.277Z\",\n transform: \"translate(68.904 209.997)\",\n fill: \"#9f9fff\",\n opacity: 0.48\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9158\",\n \"data-name\": \"Path 9158\",\n d: \"M.377,15.279C-1.363,9.324,3.082,2.781,10.31.664s14.5,1,16.244,6.947-2.7,12.5-9.932,14.615S2.122,21.23.377,15.279Z\",\n transform: \"translate(160.245 144.86)\",\n fill: \"#9f9fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9159\",\n \"data-name\": \"Path 9159\",\n d: \"M.379,15.275C-1.366,9.32,3.079,2.778,10.307.665s14.5.991,16.244,6.947-2.7,12.5-9.928,14.615S2.119,21.231.379,15.275Z\",\n transform: \"translate(207.263 32.146)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9160\",\n \"data-name\": \"Path 9160\",\n d: \"M.19,7.639C-.683,4.662,1.538,1.391,5.153.332s7.248.5,8.12,3.473-1.352,6.249-4.964,7.307S1.058,10.617.19,7.639Z\",\n transform: \"translate(21.094 159.978)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9161\",\n \"data-name\": \"Path 9161\",\n d: \"M.884,35.01A21.761,21.761,0,0,1,0,29.027,178.789,178.789,0,0,1,44.672,0c8.854,2.446,15.9,8.441,18.35,16.811,4.132,14.119-6.439,29.65-23.564,34.665C22.3,56.5,5.019,49.125.884,35.01Z\",\n transform: \"translate(60.997 16.423)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9162\",\n \"data-name\": \"Path 9162\",\n d: \"M.191,6.079A4.745,4.745,0,1,1,6.079,9.3,4.75,4.75,0,0,1,.191,6.079Z\",\n transform: \"translate(98.384 304.472)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9163\",\n \"data-name\": \"Path 9163\",\n d: \"M.193,6.079A4.745,4.745,0,1,1,6.077,9.3,4.746,4.746,0,0,1,.193,6.079Z\",\n transform: \"translate(36.515 93.191)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9164\",\n \"data-name\": \"Path 9164\",\n d: \"M.191,6.077A4.745,4.745,0,1,1,6.079,9.3,4.744,4.744,0,0,1,.191,6.077Z\",\n transform: \"translate(45.616 141.157)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9165\",\n \"data-name\": \"Path 9165\",\n d: \"M0,4.746A4.744,4.744,0,1,1,4.742,9.492,4.743,4.743,0,0,1,0,4.746Z\",\n transform: \"translate(27.66 222.741)\",\n fill: \"#9f9fff\",\n opacity: 0.44\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9166\",\n \"data-name\": \"Path 9166\",\n d: \"M.193,6.077A4.745,4.745,0,1,1,6.077,9.3,4.74,4.74,0,0,1,.193,6.077Z\",\n transform: \"translate(91.096 162.658)\",\n fill: \"#9f9fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9167\",\n \"data-name\": \"Path 9167\",\n d: \"M.193,6.077A4.745,4.745,0,1,1,6.081,9.3,4.74,4.74,0,0,1,.193,6.077Z\",\n transform: \"translate(160.43 324.692)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9168\",\n \"data-name\": \"Path 9168\",\n d: \"M.193,6.077A4.745,4.745,0,1,1,6.08,9.3,4.74,4.74,0,0,1,.193,6.077Z\",\n transform: \"translate(151.061 217.219)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9169\",\n \"data-name\": \"Path 9169\",\n d: \"M.191,6.081A4.745,4.745,0,1,1,6.079,9.3,4.749,4.749,0,0,1,.191,6.081Z\",\n transform: \"translate(121.191 248.55)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9170\",\n \"data-name\": \"Path 9170\",\n d: \"M.191,6.079A4.745,4.745,0,1,1,6.079,9.3,4.75,4.75,0,0,1,.191,6.079Z\",\n transform: \"translate(287.344 234.012)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9171\",\n \"data-name\": \"Path 9171\",\n d: \"M0,4.746A4.744,4.744,0,1,1,4.742,9.492,4.746,4.746,0,0,1,0,4.746Z\",\n transform: \"translate(338.869 169.671)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9172\",\n \"data-name\": \"Path 9172\",\n d: \"M0,5.525A9.689,9.689,0,0,1,6.058.4a9.914,9.914,0,0,1,12.3,6.729,9.755,9.755,0,0,1,.174,4.825A174.709,174.709,0,0,1,0,5.525Z\",\n transform: \"translate(112.358 342.717)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9173\",\n \"data-name\": \"Path 9173\",\n d: \"M.193,6.079A4.745,4.745,0,1,1,6.081,9.3,4.746,4.746,0,0,1,.193,6.079Z\",\n transform: \"translate(137.259 43.285)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9174\",\n \"data-name\": \"Path 9174\",\n d: \"M.191,6.077A4.745,4.745,0,1,1,6.079,9.3,4.744,4.744,0,0,1,.191,6.077Z\",\n transform: \"translate(188.776 18.312)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9175\",\n \"data-name\": \"Path 9175\",\n d: \"M.262,8.283a6.466,6.466,0,1,1,8.021,4.389A6.463,6.463,0,0,1,.262,8.283Z\",\n transform: \"translate(158.52 55.239)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9176\",\n \"data-name\": \"Path 9176\",\n d: \"M.264,8.287a6.466,6.466,0,1,1,8.021,4.385A6.466,6.466,0,0,1,.264,8.287Z\",\n transform: \"translate(138.425 178.223)\",\n fill: \"#9f9fff\",\n opacity: 0.44\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9177\",\n \"data-name\": \"Path 9177\",\n d: \"M.389,12.264a9.571,9.571,0,1,1,11.875,6.495A9.565,9.565,0,0,1,.389,12.264Z\",\n transform: \"translate(31.676 188.757)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9178\",\n \"data-name\": \"Path 9178\",\n d: \"M.387,12.264a9.572,9.572,0,1,1,11.879,6.5A9.574,9.574,0,0,1,.387,12.264Z\",\n transform: \"translate(245.334 223.114)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9179\",\n \"data-name\": \"Path 9179\",\n d: \"M.193,6.081A4.745,4.745,0,1,1,6.081,9.3,4.746,4.746,0,0,1,.193,6.081Z\",\n transform: \"translate(60.102 73.579)\",\n fill: \"#6c64df\",\n opacity: 0.37\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9180\",\n \"data-name\": \"Path 9180\",\n d: \"M.271,8.587A6.7,6.7,0,1,1,8.59,13.139,6.7,6.7,0,0,1,.271,8.587Z\",\n transform: \"translate(108.685 283.797)\",\n fill: \"#7875f1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9181\",\n \"data-name\": \"Path 9181\",\n d: \"M.271,8.587A6.7,6.7,0,1,1,8.59,13.139,6.7,6.7,0,0,1,.271,8.587Z\",\n transform: \"translate(216.958 95.433)\",\n fill: \"#9f9fff\"\n}));\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_520\",\n \"data-name\": \"Ellipse 520\",\n cx: 41.5,\n cy: 9.5,\n rx: 41.5,\n ry: 9.5,\n transform: \"translate(154 707)\",\n fill: \"#6e6bcb\",\n opacity: 0.82\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2215\",\n \"data-name\": \"Group 2215\",\n transform: \"translate(99.467 526.658)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9194\",\n \"data-name\": \"Path 9194\",\n d: \"M3.386,4.161S.474,32.172,0,37.039c.821,2.448,8.027,4.294,11.208,1.755L17.372,0Z\",\n transform: \"translate(95.968 147.833) rotate(-13)\",\n fill: \"#e96524\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9203\",\n \"data-name\": \"Path 9203\",\n d: \"M3.386,35.852S.474,7.84,0,2.973C.821.525,8.027-1.321,11.208,1.218l6.164,38.795Z\",\n transform: \"translate(87.458 185.365) rotate(-167)\",\n fill: \"#e96524\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9195\",\n \"data-name\": \"Path 9195\",\n d: \"M1,0C.705,3.4.224,12.5,0,14.811c.821,2.448,8.027,4.294,11.208,1.756l2.7-14.944C11.519,4.292,3.067,3.426,1,0\",\n transform: \"translate(100.968 169.492) rotate(-13)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9204\",\n \"data-name\": \"Path 9204\",\n d: \"M1,17.784C.705,14.38.224,5.282,0,2.973.821.525,8.027-1.321,11.208,1.217l2.7,14.944C11.519,13.492,3.067,14.358,1,17.784\",\n transform: \"translate(87.458 185.365) rotate(-167)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9196\",\n \"data-name\": \"Path 9196\",\n d: \"M0,10.161c.635,3.289,13.088,8.375,21.537,6.226,4.08-6.787.974-12.7-3.627-14.693C12.2-.777,8.079.989,4.484,4.94,3.365,5.46,3.347,3.865,3.607,0,1.529,1.217.136,6.3,0,10.161\",\n transform: \"translate(99.876 178.851) rotate(-13)\",\n fill: \"#808251\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9205\",\n \"data-name\": \"Path 9205\",\n d: \"M0,6.739C.635,3.451,13.088-1.635,21.537.513c4.08,6.787.974,12.7-3.627,14.693-5.714,2.471-9.832.705-13.427-3.247-1.12-.519-1.137,1.075-.877,4.94C1.529,15.683.136,10.6,0,6.739\",\n transform: \"translate(88.749 193.864) rotate(-167)\",\n fill: \"#808251\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9197\",\n \"data-name\": \"Path 9197\",\n d: \"M2.1,9.959A12.263,12.263,0,0,1,0,9.194C.193,4.507,2.046.673,7.845.018a8.234,8.234,0,0,1,6.534,2.853,9.424,9.424,0,0,1,1.352,8.071c-5.057.093-9.9-.069-13.626-.982\",\n transform: \"translate(107.449 179.039) rotate(-13)\",\n fill: \"#ebe8e3\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9206\",\n \"data-name\": \"Path 9206\",\n d: \"M2.1,1.005A12.263,12.263,0,0,0,0,1.77c.193,4.687,2.046,8.521,7.845,9.176a8.234,8.234,0,0,0,6.534-2.853A9.424,9.424,0,0,0,15.731.023C10.674-.07,5.828.092,2.1,1.005\",\n transform: \"translate(82.512 188.268) rotate(-167)\",\n fill: \"#ebe8e3\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9198\",\n \"data-name\": \"Path 9198\",\n d: \"M1.845,8.725A10.722,10.722,0,0,1,0,8.056C.17,3.95,1.793.591,6.873.016a7.207,7.207,0,0,1,5.722,2.5,8.253,8.253,0,0,1,1.187,7.07A49.591,49.591,0,0,1,1.845,8.725\",\n transform: \"translate(109.097 178.758) rotate(-13)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9207\",\n \"data-name\": \"Path 9207\",\n d: \"M1.845.882A10.722,10.722,0,0,0,0,1.551c.17,4.106,1.793,7.464,6.873,8.04A7.207,7.207,0,0,0,12.6,7.09,8.253,8.253,0,0,0,13.782.02,49.591,49.591,0,0,0,1.845.882\",\n transform: \"translate(81.169 186.664) rotate(-167)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9199\",\n \"data-name\": \"Path 9199\",\n d: \"M0,3.96c.635,3.289,13.088,8.374,21.537,6.226a13.7,13.7,0,0,0,1.536-3.557c-5.061.092-9.907-.069-13.633-.984A21.068,21.068,0,0,1,.507,0,23.055,23.055,0,0,0,0,3.96\",\n transform: \"translate(101.271 184.893) rotate(-13)\",\n fill: \"#715f51\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9210\",\n \"data-name\": \"Path 9210\",\n d: \"M5.974,0,25.041,8.84l2.6,3.127.182,2.609L13.275,33.853l-5.531-3.54L17.7,14.6,0,9.735Z\",\n transform: \"translate(114.8 94.191) rotate(7)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9208\",\n \"data-name\": \"Path 9208\",\n d: \"M0,6.739C.635,3.451,13.088-1.635,21.537.513A13.7,13.7,0,0,1,23.074,4.07c-5.061-.092-9.907.069-13.633.984A21.068,21.068,0,0,0,.507,10.7,23.055,23.055,0,0,1,0,6.739\",\n transform: \"translate(88.749 193.864) rotate(-167)\",\n fill: \"#715f51\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9186\",\n \"data-name\": \"Path 9186\",\n d: \"M14.225,35.366c5.107,27.4,33.292,41.563,57.423,26,0,0,9.926-6.086,15.481-16.391,3.47-6.44-4.32-6.951-4.32-6.951s-10.26,11.226-22.643,8.794c-4.878-.958-8.822-13.234-11.215-19.337C41.372,8.16,32.376,6.894,32.376,6.894s4.7,6.259,2.4,7.928c0,0-12.5-16.617-34.776-14.663,0,0,8.272,7.128,9.531,10.689,0,0-5.523-1.778-8.571-.418C12.729,16.36,14.518,27.237,14.225,35.366\",\n transform: \"matrix(0.978, 0.208, -0.208, 0.978, 14.099, 70.566)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9187\",\n \"data-name\": \"Path 9187\",\n d: \"M19.374,16.682C20.809,23.24,29.408,28.322,32.9,30.7c-.356-3.691,2.091-8.626,1.254-10.783,4.795,1.1,14.127,9.185,13.332,7.066C40.286,7.777,31.521,6.6,31.521,6.6s4.524,6.2,2.261,7.891C33.782,14.492,21.756-1.973,0,.2c0,0,8,7.034,9.192,10.576,0,0-5.371-1.72-8.359-.332C9.756,14.973,13.55,22.926,13.564,32.807c1.633-5.139,5.5-11.94,5.81-16.125\",\n transform: \"translate(14.22 70.649) rotate(11)\",\n fill: \"#c4502b\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9191\",\n \"data-name\": \"Path 9191\",\n d: \"M1006.23,1109.5c.58,2.163-1.711,6.727-2.228,12.338a75.851,75.851,0,0,1-1.881,11.759s-11.979-.459-19.8-5.032c0,0,5.449-24.892,5.17-26.175s18.742,0,18.742,0\",\n transform: \"translate(-908.74 -971.359)\",\n fill: \"#4d412b\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9209\",\n \"data-name\": \"Path 9209\",\n d: \"M.287,13.163C-.861,16.13,1.435,23.937,7.2,24.189c5.3.232,10.944-17.56,11.777-19.226.878-1.756-8.544-5.115-12.2-4.958\",\n transform: \"matrix(-0.017, 1, -1, -0.017, 129.12, 91.3)\",\n fill: \"#ffc22b\",\n stroke: \"rgba(0,0,0,0)\",\n strokeMiterlimit: 10,\n strokeWidth: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9192\",\n \"data-name\": \"Path 9192\",\n d: \"M1033.533,1102.264c-1.025,3.825,1.139,23.55,3.032,30.56,0,0,13.7-.459,21.527-5.032,0,0-6.742-25.861-6.463-27.144s-12.6,1.616-12.6,1.616\",\n transform: \"translate(-938.952 -970.587)\",\n fill: \"#4d412b\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9193\",\n \"data-name\": \"Path 9193\",\n d: \"M1029.946,1124.9c-.446-.191-3.78-1.163-4.385-1.843,1.522,2.022,3.177,1.981,4.012,3.229a142.667,142.667,0,0,0,2.226,21.446,18.475,18.475,0,0,0,15.947-3.11c-4.855,2.349-10.9,3.028-14.922,1.853-1.219-3.111-2.878-21.575-2.878-21.575\",\n transform: \"translate(-934.186 -986.125)\",\n fill: \"#3f3321\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9185\",\n \"data-name\": \"Path 9185\",\n d: \"M-2995.463,14.477s-3.354,43.3-2.624,47.179,46.4,2.262,43.111-1.616-.147-41.362-9.5-43.948S-2995.463,14.477-2995.463,14.477Z\",\n transform: \"translate(3074.096 71.636)\",\n fill: \"#ffc22b\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7494\",\n \"data-name\": \"Path 7494\",\n d: \"M0,24.64S6.156,6.881,8.737,5.4c0,0-1.88-3.071-.49-3.746s2.833,1.97,2.833,1.97S10.953-.029,12.329,0,13.58,4.095,13.58,4.095s1.977-2.7,3-.35c.348.8-2.084,2.943-2.084,2.943S22.86,17.369,20.42,35.662,0,24.64,0,24.64Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 124.453, 0)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7495\",\n \"data-name\": \"Path 7495\",\n d: \"M10.553,8.638a19.284,19.284,0,0,0-1.39-2.116s2.432-2.094,2.084-2.87c-1.026-2.289-3,.341-3,.341S8.369.029,6.993,0,5.745,3.536,5.745,3.536,4.3.955,2.912,1.614s.49,3.653.49,3.653A22.512,22.512,0,0,0,1.43,7.617L0,10.8,4.291,7.935l2.225,3.02L8.265,8.094l3.815,4.133Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 129.687, 1.883)\",\n fill: \"#ec6117\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7496\",\n \"data-name\": \"Path 7496\",\n d: \"M0,12.078S3.988-1.116,6.454.076s4.652,11.8,3.763,18.552S0,12.078,0,12.078Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 126.676, 16.585)\",\n fill: \"#a12814\",\n opacity: 0.21\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7497\",\n \"data-name\": \"Path 7497\",\n d: \"M27.575,11.825S11.077,2.571,7.91,3.178c0,0-.3-3.562-1.93-3.144S4.763,3.405,4.763,3.405,2.576.571,1.4,1.51,2.89,5.424,2.89,5.424-.518,4.713.068,7.162c.2.831,3.657.824,3.657.824S3.19,21.594,16.8,33.726,27.575,11.825,27.575,11.825Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 57.157, 6.248)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7498\",\n \"data-name\": \"Path 7498\",\n d: \"M4.082,11.426a20.344,20.344,0,0,1-.167-2.772S.28,8.661.071,7.761C-.545,5.107,3.038,5.877,3.038,5.877S.24,2.654,1.474,1.636,5.006,3.689,5.006,3.689,4.573.49,6.286.037,8.315,3.444,8.315,3.444A4.5,4.5,0,0,1,9.9,3.519l3.575,1.408-4.05.963L9.111,9.744,5.373,9.9v6.423Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 57.073, 5.881)\",\n fill: \"#ec6117\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7499\",\n \"data-name\": \"Path 7499\",\n d: \"M12.274,5.412S1.415-2.156.175.607,4.525,14.353,10,19.772,12.274,5.412,12.274,5.412Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 60.761, 20.185)\",\n fill: \"#a12814\",\n opacity: 0.21\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7555\",\n \"data-name\": \"Path 7555\",\n d: \"M24.795,9.21S17.715,6.865,20.7,4.45c1.529-1.236-3.839.744-4.666,3.118,0,0-2.779-3.15-.738-5.344-2.767.749-7.8,4.214-8.566,8.263,0,0-.047-9.228,3.48-10.488C1.309,3.179-.383,13.2.065,14.527c1.575,4.661,24.193,1.2,24.729-5.317\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 92.404, 7.989)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7556\",\n \"data-name\": \"Path 7556\",\n d: \"M10.3,58.267c7.941,18.127,14.392,15.365,32.574,9.962S77.529,59.411,73.97,39.944C70.233,19.509,58.134-7.271,27.282,1.828-8.51,12.385-2.725,41.3,8.983,59.25\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 76.832, 7.874)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7558\",\n \"data-name\": \"Path 7558\",\n d: \"M8.64,48.177S-7.781,28.726,4.654,13.92c5.613-6.683,15.009-3.727,16.264-3.031,0,0,5.59-17.39,22.823-8.216a19.6,19.6,0,0,1,8.642,8.192c3.465,5.77,7.9,15.108,4.347,20.536C51.315,39.664,8.64,48.177,8.64,48.177Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 80.681, 18.346)\",\n fill: \"url(#linear-gradient)\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_513\",\n \"data-name\": \"Ellipse 513\",\n cx: 0.53,\n cy: 0.568,\n rx: 0.53,\n ry: 0.568,\n transform: \"translate(85.242 57.758) rotate(14.684)\",\n fill: \"#fefefe\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7567\",\n \"data-name\": \"Path 7567\",\n d: \"M1.607,29.507s11.521-.428,13.952.647c0,0,13.388-11.225,24.695-11.166,0,0,17.323-13.553,26.345-8.984,0,0,6.243-8.863,10.234-10l.553,6.637,4.421-2.113-.419,6.207,4.692-1.412s-4.426,27.1-37.215,38.174S3.47,43.7,1.74,42.351s4.421-2.113,4.421-2.113L0,35.77s4.071-1.978,5.744-1.819S1.607,29.507,1.607,29.507Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 66.085, 31.253)\",\n fill: \"#ffe14e\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7568\",\n \"data-name\": \"Path 7568\",\n d: \"M.152,4.941c.621,1.387,4.433,2.04,5.595,1.52,1.122-.5,3.213-3.8,2.592-5.184S5.382-.414,3.122.6-.468,3.553.152,4.941\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 95.613, 58.862)\",\n fill: \"#d98c19\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_517\",\n \"data-name\": \"Ellipse 517\",\n cx: 6.118,\n cy: 1.733,\n rx: 6.118,\n ry: 1.733,\n transform: \"matrix(0.988, -0.154, 0.154, 0.988, 70.417, 68.106)\",\n fill: \"#fa9785\",\n opacity: 0.36\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_518\",\n \"data-name\": \"Ellipse 518\",\n cx: 5.625,\n cy: 2.061,\n rx: 5.625,\n ry: 2.061,\n transform: \"translate(112.844 64.406) rotate(9)\",\n fill: \"#fdc662\",\n opacity: 0.9\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7561\",\n \"data-name\": \"Path 7561\",\n d: \"M3.709,1.972a5.042,5.042,0,0,1,5.411-.18C7.286.047,4.861-.732,2.255.881-3.832,4.648,4.332,15.1,4.332,15.1s1.209.856,1.6.809C4.029,13.092-1.141,4.974,3.709,1.972Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 79.596, 44.309)\",\n fill: \"#58271b\",\n opacity: 0.59\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9182\",\n \"data-name\": \"Path 9182\",\n d: \"M3.709,1.972a5.042,5.042,0,0,1,5.411-.18C7.286.047,4.861-.732,2.255.881-3.832,4.648,4.332,15.1,4.332,15.1s.238-.013.632-.059C3.058,12.224-1.141,4.974,3.709,1.972Z\",\n transform: \"matrix(0.809, 0.588, -0.588, 0.809, 108.427, 42.778)\",\n fill: \"#58271b\",\n opacity: 0.59\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7562\",\n \"data-name\": \"Path 7562\",\n d: \"M4.583,15.1S-3.887,4.647,2.2.885s11.15,5.438,10.035,9.594S4.583,15.1,4.583,15.1Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 80.362, 45.389)\",\n fill: \"#fefefe\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9183\",\n \"data-name\": \"Path 9183\",\n d: \"M4.583,15.1S-3.887,4.647,2.2.885s11.15,5.438,10.035,9.594S4.583,15.1,4.583,15.1Z\",\n transform: \"matrix(0.809, 0.588, -0.588, 0.809, 108.888, 44.02)\",\n fill: \"#fefefe\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7564\",\n \"data-name\": \"Path 7564\",\n d: \"M6.051,3.456c1.318,2.372,1.269,5-.11,5.86-1.626,1.019-3.565-.358-4.883-2.731S-.41,1.091.969.227,4.733,1.084,6.051,3.456Z\",\n transform: \"matrix(0.934, 0.358, -0.358, 0.934, 84.581, 48.556)\",\n fill: \"#806351\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9184\",\n \"data-name\": \"Path 9184\",\n d: \"M6.051,3.456c1.318,2.372,1.269,5-.11,5.86-1.626,1.019-3.565-.358-4.883-2.731S-.41,1.091.969.227,4.733,1.084,6.051,3.456Z\",\n transform: \"matrix(0.809, 0.588, -0.588, 0.809, 112.12, 48.349)\",\n fill: \"#806351\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9188\",\n \"data-name\": \"Path 9188\",\n d: \"M-2982.5-21.333s4.251,8.725,14.024,4.133\",\n transform: \"translate(3070.932 89.053)\",\n fill: \"none\",\n stroke: \"#1a1a1a\",\n strokeLinecap: \"round\",\n strokeWidth: 2,\n opacity: 0.53\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9202\",\n \"data-name\": \"Path 9202\",\n d: \"M-2935.223,72.667l21.955.833-13.283,4.014Z\",\n transform: \"translate(3039.875 44.953)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9189\",\n \"data-name\": \"Path 9189\",\n d: \"M-3054,25.282h56.8l12.126,36.838h-58.719Z\",\n transform: \"translate(3094.678 61.963)\",\n fill: \"#616ca5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9190\",\n \"data-name\": \"Path 9190\",\n d: \"M-2971.689,1h3.727l12.005,36.2-2.89.637Z\",\n transform: \"translate(3068.361 86.245)\",\n fill: \"#c5c2c2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7560\",\n \"data-name\": \"Path 7560\",\n d: \"M7.943,1.124S3.238-1.725,0,1.65\",\n transform: \"translate(108.886 34.376) rotate(16)\",\n fill: \"none\",\n stroke: \"#e9c785\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 3\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7559\",\n \"data-name\": \"Path 7559\",\n d: \"M5.577,0S.169,1.006,0,5.681\",\n transform: \"matrix(0.891, 0.454, -0.454, 0.891, 79.776, 36.278)\",\n fill: \"none\",\n stroke: \"#e9c785\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 3\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9201\",\n \"data-name\": \"Path 9201\",\n d: \"M-2924.958,69.6l16.5-2.262V69.6l-17.042,3.315Z\",\n transform: \"translate(3035.189 51.095)\",\n fill: \"#c5c2c2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9211\",\n \"data-name\": \"Path 9211\",\n d: \"M3.169,0S-1.6,2.536.565,4.254s7.787,7.949,11.243,8.13,1.885-2.893,1.885-2.893L6.18,4.254Z\",\n transform: \"translate(117.232 124.065) rotate(3)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Union_1\",\n \"data-name\": \"Union 1\",\n d: \"M3.442,13.674.075,3.312a1.519,1.519,0,0,1,2.89-.94l1.9,5.859L8.484.817A1.454,1.454,0,1,1,11.1,2.092L8.874,6.652,14.4,9.592a1.4,1.4,0,1,1-1.313,2.47L7.647,9.168,6.218,12.1q-.027.056-.058.108l.172.529a1.519,1.519,0,1,1-2.89.939Z\",\n transform: \"matrix(0.995, 0.105, -0.105, 0.995, 66.427, 95.176)\",\n fill: \"#d9d9d9\",\n opacity: 0.97\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_528\",\n \"data-name\": \"Rectangle 528\",\n width: 2.576,\n height: 4.293,\n rx: 1.288,\n transform: \"matrix(0.788, -0.616, 0.616, 0.788, 63.214, 121.452)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9710\",\n \"data-name\": \"Path 9710\",\n d: \"M1.257,0a1.283,1.283,0,0,1,1.31,1.164l.142,6.064a1.154,1.154,0,0,1-1.257,1.11A1.283,1.283,0,0,1,.142,7.175L0,1.111A1.154,1.154,0,0,1,1.257,0Z\",\n transform: \"matrix(0.985, -0.174, 0.174, 0.985, 66.385, 116.57)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9709\",\n \"data-name\": \"Path 9709\",\n d: \"M1.261,0A1.283,1.283,0,0,1,2.568,1.182l.151,7.729a1.173,1.173,0,0,1-1.261,1.137A1.283,1.283,0,0,1,.151,8.866L0,1.137A1.173,1.173,0,0,1,1.261,0Z\",\n transform: \"matrix(0.985, -0.174, 0.174, 0.985, 69.516, 114.883)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_531\",\n \"data-name\": \"Rectangle 531\",\n width: 2.576,\n height: 8.586,\n rx: 1.288,\n transform: \"translate(73.608 115.467) rotate(-5)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_535\",\n \"data-name\": \"Rectangle 535\",\n width: 1.906,\n height: 6.355,\n rx: 0.953,\n transform: \"translate(131.821 134.406) rotate(116)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_532\",\n \"data-name\": \"Rectangle 532\",\n width: 1.717,\n height: 6.01,\n rx: 0.859,\n transform: \"matrix(0.995, 0.105, -0.105, 0.995, 77.62, 117.564)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9708\",\n \"data-name\": \"Path 9708\",\n d: \"M2136.833-459.234s.2,1.3,3.005,1.623a22.368,22.368,0,0,0,8.228-.325c3.1-.706,2.755-2.824,2.755-2.824l-4.4-2.24-6.582.828s.2,2.167-.823,2.581A5.861,5.861,0,0,1,2136.833-459.234Z\",\n transform: \"translate(-2071.898 582.866)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9711\",\n \"data-name\": \"Path 9711\",\n d: \"M4.476,0A4.315,4.315,0,0,1,8.953,4.132c0,2.282-3.923,5.608-6.395,5.608S0,6.414,0,4.132A4.315,4.315,0,0,1,4.476,0Z\",\n transform: \"translate(133.175 105.706) rotate(3)\",\n fill: \"#ff6f00\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle_533\",\n \"data-name\": \"Rectangle 533\",\n width: 2.542,\n height: 6.99,\n rx: 1.271,\n transform: \"translate(129.651 129.17) rotate(115)\",\n fill: \"#ff6f00\"\n}));\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2216\",\n \"data-name\": \"Group 2216\",\n transform: \"translate(58.145 673.566) rotate(-21)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9046\",\n \"data-name\": \"Path 9046\",\n d: \"M34.482,4.313c0,2.385-7.722,4.325-17.241,4.325S0,6.7,0,4.313,7.722,0,17.241,0,34.482,1.928,34.482,4.313Z\",\n transform: \"translate(0 0)\",\n fill: \"#b6bffa\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9047\",\n \"data-name\": \"Path 9047\",\n d: \"M34.482,0V53.149c0,2.238-7.722,4.048-17.241,4.048S0,55.387,0,53.149V0C0,2.238,7.722,4.059,17.241,4.059S34.482,2.238,34.482,0Z\",\n transform: \"translate(0 3.512)\",\n fill: \"url(#linear-gradient-2)\"\n}));\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2217\",\n \"data-name\": \"Group 2217\",\n transform: \"matrix(0.946, -0.326, 0.326, 0.946, 41.308, 627.669)\",\n opacity: 0.17\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1060\",\n \"data-name\": \"Group 1060\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_2811\",\n \"data-name\": \"Path 2811\",\n d: \"M9.6,0C4.371.075.073,3.985,0,8.735s4.11,8.541,9.341,8.467,9.529-3.983,9.6-8.734S14.832-.073,9.6,0ZM9.071,12.065A3.533,3.533,0,0,1,5.356,8.579,3.791,3.791,0,0,1,9.178,4.987a3.533,3.533,0,0,1,3.715,3.486A3.791,3.791,0,0,1,9.071,12.065Z\",\n fill: \"#fcfcff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_2812\",\n \"data-name\": \"Path 2812\",\n d: \"M9.6,0C4.371.075.073,3.985,0,8.735s4.11,8.541,9.341,8.467,9.53-3.983,9.6-8.734S14.833-.073,9.6,0ZM9.071,12.065A3.533,3.533,0,0,1,5.356,8.579,3.791,3.791,0,0,1,9.178,4.987a3.533,3.533,0,0,1,3.715,3.486A3.79,3.79,0,0,1,9.071,12.065Z\",\n transform: \"translate(18.661 18.286)\",\n fill: \"#fcfcff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_2813\",\n \"data-name\": \"Path 2813\",\n d: \"M.45,25.472C.639,25.19,24.726.742,26.214.131s3.646,1.063,3.843,1.977S4.586,28.479,3.52,29.084-1.279,28.052.45,25.472Z\",\n transform: \"translate(3.637 3.056)\",\n fill: \"#fcfcff\"\n})));\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1957\",\n \"data-name\": \"Group 1957\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1955\",\n \"data-name\": \"Group 1955\",\n opacity: 0.4\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9223\",\n \"data-name\": \"Path 9223\",\n d: \"M452.751,302.257a14.19,14.19,0,0,1-1.647,6.851l-.008-.005-12.558-6.71-.1-.065-.182-14.14.559-.047A14.3,14.3,0,0,1,452.751,302.257Z\",\n transform: \"translate(-424.137 -288.133)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9224\",\n \"data-name\": \"Path 9224\",\n d: \"M414.908,349.531c-.034.07-.07.138-.109.208a14.31,14.31,0,0,1-25.439-.66l12.831-6.214.055-.114.1.065,12.558,6.71Z\",\n transform: \"translate(-387.94 -328.556)\",\n fill: \"#778cff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9225\",\n \"data-name\": \"Path 9225\",\n d: \"M398.577,288.121l-.559.047.182,14.14-.055.114-12.831,6.214a14.308,14.308,0,0,1,12.7-20.521C398.206,288.113,398.39,288.113,398.577,288.121Z\",\n transform: \"translate(-383.895 -288.114)\",\n fill: \"#778cff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1956\",\n \"data-name\": \"Group 1956\",\n opacity: 0.36\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9226\",\n \"data-name\": \"Path 9226\",\n d: \"M410.754,309.3a14.309,14.309,0,1,1-12.735-21.181\",\n transform: \"translate(-383.895 -288.118)\",\n fill: \"none\",\n stroke: \"#706969\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9227\",\n \"data-name\": \"Path 9227\",\n stroke: \"#706969\",\n d: \"M438.26,288.116c.187,0,.371,0,.559.005A14.306,14.306,0,0,1,451.1,309.088c-.034.07-.07.138-.109.208\",\n fill: \"none\",\n transform: \"translate(-424.137 -288.114)\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n strokeDasharray: 4\n}), /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_9\",\n \"data-name\": \"Line 9\",\n x2: 12.558,\n y2: 6.71,\n transform: \"translate(14.401 14.259)\",\n fill: \"none\",\n stroke: \"#706969\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9228\",\n \"data-name\": \"Path 9228\",\n d: \"M389.3,349.412l.016-.008,12.831-6.214\",\n transform: \"translate(-387.896 -328.882)\",\n fill: \"none\",\n stroke: \"#706969\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2\n}), /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_10\",\n \"data-name\": \"Line 10\",\n x1: 0.182,\n y1: 14.14,\n transform: \"translate(14.123 0.054)\",\n fill: \"none\",\n stroke: \"#706969\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2\n})));\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10546\",\n \"data-name\": \"Path 10546\",\n d: \"M341.211,248.247a1.564,1.564,0,0,0-1.979-.674l-.233.075a1.13,1.13,0,0,0-.554,1.886c-.066,2.116-4.485,3.29-5.893,3.791-1.87.665-3.88,1.328-5.229,2.8-1.755,1.917-2.223,4.608-.157,6.435.568.5,1.493.017,1.179-.713a3.059,3.059,0,0,1,1.073-4.04c1.6,3.03,4.684,9.03,3.749,9.207a1.351,1.351,0,0,0,.11,2.687c2.911.271,3.828-2.452,3.133-4.673a22.178,22.178,0,0,0-5.212-8.269c.805-.382,1.7-.729,2.629-1.072.324,3.939,5.059,13.773,10.025,9.958,1.536-1.181-.387-3.161-1.961-2.16-1.268.808-5.221-6.469-6.672-8.314C339.027,253.752,342.644,252.146,341.211,248.247Z\",\n transform: \"translate(-246.89 321.105)\",\n fill: \"#fff\",\n opacity: 0.23\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2224\",\n \"data-name\": \"Group 2224\",\n transform: \"matrix(0.978, 0.208, -0.208, 0.978, 255.801, 536.158)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1964\",\n \"data-name\": \"Group 1964\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9238\",\n \"data-name\": \"Path 9238\",\n d: \"M8.909,48.324C.083,43.167-3.776,23.675,4.813,11.217S36.676-4.189,48.062,6.8s7.691,33.959-3,40.557S19,54.218,8.909,48.324Z\",\n transform: \"translate(0.979 0)\",\n fill: \"#6397ff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9239\",\n \"data-name\": \"Path 9239\",\n d: \"M2.679,0,0,12.86,12.456,3.405Z\",\n transform: \"translate(15.965 49.128)\",\n fill: \"#6397ff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9240\",\n \"data-name\": \"Path 9240\",\n d: \"M13.262,11.454A18.542,18.542,0,0,1,0,0S.067,5.023,3.483,8.071,13.262,11.454,13.262,11.454Z\",\n transform: \"translate(0 39.282)\",\n fill: \"#6397ff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9241\",\n \"data-name\": \"Path 9241\",\n d: \"M7.435,11.319A19.028,19.028,0,0,0,0,0S5.24,2.863,6.865,6.48,7.435,11.319,7.435,11.319Z\",\n transform: \"translate(49.143 4.921)\",\n fill: \"#6397ff\"\n})));\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2225\",\n \"data-name\": \"Group 2225\",\n transform: \"matrix(0.883, 0.469, -0.469, 0.883, 277.955, 552.918)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9221\",\n \"data-name\": \"Path 9221\",\n d: \"M12.576,1.758C10.836-.48,7.26-.169,4.794.457,1.8,1.217-.129,3.22.007,6.362a.823.823,0,0,0,1.645,0C1.828,3.956,5.07,2.808,7.159,3.093c1.054.144,2.993,1.12,3.14,2.426.069.612-1.167,1.75-1.609,2.178C6.881,9.441,4.559,10.42,3.229,12.664c-1.723,2.905-.712,7.72,3.278,7.67,1.315-.017,2.056-2.031.717-2.648-5.016-2.306,3.655-7.154,5.123-9.224C13.721,6.528,14.115,3.738,12.576,1.758Z\",\n transform: \"translate(0 0)\",\n fill: \"#ecf2ff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9222\",\n \"data-name\": \"Path 9222\",\n d: \"M2.738.242A1.789,1.789,0,0,0,.076,2.21,1.449,1.449,0,0,0,.5,2.874a1.564,1.564,0,0,0,1.128.7A1.816,1.816,0,0,0,2.738.242Z\",\n transform: \"translate(7.444 22.181)\",\n fill: \"#ecf2ff\"\n}));\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10543\",\n \"data-name\": \"Path 10543\",\n d: \"M49.947,74.369c0,4.851-11.173,8.767-24.974,8.767S0,79.219,0,74.369l.683-2.024L24.974,0l24.29,72.344Z\",\n transform: \"matrix(0.883, 0.469, -0.469, 0.883, 305.262, 640.6)\",\n fill: \"url(#linear-gradient-3)\"\n});\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2218\",\n \"data-name\": \"Group 2218\",\n transform: \"translate(259.788 623.36)\",\n opacity: 0.26\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2190\",\n \"data-name\": \"Group 2190\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9712\",\n \"data-name\": \"Path 9712\",\n d: \"M33.381,134.226c-1.175-.758-1.654-2.24-1.654-4.081h0c.01-3.971,2.2-9.977,6.054-16.039h0c4.911-7.653,10.761-12.908,14.653-12.973h0a3.137,3.137,0,0,1,1.71.466h0c1.174.76,1.65,2.238,1.651,4.078h0c-.007,3.969-2.2,9.975-6.05,16.042h0c-4.914,7.653-10.766,12.908-14.653,12.971h-.02a3.131,3.131,0,0,1-1.69-.465Zm5.125-19.656c-3.8,5.948-5.93,11.907-5.92,15.574h0c0,1.723.458,2.861,1.257,3.356h0a2.316,2.316,0,0,0,1.249.333h0c3.162.064,9.156-5.017,13.928-12.572h0c3.795-5.964,5.925-11.918,5.917-15.584h0c0-1.716-.458-2.854-1.255-3.353h0a2.231,2.231,0,0,0-1.247-.331h-.06c-3.175,0-9.131,5.061-13.868,12.577Z\",\n transform: \"translate(-24.425 -100.619)\",\n fill: \"#808bf2\",\n stroke: \"#4852b5\",\n strokeWidth: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9713\",\n \"data-name\": \"Path 9713\",\n d: \"M51.32,135.4c-3.9-.078-9.54-5.765-14.06-13.865h0c-3.263-5.922-5.059-11.7-5.064-15.662h0c0-2.2.553-3.922,1.925-4.693h0a3.042,3.042,0,0,1,1.5-.367h0c3.9.075,9.535,5.76,14.059,13.868h0l-.377.207-.378.209c-4.372-8.008-10.2-13.5-13.3-13.426h0a2.177,2.177,0,0,0-1.079.262h0c-.934.492-1.483,1.855-1.48,3.94h0c0,3.71,1.739,9.428,4.955,15.247h0c4.373,8,10.2,13.5,13.307,13.423h0a2.245,2.245,0,0,0,1.077-.261h0c.929-.5,1.483-1.861,1.48-3.943h0c0-3.708-1.738-9.425-4.957-15.242h0l.378-.209.377-.207c3.263,5.917,5.056,11.7,5.059,15.658h0c0,2.2-.549,3.917-1.92,4.7h0a3.033,3.033,0,0,1-1.477.365H51.32Z\",\n transform: \"translate(-24.13 -100.818)\",\n fill: \"#808bf2\",\n stroke: \"#4852b5\",\n strokeWidth: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9714\",\n \"data-name\": \"Path 9714\",\n d: \"M33.074,119.283c-3.457-1.236-5.773-2.908-5.827-5.113h0c.054-2.209,2.37-3.881,5.827-5.115h0a42.186,42.186,0,0,1,13.511-1.977h0v.861a41.425,41.425,0,0,0-13.227,1.925h0c-3.387,1.177-5.3,2.836-5.25,4.306h0c-.051,1.469,1.863,3.126,5.25,4.3h0A41.426,41.426,0,0,0,46.585,120.4h0a41.4,41.4,0,0,0,13.224-1.925h0c3.389-1.177,5.3-2.835,5.252-4.3h0c.052-1.47-1.863-3.13-5.252-4.306h0a41.4,41.4,0,0,0-13.224-1.925h0v-.861A42.179,42.179,0,0,1,60.1,109.055h0c3.456,1.234,5.775,2.906,5.826,5.115h0c-.051,2.205-2.37,3.878-5.826,5.113h0a42.228,42.228,0,0,1-13.511,1.976h0a42.235,42.235,0,0,1-13.511-1.976Z\",\n transform: \"translate(-27.247 -96.874)\",\n fill: \"#808bf2\",\n stroke: \"#4852b5\",\n strokeWidth: 1\n})), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9715\",\n \"data-name\": \"Path 9715\",\n d: \"M37.519,112.345A2.261,2.261,0,1,1,39.78,114.6,2.26,2.26,0,0,1,37.519,112.345Z\",\n transform: \"translate(-20.776 -94.981)\",\n fill: \"#808bf2\",\n stroke: \"#4852b5\",\n strokeWidth: 1\n}));\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"text\", {\n id: \"A\",\n transform: \"translate(315.066 642.081) rotate(11)\",\n fill: \"#dbdeff\",\n fontSize: 71,\n fontFamily: \"SegoeUI-Bold, Segoe UI\",\n fontWeight: 700,\n opacity: 0.25\n}, /*#__PURE__*/React.createElement(\"tspan\", {\n x: 0,\n y: 0\n}, \"A\"));\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2221\",\n \"data-name\": \"Group 2221\",\n transform: \"translate(357.864 598.354) rotate(157)\",\n opacity: 0.66\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7842\",\n \"data-name\": \"Path 7842\",\n d: \"M5.365.365l-.308,2.1A.318.318,0,0,0,5.23,2.8l1.9.942a.318.318,0,0,1-.088.6l-2.093.356a.318.318,0,0,0-.261.267l-.308,2.1a.318.318,0,0,1-.6.1L2.8,5.282a.318.318,0,0,0-.335-.166L.373,5.473a.318.318,0,0,1-.281-.536L1.576,3.419a.318.318,0,0,0,.054-.37L.645,1.168A.318.318,0,0,1,1.067.736l1.9.942a.318.318,0,0,0,.368-.062L4.823.1A.318.318,0,0,1,5.365.365Z\",\n transform: \"translate(39.105 0)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1736\",\n \"data-name\": \"Path 1736\",\n d: \"M4.323,2.161A2.161,2.161,0,1,1,2.162,0,2.161,2.161,0,0,1,4.323,2.161Z\",\n transform: \"translate(0 10.572)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1731\",\n \"data-name\": \"Path 1731\",\n d: \"M2.421,1.211A1.21,1.21,0,1,1,1.211,0,1.21,1.21,0,0,1,2.421,1.211Z\",\n transform: \"translate(68.398 6.748)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1732\",\n \"data-name\": \"Path 1732\",\n d: \"M3.458,1.729A1.729,1.729,0,1,1,1.729,0,1.729,1.729,0,0,1,3.458,1.729Z\",\n transform: \"translate(23.306 44.321)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_198\",\n \"data-name\": \"Ellipse 198\",\n cx: 1.643,\n cy: 1.643,\n rx: 1.643,\n ry: 1.643,\n transform: \"translate(16.196 11.194)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1733\",\n \"data-name\": \"Path 1733\",\n d: \"M2.594,1.3A1.3,1.3,0,1,1,1.3,0,1.3,1.3,0,0,1,2.594,1.3Z\",\n transform: \"translate(44.531 28.954)\",\n fill: \"#fff\"\n}));\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2226\",\n \"data-name\": \"Group 2226\",\n transform: \"translate(141.864 554.354) rotate(157)\",\n opacity: 0.66\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7842-2\",\n \"data-name\": \"Path 7842\",\n d: \"M5.365.365l-.308,2.1A.318.318,0,0,0,5.23,2.8l1.9.942a.318.318,0,0,1-.088.6l-2.093.356a.318.318,0,0,0-.261.267l-.308,2.1a.318.318,0,0,1-.6.1L2.8,5.282a.318.318,0,0,0-.335-.166L.373,5.473a.318.318,0,0,1-.281-.536L1.576,3.419a.318.318,0,0,0,.054-.37L.645,1.168A.318.318,0,0,1,1.067.736l1.9.942a.318.318,0,0,0,.368-.062L4.823.1A.318.318,0,0,1,5.365.365Z\",\n transform: \"translate(39.105 0)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1736-2\",\n \"data-name\": \"Path 1736\",\n d: \"M4.323,2.161A2.161,2.161,0,1,1,2.162,0,2.161,2.161,0,0,1,4.323,2.161Z\",\n transform: \"translate(0 10.572)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1731-2\",\n \"data-name\": \"Path 1731\",\n d: \"M2.421,1.211A1.21,1.21,0,1,1,1.211,0,1.21,1.21,0,0,1,2.421,1.211Z\",\n transform: \"translate(68.398 6.748)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1732-2\",\n \"data-name\": \"Path 1732\",\n d: \"M3.458,1.729A1.729,1.729,0,1,1,1.729,0,1.729,1.729,0,0,1,3.458,1.729Z\",\n transform: \"translate(23.306 44.321)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n id: \"Ellipse_198-2\",\n \"data-name\": \"Ellipse 198\",\n cx: 1.643,\n cy: 1.643,\n rx: 1.643,\n ry: 1.643,\n transform: \"translate(16.196 11.194)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1733-2\",\n \"data-name\": \"Path 1733\",\n d: \"M2.594,1.3A1.3,1.3,0,1,1,1.3,0,1.3,1.3,0,0,1,2.594,1.3Z\",\n transform: \"translate(44.531 28.954)\",\n fill: \"#fff\"\n}));\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2219\",\n \"data-name\": \"Group 2219\",\n transform: \"matrix(0.995, -0.105, 0.105, 0.995, -15.566, 629.949)\",\n opacity: 0.58\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9131\",\n \"data-name\": \"Path 9131\",\n d: \"M6.522,43.651,21.1,37.38,0,0Z\",\n transform: \"translate(20.329 0)\",\n fill: \"url(#linear-gradient-4)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9132\",\n \"data-name\": \"Path 9132\",\n d: \"M20.329,0,0,41.335l26.851,2.316Z\",\n transform: \"translate(0 0)\",\n fill: \"#6b99eb\"\n}));\n\nvar _ref18 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2220\",\n \"data-name\": \"Group 2220\",\n transform: \"translate(25.209 699.216) rotate(-19)\",\n opacity: 0.74\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1962\",\n \"data-name\": \"Group 1962\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9235\",\n \"data-name\": \"Path 9235\",\n d: \"M4.479.761a2.513,2.513,0,0,1,.761,1.863,2.506,2.506,0,0,1-.761,1.86,2.522,2.522,0,0,1-1.86.761A2.521,2.521,0,0,1,.761,4.484,2.535,2.535,0,0,1,0,2.624,2.542,2.542,0,0,1,.761.761,2.535,2.535,0,0,1,2.62,0,2.536,2.536,0,0,1,4.479.761Z\",\n transform: \"translate(6.21 0)\",\n fill: \"#7082ee\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9236\",\n \"data-name\": \"Path 9236\",\n d: \"M4.488.761a2.539,2.539,0,0,1,.761,1.86,2.547,2.547,0,0,1-.761,1.863,2.532,2.532,0,0,1-1.86.758A2.552,2.552,0,0,1,.761,4.484,2.547,2.547,0,0,1,0,2.621,2.54,2.54,0,0,1,.761.761,2.541,2.541,0,0,1,2.628,0,2.521,2.521,0,0,1,4.488.761Z\",\n transform: \"translate(6.678 17.174)\",\n fill: \"#7082ee\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_9237\",\n \"data-name\": \"Path 9237\",\n d: \"M2.115,4.691A2.222,2.222,0,0,1,.531,3.836,2.261,2.261,0,0,1,.016,2.1,2.285,2.285,0,0,1,.889.517,2.216,2.216,0,0,1,2.622.02C4.028.163,11.9.208,15.367.153a2.262,2.262,0,0,1,1.679.653,2.195,2.195,0,0,1,.722,1.641,2.335,2.335,0,0,1-.671,1.68,2.136,2.136,0,0,1-1.644.7C11.791,4.908,3.72,4.859,2.115,4.691Z\",\n transform: \"translate(0 8.486)\",\n fill: \"#7082ee\"\n})));\n\nvar _ref19 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2222\",\n \"data-name\": \"Group 2222\",\n transform: \"translate(-3.547 691.083) rotate(-7)\",\n opacity: 0.21\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7607\",\n \"data-name\": \"Path 7607\",\n d: \"M16.6,7.92s-8.938-3.644-9.1-5.133.1-4.682,8.088-1.266,11,3.879,9.955,7.246S17.987,13.5,17.987,13.5s4.208,3.986,1.235,8.834-8.786,6.431-14.341,3.7C-1.136,23.08-1.1,15.389,2.345,15.006s4.325,6,7.448,6.027,5.031-3.215,2.978-4.409S4.74,13.743,8.195,12,16.6,7.92,16.6,7.92Z\",\n transform: \"translate(0 0)\",\n fill: \"#5369c5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7608\",\n \"data-name\": \"Path 7608\",\n d: \"M1.513.157A5.459,5.459,0,0,1,3.341,4.794C2.9,8.286,1.094,9.674.173,9.948S2.3,8.593,2.636,4.827C2.887,2.044,1.587.913,1.344.67.659-.012.9-.154,1.513.157Z\",\n transform: \"translate(16.021 14.26)\",\n fill: \"#5369c5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7609\",\n \"data-name\": \"Path 7609\",\n d: \"M.19,0S5.025,1.354,5.937,2.963s-.615,3.6-2.571,4.45.211-.667,1.22-1.58,1.557-2.361.205-3.318C4.267,2.143-1.061.171.19,0Z\",\n transform: \"translate(19.091 3.737)\",\n fill: \"#5369c5\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_7610\",\n \"data-name\": \"Path 7610\",\n d: \"M.583.077s1.042.317.773.664S-.988-.34.583.077Z\",\n transform: \"translate(17.25 2.833)\",\n fill: \"#5369c5\"\n}));\n\nvar _ref20 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10544\",\n \"data-name\": \"Path 10544\",\n d: \"M10.006.062S.631.937.655,3.87,6.884,8,7.741,7.552-.677,31,.04,32.128,6.5,35.87,7.345,34.8,18.7,3.31,17.952,2.563,13.124-.4,10.006.062Z\",\n transform: \"matrix(0.914, -0.407, 0.407, 0.914, 364.688, 690.982)\",\n fill: \"#6666f3\",\n opacity: 0.39\n});\n\nvar _ref21 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_10545\",\n \"data-name\": \"Path 10545\",\n d: \"M12.213.831l-.7,4.783a.724.724,0,0,0,.4.753l4.332,2.145a.724.724,0,0,1-.2,1.362l-4.766.811a.723.723,0,0,0-.595.608l-.7,4.783a.724.724,0,0,1-1.357.231L6.376,12.026a.724.724,0,0,0-.762-.377L.848,12.46a.724.724,0,0,1-.639-1.219L3.588,7.783a.724.724,0,0,0,.123-.842L1.468,2.66a.723.723,0,0,1,.962-.984L6.762,3.82A.723.723,0,0,0,7.6,3.678L10.98.22A.724.724,0,0,1,12.213.831Z\",\n transform: \"translate(382.58 601.013) rotate(128)\",\n fill: \"#fff\",\n opacity: 0.61\n});\n\nvar SvgMascotMobile = function SvgMascotMobile(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 375,\n height: 302,\n viewBox: \"0 0 375 302\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Mask_Group_16\",\n \"data-name\": \"Mask Group 16\",\n transform: \"translate(0 -510)\",\n clipPath: \"url(#clip-path)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_3754\",\n \"data-name\": \"Group 3754\"\n }, _ref3, _ref4, _ref5, _ref6, _ref7, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_2223\",\n \"data-name\": \"Group 2223\",\n transform: \"translate(29.705 574.407)\",\n opacity: 0.58,\n style: {\n mixBlendMode: \"luminosity\",\n isolation: \"isolate\"\n }\n }, _ref8), _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21)));\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgMascotMobile, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/mascot-mobile.85990575.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport LoginForm from '../LoginForm/LoginForm';\nimport {\n LoginSectionContainer,\n LoginHeader,\n SignupContainer\n} from './LoginSection.styles';\n// Import assets\nimport { ReactComponent as Icon } from './homeIcon.svg';\nimport { ReactComponent as KoobitsLogo } from './Koobits Logo.svg';\nimport { ReactComponent as Stars } from './stars.svg';\nimport { ReactComponent as Mascot } from './mascot-mobile.svg';\nimport Partners from './icon-login-partners.svg';\nimport SchoolSignup from './icon-login-school-signup.svg';\nimport App from './icon-login-parent-app.svg';\n\nimport shootingStar from './Shooting Star.png';\n\nconst LoginSection = ({ isMobile }) => {\n return (\n <LoginSectionContainer>\n <div className=\"gradient-bg\" />\n <div className=\"login-header\">\n <LoginHeader>\n <div className=\"links\">\n <a href=\"https://www.koobits.com/franchise/centre\">\n <span className=\"link-text\">Partners</span>\n <span className=\"link-icon\">\n <img src={Partners} alt=\"partners-icon\" />\n </span>\n </a>\n <span>|</span>\n <a href=\"https://products.koobits.com/problemsums/school/\">\n <span className=\"link-text\">School Sign-up</span>\n <span className=\"link-icon\">\n <img src={SchoolSignup} alt=\"school-signup-icon\" />\n </span>\n </a>\n <span>|</span>\n <a href=\"https://www.koobits.com/parent/app\">\n <span className=\"link-text\">Download Parent App</span>\n <span className=\"link-icon\">\n <img src={App} alt=\"parents-app-icon\" />\n </span>\n </a>\n </div>\n <div className=\"home-page\">\n <Icon className=\"home-icon\" />\n <span className=\"home-text\">Homepage</span>\n </div>\n </LoginHeader>\n </div>\n <div className=\"brandname-container\">\n <KoobitsLogo className=\"brandname-logo\" alt=\"KooBits\" />\n <span className=\"brandname-divider\">|</span>\n <div className=\"brandname-tagline\">\n <span className=\"brandname-tagline-text\">Love Learning</span>\n <img src={shootingStar} alt=\"\" className=\"brandname-tagline-star\" />\n </div>\n </div>\n <LoginForm />\n <SignupContainer>\n If you don't have account, you can{' '}\n <span>\n <a href=\"https://products.koobits.com/problemsums/\">Sign up</a>\n </span>\n </SignupContainer>\n {isMobile ? <Mascot className=\"mascot\" /> : <Stars className=\"stars\" />}\n <footer>KooBits Learning Pte Ltd</footer>\n </LoginSectionContainer>\n );\n};\n\nexport default LoginSection;\n","import styled from 'styled-components';\n\nexport const LoginPage = styled.div`\n height: calc(100vh - 53px);\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n @media (max-width: 480px) {\n overflow: hidden;\n }\n`;\n","import React from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport CPSectionFallback from 'components/Login/CPSection/CPSectionFallback';\nimport CPSection from '../components/Login/CPSection/CPSection';\nimport LoginSection from '../components/Login/LoginSection/LoginSection';\nimport { LoginPage } from './LoginNew.styles';\n\nexport default function LoginNew() {\n const isMobile = useMediaQuery({\n query: '(max-width: 480px)'\n });\n\n return (\n <LoginPage>\n {isMobile ? (\n <LoginSection isMobile={isMobile} />\n ) : (\n <>\n <ErrorBoundary FallbackComponent={CPSectionFallback}>\n <CPSection isMobile={isMobile} />\n </ErrorBoundary>\n <LoginSection isMobile={isMobile} />\n </>\n )}\n </LoginPage>\n );\n}\n","import styled from 'styled-components';\n\nexport const PrintAssignmentPage = styled.div`\n padding: 0 1rem;\n\n .top {\n display: flex;\n width: 100%;\n padding: 0 2rem;\n margin-bottom: 2rem;\n justify-content: flex-end;\n }\n\n .question-item-body,\n .media-body {\n border-right: none;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n }\n\n @media all {\n .page-break {\n display: none;\n }\n }\n @media print {\n html,\n body {\n height: initial !important;\n overflow: visible !important;\n -webkit-print-color-adjust: exact;\n }\n .print-btn {\n display: none;\n }\n }\n\n @media print {\n .page-break {\n margin-bottom: 10mm;\n display: block;\n page-break-inside: auto;\n }\n .question-item-body {\n margin-top: 10mm;\n page-break-inside: avoid;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\nimport { isNil } from 'ramda';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport { McqOptionsList } from 'components/Question/QuestionContent.styles';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchSingleClassReportRequest,\n clearSingleClassReport\n} from 'stores/assignments/actions';\nimport Spinner from 'components/Shared/Spinner';\nimport { PrintAssignmentPage } from './PrintAssignment.styles';\n\nconst QuestionContent = ({ data, qnNumber }) => {\n const { Payload } = data;\n // States\n const [questionTitle, setQuestionTitle] = useState(null);\n\n const [mcqOptionsParsed, setMCQOptionsParsed] = useState([]);\n // Effects\n useEffect(() => {\n if (!isNil(Payload)) {\n const { title, mcqOptions } = questionParser({\n Payload\n });\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n setMCQOptionsParsed(renderOptions);\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.name === 'input') {\n return <input type=\"text\" />;\n }\n return domNode;\n }\n })\n );\n }\n }, [Payload]);\n return (\n <div className=\"question-item-body\">\n <div className=\"media\">\n <div className=\"media-body\">\n <div className=\"qs-inner\">\n <div className=\"qs-attr\">\n <div className=\"row\">\n <div className=\"col-md\">\n <div className=\"d-flex\">\n <span>Question {qnNumber}</span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"qs-text\">\n {questionTitle}\n {mcqOptionsParsed.length > 0 && (\n <McqOptionsList>\n {mcqOptionsParsed.map(option => (\n <li key={option}>{option}</li>\n ))}\n </McqOptionsList>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nclass PrintAssignmentContent extends React.Component {\n render() {\n return (\n <div>\n <div\n className=\"header\"\n style={{\n margin: '0.5rem 2rem'\n }}\n >\n <h2>{this.props.title}</h2>\n <div className=\"header-right\">\n <p>Name: ________________</p>\n <p>Class: ________________</p>\n </div>\n </div>\n <div\n className=\"questions\"\n style={{\n margin: '0 1rem 0 1rem'\n }}\n >\n {this.props.questions.length > 0 &&\n this.props.questions.map((question, index) => (\n <>\n <QuestionContent\n key={`qn-${question.Id}`}\n data={question}\n qnNumber={index + 1}\n />\n <div className=\"page-break\" />\n </>\n ))}\n </div>\n </div>\n );\n }\n}\n\nconst PrintAssignment = ({ match }) => {\n const homeworkID = parseInt(match.params.homeworkID, 10);\n const dispatch = useDispatch();\n const { singleClassReport, isSingleClassReportLoading } = useSelector(\n state => state.assignments\n );\n\n useEffect(() => {\n dispatch(\n fetchSingleClassReportRequest({\n homeworkID\n })\n );\n return () => {\n dispatch(clearSingleClassReport());\n };\n }, [dispatch, homeworkID]);\n return (\n <PrintAssignmentPage>\n <div className=\"top\">\n <Button\n variant=\"primary\"\n className=\"print-btn\"\n onClick={() => {\n window.print();\n }}\n >\n Print Assignment\n </Button>\n </div>\n {isSingleClassReportLoading && <Spinner />}\n {!isSingleClassReportLoading && singleClassReport.length > 0 && (\n <PrintAssignmentContent\n title={singleClassReport[0].HomeWorkTitle}\n questions={singleClassReport[0].Questions}\n />\n )}\n </PrintAssignmentPage>\n );\n};\n\nexport default PrintAssignment;\n","import React from 'react';\nimport IconWarning from 'assets/img/icon-warning.png';\n\nconst Forbidden = () => {\n return (\n <div className=\"forbidden-page\">\n <img src={IconWarning} alt=\"Warning\" className=\"forbidden-page__icon\" />\n <h1 className=\"forbidden-page__title\">Access Denied</h1>\n <p className=\"forbidden-page__desc\">\n Please contact your administrator for access.\n </p>\n </div>\n );\n};\n\nexport default Forbidden;\n","import React from 'react';\nimport { isNil } from 'ramda';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { Route, Redirect } from 'react-router-dom';\nimport Forbidden from 'pages/Forbidden';\nimport { useCookies } from 'react-cookie';\nimport BrowseContent from 'pages/BrowseContent/BrowseContent';\n\n// Helper\nconst checkIfLoggedIn = (env, cookies) => {\n let isLoggedIn;\n if (env === 'dev') {\n if (!isNil(localStorage.getItem('access_token'))) {\n isLoggedIn = true;\n } else if (isNil(cookies.sp_access_token)) {\n isLoggedIn = false;\n } else {\n isLoggedIn = true;\n localStorage.setItem('access_token', cookies.tp_access_token);\n localStorage.setItem('refresh_token', cookies.tp_refresh_token);\n }\n } // env = prod\n else if (!isNil(cookies.tp_access_token)) {\n isLoggedIn = true;\n localStorage.setItem('access_token', cookies.tp_access_token);\n localStorage.setItem('refresh_token', cookies.tp_refresh_token);\n } else if (!isNil(localStorage.getItem('access_token'))) {\n isLoggedIn = true;\n } else {\n isLoggedIn = false;\n }\n return isLoggedIn;\n};\n\nexport default function AuthenticatedRoute({\n component: Component,\n forAdmin,\n ...rest\n}) {\n const [cookies] = useCookies(['tp_access_token', 'tp_refresh_token']);\n const location = useLocation();\n const { isAdmin, isTrialExpired, isTrial } = useSelector(\n state => state.login\n );\n const env =\n process.env.NODE_ENV === 'development' ||\n process.env.REACT_APP_NETLIFY === 'true'\n ? 'dev'\n : 'prod';\n const isLoggedIn = checkIfLoggedIn(env, cookies);\n const v2Scope = `${process.env.REACT_APP_V2_MODULE_SCOPE}`\n .split(',')\n .map(s => s.trim());\n const loadPage = props => {\n const loginRoute =\n process.env.NODE_ENV === 'development' ||\n process.env.REACT_APP_NETLIFY === 'true'\n ? '/login'\n : '/members-login';\n if (isLoggedIn === false) {\n return (\n <Redirect\n push\n to={{ pathname: loginRoute, state: { from: props.location } }}\n />\n );\n }\n\n if (forAdmin && !isAdmin) {\n return <Forbidden />;\n }\n\n if (isTrialExpired && isTrial) {\n return <BrowseContent />;\n }\n if (\n v2Scope.some(scope => location.pathname.includes(scope)) &&\n env !== 'dev'\n ) {\n return window.location.replace(\n `${process.env.REACT_APP_V2_PUBLIC_URL}${location.pathname}`\n );\n }\n return <Component {...props} />; // eslint-disable-line\n };\n return (\n <Route\n {...rest} // eslint-disable-line\n render={loadPage}\n />\n );\n}\n","import styled from 'styled-components';\n\nexport const SidebarContainer = styled.div`\n .accordion {\n border-bottom: 1px solid rgba(94, 50, 80, 0.38);\n .report-category {\n color: #fff0b2;\n font-size: 16px;\n font-weight: 600;\n }\n .report-category-icon {\n margin-right: 10px;\n }\n }\n .sidebar-icon {\n margin-right: 10px;\n visibility:hidden;\n @media (max-width: 1024px) {\n visibility:visible;\n }\n }\n .list-group-item a {\n padding: 5px 0px 5px 15px;\n }\n .arrow {\n margin-left: 0px;\n }\n }\n`;\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport showArrow from 'assets/img/icon-report-collapse-show.svg';\nimport studentReport from 'assets/img/icon-report-student-report.svg';\nimport cardReportIcon from 'assets/img/icon-report-sidebar-card.svg';\nimport insightsIcon from 'assets/img/icon-report-sidebar-insight.svg';\nimport { SidebarContainer } from './AllReports.styles';\n\nexport default function StudentReportSidebar() {\n const { pathname } = useLocation();\n const isActivePath = path => path === pathname;\n return (\n <>\n <SidebarContainer>\n <div className=\"accordion\" id=\"student-report\">\n <div>\n <button\n type=\"button\"\n className=\"btn\"\n data-toggle=\"collapse\"\n data-target=\"#studentReport\"\n >\n <span className=\"report-category-icon\">\n <img src={studentReport} alt=\"icon-list\" />\n </span>\n <span className=\"report-category\">Student Report</span>\n </button>\n <img src={showArrow} alt=\"show\" className=\"arrow\" />\n <div\n className=\"collapse show\"\n id=\"studentReport\"\n data-parent=\"#student-report\"\n >\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/student-report') ? ' nav-link-active' : ''\n }`}\n to=\"/student-report\"\n >\n <img\n src={cardReportIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>Report Card</span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/student-report/insights')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/student-report/insights\"\n >\n <img\n src={insightsIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>Insights</span>\n </Link>\n </li>\n </div>\n </div>\n </div>\n </SidebarContainer>\n </>\n );\n}\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport showArrow from 'assets/img/icon-report-collapse-show.svg';\nimport schoolReport from 'assets/img/icon-report-school-report.svg';\nimport milestoneIcon from 'assets/img/icon-report-sidebar-milestone.svg';\nimport monthlyIcon from 'assets/img/icon-report-sidebar-monthly.svg';\nimport yearlyIcon from 'assets/img/icon-report-sidebar-yearly.svg';\nimport progressIcon from 'assets/img/icon-report-sidebar-progress.svg';\nimport insightsIcon from 'assets/img/icon-report-sidebar-insight.svg';\nimport { featureToggle } from 'constants/index';\nimport { useTranslation } from 'react-i18next';\nimport { SidebarContainer } from './AllReports.styles';\n\nexport default function SchoolReportSidebar() {\n const { pathname } = useLocation();\n const isActivePath = path => path === pathname;\n const { t } = useTranslation(['monthly-report']);\n return (\n <>\n <SidebarContainer>\n <div className=\"accordion\" id=\"school-report\">\n <div>\n <button\n type=\"button\"\n className=\"btn\"\n data-toggle=\"collapse\"\n data-target=\"#schoolReport\"\n >\n <span className=\"report-category-icon\">\n <img src={schoolReport} alt=\"icon-list\" />\n </span>\n <span className=\"report-category\">\n {t(`monthly-report:sidebar.schollReport`, 'School Report')}\n </span>\n </button>\n <img src={showArrow} alt=\"show\" className=\"arrow\" />\n <div\n className=\"collapse show\"\n id=\"schoolReport\"\n data-parent=\"#school-report\"\n >\n {featureToggle.reportSidebarOptions && (\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/school-report') ? ' nav-link-active' : ''\n }`}\n to=\"/school-report\"\n >\n <img\n src={milestoneIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(`monthly-report:sidebar.milestone`, 'Milestone')}\n </span>\n </Link>\n </li>\n )}\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/school-report/monthly-activity')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/school-report/monthly-activity\"\n >\n <img\n src={monthlyIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `monthly-report:sidebar.monthlyActivity`,\n 'Monthly Activity'\n )}\n </span>\n </Link>\n </li>\n {featureToggle.reportSidebarOptions && (\n <>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/school-report/yearly-activity')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/school-report/yearly-activity\"\n >\n <img\n src={yearlyIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `monthly-report:sidebar.yearlyActivity`,\n 'Yearly Activity'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/school-report/learning-progress')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/school-report/learning-progress\"\n >\n <img\n src={progressIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `monthly-report:sidebar.learningProgress`,\n 'Learning Progress'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/school-report/insights')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/school-report/insights\"\n >\n <img\n src={insightsIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(`monthly-report:sidebar.insights`, 'Insights')}\n </span>\n </Link>\n </li>\n </>\n )}\n </div>\n </div>\n </div>\n </SidebarContainer>\n </>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useLocation } from 'react-router-dom';\nimport classReport from 'assets/img/icon-report-class-report.svg';\nimport showArrow from 'assets/img/icon-report-collapse-show.svg';\nimport proficiencyIcon from 'assets/img/icon-report-sidebar-proficiency.svg';\nimport highScoreIcon from 'assets/img/icon-report-sidebar-high-score.svg';\nimport loginIcon from 'assets/img/icon-report-sidebar-login.svg';\nimport activeIcon from 'assets/img/icon-report-sidebar-active.svg';\nimport milestoneIcon from 'assets/img/icon-report-sidebar-milestone.svg';\nimport insightsIcon from 'assets/img/icon-report-sidebar-insight.svg';\nimport { featureToggle } from 'constants/index';\nimport { SidebarContainer } from './AllReports.styles';\n\nexport default function ClassReportSidebar() {\n const { t } = useTranslation(['proficiency-report']);\n const { pathname } = useLocation();\n const isActivePath = path =>\n path === '/report'\n ? pathname === path || pathname.includes('/proficiency-report')\n : pathname.includes(path);\n return (\n <>\n <SidebarContainer>\n <div className=\"accordion\" id=\"class-report\">\n <button\n type=\"button\"\n className=\"btn\"\n data-toggle=\"collapse\"\n data-target=\"#classReport\"\n >\n <span className=\"report-category-icon\">\n <img src={classReport} alt=\"icon-list\" />\n </span>\n <span className=\"report-category\">\n {t(`proficiency-report:sidebar.classReport`, 'Class Report')}\n </span>\n </button>\n <img src={showArrow} alt=\"show\" className=\"arrow\" />\n <div\n className=\"collapse show\"\n id=\"classReport\"\n data-parent=\"#class-report\"\n >\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report') ? ' nav-link-active' : ''\n }`}\n to=\"/report\"\n >\n <img\n src={proficiencyIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `proficiency-report:sidebar.proficiencyReport`,\n 'Proficiency Report'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('high-score-report') ? ' nav-link-active' : ''\n }`}\n to=\"/report/class-report/high-score-report\"\n >\n <img\n src={highScoreIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `proficiency-report:sidebar.highScoreReport`,\n 'High Score Report'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/class-report/login-report')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/class-report/login-report\"\n >\n <img src={loginIcon} alt=\"icon-list\" className=\"sidebar-icon\" />\n <span>\n {t(`proficiency-report:sidebar.loginReport`, 'Login Report')}\n </span>\n </Link>\n </li>\n {featureToggle.reportSidebarOptions && (\n <>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/class-report/active-report')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/class-report/active-report\"\n >\n <img\n src={activeIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(\n `proficiency-report:sidebar.activeReport`,\n 'Active Report'\n )}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/class-report/milestone')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/class-report/milestone\"\n >\n <img\n src={milestoneIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(`proficiency-report:sidebar.milestone`, 'Milestone')}\n </span>\n </Link>\n </li>\n <li className=\"list-group-item\">\n <Link\n className={`nav-link${\n isActivePath('/report/class-report/insights')\n ? ' nav-link-active'\n : ''\n }`}\n to=\"/report/class-report/insights\"\n >\n <img\n src={insightsIcon}\n alt=\"icon-list\"\n className=\"sidebar-icon\"\n />\n <span>\n {t(`proficiency-report:sidebar.insights`, 'Insights')}\n </span>\n </Link>\n </li>\n </>\n )}\n </div>\n </div>\n </SidebarContainer>\n </>\n );\n}\n","import React from 'react';\nimport { featureToggle } from 'constants/index';\nimport StudentReportSidebar from './StudentReport-Sidebar';\nimport SchoolReportSidebar from './SchoolReport-Sidebar';\nimport ClassReportSidebar from './ClassReport-Sidebar';\n\nexport default function SidebarReport() {\n return (\n <div className=\"sidebar-create-assign\">\n <ul className=\"sidebar-create-assign__ul list-group\">\n <ClassReportSidebar />\n {featureToggle.reportSidebarOptions && <StudentReportSidebar />}\n <SchoolReportSidebar />\n </ul>\n </div>\n );\n}\n","import styled, { css } from 'styled-components';\n\nexport const TopBarContainer = styled.div`\n background: white;\n position: fixed;\n right: 0;\n left: 195px;\n z-index: 100;\n @media (max-width: 1024px) {\n left: 56px;\n }\n @media (max-width: 639px) {\n left: 0px;\n }\n box-shadow: 0px 3px 6px rgba(129, 129, 129, 0.16);\n .title-container {\n display: flex;\n justify-content: center;\n }\n .title {\n margin-top: 20px;\n font-size: 20px;\n }\n .subtitle {\n font-size: 12px;\n margin-left: 10px;\n margin-top: 30px;\n span {\n color: rgba(255, 91, 0);\n }\n }\n .dropdown-container {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n margin: 5px 40px 12px;\n font-size: 14px;\n @media (max-width: 1038px) {\n font-size: 13px;\n }\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n .dropdown-container-group {\n display: flex;\n align-items: flex-end;\n }\n .class-group-dropdown {\n display: flex;\n .dropdown-menu {\n max-height: 70vh;\n overflow-y: scroll;\n }\n .level {\n width: 75px;\n margin-bottom: 0;\n }\n .class-group {\n width: 190px;\n margin-bottom: 0;\n @media (max-width: 882px) {\n width: 160px;\n }\n @media (max-width: 744px) {\n width: 140px;\n }\n }\n }\n .dropdown-label {\n margin-top: 5px;\n margin-bottom: 0;\n @media (max-width: 1038px) {\n margin-top: 8px;\n }\n }\n .report-level-dropdown {\n display: flex;\n margin-left: 20px;\n .level {\n width: 100px;\n margin-bottom: 0;\n }\n .syllabus {\n width: 194px;\n margin-bottom: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n position: relative;\n &::after {\n position: absolute;\n top: 50%;\n right: 6px;\n transform: translateY(-50%);\n }\n }\n @media (max-width: 744px) {\n margin-left: 10px;\n }\n }\n .dropdown-item:active {\n color: #212529;\n background-color: transparent;\n }\n\n .dropdown-custom {\n width: 160px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n margin-bottom: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n @media (max-width: 882px) {\n font-size: 12px;\n width: 120px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n width: 110px;\n }\n }\n`;\n\nexport const PrintButton = styled.div`\n margin-left: 50px;\n margin-bottom: 15px;\n @media (max-width: 864px) {\n margin-left: 0px;\n }\n button {\n border: 1px solid rgba(196, 196, 196);\n border-radius: 3px;\n font-size: 14px;\n padding: 8px;\n background: White;\n @media (max-width: 864px) {\n font-size: 10px;\n padding: 5px;\n }\n @media (max-width: 744px) {\n font-size: 8px;\n padding: 4px;\n }\n img {\n margin-right: 8px;\n @media (max-width: 744px) {\n height: 15px;\n width: 15px;\n margin-right: 5px;\n }\n }\n span {\n margin-left: 3px;\n img {\n @media (max-width: 744px) {\n height: 6px;\n width: 6px;\n }\n @media (max-width: 718px) {\n height: 4px;\n width: 4px;\n }\n }\n }\n }\n`;\n\nexport const SyllabusDropdown = styled.div`\n display: flex;\n font-size: 14px;\n position: fixed;\n top: 180px;\n right: 0px;\n left: 195px;\n padding: 20px 40px 5px 40px;\n z-index: 99;\n @media (max-width: 1024px) {\n left: 56px;\n }\n @media (max-width: 639px) {\n left: 0px;\n }\n @media (max-width: 1038px) {\n font-size: 13px;\n }\n @media (max-width: 882px) {\n font-size: 12px;\n }\n .stickyOff {\n display: flex;\n }\n .stickyOn {\n display: flex;\n position: fixed;\n background-color: #f1f1f1;\n z-index: 99;\n width: 100%;\n top: 180px;\n right: 0px;\n left: 195px;\n padding: 20px 40px 5px 40px;\n }\n .dropdown-label {\n margin-top: 5px;\n @media (max-width: 1038px) {\n margin-top: 8px;\n }\n }\n .syllabus-dropdown {\n .syllabus {\n width: 300px;\n @media (max-width: 882px) {\n width: 255px;\n }\n @media (max-width: 744px) {\n width: 215px;\n }\n }\n display: flex;\n }\n .dropdown-item:active {\n color: #212529;\n background-color: transparent;\n }\n .dropdown-toggle::after {\n position: relative;\n left: 10px;\n @media (max-width: 744px) {\n left: 3px;\n width: 6px;\n vertical-align: 1px;\n }\n }\n .sort-dropdown {\n display: flex;\n margin-left: 20px;\n flex: 1;\n }\n .dropdown-custom {\n width: 170px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n margin-bottom: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n @media (max-width: 882px) {\n font-size: 12px;\n width: 155px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n width: 115px;\n }\n }\n .rating-info {\n font-family: 'Muli', 'sans-serif';\n }\n .ratings-category {\n font-weight: 900;\n font-size: 14px;\n margin: 0 10px;\n img {\n width: 26px;\n margin-right: 2px;\n }\n .sub-text {\n color: #afacac;\n font-size: 11px;\n }\n }\n`;\nexport const DownloadCSV = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n`;\n\nexport const DownloadCSVModalBody = styled.div`\n background: white;\n min-width: 480px;\n position: relative;\n .title {\n color: #ff5b00;\n font-size: 18px;\n padding-top: 30px;\n padding-bottom: 28px;\n display: flex;\n justify-content: center;\n align-items: center;\n img {\n margin-right: 12px;\n }\n }\n .modal-content {\n color: #060606;\n padding: 0 16px 20px;\n }\n .action {\n display: flex;\n justify-content: center;\n padding: 18px 0 30px;\n .btn-cancel {\n border-color: #d5d5d5;\n color: #ff5b00;\n margin-right: 58px;\n }\n .btn-download {\n &:disabled {\n background-color: #d5d5d5;\n border-color: #d5d5d5;\n display: flex;\n align-items: center;\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n }\n .close {\n position: absolute;\n top: 16px;\n right: 28px;\n cursor: pointer;\n }\n`;\n\nexport const DownloadCSVSuccessBody = styled.div`\n background: white;\n min-width: 480px;\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 2rem 0 1rem;\n .success-title {\n font-size: 1.125rem;\n color: #000000;\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .success-description {\n margin: 2rem 0;\n color: #000000;\n }\n .btn-success-ok {\n width: 127px;\n color: #fffdfc;\n background: #5ed46a;\n margin-bottom: 1rem;\n ${({ fail }) =>\n fail &&\n css`\n background: #ef5c57;\n `}\n }\n .title {\n margin-bottom: 2rem;\n display: flex;\n justify-content: center;\n color: #ff5b00;\n font-size: 1.25rem;\n .action-icon {\n margin-right: 1rem;\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport { useDispatch } from 'react-redux';\nimport { isEmpty, isNil } from 'ramda';\nimport { Dropdown, Spinner, Button } from 'react-bootstrap';\n\nimport { HOTS_CURR_ID, AGE_GROUP } from 'constants/hotsCurr';\nimport reportServices from 'services/reports';\nimport {\n setSelectedClass,\n setReportLevel,\n setSyllabus,\n setClassLevel\n} from 'stores/report/actions';\n\nimport PopupModal from 'components/Shared/PopupModal';\n\nimport CloseIcon from 'assets/img/icon-closed.svg';\nimport downloadCSVIcon from 'assets/img/report/download-csv.svg';\nimport successIcon from 'assets/img/icon-manage-class-success-check.svg';\nimport errIcon from 'assets/img/icon-error.svg';\nimport {\n TopBarContainer,\n DownloadCSV,\n DownloadCSVModalBody,\n DownloadCSVSuccessBody\n} from './TopBar.styles';\n\nexport default function TopBar({\n type,\n classes,\n selectedClass,\n reportLevels,\n selectedLevel,\n curriculums,\n selectedSyllabus,\n selectedClassLevel,\n classLevels,\n detailType\n}) {\n const { t } = useTranslation(['proficiency-report', 'common']);\n const [openDownloadCsvModal, setOpenDownloadCsvModal] = useState(false);\n const [downloadIsLoading, setDownloadIsLoading] = useState(false);\n const [downloadSuccess, setDownloadSuccess] = useState(false);\n const [err, setErr] = useState(null);\n const dispatch = useDispatch();\n // For scroll behavior\n const isLeveless = isEmpty(selectedSyllabus.Levels);\n const selectedClassName =\n selectedClass && selectedClass.Name ? selectedClass.Name : '-';\n const getLevel = syll => {\n const isSelectedLeveless = isEmpty(syll.Levels);\n const checkLevelAvailable =\n syll && syll.Levels.find(item => item.ID === selectedLevel);\n if (!isSelectedLeveless) {\n if (isNil(checkLevelAvailable)) {\n return syll.Levels[0];\n // eslint-disable-next-line no-else-return\n } else {\n return { ID: selectedLevel };\n }\n // eslint-disable-next-line no-else-return\n } else {\n return { ID: -1 };\n }\n };\n const changeItemLevel = level => {\n dispatch(setClassLevel(level));\n // dispatch(setReportLevel(level));\n };\n const handleDownloadCsv = async () => {\n setDownloadIsLoading(true);\n setErr(null);\n const rawBody = {\n classID: selectedClass.ID,\n reportLevel: selectedLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n fileName: `${type} report.csv`\n };\n try {\n if (type === 'proficiency') {\n await reportServices.fetchDownloadProficiencyReport(rawBody);\n }\n if (type === 'highscore') {\n await reportServices.fetchDownloadHighScoreReport(rawBody);\n }\n setDownloadSuccess(true);\n } catch (error) {\n setErr(error.message);\n }\n setDownloadIsLoading(false);\n };\n\n const isHOTS = selectedSyllabus?.CurriculumID === HOTS_CURR_ID;\n\n return (\n <>\n <TopBarContainer>\n <div className=\"title-container\">\n <p className=\"title\">\n {type === 'proficiency'\n ? t(\n `proficiency-report:header.stuProReport`,\n 'Student Proficiency Report'\n )\n : t(\n `proficiency-report:sidebar.highScoreReport`,\n 'High Score Report'\n )}\n </p>\n <p className=\"subtitle\">\n {t(`proficiency-report:header.upTo`, 'up to ')}\n <span>{moment().format('DD/MM/YYYY HH:mm')}</span>\n </p>\n </div>\n <div className=\"dropdown-container\">\n <div className=\"dropdown-container-group\">\n <div className=\"class-group-dropdown\">\n <p className=\"dropdown-label\">\n {t(`proficiency-report:header.classGroup`, 'Class/Group from')}\n </p>\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom level\"\n >\n {`P${selectedClassLevel}`}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {classLevels &&\n classLevels.map(level => (\n <Dropdown.Item\n key={level}\n onClick={() => {\n const findLevel = reportLevels.find(\n le => le.ID === level\n );\n if (findLevel) {\n dispatch(setReportLevel(findLevel));\n }\n changeItemLevel(level);\n }}\n >{`P${level}`}</Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom class-group\"\n >\n {selectedClassName}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {classes.map(item => (\n <Dropdown.Item\n key={item.ID}\n onClick={() => {\n dispatch(setSelectedClass(item));\n }}\n >\n {item && item.Name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <div className=\"report-level-dropdown\">\n {!isLeveless && (\n <>\n <p className=\"dropdown-label\">\n {t(\n `proficiency-report:header.reportLevel`,\n 'Report Level from'\n )}\n </p>\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom level\"\n >\n {isHOTS\n ? `${t(`common:age`, 'Age')} ${\n AGE_GROUP[selectedLevel.ID]\n }`\n : `P${selectedLevel.ID} ${t(\n `proficiency-report:header.data`,\n 'Data'\n )}`}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {reportLevels.map(level => (\n <Dropdown.Item\n key={level.ID}\n onClick={() => {\n dispatch(setReportLevel(level));\n }}\n >\n {isHOTS\n ? `${t(`common:age`, 'Age')} ${AGE_GROUP[level.ID]}`\n : `P${level.ID} ${t(\n `proficiency-report:header.data`,\n 'Data'\n )}`}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </>\n )}\n {isLeveless && (\n <p className=\"dropdown-label\">\n {t(`proficiency-report:header.syllabus`, 'Syllabus')}\n </p>\n )}\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom syllabus\"\n >\n {selectedSyllabus.curriculumName}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {curriculums.map(syl => (\n <Dropdown.Item\n key={syl.CurriculumID}\n onClick={() => {\n dispatch(setSyllabus(syl));\n dispatch(setReportLevel(getLevel(syl)));\n }}\n >\n {syl.curriculumName}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n </div>\n {detailType === 'skill' && (\n <DownloadCSV\n onClick={() => {\n if (downloadSuccess) setDownloadSuccess(false);\n setOpenDownloadCsvModal(true);\n }}\n >\n <img src={downloadCSVIcon} alt=\"downloadCSVIcon\" />\n <span>{t(`common:download`, 'Download')}</span>\n </DownloadCSV>\n )}\n </div>\n </TopBarContainer>\n {detailType === 'skill' && (\n <PopupModal\n show={openDownloadCsvModal}\n hide={() => setOpenDownloadCsvModal(false)}\n >\n {downloadSuccess || err ? (\n <DownloadCSVSuccessBody fail={Boolean(err)}>\n <span className=\"success-title\">\n <img\n src={err ? errIcon : successIcon}\n alt={`${err ? 'Error' : 'Success'} icon`}\n style={{ marginRight: '0.5rem' }}\n />\n {err\n ? t('common:error', 'Error!')\n : t('common:success', 'Success!')}\n </span>\n <span className=\"success-description\">\n {err ||\n t(\n 'proficiency-report:downloadCSVModal.succesMsg',\n 'Report downloaded successfully!'\n )}\n </span>\n <Button\n variant=\"success-ok\"\n onClick={() => {\n setOpenDownloadCsvModal(false);\n }}\n >\n {t('common:ok', 'OK')}\n </Button>\n </DownloadCSVSuccessBody>\n ) : (\n <DownloadCSVModalBody>\n <img\n src={CloseIcon}\n alt=\"close\"\n className=\"close\"\n onClick={() => setOpenDownloadCsvModal(false)}\n />\n <div className=\"title\">\n <img src={downloadCSVIcon} alt=\"downloadCSVIcon\" />\n <span>\n {t(\n `proficiency-report:downloadCSVModal.title`,\n 'Download CSV'\n )}\n </span>\n </div>\n <div className=\"modal-content\">\n <p>\n {t(\n `proficiency-report:downloadCSVModal.content`,\n 'Do you want to download the raw data from'\n )}\n </p>\n <p>\n P{selectedClassLevel} {selectedClassName}{' '}\n {!isLeveless &&\n `- P${selectedLevel.ID} ${t(\n `proficiency-report:header.data`,\n 'Data'\n )} - ${selectedSyllabus.curriculumName}`}\n </p>\n </div>\n <hr />\n <div className=\"action\">\n <button\n type=\"button\"\n className=\"btn btn-cancel\"\n onClick={() => setOpenDownloadCsvModal(false)}\n >\n {t('common:cancel', 'Cancel')}\n </button>\n <button\n type=\"button\"\n className=\"btn btn-primary btn-download\"\n onClick={handleDownloadCsv}\n disabled={downloadIsLoading}\n >\n {downloadIsLoading ? (\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n />\n ) : (\n t('common:download', 'Download')\n )}\n </button>\n </div>\n </DownloadCSVModalBody>\n )}\n </PopupModal>\n )}\n </>\n );\n}\n","import styled, { css } from 'styled-components';\nexport const StyledSwitchContainer = styled.div`\n position: absolute;\n left: 226px;\n top: 230px;\n background: #dddddd;\n color: #484848;\n padding: 3px 4px;\n border-radius: 4px;\n display: flex;\n z-index: 1;\n @media (max-width: 1024px) {\n left: 84px;\n }\n`;\nexport const StyledSwitch = styled.div`\n min-width: 142px;\n min-height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 4px 0 0 4px;\n background: white;\n border: 1px solid #cbcbcb;\n border-right: none;\n :last-child {\n border-radius: 0 4px 4px 0;\n }\n @media (max-width: 1223px) {\n min-width: 100px;\n }\n ${({ active }) =>\n active &&\n css`\n background: #fff7f2;\n border: 1px solid #ff5b00;\n color: #ff5b00;\n `}\n`;\n","import styled from 'styled-components';\n\nexport const ReportPage = styled.div`\n padding-left: 195px;\n text-align: center;\n .error {\n width: 100%;\n text-align: center;\n margin-top: 2rem;\n }\n @media (max-width: 1024px) {\n padding-left: 55px;\n }\n @media (max-width: 639px) {\n padding-left: 0px;\n }\n`;\nexport const LoadingContainer = styled.div`\n position: relative;\n top: 250px;\n width: ${({ width }) => width || '100%'};\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Polygon_33\",\n \"data-name\": \"Polygon 33\",\n d: \"M5.241.886a1,1,0,0,1,1.519,0l3.826,4.463A1,1,0,0,1,9.826,7H2.174a1,1,0,0,1-.759-1.651Z\",\n transform: \"translate(12 7) rotate(180)\",\n fill: \"currentColor\"\n});\n\nvar SvgIconTriangle = function SvgIconTriangle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 7,\n viewBox: \"0 0 12 7\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconTriangle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-triangle.9d571edc.svg\";\nexport { ForwardRef as ReactComponent };","const calculatePercentageString = (num, total) => {\n const percentage = ((num / total) * 100).toFixed(1);\n return percentage.toString().concat('%');\n};\n\nexport default calculatePercentageString;\n","import styled from 'styled-components';\n\nexport const ProgressBarContainer = styled.div`\n .progress-visual-full {\n display: flex;\n height: ${props => props.height};\n border-radius: 50px;\n }\n\n .visualpart:first-of-type {\n border-top-left-radius: 25px;\n border-bottom-left-radius: 25px;\n }\n\n .visualpart:last-of-type {\n border-top-right-radius: 25px;\n border-bottom-right-radius: 25px;\n }\n`;\n\nexport const ProgressSection = styled.div`\n transition: width 2s;\n width: ${props => props.width};\n background: ${props => props.item.color};\n border: ${props =>\n props.singleWidth\n ? `1px solid ${props.item.borderColor}`\n : (props.index === 0 || props.isLastIndex) &&\n parseFloat(props.width.slice(0, -1)) <= 3.5\n ? `4px solid ${props.item.color}`\n : `1px solid ${props.item.borderColor}`};\n`;\n","import React, { useState, useEffect } from 'react';\nimport { ProgressBarContainer, ProgressSection } from './ProgressBar.styles';\n\nconst ProgressBar = ({ backgroundColor = '#e5e5e5', height, visualParts }) => {\n const [widths, setWidths] = useState(\n visualParts.map(item => {\n return item.percentage;\n })\n );\n\n // Update state on visualParts props change\n useEffect(() => {\n setWidths(\n visualParts.map(item => {\n return item.percentage;\n })\n );\n }, [visualParts]);\n\n return (\n <>\n <ProgressBarContainer height={height}>\n {visualParts.length === widths.length && (\n <div className=\"progress-visual-full\" style={{ backgroundColor }}>\n {visualParts.map((item, index) => {\n return (\n <ProgressSection\n index={index}\n isLastIndex={index === visualParts.length - 1}\n // eslint-disable-next-line react/no-array-index-key\n key={`${item.percentage}-${item.color}-${index}`}\n width={widths[index]}\n item={item}\n singleWidth={visualParts.length === 1}\n className=\"visualpart\"\n />\n );\n })}\n </div>\n )}\n </ProgressBarContainer>\n </>\n );\n};\n\nexport default ProgressBar;\n","import styled, { css } from 'styled-components';\nimport { proficiencyColors } from 'constants/index';\n\nexport const StudentTable = styled.div`\n margin: 0 30px;\n position: relative;\n top: 10.6rem;\n /* @media (max-width: 1365px) {\n top: 11rem;\n } */\n @media (max-width: 864px) {\n font-size: 12px;\n }\n td {\n vertical-align: middle;\n text-align: center;\n }\n .custom-td {\n width: 130px;\n }\n .table-bordered {\n tr {\n :nth-child(odd) {\n background-color: #ffffff;\n }\n :nth-child(even) {\n background-color: #f8f8f8;\n }\n position: relative;\n :hover:after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n box-shadow: 0px 0px 0px 2px #ff5b00 inset;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n }\n }\n\n .table thead th {\n border-top: none;\n border-bottom: none;\n padding: 0;\n }\n\n .student-name {\n vertical-align: middle;\n text-align: left;\n cursor: pointer;\n img {\n height: 40px;\n width: 40px;\n border-radius: 50%;\n margin-right: 10px;\n }\n }\n .progressbar {\n text-align: left;\n cursor: pointer;\n }\n\n .mastery {\n background-color: rgba(255, 245, 194, 0.67);\n }\n .competent {\n background-color: rgba(242, 255, 235, 0.34);\n }\n .developing {\n background-color: rgba(235, 252, 255, 0.31);\n }\n .beginning {\n background-color: rgba(255, 235, 235, 0.37);\n }\n .incomplete {\n background-color: rgba(255, 255, 255);\n }\n .gradeA {\n width: 300px;\n }\n .ratings-category {\n display: flex;\n align-items: center;\n font-weight: bold;\n font-size: 12px;\n justify-content: center;\n .grade {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n img {\n width: 28px;\n height: 28px;\n }\n .sub-text {\n color: #292929;\n font-size: 11px;\n margin-left: 3px;\n font-weight: normal;\n }\n .ratings-text {\n white-space: nowrap;\n font-size: 10px;\n transform: scale(0.9);\n }\n strong {\n color: #545454;\n }\n }\n`;\n\nexport const GradeACell = styled.div`\n display: flex;\n img {\n margin-right: 1rem;\n }\n strong {\n font-size: 1.125rem;\n color: #363636;\n }\n p {\n font-size: 0.6875rem;\n color: #828282;\n }\n .progress-part {\n flex-basis: 80%;\n }\n`;\nexport const SortButtonContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #e9e9e9;\n border-bottom: none;\n margin-top: 0.5rem;\n`;\nexport const SortButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: 50%;\n padding: 8px 0;\n background: ${({ active }) => (active ? '#9A9A9A' : 'white')};\n svg {\n path {\n fill: ${({ active }) => (active ? 'white' : '#DBDBDB')};\n }\n }\n ${({ type }) =>\n type === 'asc' &&\n css`\n border-left: 1px solid #e9e9e9;\n svg {\n transform: rotate(180deg);\n }\n `}\n`;\nexport const ProficiencySkills = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n .icon {\n width: 7px;\n height: 7px;\n margin-right: 4px;\n margin-top: 3px;\n background: ${props => proficiencyColors[props.proficiency].color};\n border-radius: 50%;\n border: solid 1px\n ${props => proficiencyColors[props.proficiency].borderColor};\n }\n img {\n margin-bottom: 5px;\n }\n .skill-title {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n span {\n font-weight: 500;\n text-align: center;\n }\n .prof-desc {\n font-size: 12px;\n transform: scale(0.8);\n white-space: nowrap;\n color: #727272;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport Avatar from 'assets/img/avatar.png';\nimport GradeAIcon from 'assets/img/icon-report-high-score-a.svg';\nimport GradeBIcon from 'assets/img/icon-report-high-score-b.svg';\nimport GradeCIcon from 'assets/img/icon-report-high-score-c.svg';\nimport GradeDIcon from 'assets/img/icon-report-high-score-d.svg';\nimport { ReactComponent as TriangleIcon } from 'assets/img/report/icon-triangle.svg';\nimport HighScoreIncompleteIcon from 'assets/img/icon-report-high-score-incomplete.svg';\nimport { proficiencyColors } from 'constants/index';\nimport calculatePercentageString from 'helpers/calculatePercentageString';\nimport { toggleReport } from 'stores/report/actions';\nimport ProgressBar from './ProgressBar';\nimport {\n StudentTable,\n GradeACell,\n ProficiencySkills,\n SortButtonContainer,\n SortButton\n} from './StudentTableReport.styles';\n\nexport const progressbarNumber = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: proficiencyColors.mastery.color,\n borderColor: proficiencyColors.mastery.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.competent.color,\n borderColor: proficiencyColors.competent.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.beginning.color,\n borderColor: proficiencyColors.beginning.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const proficiencyIndex = {\n Incomplete: 3,\n NeedImprove: 2,\n Passed: 1,\n Mastered: 0\n };\n\n for (const proficiency of Object.keys(data.CompetencyDetails)) {\n if (data.CompetencyDetails[proficiency] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data.CompetencyDetails[proficiency],\n data.TotalNoOfSkills\n );\n progressBarInput[\n proficiencyIndex[proficiency]\n ].percentage = percentageString;\n } else {\n progressBarInput[proficiencyIndex[proficiency]].percentage = '0%';\n }\n }\n return progressBarInput.filter(\n proficiency => proficiency.percentage !== '0%'\n );\n};\n\nconst parseHighScoreProgressBar = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: '#FBDA38',\n borderColor: '#BE9E00'\n },\n {\n percentage: '',\n color: '#D9ECFF',\n borderColor: '#ADBED0'\n },\n {\n percentage: '',\n color: '#EDD592',\n borderColor: '#D5AC6A'\n },\n {\n percentage: '',\n color: '#FFF4D5',\n borderColor: '#DDC6A3'\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const masteryIndex = {\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n Incomplete: 4\n };\n for (const mastery of Object.keys(data.MasteryLevels)) {\n if (data.MasteryLevels[mastery] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data.MasteryLevels[mastery],\n data.TotalNoOfSkills\n );\n progressBarInput[masteryIndex[mastery]].percentage = percentageString;\n } else {\n progressBarInput[masteryIndex[mastery]].percentage = '0%';\n }\n }\n return progressBarInput.filter(mastery => mastery.percentage !== '0%');\n};\nconst PROFICIENCY_THEAD = [\n {\n proficiencyType: 'mastery',\n number: `80-100`,\n title: 'mastery',\n upperCaseTitle: 'Mastery',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'Mastered'\n },\n {\n proficiencyType: 'competent',\n number: `60-79`,\n title: 'competent',\n upperCaseTitle: 'Competent',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'Passed'\n },\n {\n proficiencyType: 'beginning',\n number: `0-59`,\n title: 'beginning',\n upperCaseTitle: 'Beginning',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'NeedImprove'\n },\n {\n proficiencyType: 'incomplete',\n number: `< 10`,\n title: 'incomplete',\n upperCaseTitle: 'Incomplete',\n content: 'question',\n upperCaseContent: 'Question',\n columnName: 'Incomplete'\n }\n];\nconst HIGH_SCORE_THEAD = [\n {\n gradeType: 'A',\n icon: GradeAIcon,\n fraction: '9-10'\n },\n {\n gradeType: 'B',\n icon: GradeBIcon,\n fraction: '6-8'\n },\n {\n gradeType: 'C',\n icon: GradeCIcon,\n fraction: '4-5'\n },\n {\n gradeType: 'D',\n icon: GradeDIcon,\n fraction: '1-3'\n },\n {\n gradeType: 'Incomplete',\n icon: HighScoreIncompleteIcon\n }\n];\nexport default function StudentTableReport({\n type,\n data,\n isLoading,\n sortClick,\n sortDetail\n}) {\n const { t } = useTranslation(['proficiency-report']);\n const history = useHistory();\n const dispatch = useDispatch();\n\n return (\n <>\n <StudentTable>\n {!isLoading && (\n <table className=\"table table-responsive-sm\">\n <thead className=\"table-head\">\n <tr>\n {type === 'proficiency' && (\n <>\n <th colSpan=\"2\" />\n {PROFICIENCY_THEAD.map(\n ({\n proficiencyType,\n number,\n title,\n content,\n upperCaseTitle,\n upperCaseContent,\n columnName\n }) => (\n <th scope=\"col\" key={proficiencyType}>\n <ProficiencySkills proficiency={proficiencyType}>\n <div className=\"skill-title\">\n <div className=\"icon\" />\n <span>\n {t(\n `proficiency-report:legend.${title}`,\n upperCaseTitle\n )}\n </span>\n </div>\n <span className=\"prof-desc\">\n {t(\n `proficiency-report:legend.${content}`,\n upperCaseContent\n )}{' '}\n <b>{number}</b>\n </span>\n </ProficiencySkills>\n <SortButtonContainer>\n <SortButton\n active={\n sortDetail?.type === columnName &&\n sortDetail?.sortType === 'desc'\n }\n onClick={() =>\n sortClick({\n type: columnName,\n sortType: 'desc'\n })\n }\n >\n <TriangleIcon />\n </SortButton>\n <SortButton\n type=\"asc\"\n active={\n sortDetail?.type === columnName &&\n sortDetail?.sortType === 'asc'\n }\n onClick={() =>\n sortClick({ type: columnName, sortType: 'asc' })\n }\n >\n <TriangleIcon />\n </SortButton>\n </SortButtonContainer>\n </th>\n )\n )}\n </>\n )}\n {type === 'highscore' && (\n <>\n <th scope=\"col\" colSpan={2} />\n {HIGH_SCORE_THEAD.map(({ gradeType, icon, fraction }) => {\n return (\n <th scope=\"col\" key={gradeType}>\n <span className=\"ratings-category\">\n <span className=\"grade\">\n <img src={icon} alt={`Grade ${gradeType}`} />\n <span className=\"ratings-text\">\n {fraction ? (\n <>\n {fraction}\n <span className=\"sub-text\">\n {' '}\n / 10\n {t(\n `proficiency-report:classReport.qnPerSkill`,\n ' Qn per skill'\n )}\n </span>\n </>\n ) : (\n <strong>\n {t(\n `proficiency-report:classReport.toBeComplete`,\n 'To be completed'\n )}\n </strong>\n )}\n </span>\n </span>\n </span>\n <SortButtonContainer>\n <SortButton\n active={\n sortDetail?.type === gradeType &&\n sortDetail?.sortType === 'desc'\n }\n onClick={() =>\n sortClick({\n type: gradeType,\n sortType: 'desc'\n })\n }\n >\n <TriangleIcon />\n </SortButton>\n <SortButton\n type=\"asc\"\n active={\n sortDetail?.type === gradeType &&\n sortDetail?.sortType === 'asc'\n }\n onClick={() =>\n sortClick({ type: gradeType, sortType: 'asc' })\n }\n >\n <TriangleIcon />\n </SortButton>\n </SortButtonContainer>\n </th>\n );\n })}\n </>\n )}\n </tr>\n </thead>\n <tbody className=\"table-bordered \">\n {type === 'proficiency' && (\n <>\n {data &&\n data.map(item => (\n <tr className=\"student-row\" key={item.UserId}>\n <td\n className=\"student-name\"\n onClick={() => {\n history.push(\n `/report/proficiency-report/${item.UserId}`\n );\n dispatch(toggleReport('proficiency'));\n }}\n >\n <img\n onError={e => {\n e.target.src = Avatar;\n }}\n src={item.ProfilePictureUrl}\n alt=\"profile\"\n />\n <strong>{item.Fullname}</strong>\n </td>\n <td\n className=\"progressbar\"\n onClick={() => {\n history.push(\n `/report/proficiency-report/${item.UserId}`\n );\n dispatch(toggleReport('proficiency'));\n }}\n >\n <ProgressBar\n height=\"16px\"\n visualParts={progressbarNumber(item)}\n />\n <p>\n <strong>{item.CompetencyDetails.Mastered}</strong>{' '}\n {`${t(\n `proficiency-report:classReport.outOf`,\n ' out of '\n )} ${item.TotalNoOfSkills} ${\n item.TotalNoOfSkills >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )\n } ${t(\n `proficiency-report:classReport.mastery`,\n 'mastery'\n )}`}\n </p>\n </td>\n <td className=\"mastery custom-td\">\n <strong>{item.CompetencyDetails.Mastered}</strong>\n {item.CompetencyDetails.Mastered >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"competent custom-td\">\n <strong>{item.CompetencyDetails.Passed}</strong>\n {item.CompetencyDetails.Passed >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"beginning custom-td\">\n <strong>{item.CompetencyDetails.NeedImprove}</strong>\n {item.CompetencyDetails.NeedImprove >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"incomplete custom-td\">\n <strong>{item.CompetencyDetails.Incomplete}</strong>\n {item.CompetencyDetails.Incomplete >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n </tr>\n ))}\n </>\n )}\n {type === 'highscore' && (\n <>\n {data &&\n data.map(item => (\n <tr className=\"student-row\" key={item.UserId}>\n <td\n className=\"student-name\"\n onClick={() => {\n history.push(\n `/report/class-report/high-score-report/${item.UserId}`\n );\n dispatch(toggleReport('high'));\n }}\n >\n <img\n onError={e => {\n e.target.src = Avatar;\n }}\n src={item.ProfilePictureUrl}\n alt=\"profile\"\n />\n <strong>{item.Fullname}</strong>\n </td>\n <td\n className=\"progressbar\"\n onClick={() => {\n history.push(\n `/report/class-report/high-score-report/${item.UserId}`\n );\n dispatch(toggleReport('high'));\n }}\n >\n <GradeACell>\n {item.MasteryLevels.A > 0 ? (\n <img src={GradeAIcon} alt=\"Grade A\" />\n ) : (\n <img\n src={HighScoreIncompleteIcon}\n alt=\"No skills with Grade A\"\n />\n )}\n <div className=\"progress-part\">\n <p>\n <strong>{item.MasteryLevels.A}</strong>\n {` ${t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )} ${t(\n `proficiency-report:classReport.outOf`,\n ' out of '\n )}${item.TotalNoOfSkills} ${t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )}`}\n </p>\n <ProgressBar\n height=\"9px\"\n visualParts={parseHighScoreProgressBar(item)}\n />\n </div>\n </GradeACell>\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.A}</strong>\n {item.MasteryLevels.A >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.B}</strong>\n {item.MasteryLevels.B >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.C}</strong>\n {item.MasteryLevels.C >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.D}</strong>\n {item.MasteryLevels.D >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.Incomplete}</strong>\n {item.MasteryLevels.Incomplete >= 2\n ? t(\n `proficiency-report:classReport.skills`,\n 'skills'\n )\n : t(\n `proficiency-report:classReport.skill`,\n 'skill'\n )}\n </td>\n </tr>\n ))}\n </>\n )}\n </tbody>\n </table>\n )}\n </StudentTable>\n </>\n );\n}\n","import styled, { css } from 'styled-components';\n\nexport const NoReportStyle = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0 30px;\n position: relative;\n top: 13rem;\n color: #555555;\n font-size: 18px;\n img {\n width: 200px;\n }\n .no-report-title {\n font-weight: 900;\n margin: 30px 0 15px;\n }\n ${({ detail }) => {\n if (detail) {\n return css`\n width: calc(80% - 2rem);\n `;\n }\n }}\n`;\n","import React, { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport noReport from 'assets/img/no-reports.svg';\nimport { NoReportStyle } from './NoReport.styles';\n\nconst NoReport = ({ detail, message }) => {\n const { t } = useTranslation(['proficiency-report']);\n return (\n <NoReportStyle detail={detail}>\n <img src={noReport} alt=\"no-report-found\" />\n <div className=\"no-report-title\">\n {t(`proficiency-report:noReports.title`, 'No reports found')}\n </div>\n {!detail && !message && (\n <div>\n {t(\n `proficiency-report:noReports.desc`,\n 'Select another Class/Group to show reports.'\n )}\n </div>\n )}\n {message && <div>{message}</div>}\n </NoReportStyle>\n );\n};\n\nexport default memo(NoReport);\n","import React, { useState, useCallback } from 'react';\nimport StudentTable from 'components/Report/StudentTableReport';\nimport NoReport from 'components/Report/NoReport';\nimport cloneDeep from 'lodash.clonedeep';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fetchClassProficiencyReportRequest } from 'stores/report/actions';\n\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport Spinner from 'components/Shared/Spinner';\nimport { isEmpty, isNil } from 'ramda';\nimport { LoadingContainer } from './ReportPage.styles';\n\nconst ProficiencyReportByStudent = ({ visible }) => {\n const dispatch = useDispatch();\n // Redux States\n const {\n classProficiencyReport,\n selectedClass,\n reportLevel,\n selectedSyllabus,\n isLoading: reportsLoading\n } = useSelector(state => state.reports);\n const [sortDetail, setSortDetail] = useState(null);\n const isLeveless = isEmpty(selectedSyllabus.Levels);\n\n const sortedData = useCallback(() => {\n if (sortDetail) {\n const { type, sortType } = sortDetail;\n const hasData = classProficiencyReport.some(\n datum => datum.CompetencyDetails[type] > 0\n );\n if (hasData) {\n const result = cloneDeep(classProficiencyReport).sort((a, b) => {\n const c =\n a.CompetencyDetails[type] - b.CompetencyDetails[type] > 0 ? 1 : -1;\n return sortType === 'asc' ? c : c * -1;\n });\n return result;\n }\n return classProficiencyReport;\n }\n return classProficiencyReport;\n }, [classProficiencyReport, sortDetail]);\n\n useDeepCompareEffect(() => {\n if (selectedClass && selectedSyllabus && !isNil(reportLevel)) {\n dispatch(\n fetchClassProficiencyReportRequest({\n classID: selectedClass.ID,\n reportLevel: isLeveless ? -1 : reportLevel.ID,\n syllabusID: selectedSyllabus.CurriculumID\n })\n );\n }\n }, [dispatch, reportLevel, selectedClass, selectedSyllabus]);\n const handleSortClick = ({ type, sortType }) => {\n setSortDetail(prev => {\n if (prev) {\n return prev.type === type && prev.sortType === sortType\n ? null\n : { type, sortType };\n }\n return { type, sortType };\n });\n };\n const renderResult = () => {\n if (reportsLoading) {\n return (\n <LoadingContainer>\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (classProficiencyReport?.length) {\n return (\n <StudentTable\n type=\"proficiency\"\n data={sortedData()}\n isLoading={reportsLoading}\n sortClick={handleSortClick}\n sortDetail={sortDetail}\n />\n );\n }\n return <NoReport />;\n };\n return visible ? renderResult() : null;\n};\n\nexport default ProficiencyReportByStudent;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Polygon_29\",\n \"data-name\": \"Polygon 29\",\n d: \"M6.136,1.481a1,1,0,0,1,1.728,0L13.123,10.5a1,1,0,0,1-.864,1.5H1.741a1,1,0,0,1-.864-1.5Z\",\n transform: \"translate(0 7) rotate(-30)\",\n fill: \"#ae80b4\"\n});\n\nvar SvgIconSkillSelect = function SvgIconSkillSelect(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18.124,\n height: 17.392,\n viewBox: \"0 0 18.124 17.392\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconSkillSelect, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-skill-select.492fbc1a.svg\";\nexport { ForwardRef as ReactComponent };","import styled, { css } from 'styled-components';\nimport { proficiencyColors } from 'constants/index';\n\nexport const StudentTable = styled.div`\n margin: -3.2rem 1rem 0;\n top: 10.6rem;\n width: calc(80% - 2rem);\n ${({ type }) => {\n if (type === 'highscore') {\n return css`\n margin: -3.7rem 1rem 0;\n `;\n }\n }}\n @media (max-width: 864px) {\n font-size: 12px;\n }\n td {\n vertical-align: middle;\n text-align: center;\n }\n .custom-td {\n width: 90px;\n }\n .table-bordered {\n tr {\n :nth-child(odd) {\n background-color: #ffffff;\n }\n :nth-child(even) {\n background-color: #f8f8f8;\n }\n position: relative;\n :hover:after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n box-shadow: 0px 0px 0px 2px #ff5b00 inset;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n }\n }\n\n .table thead th {\n border-top: none;\n border-bottom: none;\n padding: 0;\n }\n\n .skill {\n text-align: left;\n max-width: 230px;\n border-left: none;\n cursor: pointer;\n }\n .skill-id {\n white-space: nowrap;\n text-align: left;\n font-weight: bold;\n border-right: none;\n cursor: pointer;\n max-width: 60px;\n padding: 0.75rem 0 0.75rem 20px;\n }\n .progressbar {\n width: 250px;\n text-align: left;\n }\n .student-row:hover {\n border: 2px solid #ff5b00;\n }\n .mastery {\n background-color: rgba(255, 245, 194, 0.67);\n }\n .competent {\n background-color: rgba(242, 255, 235, 0.34);\n }\n .developing {\n background-color: rgba(235, 252, 255, 0.31);\n }\n .beginning {\n background-color: rgba(255, 235, 235, 0.37);\n }\n .incomplete {\n background-color: rgba(255, 255, 255);\n }\n .gradeA {\n width: 300px;\n }\n .ratings-category {\n display: flex;\n align-items: center;\n font-weight: bold;\n font-size: 12px;\n justify-content: center;\n .grade {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n img {\n width: 28px;\n height: 28px;\n }\n .sub-text {\n color: #292929;\n font-size: 11px;\n margin-left: 3px;\n font-weight: normal;\n }\n .ratings-text {\n white-space: nowrap;\n font-size: 10px;\n transform: scale(0.9);\n }\n }\n`;\n\nexport const GradeAHead = styled.span`\n display: flex;\n align-items: center;\n font-weight: bold;\n font-size: 12px;\n justify-content: flex-end;\n padding-right: 15px;\n .grade {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n img {\n width: 28px;\n height: 28px;\n }\n .sub-text {\n color: #afacac;\n font-size: 11px;\n margin-left: 3px;\n font-weight: normal;\n }\n`;\n\nexport const SortButtonContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #e9e9e9;\n border-bottom: none;\n margin-top: 0.5rem;\n`;\nexport const SortButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: 50%;\n padding: 8px 0;\n background: ${({ active }) => (active ? '#9A9A9A' : 'white')};\n svg {\n path {\n fill: ${({ active }) => (active ? 'white' : '#DBDBDB')};\n }\n }\n ${({ type }) =>\n type === 'asc' &&\n css`\n border-left: 1px solid #e9e9e9;\n svg {\n transform: rotate(180deg);\n }\n `}\n`;\nexport const ProficiencySkills = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n .icon {\n width: 7px;\n height: 7px;\n margin-right: 4px;\n margin-top: 3px;\n background: ${props => proficiencyColors[props.proficiency].color};\n border-radius: 50%;\n border: solid 1px\n ${props => proficiencyColors[props.proficiency].borderColor};\n }\n img {\n margin-bottom: 5px;\n }\n .skill-title {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n span {\n font-weight: 500;\n text-align: center;\n }\n .prof-desc {\n font-size: 12px;\n transform: scale(0.8);\n white-space: nowrap;\n color: #727272;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport GradeAIcon from 'assets/img/icon-report-high-score-a.svg';\nimport GradeBIcon from 'assets/img/icon-report-high-score-b.svg';\nimport GradeCIcon from 'assets/img/icon-report-high-score-c.svg';\nimport GradeDIcon from 'assets/img/icon-report-high-score-d.svg';\nimport { ReactComponent as TriangleIcon } from 'assets/img/report/icon-triangle.svg';\nimport HighScoreIncompleteIcon from 'assets/img/icon-report-high-score-incomplete.svg';\nimport { proficiencyColors } from 'constants/index';\nimport calculatePercentageString from 'helpers/calculatePercentageString';\nimport { toggleReport } from 'stores/report/actions';\nimport ProgressBar from './ProgressBar';\nimport {\n StudentTable,\n ProficiencySkills,\n SortButtonContainer,\n SortButton\n} from './SkillTableReport.styles';\n\nconst progressbarNumber = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: proficiencyColors.mastery.color,\n borderColor: proficiencyColors.mastery.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.competent.color,\n borderColor: proficiencyColors.competent.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.beginning.color,\n borderColor: proficiencyColors.beginning.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const proficiencyIndex = {\n Incomplete: 3,\n NeedImprove: 2,\n Passed: 1,\n Mastered: 0\n };\n for (const proficiency of Object.keys(data.CompetencyDetails)) {\n if (data.CompetencyDetails[proficiency] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data.CompetencyDetails[proficiency],\n data.TotalNoOfStudents\n );\n progressBarInput[\n proficiencyIndex[proficiency]\n ].percentage = percentageString;\n } else {\n progressBarInput[proficiencyIndex[proficiency]].percentage = '0%';\n }\n }\n return progressBarInput.filter(\n proficiency => proficiency.percentage !== '0%'\n );\n};\n\nconst parseHighScoreProgressBar = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: '#FBDA38',\n borderColor: '#BE9E00'\n },\n {\n percentage: '',\n color: '#D9ECFF',\n borderColor: '#ADBED0'\n },\n {\n percentage: '',\n color: '#EDD592',\n borderColor: '#D5AC6A'\n },\n {\n percentage: '',\n color: '#FFF4D5',\n borderColor: '#DDC6A3'\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const masteryIndex = {\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n Incomplete: 4\n };\n for (const mastery of Object.keys(data.MasteryLevels)) {\n if (data.MasteryLevels[mastery] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data.MasteryLevels[mastery],\n data.TotalNoOfUsers\n );\n progressBarInput[masteryIndex[mastery]].percentage = percentageString;\n } else {\n progressBarInput[masteryIndex[mastery]].percentage = '0%';\n }\n }\n return progressBarInput.filter(mastery => mastery.percentage !== '0%');\n};\nconst PROFICIENCY_THEAD = [\n {\n type: 'mastery',\n title: 'mastery',\n upperCaseTitle: 'Mastery',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'Mastered'\n },\n {\n type: 'competent',\n title: 'competent',\n upperCaseTitle: 'Competent',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'Passed'\n },\n {\n type: 'beginning',\n title: 'beginning',\n upperCaseTitle: 'Beginning',\n content: 'proficiency',\n upperCaseContent: 'Proficiency',\n columnName: 'NeedImprove'\n },\n {\n type: 'incomplete',\n title: 'incomplete',\n upperCaseTitle: 'Incomplete',\n content: 'question',\n upperCaseContent: 'Question',\n columnName: 'Incomplete'\n }\n];\nconst HIGH_SCORE_THEAD = [\n {\n gradeType: 'A',\n icon: GradeAIcon,\n fraction: '9-10'\n },\n {\n gradeType: 'B',\n icon: GradeBIcon,\n fraction: '6-8'\n },\n {\n gradeType: 'C',\n icon: GradeCIcon,\n fraction: '4-5'\n },\n {\n gradeType: 'D',\n icon: GradeDIcon,\n fraction: '1-3'\n },\n {\n gradeType: 'Incomplete',\n icon: HighScoreIncompleteIcon\n }\n];\nexport default function SkillTableReport({\n type,\n data,\n isLoading,\n sortClick,\n sortDetail\n}) {\n const { t } = useTranslation(['proficiency-report']);\n const history = useHistory();\n const dispatch = useDispatch();\n const handleClick = item => {\n if (type === 'proficiency') {\n history.push(\n `/report/proficiency-report/skill/${item.TopicId}/${item.SkillId}`\n );\n dispatch(toggleReport('proficiency'));\n } else if (type === 'highscore') {\n history.push(\n `/report/high-score-report/skill/${item.TopicId}/${item.SkillId}`\n );\n dispatch(toggleReport('high'));\n }\n };\n return (\n <>\n <StudentTable type={type}>\n {!isLoading && (\n <table className=\"table table-responsive-sm\">\n <thead className=\"table-head\">\n <tr>\n {type === 'proficiency' && (\n <>\n <th colSpan=\"3\" />\n {PROFICIENCY_THEAD.map(\n ({ type, title, upperCaseTitle, columnName }) => (\n <th scope=\"col\" key={type} className=\"proficiency-th\">\n <ProficiencySkills proficiency={type}>\n <div className=\"skill-title\">\n <div className=\"icon\" />\n <span>\n {t(\n `proficiency-report:legend.${title}`,\n upperCaseTitle\n )}\n </span>\n </div>\n </ProficiencySkills>\n <SortButtonContainer>\n <SortButton\n active={\n sortDetail?.type === columnName &&\n sortDetail?.sortType === 'desc'\n }\n onClick={() =>\n sortClick({\n type: columnName,\n sortType: 'desc'\n })\n }\n >\n <TriangleIcon />\n </SortButton>\n <SortButton\n type=\"asc\"\n active={\n sortDetail?.type === columnName &&\n sortDetail?.sortType === 'asc'\n }\n onClick={() =>\n sortClick({ type: columnName, sortType: 'asc' })\n }\n >\n <TriangleIcon />\n </SortButton>\n </SortButtonContainer>\n </th>\n )\n )}\n </>\n )}\n {type === 'highscore' && (\n <>\n <th scope=\"col\" colSpan={3} />\n {HIGH_SCORE_THEAD.map(({ gradeType, icon }) => {\n return (\n <th scope=\"col\" key={gradeType}>\n <span className=\"ratings-category\">\n <span className=\"grade\">\n <img src={icon} alt={`Grade ${gradeType}`} />\n </span>\n </span>\n <SortButtonContainer>\n <SortButton\n active={\n sortDetail?.type === gradeType &&\n sortDetail?.sortType === 'desc'\n }\n onClick={() =>\n sortClick({\n type: gradeType,\n sortType: 'desc'\n })\n }\n >\n <TriangleIcon />\n </SortButton>\n <SortButton\n type=\"asc\"\n active={\n sortDetail?.type === gradeType &&\n sortDetail?.sortType === 'asc'\n }\n onClick={() =>\n sortClick({ type: gradeType, sortType: 'asc' })\n }\n >\n <TriangleIcon />\n </SortButton>\n </SortButtonContainer>\n </th>\n );\n })}\n </>\n )}\n </tr>\n </thead>\n <tbody className=\"table-bordered \">\n {type === 'proficiency' && (\n <>\n {data &&\n data.map(item => (\n <tr className=\"skill-row\" key={item.SkillId}>\n <td\n className=\"skill-id\"\n onClick={() => handleClick(item)}\n >\n {t(\n `proficiency-report:studentReportSide.skillNumber`,\n { number: item.Display },\n `Skill ${item.Display}`\n )}\n </td>\n <td\n className=\"skill\"\n onClick={() => handleClick(item)}\n title={item.SkillName}\n >\n {item.SkillName}\n </td>\n <td className=\"progressbar\">\n <ProgressBar\n height=\"16px\"\n visualParts={progressbarNumber(item)}\n />\n <p>\n <strong>{item.CompetencyDetails.Mastered}</strong>{' '}\n {`/${item.TotalNoOfStudents} ${\n item.TotalNoOfStudents >= 2\n ? t(\n `proficiency-report:classReport.students`,\n 'students'\n )\n : t(\n `proficiency-report:classReport.student`,\n 'student'\n )\n } ${t(\n `proficiency-report:classReport.mastery`,\n 'Mastery'\n )}`}\n </p>\n </td>\n <td className=\"mastery custom-td\">\n <strong>{item.CompetencyDetails.Mastered}</strong>\n </td>\n <td className=\"competent custom-td\">\n <strong>{item.CompetencyDetails.Passed}</strong>\n </td>\n <td className=\"beginning custom-td\">\n <strong>{item.CompetencyDetails.NeedImprove}</strong>\n </td>\n <td className=\"incomplete custom-td\">\n <strong>{item.CompetencyDetails.Incomplete}</strong>\n </td>\n </tr>\n ))}\n </>\n )}\n {type === 'highscore' && (\n <>\n {data &&\n data.map(item => (\n <tr className=\"skill-row\" key={item.SkillId}>\n <td\n className=\"skill-id\"\n onClick={() => handleClick(item)}\n >\n {t(\n `proficiency-report:studentReportSide.skillNumber`,\n { number: item.Display },\n `Skill ${item.Display}`\n )}\n </td>\n <td\n className=\"skill\"\n onClick={() => handleClick(item)}\n title={item.SkillName}\n >\n {item.SkillName}\n </td>\n <td className=\"progressbar\">\n <ProgressBar\n height=\"16px\"\n visualParts={parseHighScoreProgressBar(item)}\n />\n <p>\n <strong>{item.MasteryLevels.A}</strong>{' '}\n {`/${item.TotalNoOfUsers} ${\n item.TotalNoOfUsers >= 2\n ? t(\n `proficiency-report:classReport.students`,\n 'students'\n )\n : t(\n `proficiency-report:classReport.student`,\n 'student'\n )\n } ${t(`high-score-report:legend.AStar`, 'A Star')}`}\n </p>\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.A}</strong>{' '}\n {t(`proficiency-report:classReport.stu`, 'stu')}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.B}</strong>{' '}\n {t(`proficiency-report:classReport.stu`, 'stu')}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.C}</strong>{' '}\n {t(`proficiency-report:classReport.stu`, 'stu')}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.D}</strong>{' '}\n {t(`proficiency-report:classReport.stu`, 'stu')}\n </td>\n <td className=\"custom-td\">\n <strong>{item.MasteryLevels.Incomplete}</strong>{' '}\n {t(`proficiency-report:classReport.stu`, 'stu')}\n </td>\n </tr>\n ))}\n </>\n )}\n </tbody>\n </table>\n )}\n </StudentTable>\n </>\n );\n}\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n margin: 0 30px;\n position: relative;\n top: 14.6rem;\n`;\nexport const SkillList = styled.div`\n background: white;\n text-align: left;\n width: 20%;\n border: 1px solid #e9e9e9;\n margin-bottom: 30px;\n`;\nexport const SkillItem = styled.div`\n padding: 21px 20px 21px 10px;\n color: #363636;\n cursor: pointer;\n position: relative;\n border-bottom: 1px solid #e9e9e9;\n &:nth-child(even) {\n background-color: #fbfbfb;\n }\n &:last-child {\n border-bottom: none;\n }\n :hover:after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n box-shadow: 0px 0px 0px 2px #ff5b00 inset;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n svg {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n }\n`;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport NoReport from 'components/Report/NoReport';\nimport Spinner from 'components/Shared/Spinner';\nimport { ReactComponent as SkillSelectIcon } from 'assets/img/report/icon-skill-select.svg';\nimport {\n fetchSyllabusRequest,\n fetchProficiencySkillReportRequest,\n cleanProficiencySkillReport\n} from 'stores/report/actions';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { isEmpty, isNil } from 'ramda';\nimport SkillTableReport from 'components/Report/SkillTableReport';\nimport cloneDeep from 'lodash.clonedeep';\nimport { LoadingContainer } from './ReportPage.styles';\nimport {\n Container,\n SkillList,\n SkillItem\n} from './ProficiencyReportBySkills.styles';\n\nconst ProficiencyReportBySkills = ({ visible }) => {\n const dispatch = useDispatch();\n const { t } = useTranslation(['proficiency-report']);\n const [sortDetail, setSortDetail] = useState(null);\n const [selectedSkill, setSelectedSkill] = useState(null);\n\n const {\n selectedClass,\n reportLevel,\n selectedSyllabus,\n syllabus,\n proficiencySkill\n } = useSelector(state => state.reports);\n const isLevelLess = isEmpty(selectedSyllabus?.Levels);\n useDeepCompareEffect(() => {\n if (selectedClass && selectedSyllabus && !isNil(reportLevel)) {\n dispatch(\n fetchSyllabusRequest({\n CurriculumID: selectedSyllabus.CurriculumID,\n LevelID: isLevelLess ? -1 : reportLevel.ID\n })\n );\n }\n }, [dispatch, reportLevel, selectedClass, selectedSyllabus]);\n useEffect(() => {\n dispatch(cleanProficiencySkillReport());\n // eslint-disable-next-line\n }, []);\n useEffect(() => {\n if (syllabus.data?.length) {\n handleSkillClick(syllabus.data[0], true);\n }\n // eslint-disable-next-line\n }, [syllabus.data]);\n const sortedData = useCallback(() => {\n if (sortDetail) {\n const { type, sortType } = sortDetail;\n const hasData = proficiencySkill.data.some(\n datum => datum.CompetencyDetails[type] > 0\n );\n if (hasData) {\n const result = cloneDeep(proficiencySkill.data).sort((a, b) => {\n const c =\n a.CompetencyDetails[type] - b.CompetencyDetails[type] > 0 ? 1 : -1;\n return sortType === 'asc' ? c : c * -1;\n });\n return result;\n }\n return proficiencySkill.data;\n }\n return proficiencySkill.data;\n }, [proficiencySkill, sortDetail]);\n\n const handleSkillClick = (skill, isInitial) => {\n if (selectedSkill === skill.ID && !isInitial) {\n return;\n }\n setSelectedSkill(skill.ID);\n setSortDetail(null);\n const rawBody = {\n classID: selectedClass.ID,\n reportLevel: reportLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID: skill.ID\n };\n dispatch(fetchProficiencySkillReportRequest(rawBody));\n };\n const handleSortClick = ({ type, sortType }) => {\n setSortDetail(prev => {\n if (prev) {\n return prev.type === type && prev.sortType === sortType\n ? null\n : { type, sortType };\n }\n return { type, sortType };\n });\n };\n const renderTable = () => {\n if (proficiencySkill.isLoading) {\n return (\n <LoadingContainer width=\"73%\">\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (!proficiencySkill.data || proficiencySkill.data.length === 0) {\n return (\n <NoReport\n detail\n message={t(\n `proficiency-report:noReports.skillDesc`,\n 'Select another skill to show reports.'\n )}\n />\n );\n }\n return (\n <SkillTableReport\n type=\"proficiency\"\n data={sortedData()}\n isLoading={proficiencySkill.isLoading}\n sortClick={handleSortClick}\n sortDetail={sortDetail}\n />\n );\n };\n const renderResult = () => {\n if (syllabus.isLoading) {\n return (\n <LoadingContainer>\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (isNil(syllabus.data) || isEmpty(syllabus.data)) {\n return <NoReport />;\n }\n return (\n <Container>\n <SkillList>\n {syllabus.data.map(skill => (\n <SkillItem\n key={skill.ID}\n active={selectedSkill === skill.ID}\n onClick={() => handleSkillClick(skill)}\n >\n {skill.Name}\n {selectedSkill === skill.ID && <SkillSelectIcon />}\n </SkillItem>\n ))}\n </SkillList>\n {renderTable()}\n </Container>\n );\n };\n return visible ? renderResult() : null;\n};\n\nexport default ProficiencyReportBySkills;\n","import React, { useState, useEffect } from 'react';\nimport TopBar from 'components/Report/TopBar';\nimport { useDispatch, useSelector } from 'react-redux';\nimport generateLevels from 'helpers/reportLevels';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport { fetchUserCurriculumsRequest } from 'stores/curriculums/actions';\nimport { isEmpty, isNil } from 'ramda';\nimport { setReportLevel } from 'stores/report/actions';\nimport {\n StyledSwitchContainer,\n StyledSwitch\n} from './ProficiencyReport.styles';\nimport { ReportPage } from './ReportPage.styles';\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';\nimport ProficiencyReportByStudent from './ProficiencyReportByStudent';\nimport ProficiencyReportBySkills from './ProficiencyReportBySkills';\nconst TYPES = [\n {\n label: 'By Students',\n value: 'student'\n },\n {\n label: 'By Skills',\n value: 'skill'\n }\n];\nconst ProficiencyReport = ({ history }) => {\n const dispatch = useDispatch();\n\n const {\n selectedClass,\n sortOrder,\n reportLevel,\n selectedSyllabus,\n selectedClassLevel\n } = useSelector(state => state.reports);\n const { classes } = useSelector(state => state.lookup);\n const { curriculums, error } = useSelector(state => state.curriculums);\n const [type, setType] = useState(\n history.location.state?.type || TYPES[0].value\n );\n\n const isLeveless = isEmpty(selectedSyllabus?.Levels);\n\n const reportLevels = generateLevels();\n // Filter out only classes of type 1\n const filteredClasses =\n classes.length > 0\n ? classes.filter(classObject => classObject.Type === 1)\n : [];\n\n // UseEffect\n useEffect(() => {\n dispatch(fetchClassRequest(selectedClassLevel));\n }, [dispatch, selectedClassLevel]);\n useEffect(() => {\n if (error !== '') {\n dispatch(fetchUserCurriculumsRequest());\n }\n }, [dispatch, error]);\n useDeepCompareEffectNoCheck(() => {\n if (selectedSyllabus && isNil(reportLevel) && !isLeveless) {\n const firstLevel = selectedSyllabus.Levels[0];\n dispatch(setReportLevel(firstLevel));\n }\n }, [reportLevel, selectedSyllabus, isLeveless]);\n return (\n reportLevel && (\n <ReportPage>\n {reportLevel && (\n <TopBar\n type=\"proficiency\"\n classes={filteredClasses}\n selectedClass={selectedClass}\n classLevels={reportLevels}\n reportLevels={!isLeveless ? selectedSyllabus.Levels : []}\n selectedLevel={reportLevel}\n curriculums={curriculums}\n selectedSyllabus={selectedSyllabus}\n sortOrder={sortOrder}\n selectedClassLevel={selectedClassLevel}\n detailType={type}\n />\n )}\n <StyledSwitchContainer>\n {TYPES.map(item => (\n <StyledSwitch\n key={item.value}\n active={item.value === type}\n onClick={() => setType(item.value)}\n >\n {item.label}\n </StyledSwitch>\n ))}\n </StyledSwitchContainer>\n <ProficiencyReportByStudent visible={type === TYPES[0].value} />\n <ProficiencyReportBySkills visible={type === TYPES[1].value} />\n </ReportPage>\n )\n );\n};\n\nexport default ProficiencyReport;\n","import React, { useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isEmpty, isNil } from 'ramda';\nimport { fetchClassHighScoreReportRequest } from 'stores/report/actions';\nimport cloneDeep from 'lodash.clonedeep';\nimport NoReport from 'components/Report/NoReport';\nimport StudentTable from 'components/Report/StudentTableReport';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { LoadingContainer } from './ReportPage.styles';\nimport Spinner from 'components/Shared/Spinner';\n\nconst HighScoreReportByStudent = ({ visible }) => {\n const dispatch = useDispatch();\n // Redux States\n const {\n classHighScoreReport,\n selectedClass,\n reportLevel,\n selectedSyllabus,\n isLoading: reportsLoading\n } = useSelector(state => state.reports);\n const [sortDetail, setSortDetail] = useState(null);\n const isLeveless = isEmpty(selectedSyllabus.Levels);\n\n const sortedData = useCallback(() => {\n if (sortDetail) {\n const { type, sortType } = sortDetail;\n const hasData = classHighScoreReport.some(\n datum => datum.MasteryLevels[type] > 0\n );\n if (hasData) {\n const result = cloneDeep(classHighScoreReport).sort((a, b) => {\n const c = a.MasteryLevels[type] - b.MasteryLevels[type] > 0 ? 1 : -1;\n return sortType === 'asc' ? c : c * -1;\n });\n return result;\n }\n return classHighScoreReport;\n }\n return classHighScoreReport;\n }, [classHighScoreReport, sortDetail]);\n\n useDeepCompareEffect(() => {\n if (selectedClass && selectedSyllabus && !isNil(reportLevel)) {\n dispatch(\n fetchClassHighScoreReportRequest({\n classID: selectedClass.ID,\n reportLevel: isLeveless ? -1 : reportLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID\n })\n );\n }\n }, [dispatch, reportLevel, selectedClass, selectedSyllabus]);\n const handleSortClick = ({ type, sortType }) => {\n setSortDetail(prev => {\n if (prev) {\n return prev.type === type && prev.sortType === sortType\n ? null\n : { type, sortType };\n }\n return { type, sortType };\n });\n };\n const renderResult = () => {\n if (reportsLoading) {\n return (\n <LoadingContainer>\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (classHighScoreReport?.length) {\n return (\n <StudentTable\n type=\"highscore\"\n data={sortedData()}\n isLoading={reportsLoading}\n sortClick={handleSortClick}\n sortDetail={sortDetail}\n />\n );\n }\n return <NoReport />;\n };\n return visible ? renderResult() : null;\n};\n\nexport default HighScoreReportByStudent;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport NoReport from 'components/Report/NoReport';\nimport Spinner from 'components/Shared/Spinner';\nimport { ReactComponent as SkillSelectIcon } from 'assets/img/report/icon-skill-select.svg';\nimport {\n fetchSyllabusRequest,\n fetchHighScoreSkillReportRequest,\n cleanHighScoreSkillReport\n} from 'stores/report/actions';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { isEmpty, isNil } from 'ramda';\nimport SkillTableReport from 'components/Report/SkillTableReport';\nimport cloneDeep from 'lodash.clonedeep';\nimport { LoadingContainer } from './ReportPage.styles';\nimport {\n Container,\n SkillList,\n SkillItem\n} from './ProficiencyReportBySkills.styles';\n\nconst HighScoreReportBySkills = ({ visible }) => {\n const dispatch = useDispatch();\n const { t } = useTranslation(['proficiency-report']);\n const [sortDetail, setSortDetail] = useState(null);\n const [selectedSkill, setSelectedSkill] = useState(null);\n\n const {\n selectedClass,\n reportLevel,\n selectedSyllabus,\n syllabus,\n highScoreSkill\n } = useSelector(state => state.reports);\n const isLevelLess = isEmpty(selectedSyllabus?.Levels);\n useDeepCompareEffect(() => {\n if (selectedClass && selectedSyllabus && !isNil(reportLevel)) {\n dispatch(\n fetchSyllabusRequest({\n CurriculumID: selectedSyllabus.CurriculumID,\n LevelID: isLevelLess ? -1 : reportLevel.ID\n })\n );\n }\n }, [dispatch, reportLevel, selectedClass, selectedSyllabus]);\n useEffect(() => {\n dispatch(cleanHighScoreSkillReport());\n // eslint-disable-next-line\n }, []);\n useEffect(() => {\n if (syllabus.data?.length) {\n handleSkillClick(syllabus.data[0], true);\n }\n // eslint-disable-next-line\n }, [syllabus.data]);\n const sortedData = useCallback(() => {\n if (sortDetail) {\n const { type, sortType } = sortDetail;\n const hasData = highScoreSkill.data.some(\n datum => datum.MasteryLevels[type] > 0\n );\n if (hasData) {\n const result = cloneDeep(highScoreSkill.data).sort((a, b) => {\n const c = a.MasteryLevels[type] - b.MasteryLevels[type] > 0 ? 1 : -1;\n return sortType === 'asc' ? c : c * -1;\n });\n return result;\n }\n return highScoreSkill.data;\n }\n return highScoreSkill.data;\n }, [highScoreSkill.data, sortDetail]);\n\n const handleSkillClick = (skill, isInitial) => {\n if (selectedSkill === skill.ID && !isInitial) {\n return;\n }\n setSelectedSkill(skill.ID);\n setSortDetail(null);\n const rawBody = {\n classID: selectedClass.ID,\n reportLevel: reportLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID: skill.ID\n };\n dispatch(fetchHighScoreSkillReportRequest(rawBody));\n };\n const handleSortClick = ({ type, sortType }) => {\n setSortDetail(prev => {\n if (prev) {\n return prev.type === type && prev.sortType === sortType\n ? null\n : { type, sortType };\n }\n return { type, sortType };\n });\n };\n const renderTable = () => {\n if (highScoreSkill.isLoading) {\n return (\n <LoadingContainer width=\"73%\">\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (!highScoreSkill.data || highScoreSkill.data.length === 0) {\n return (\n <NoReport\n detail\n message={t(\n `proficiency-report:noReports.skillDesc`,\n 'Select another skill to show reports.'\n )}\n />\n );\n }\n return (\n <SkillTableReport\n type=\"highscore\"\n data={sortedData()}\n isLoading={highScoreSkill.isLoading}\n sortClick={handleSortClick}\n sortDetail={sortDetail}\n />\n );\n };\n const renderResult = () => {\n if (syllabus.isLoading) {\n return (\n <LoadingContainer>\n <Spinner styles={{ marginTop: '0' }} />\n </LoadingContainer>\n );\n }\n if (isNil(syllabus.data) || isEmpty(syllabus.data)) {\n return <NoReport />;\n }\n return (\n <Container>\n <SkillList>\n {syllabus.data.map(skill => (\n <SkillItem\n key={skill.ID}\n active={selectedSkill === skill.ID}\n onClick={() => handleSkillClick(skill)}\n >\n {skill.Name}\n {selectedSkill === skill.ID && <SkillSelectIcon />}\n </SkillItem>\n ))}\n </SkillList>\n {renderTable()}\n </Container>\n );\n };\n return visible ? renderResult() : null;\n};\n\nexport default HighScoreReportBySkills;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isEmpty, isNil } from 'ramda';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport { setReportLevel } from 'stores/report/actions';\nimport { fetchUserCurriculumsRequest } from 'stores/curriculums/actions';\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';\nimport TopBar from 'components/Report/TopBar';\nimport generateLevels from 'helpers/reportLevels';\nimport HighScoreReportByStudent from './HighScoreReportByStudent';\nimport HighScoreReportBySkills from './HighScoreReportBySkills';\nimport {\n StyledSwitchContainer,\n StyledSwitch\n} from './ProficiencyReport.styles';\nimport { ReportPage } from './ReportPage.styles';\nconst TYPES = [\n {\n label: 'By Students',\n value: 'student'\n },\n {\n label: 'By Skills',\n value: 'skill'\n }\n];\nconst HighScoreReport = ({ history }) => {\n const dispatch = useDispatch();\n // Redux States\n const {\n selectedClass,\n sortOrder,\n reportLevel,\n selectedSyllabus,\n selectedClassLevel\n } = useSelector(state => state.reports);\n const { classes } = useSelector(state => state.lookup);\n const { curriculums, error } = useSelector(state => state.curriculums);\n const isLeveless = isEmpty(selectedSyllabus?.Levels);\n const [type, setType] = useState(\n history.location.state?.type || TYPES[0].value\n );\n\n const reportLevels = generateLevels();\n // Filter out only classes of type 1\n const filteredClasses =\n classes.length > 0\n ? classes.filter(classObject => classObject.Type === 1)\n : [];\n\n // UseEffect\n useEffect(() => {\n dispatch(fetchClassRequest(selectedClassLevel));\n }, [dispatch, selectedClassLevel]);\n useEffect(() => {\n if (error !== '') {\n dispatch(fetchUserCurriculumsRequest());\n }\n }, [classes, classes.length, dispatch, error, selectedClass]);\n useDeepCompareEffectNoCheck(() => {\n if (selectedSyllabus && isNil(reportLevel) && !isLeveless) {\n const firstLevel = selectedSyllabus.Levels[0];\n dispatch(setReportLevel(firstLevel));\n }\n }, [reportLevel, selectedSyllabus, isLeveless]);\n return (\n reportLevel && (\n <ReportPage>\n <TopBar\n type=\"highscore\"\n classes={filteredClasses}\n selectedClass={selectedClass}\n classLevels={reportLevels}\n reportLevels={\n !isEmpty(selectedSyllabus.Levels) ? selectedSyllabus.Levels : []\n }\n selectedLevel={reportLevel}\n curriculums={curriculums}\n selectedSyllabus={selectedSyllabus}\n sortOrder={sortOrder}\n selectedClassLevel={selectedClassLevel}\n detailType={type}\n />\n <StyledSwitchContainer>\n {TYPES.map(item => (\n <StyledSwitch\n key={item.value}\n active={item.value === type}\n onClick={() => setType(item.value)}\n >\n {item.label}\n </StyledSwitch>\n ))}\n </StyledSwitchContainer>\n <HighScoreReportByStudent visible={type === TYPES[0].value} />\n <HighScoreReportBySkills visible={type === TYPES[1].value} />\n </ReportPage>\n )\n );\n};\n\nexport default HighScoreReport;\n","import React from 'react';\nimport StarIcon from 'assets/img/icon-report-skill-star.svg';\n\nconst HighScoreStars = ({ numOfStars }) => {\n const generateStars = num => {\n const stars = [];\n if (num <= 0) {\n return null;\n }\n for (let i = 1; i <= numOfStars; i++) {\n stars.push(<img src={StarIcon} alt=\"star\" />);\n }\n return stars;\n };\n return <span>{generateStars(numOfStars)}</span>;\n};\n\nexport default HighScoreStars;\n","import styled from 'styled-components';\nimport { proficiencyColors } from 'constants/index';\n\nexport const SkillDetailsContainer = styled.div`\n background: white;\n width: 360px;\n position: fixed;\n top: 119.19px;\n bottom: 0;\n right: 0;\n padding: 1rem 0.75rem;\n overflow-y: scroll;\n @media (max-width: 1024px) {\n width: 330px;\n }\n`;\n\nexport const SkillDetailsHeader = styled.div`\n border-bottom: solid 1px rgba(112, 112, 112, 0.29);\n .skill-name {\n font-size: 1.125rem;\n }\n .skill-number {\n font-size: 0.875rem;\n margin-right: 1rem;\n }\n .skill-description {\n font-size: 0.75rem;\n color: #828282;\n }\n .student-percentage {\n font-size: 1.125rem;\n color: black;\n margin-right: 2rem;\n }\n .class-avg-title {\n font-size: 0.625rem;\n margin-right: 0.5rem;\n }\n .class-avg-percentage {\n font-size: 0.9375rem;\n color: #060606;\n }\n p,\n span {\n font-family: 'Nunito';\n color: #202020;\n }\n`;\n\nexport const SkillBadge = styled.span`\n font-size: 0.75rem;\n padding: 0.25rem 0.5rem;\n background: ${props => proficiencyColors[props.proficiency].color};\n border-radius: 12px;\n border: ${props =>\n `solid 1px ${proficiencyColors[props.proficiency].borderColor}`};\n`;\n\nexport const QuestionContainer = styled.div`\n color: #202020;\n font-family: 'Nunito';\n margin-top: 1rem;\n .question-title {\n font-size: 0.875rem;\n }\n .question-content {\n font-weight: 600;\n font-size: 1rem;\n }\n`;\n\nexport const SolutionContainer = styled.div`\n margin-top: 2rem;\n color: #202020;\n font-weight: 600;\n font-family: 'Nunito';\n .solution-title {\n color: #5e925c;\n font-size: 0.875rem;\n }\n .solution-content {\n font-size: 1rem;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchSampleQnRequest } from 'stores/report/actions';\nimport GradeAIcon from 'assets/img/icon-report-high-score-a.svg';\nimport GradeBIcon from 'assets/img/icon-report-high-score-b.svg';\nimport GradeCIcon from 'assets/img/icon-report-high-score-c.svg';\nimport GradeDIcon from 'assets/img/icon-report-high-score-d.svg';\nimport IncompleteIcon from 'assets/img/icon-report-high-score-incomplete.svg';\nimport { isNil } from 'ramda';\nimport HTMLReactParser from 'html-react-parser';\nimport { ProficiencyStatus, MasteryLevel } from 'constants/index';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport HighScoreStars from './HighScoreStars';\nimport {\n SkillDetailsContainer,\n SkillDetailsHeader,\n SkillBadge,\n QuestionContainer,\n SolutionContainer\n} from './SkillDetails.styles.js';\n\nconst SkillDetailsQuestion = ({ data }) => {\n const { t } = useTranslation(['proficiency-report']);\n // States\n const [questionTitle, setQuestionTitle] = useState(null);\n const [questionSolution, setQuestionSolution] = useState(null);\n\n // Effects\n useEffect(() => {\n if (!isNil(data.Payload)) {\n const { title, solution } = questionParser({\n Payload: data.Payload\n });\n setQuestionTitle(\n HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.name === 'input') {\n return <input type=\"text\" />;\n }\n return domNode;\n }\n })\n );\n\n setQuestionSolution(HTMLReactParser(convertTagsToHTML(solution)));\n }\n }, [data.Payload]);\n return (\n <>\n <QuestionContainer>\n <p className=\"question-title\">\n {t(\n `proficiency-report:studentReportSide.sampleQs`,\n 'Sample Question'\n )}{' '}\n ( ID: {data.Id} )\n </p>\n <p className=\"question-content\">{questionTitle}</p>\n </QuestionContainer>\n <SolutionContainer>\n <p className=\"solution-title\">\n {t(`proficiency-report:studentReportSide.solution`, 'Solution')}\n </p>\n <p className=\"solution-content\">{questionSolution}</p>\n </SolutionContainer>\n </>\n );\n};\n\nexport default function SkillDetails({\n type,\n selectedSkill,\n selectedSkillTopic,\n selectedSkillNumber\n}) {\n const { t } = useTranslation(['proficiency-report']);\n const GradeIconMapping = {\n D: GradeDIcon,\n C: GradeCIcon,\n B: GradeBIcon,\n A: GradeAIcon,\n incomplete: IncompleteIcon\n };\n const dispatch = useDispatch();\n const { isLoading, sampleQn } = useSelector(state => state.reports);\n // useEffect\n useEffect(() => {\n dispatch(\n fetchSampleQnRequest({\n qnID: selectedSkill.SampleQuestionID\n })\n );\n }, [dispatch, selectedSkill.SampleQuestionID]);\n return (\n <SkillDetailsContainer>\n <SkillDetailsHeader>\n <p className=\"skill-name\">\n <strong>{selectedSkillTopic}</strong>\n </p>\n <div style={{ marginBottom: '0.5rem' }}>\n <span className=\"skill-number\">\n {t(`proficiency-report:studentReportSide.skill`, 'Skill')}{' '}\n {selectedSkillNumber}\n </span>\n {type === 'highscore' && (\n <HighScoreStars numOfStars={selectedSkill.MasteryLevel} />\n )}\n {type === 'proficiency' ? (\n <SkillBadge\n proficiency={ProficiencyStatus[selectedSkill.ProficiencyStatus]}\n >\n {t(\n `proficiency-report:legend.${\n ProficiencyStatus[selectedSkill.ProficiencyStatus]\n }`,\n `${ProficiencyStatus[selectedSkill.ProficiencyStatus]\n .charAt(0)\n .toUpperCase() +\n ProficiencyStatus[selectedSkill.ProficiencyStatus].slice(1)}`\n )}\n </SkillBadge>\n ) : null}\n </div>\n <p className=\"skill-description\">{selectedSkill.SkillName}</p>\n <div style={{ marginBottom: '0.5rem' }}>\n {type === 'highscore' && (\n <img\n src={GradeIconMapping[MasteryLevel[selectedSkill.MasteryLevel]]}\n alt={MasteryLevel[selectedSkill.MasteryLevel]}\n />\n )}\n {type === 'proficiency' && (\n <>\n <span className=\"student-percentage\">\n <strong>{`${Math.round(\n selectedSkill.Proficiency * 100\n )}%`}</strong>\n </span>\n <span className=\"class-avg-title\">\n {t(\n `proficiency-report:studentReportSide.classAvg`,\n 'Class Avg'\n )}\n </span>\n <span className=\"class-avg-percentage\">\n <strong>\n {`${Math.round(selectedSkill.ClassAverage * 100)}%`}\n </strong>\n </span>\n </>\n )}\n </div>\n </SkillDetailsHeader>\n {!isLoading && sampleQn && <SkillDetailsQuestion data={sampleQn} />}\n </SkillDetailsContainer>\n );\n}\n","import styled from 'styled-components';\nimport { proficiencyColors } from 'constants/index';\n\nexport const SkillSection = styled.div`\n width: 100%;\n padding: 1rem 3rem;\n border-bottom: solid 1px #e9e9e9;\n background: ${props =>\n props.index === 0 || props.index % 2 === 0 ? '#fbfbfb' : 'white'};\n .skill-title {\n font-family: 'Nunito';\n font-size: 1.125rem;\n color: #202020;\n }\n .progressbar {\n max-width: 25%;\n p {\n margin: 10px 0px;\n width: ${props =>\n props.showSkillDetails ? 'calc(100vw - 385px)' : 'calc(100vw - 56px)'};\n }\n }\n .skill-badges {\n display: flex;\n flex-wrap: wrap;\n .badge {\n display: flex;\n flex-direction: column;\n justify-content: ${props =>\n props.type === 'highscore' ? 'flex-end' : 'center'};\n text-align: center;\n padding: 0.5rem 0.5rem;\n cursor: pointer;\n margin: 0 1rem 1rem 0;\n min-width: ${props => (props.type === 'highscore' ? '60.88px' : '49px')};\n min-height: 74px;\n .grade-icon {\n align-self: center;\n }\n &:hover {\n background: #eeeeee;\n }\n .skill-percentage {\n margin-top: 1rem;\n font-size: 0.875rem;\n color: #363636;\n }\n .skill-number {\n margin-top: 1rem;\n font-size: 0.8125rem;\n color: #363636;\n }\n }\n }\n`;\n\nconst proficiencyFontColors = {\n mastery: '#363636',\n competent: '#1B6316',\n developing: '#155575',\n beginning: 'white',\n incomplete: '#8B989E'\n};\n\nexport const ProficiencyBadge = styled.div`\n width: 32px;\n height: 31px;\n background: ${props => proficiencyColors[props.proficiency].color};\n border: solid 1px ${props => proficiencyColors[props.proficiency].borderColor};\n border-radius: 3px;\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n align-items: center;\n font-family: 'Nunito';\n font-size: 0.625rem;\n color: ${props => proficiencyFontColors[props.proficiency]};\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ProgressBar from 'components/Report/ProgressBar';\nimport GradeAIcon from 'assets/img/icon-report-high-score-a.svg';\nimport GradeBIcon from 'assets/img/icon-report-high-score-b.svg';\nimport GradeCIcon from 'assets/img/icon-report-high-score-c.svg';\nimport GradeDIcon from 'assets/img/icon-report-high-score-d.svg';\nimport IncompleteIcon from 'assets/img/icon-report-high-score-incomplete.svg';\nimport {\n proficiencyColors,\n ProficiencyStatus,\n MasteryLevel\n} from 'constants/index';\nimport calculatePercentageString from 'helpers/calculatePercentageString';\nimport { SkillSection, ProficiencyBadge } from './StudentReport.styles';\n\n// Helper for parsing api to input format for ProgressBar\nconst sortSkills = skills => {\n const progressBarInput = [\n {\n percentage: '',\n color: proficiencyColors.mastery.color,\n borderColor: proficiencyColors.mastery.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.competent.color,\n borderColor: proficiencyColors.competent.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.beginning.color,\n borderColor: proficiencyColors.beginning.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const proficiencyIndex = {\n incomplete: 3,\n beginning: 2,\n competent: 1,\n mastery: 0\n };\n const sortedSkills = {\n incomplete: 0,\n beginning: 0,\n competent: 0,\n mastery: 0\n };\n let total = 0;\n // Sort skills by proficiency status\n for (const skill of skills) {\n const proficiency = ProficiencyStatus[skill.ProficiencyStatus];\n sortedSkills[proficiency] += 1;\n total += 1;\n }\n for (const proficiency of Object.keys(sortedSkills)) {\n if (sortedSkills[proficiency] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n sortedSkills[proficiency],\n total\n );\n progressBarInput[\n proficiencyIndex[proficiency]\n ].percentage = percentageString;\n } else {\n progressBarInput[proficiencyIndex[proficiency]].percentage = '0%';\n }\n }\n return progressBarInput.filter(\n proficiency => proficiency.percentage !== '0%'\n );\n};\n\nconst StudentReport = ({\n setShowSkillDetails,\n type,\n selectedSkill,\n setSelectedSkill,\n setSelectedSkillTopic,\n setSelectedSkillNumber,\n data\n}) => {\n const { t } = useTranslation(['proficiency-report']);\n return (\n <>\n {data &&\n data.map((topic, index) => (\n <SkillSection key={topic.TopicId} index={index} type={type}>\n <p className=\"skill-title\">\n <strong>{topic.TopicName}</strong>\n </p>\n {type === 'proficiency' && (\n <div className=\"progressbar\">\n <ProgressBar\n height=\"11px\"\n visualParts={sortSkills(topic.Skills)}\n />\n <p>\n <strong>{topic.SkillMastered}</strong>\n {` / ${topic.TotalNoOfSkill} ${t(\n 'proficiency-report:studentReport.skillsMastered',\n 'Skills mastered'\n )} ( ${t(\n 'proficiency-report:studentReport.classAvg',\n 'Class Avg'\n )} `}\n <strong>{topic.ClassAverage}</strong>\n {` / ${topic.TotalNoOfSkill} )`}\n </p>\n </div>\n )}\n <div className=\"skill-badges\">\n {type === 'proficiency' &&\n topic.Skills.map((skill, index) => (\n <div\n className=\"badge\"\n key={`${topic.TopicId}-${skill.SkillId}`}\n style={{\n background:\n selectedSkill &&\n selectedSkill.SkillId === skill.SkillId &&\n 'rgba(174, 128, 180, 0.24)'\n }}\n onClick={() => {\n setShowSkillDetails(true);\n setSelectedSkill(skill);\n setSelectedSkillTopic(topic.TopicName);\n setSelectedSkillNumber(index + 1);\n }}\n >\n {ProficiencyStatus[skill.ProficiencyStatus] ===\n 'mastery' && (\n <ProficiencyBadge proficiency=\"mastery\">\n <span>\n {t(\n 'proficiency-report:studentReportSide.skill',\n 'Skill'\n )}\n </span>\n <span>{index + 1}</span>\n </ProficiencyBadge>\n )}\n {ProficiencyStatus[skill.ProficiencyStatus] ===\n 'competent' && (\n <ProficiencyBadge proficiency=\"competent\">\n <span>\n {t(\n 'proficiency-report:studentReportSide.skill',\n 'Skill'\n )}\n </span>\n <span>{index + 1}</span>\n </ProficiencyBadge>\n )}\n {ProficiencyStatus[skill.ProficiencyStatus] ===\n 'beginning' && (\n <ProficiencyBadge proficiency=\"beginning\">\n <span>\n {t(\n 'proficiency-report:studentReportSide.skill',\n 'Skill'\n )}\n </span>\n <span>{index + 1}</span>\n </ProficiencyBadge>\n )}\n {ProficiencyStatus[skill.ProficiencyStatus] ===\n 'incomplete' && (\n <ProficiencyBadge proficiency=\"incomplete\">\n <span>\n {t(\n 'proficiency-report:studentReportSide.skill',\n 'Skill'\n )}\n </span>\n <span>{index + 1}</span>\n </ProficiencyBadge>\n )}\n <p className=\"skill-percentage\">\n <strong>{`${Math.round(\n skill.Proficiency * 100\n )}%`}</strong>\n </p>\n </div>\n ))}\n {type === 'highscore' &&\n topic.Skills.map((skill, index) => (\n <div\n className=\"badge\"\n key={`${topic.TopicId}-${skill.SkillId}`}\n style={{\n background:\n selectedSkill &&\n selectedSkill.SkillId === skill.SkillId &&\n 'rgba(174, 128, 180, 0.24)'\n }}\n onClick={() => {\n setShowSkillDetails(true);\n setSelectedSkill(skill);\n setSelectedSkillTopic(topic.TopicName);\n setSelectedSkillNumber(index + 1);\n }}\n >\n {MasteryLevel[skill.MasteryLevel] === 'A' && (\n <img\n src={GradeAIcon}\n alt=\"Grade A\"\n className=\"grade-icon\"\n />\n )}\n {MasteryLevel[skill.MasteryLevel] === 'B' && (\n <img\n src={GradeBIcon}\n alt=\"Grade B\"\n className=\"grade-icon\"\n />\n )}\n {MasteryLevel[skill.MasteryLevel] === 'C' && (\n <img\n src={GradeCIcon}\n alt=\"Grade C\"\n className=\"grade-icon\"\n />\n )}\n {MasteryLevel[skill.MasteryLevel] === 'D' && (\n <img\n src={GradeDIcon}\n alt=\"Grade D\"\n className=\"grade-icon\"\n />\n )}\n {MasteryLevel[skill.MasteryLevel] === 'incomplete' && (\n <img\n src={IncompleteIcon}\n alt=\"Incomplete\"\n className=\"grade-icon\"\n />\n )}\n <p className=\"skill-number\">\n <strong>\n {t(\n 'proficiency-report:studentReportSide.skill',\n 'Skill'\n )}{' '}\n {index + 1}\n </strong>\n </p>\n </div>\n ))}\n </div>\n </SkillSection>\n ))}\n </>\n );\n};\n\nexport default StudentReport;\n","import styled from 'styled-components';\n\nexport const ToggleReportStyle = styled.div``;\n\nexport const ReportButton = styled.button`\n background: #ffffff;\n border: 0.5px solid #c4c4c4;\n color: #c4c4c4;\n padding: 8px 15px;\n border-radius: ${props =>\n props.proficiency ? '2px 0 0 2px' : '0 2px 2px 0'};\n border-width: ${props => props.high && '0.5px 0.5px 0.5px 0'};\n\n ${({ active }) =>\n active &&\n `\n background: #FFF3EC;\n color: #FF5B00;\n `}\n`;\n","import React, { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { toggleReport } from 'stores/report/actions';\nimport { ToggleReportStyle, ReportButton } from './ToggleReport.style';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nconst ToggleReport = ({ studentID }) => {\n const { t } = useTranslation(['proficiency-report']);\n const { activeToggle } = useSelector(state => state.reports);\n const dispatch = useDispatch();\n const history = useHistory();\n\n const onToggle = val => {\n dispatch(toggleReport(val));\n if (val === 'high') {\n history.push(`/report/class-report/high-score-report/${studentID}`);\n } else {\n history.push(`/report/proficiency-report/${studentID}`);\n }\n };\n\n return (\n <ToggleReportStyle>\n <ReportButton\n proficiency\n active={activeToggle === 'proficiency'}\n onClick={() => onToggle('proficiency')}\n >\n {t(\n `proficiency-report:sidebar.proficiencyReport`,\n 'Proficiency Report'\n )}\n </ReportButton>\n <ReportButton\n high\n active={activeToggle === 'high'}\n onClick={() => onToggle('high')}\n >\n {t(`proficiency-report:sidebar.highScoreReport`, 'High Score Report')}\n </ReportButton>\n </ToggleReportStyle>\n );\n};\n\nexport default memo(ToggleReport);\n","import styled from 'styled-components';\nimport { proficiencyColors } from 'constants/index';\n\nexport const StudentReportPage = styled.div`\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media (max-width: 639px) {\n padding-left: 0;\n }\n .error {\n width: 100%;\n text-align: center;\n margin-top: 2rem;\n }\n`;\n\nexport const Header = styled.div`\n background: white;\n position: fixed;\n width: calc(100vw - 195px);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0.5rem 1rem;\n box-shadow: 0 3px 6px rgba(129, 129, 129, 0.16);\n z-index: 10;\n .back-button {\n color: #545454;\n cursor: pointer;\n flex: 1.5;\n /* flex-basis: 45%; */\n &:hover {\n color: #ff5b00;\n }\n }\n .student-details {\n font-size: 1rem;\n color: #363636;\n flex: 1;\n }\n\n .skill-detail {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n }\n @media (max-width: 1024px) {\n width: calc(100vw - 56px);\n }\n @media (max-width: 639px) {\n width: 100vw;\n }\n`;\n\nexport const Content = styled.div`\n background: #fbfbfb;\n width: ${props =>\n props.showSkillDetails ? 'calc(100vw - 555px)' : 'calc(100vw - 195px)'};\n position: relative;\n top: 4rem;\n bottom: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n @media (max-width: 1024px) {\n width: ${props =>\n props.showSkillDetails ? 'calc(100vw - 385px)' : 'calc(100vw - 56px)'};\n }\n @media (max-width: 639px) {\n width: ${props =>\n props.showSkillDetails ? 'calc(100vw - 329px)' : '100vw'};\n }\n .section-container {\n font-size: 0.75rem;\n padding: 1.5rem 3rem 1rem 3rem;\n border-bottom: solid 1px #e9e9e9;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n flex-direction: column;\n .report-level-dropdown {\n margin-right: 1rem;\n margin-bottom: 0.5rem;\n span {\n width: 120px;\n }\n }\n .report-level-dropdown,\n .syllabus-dropdown {\n display: flex;\n }\n @media screen and (max-width: 895px) {\n padding: 1rem 0 1rem 0.5rem;\n }\n }\n .skills-section {\n display: flex;\n margin: 10px 0;\n @media (max-width: 1366px) {\n margin-top: 11px;\n }\n }\n .legend-section {\n display: flex;\n align-items: center;\n font-family: 'Muli', 'sans-serif';\n margin-bottom: 10px;\n .ratings-category {\n display: flex;\n align-items: center;\n font-weight: bold;\n font-size: 12px;\n margin-right: 20px;\n img {\n width: 13px;\n margin-right: 3px;\n }\n .sub-text {\n color: #afacac;\n font-size: 11px;\n margin-left: 3px;\n font-weight: normal;\n }\n }\n }\n\n .dropdown-section {\n display: flex;\n margin-left: ${props =>\n props.showSkillDetails\n ? props.type === 'proficiency'\n ? '0px'\n : '15px'\n : '0px'};\n margin-top: ${props => (props.showSkillDetails ? '15px' : '0px')};\n @media (max-width: 1024px) {\n margin-top: 15px;\n }\n }\n .dropdown-item:active {\n color: #212529;\n background-color: transparent;\n }\n .dropdown-label {\n margin-top: 10px;\n }\n .dropdown-select-syllabus {\n width: 300px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n span {\n display: inline-block;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 93%;\n }\n :after {\n bottom: 4px;\n }\n @media (max-width: 1024px) {\n font-size: 12px;\n width: 280px;\n }\n }\n .dropdown-custom {\n width: 75px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n @media (max-width: 1024px) {\n font-size: 12px;\n }\n }\n .dropdown-toggle::after {\n position: relative;\n left: 10px;\n @media (max-width: 744px) {\n left: 3px;\n width: 6px;\n vertical-align: 1px;\n }\n }\n`;\n\nexport const ProficiencySkills = styled.div`\n display: flex;\n margin-right: 15px;\n .icon {\n width: 7px;\n height: 7px;\n margin-top: 5px;\n background: ${props => proficiencyColors[props.proficiency].color};\n border-radius: 50%;\n border: solid 1px\n ${props => proficiencyColors[props.proficiency].borderColor};\n }\n span {\n font-size: 12px;\n color: #363636;\n margin-left: 5px;\n }\n .prof-descricption {\n font-size: 10px;\n display: flex;\n align-items: flex-end;\n color: #727272;\n margin-right: 15px;\n }\n @media screen and (max-width: 895px) {\n margin-right: 0 !important;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { Dropdown } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { isEmpty, isNil } from 'ramda';\nimport {\n fetchStudentProficiencyReportRequest,\n setReportLevel,\n setSyllabus\n} from 'stores/report/actions';\nimport { fetchUserCurriculumsRequest } from 'stores/curriculums/actions';\nimport Spinner from 'components/Shared/Spinner';\nimport SkillDetails from 'components/Report/SkillDetails';\nimport StudentReport from 'components/Report/StudentReport';\nimport ToggleReport from 'components/Report/ToggleReport';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport PrintIcon from 'assets/img/icon-report-print.svg';\nimport ArrowIcon from 'assets/img/icon-report-print-arrow.svg';\nimport GradeAIcon from 'assets/img/icon-report-high-score-a.svg';\nimport GradeBIcon from 'assets/img/icon-report-high-score-b.svg';\nimport GradeCIcon from 'assets/img/icon-report-high-score-c.svg';\nimport GradeDIcon from 'assets/img/icon-report-high-score-d.svg';\nimport { PrintButton } from 'components/Report/TopBar.styles';\nimport { featureToggle } from 'constants/index';\nimport {\n Header,\n Content,\n StudentReportPage\n} from './StudentHighScoreReport.styles.js';\n\nconst StudentHighScoreReport = ({ match }) => {\n const { t } = useTranslation(['proficiency-report']);\n const studentID = parseInt(match.params.studentID, 10);\n const history = useHistory();\n const dispatch = useDispatch();\n // Redux States\n const {\n studentProficiencyReport,\n isLoading,\n selectedClass,\n reportError,\n reportLevel,\n selectedSyllabus\n } = useSelector(state => state.reports);\n const { curriculums, error } = useSelector(state => state.curriculums);\n // Component States\n const [showSkillDetails, setShowSkillDetails] = useState(false);\n const [selectedSkill, setSelectedSkill] = useState(null);\n const [selectedSkillTopic, setSelectedSkillTopic] = useState(null);\n const [selectedSkillNumber, setSelectedSkillNumber] = useState(null);\n\n // const reportLevels = generateLevels();\n const isLeveless = isEmpty(selectedSyllabus.Levels);\n const levels = !isEmpty(selectedSyllabus.Levels)\n ? selectedSyllabus.Levels\n : [];\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const getLevel = syll => {\n const isSelectedLeveless = isEmpty(syll.Levels);\n const checkLevelAvailable =\n syll && syll.Levels.find(item => item.ID === reportLevel);\n if (!isSelectedLeveless) {\n if (isNil(checkLevelAvailable)) {\n return syll.Levels[0];\n // eslint-disable-next-line no-else-return\n } else {\n return reportLevel;\n }\n // eslint-disable-next-line no-else-return\n } else {\n return { ID: -1 };\n }\n };\n\n // UseEffect\n useEffect(() => {\n if (error !== '') {\n dispatch(fetchUserCurriculumsRequest());\n }\n }, [dispatch, error]);\n useEffect(() => {\n dispatch(\n fetchStudentProficiencyReportRequest({\n studentID,\n classID: selectedClass.ID,\n reportLevel: isLeveless ? -1 : reportLevel.ID,\n syllabusID: selectedSyllabus.CurriculumID\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n dispatch,\n reportLevel,\n selectedClass.ID,\n selectedSyllabus,\n selectedSyllabus.CurriculumID,\n studentID\n ]);\n return (\n <StudentReportPage>\n {isLoading && <Spinner />}\n {!isLoading && reportError && (\n <div className=\"error\">\n <h3>{reportError}</h3>\n </div>\n )}\n {!isLoading && studentProficiencyReport && (\n <>\n <Header>\n <span\n className=\"back-button\"\n onClick={() => {\n history.push('/report/class-report/high-score-report');\n }}\n >\n {t(`proficiency-report:studentReport.back`, '< Back')}\n </span>\n <span className=\"student-details\">\n <img\n src={studentProficiencyReport.ProfilePictureURL}\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n alt=\"Student Profile\"\n border=\"0\"\n width=\"50px\"\n height=\"50px\"\n style={{\n marginRight: '0.5rem',\n borderRadius: '50%'\n }}\n />\n <strong>{studentProficiencyReport.Username}</strong>\n </span>\n <ToggleReport studentID={studentID} />\n {featureToggle.reportPrintButton && (\n <PrintButton>\n <button type=\"button\">\n <img src={PrintIcon} alt=\"print\" />\n {t(`proficiency-report:studentReport.print`, 'Print')}{' '}\n <span>\n <img src={ArrowIcon} alt=\"arrow\" />\n </span>\n </button>\n </PrintButton>\n )}\n </Header>\n <Content showSkillDetails={showSkillDetails}>\n <div className=\"section-container\">\n <div className=\"legend-section\">\n <span className=\"ratings-category\">\n <img src={GradeAIcon} alt=\"Grade A\" />\n 9-10\n <span className=\"sub-text\">\n {' '}\n / 10\n {t(\n `proficiency-report:classReport.qnPerSkill`,\n ' Qn per skill'\n )}\n </span>\n </span>\n <span className=\"ratings-category\">\n <img src={GradeBIcon} alt=\"Grade B\" />\n 6-8\n <span className=\"sub-text\">\n {' '}\n / 10\n {t(\n `proficiency-report:classReport.qnPerSkill`,\n ' Qn per skill'\n )}\n </span>\n </span>\n <span className=\"ratings-category\">\n <img src={GradeCIcon} alt=\"Grade C\" />\n 4-5\n <span className=\"sub-text\">\n {' '}\n / 10\n {t(\n `proficiency-report:classReport.qnPerSkill`,\n ' Qn per skill'\n )}\n </span>\n </span>\n <span className=\"ratings-category\">\n <img src={GradeDIcon} alt=\"Grade D\" />\n 1-3\n <span className=\"sub-text\">\n {' '}\n / 10\n {t(\n `proficiency-report:classReport.qnPerSkill`,\n ' Qn per skill'\n )}\n </span>\n </span>\n </div>\n <div className=\"dropdown-section\">\n {!isLeveless && (\n <div className=\"report-level-dropdown\">\n <span className=\"dropdown-label\">\n {t(\n `proficiency-report:header.reportLevel`,\n 'Report Level from'\n )}\n </span>\n <Dropdown flip={false}>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom\"\n >\n {`P${reportLevel.ID}`}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {levels.map(level => (\n <Dropdown.Item\n key={level.ID}\n onClick={() => {\n dispatch(setReportLevel(level));\n setShowSkillDetails(false);\n }}\n >\n {`P${level.ID}`}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n )}\n\n <div className=\"syllabus-dropdown\">\n <span className=\"dropdown-label\">\n {t(`proficiency-report:header.syllabus`, 'Syllabus')}\n </span>\n <Dropdown flip={false}>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-select-syllabus\"\n >\n <span>{selectedSyllabus.curriculumName}</span>\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {curriculums.map(syl => (\n <Dropdown.Item\n key={syl.ID}\n onClick={() => {\n dispatch(setSyllabus(syl));\n dispatch(setReportLevel(getLevel(syl)));\n setShowSkillDetails(false);\n }}\n >\n {syl.curriculumName}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n </div>\n </div>\n <StudentReport\n setShowSkillDetails={setShowSkillDetails}\n selectedSkill={selectedSkill}\n setSelectedSkill={setSelectedSkill}\n setSelectedSkillTopic={setSelectedSkillTopic}\n setSelectedSkillNumber={setSelectedSkillNumber}\n type=\"highscore\"\n data={studentProficiencyReport.Topics}\n />\n </Content>\n </>\n )}\n {showSkillDetails && (\n <SkillDetails\n type=\"highscore\"\n selectedSkill={selectedSkill}\n selectedSkillTopic={selectedSkillTopic}\n selectedSkillNumber={selectedSkillNumber}\n />\n )}\n </StudentReportPage>\n );\n};\n\nexport default StudentHighScoreReport;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { Dropdown } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isEmpty, isNil } from 'ramda';\nimport Spinner from 'components/Shared/Spinner';\nimport {\n fetchStudentProficiencyReportRequest,\n setReportLevel,\n setSyllabus\n} from 'stores/report/actions';\nimport { fetchUserCurriculumsRequest } from 'stores/curriculums/actions';\nimport SkillDetails from 'components/Report/SkillDetails';\nimport StudentReport from 'components/Report/StudentReport';\nimport ToggleReport from 'components/Report/ToggleReport';\nimport avatarPlaceholder from 'assets/img/avatar.png';\nimport PrintIcon from 'assets/img/icon-report-print.svg';\nimport ArrowIcon from 'assets/img/icon-report-print-arrow.svg';\nimport { PrintButton } from 'components/Report/TopBar.styles';\nimport { featureToggle } from 'constants/index';\nimport {\n Header,\n Content,\n ProficiencySkills,\n StudentReportPage\n} from './StudentHighScoreReport.styles';\n\nconst StudentProficiencyReport = ({ match }) => {\n const { t } = useTranslation(['proficiency-report']);\n const studentID = parseInt(match.params.studentID, 10);\n const history = useHistory();\n const dispatch = useDispatch();\n // Redux States\n const {\n studentProficiencyReport,\n isLoading,\n selectedClass,\n reportError,\n reportLevel,\n selectedSyllabus\n } = useSelector(state => state.reports);\n const { curriculums, error } = useSelector(state => state.curriculums);\n // Component states\n const [showSkillDetails, setShowSkillDetails] = useState(false);\n const [selectedSkill, setSelectedSkill] = useState(null);\n const [selectedSkillTopic, setSelectedSkillTopic] = useState(null);\n const [selectedSkillNumber, setSelectedSkillNumber] = useState(null);\n\n // const reportLevels = generateLevels();\n const isLeveless = isEmpty(selectedSyllabus.Levels);\n const levels = !isEmpty(selectedSyllabus.Levels)\n ? selectedSyllabus.Levels\n : [];\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const getLevel = syll => {\n const isSelectedLeveless = isEmpty(syll.Levels);\n const checkLevelAvailable =\n syll && syll.Levels.find(item => item.ID === reportLevel);\n if (!isSelectedLeveless) {\n if (isNil(checkLevelAvailable)) {\n return syll.Levels[0];\n // eslint-disable-next-line no-else-return\n } else {\n return reportLevel;\n }\n // eslint-disable-next-line no-else-return\n } else {\n return { ID: -1 };\n }\n };\n\n useEffect(() => {\n if (error !== '') {\n dispatch(fetchUserCurriculumsRequest());\n }\n }, [dispatch, error]);\n useEffect(() => {\n dispatch(\n fetchStudentProficiencyReportRequest({\n studentID,\n classID: selectedClass.ID,\n reportLevel: isLeveless ? -1 : reportLevel.ID,\n syllabusID: selectedSyllabus.CurriculumID\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n dispatch,\n reportLevel,\n selectedClass.ID,\n selectedSyllabus,\n selectedSyllabus.CurriculumID,\n studentID\n ]);\n return (\n <StudentReportPage>\n {isLoading && <Spinner />}\n {!isLoading && reportError && (\n <div className=\"error\">\n <h3>{reportError}</h3>\n </div>\n )}\n {!isLoading && studentProficiencyReport && (\n <>\n <Header>\n <span\n className=\"back-button\"\n onClick={() => {\n history.push('/report');\n }}\n >\n {t(`proficiency-report:studentReport.back`, '< Back')}\n </span>\n <span className=\"student-details\">\n <img\n src={studentProficiencyReport.ProfilePictureURL}\n onError={e => {\n e.target.src = avatarPlaceholder;\n }}\n alt=\"Student Profile\"\n border=\"0\"\n width=\"50px\"\n height=\"50px\"\n style={{\n marginRight: '0.25rem',\n borderRadius: '50%'\n }}\n />\n <strong>{studentProficiencyReport.Username}</strong>\n </span>\n <ToggleReport studentID={studentID} />\n {featureToggle.reportPrintButton && (\n <PrintButton>\n <button type=\"button\">\n <img src={PrintIcon} alt=\"print\" />\n {t(`proficiency-report:studentReport.print`, 'Print')}{' '}\n <span>\n <img src={ArrowIcon} alt=\"arrow\" />\n </span>\n </button>\n </PrintButton>\n )}\n </Header>\n <Content showSkillDetails={showSkillDetails} type=\"proficiency\">\n <div className=\"section-container\">\n <div className=\"skills-section\">\n <ProficiencySkills proficiency=\"mastery\">\n <div className=\"icon\" />\n <span>\n {t(`proficiency-report:legend.mastery`, 'Mastery')}\n </span>\n <span className=\"prof-descricption\">\n {t(`proficiency-report:legend.proficiency`, 'Proficiency')}{' '}\n <b>&nbsp;80-100</b>\n </span>\n </ProficiencySkills>\n <ProficiencySkills proficiency=\"competent\">\n <div className=\"icon\" />\n <span>\n {t(`proficiency-report:legend.competent`, 'Competent')}\n </span>\n <span className=\"prof-descricption\">\n {t(`proficiency-report:legend.proficiency`, 'Proficiency')}{' '}\n <b>&nbsp;60-79</b>\n </span>\n </ProficiencySkills>\n <ProficiencySkills proficiency=\"beginning\">\n <div className=\"icon\" />\n <span>\n {t(`proficiency-report:legend.beginning`, 'Beginning')}\n </span>\n <span className=\"prof-descricption\">\n {t(`proficiency-report:legend.proficiency`, 'Proficiency')}{' '}\n <b>&nbsp;0-59</b>\n </span>\n </ProficiencySkills>\n <ProficiencySkills proficiency=\"incomplete\">\n <div className=\"icon\" />\n <span>\n {t(`proficiency-report:legend.incomplete`, 'Incomplete')}\n </span>\n <span className=\"prof-descricption\">\n {t(`proficiency-report:legend.question`, 'Question')} &lt;\n <b>&nbsp;10</b>\n </span>\n </ProficiencySkills>\n </div>\n <div className=\"dropdown-section\">\n {!isLeveless && (\n <div className=\"report-level-dropdown\">\n <p className=\"dropdown-label\">\n {t(\n `proficiency-report:header.reportLevel`,\n 'Report Level from'\n )}\n </p>\n <Dropdown flip={false}>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom\"\n >\n {`P${reportLevel.ID}`}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {levels.map(level => (\n <Dropdown.Item\n key={level.ID}\n onClick={() => {\n dispatch(setReportLevel(level));\n setShowSkillDetails(false);\n }}\n >\n {`P${level.ID}`}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n )}\n <div className=\"syllabus-dropdown\">\n <p className=\"dropdown-label\">\n {t(`proficiency-report:header.syllabus`, 'Syllabus')}\n </p>\n <Dropdown flip={false}>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-select-syllabus\"\n >\n <span>{selectedSyllabus.curriculumName}</span>\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {curriculums.map(syl => (\n <Dropdown.Item\n key={syl.ID}\n onClick={() => {\n dispatch(setSyllabus(syl));\n dispatch(setReportLevel(getLevel(syl)));\n setShowSkillDetails(false);\n }}\n >\n {syl.curriculumName}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n </div>\n </div>\n <StudentReport\n setShowSkillDetails={setShowSkillDetails}\n selectedSkill={selectedSkill}\n setSelectedSkill={setSelectedSkill}\n setSelectedSkillTopic={setSelectedSkillTopic}\n setSelectedSkillNumber={setSelectedSkillNumber}\n type=\"proficiency\"\n data={studentProficiencyReport.Topics}\n />\n </Content>\n </>\n )}\n {showSkillDetails && (\n <SkillDetails\n type=\"proficiency\"\n selectedSkill={selectedSkill}\n selectedSkillTopic={selectedSkillTopic}\n selectedSkillNumber={selectedSkillNumber}\n />\n )}\n </StudentReportPage>\n );\n};\n\nexport default StudentProficiencyReport;\n","import React from 'react';\nimport moment from 'moment';\n\nimport LoginIcon from 'assets/img/icon-login-report-login-pdf.png';\nimport NotLoginIcon from '../../assets/img/icon-login-report-not-login-pdf.png';\nimport NotLoginYetIcon from 'assets/img/icon-login-report-login-not-active-pdf.png';\n\nimport Muli from 'assets/fonts/Muli.ttf';\nimport MuliB from 'assets/fonts/MuliB.ttf';\n\nimport {\n Page,\n Text,\n Document,\n StyleSheet,\n Image,\n View,\n Font\n} from '@react-pdf/renderer';\n\nconst LoginReportPDF = ({\n data,\n weekId,\n selectedLevel,\n selectedClass,\n date\n}) => {\n Font.register({\n family: 'Muli',\n fonts: [{ src: Muli }, { src: MuliB, fontWeight: 700 }]\n });\n\n const styles = StyleSheet.create({\n body: {\n paddingHorizontal: '35px',\n fontFamily: 'Muli'\n },\n title: {\n fontSize: 14,\n textAlign: 'center',\n color: '#FF5B00',\n fontWeight: 700,\n marginTop: '35px'\n },\n category: {\n fontSize: 10,\n color: '#727272'\n },\n content: {\n fontSize: 12,\n color: '#363636',\n fontWeight: 700\n },\n items: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n marginTop: '20px',\n marginBottom: '20px'\n },\n table: {\n display: 'table',\n width: 'auto',\n borderStyle: 'solid',\n borderWidth: 1,\n borderColor: '#333',\n borderRightWidth: 0,\n borderBottomWidth: 0\n },\n tableRow: { margin: 'auto', flexDirection: 'row' },\n tableColHead: {\n width: '25%',\n borderStyle: 'solid',\n borderWidth: 1,\n borderColor: '#333',\n borderLeftWidth: 0,\n borderTopWidth: 0,\n backgroundColor: '#FFF2CF'\n },\n tableCol: {\n width: '25%',\n borderStyle: 'solid',\n borderWidth: 1,\n borderColor: '#333',\n borderLeftWidth: 0,\n borderTopWidth: 0\n },\n tableColDaysHead: {\n width: '9.35%',\n borderStyle: 'solid',\n borderWidth: 1,\n borderColor: '#333',\n borderLeftWidth: 0,\n borderTopWidth: 0,\n backgroundColor: '#FFF2CF'\n },\n tableColDays: {\n width: '9.37%',\n borderStyle: 'solid',\n borderWidth: 1,\n borderColor: '#333',\n borderLeftWidth: 0,\n borderTopWidth: 0\n },\n tableCell: {\n margin: 'auto',\n marginTop: 5,\n marginBottom: 5,\n fontSize: 10,\n color: '#545454',\n fontWeight: 700\n },\n tableCellHead: {\n margin: 'auto',\n marginTop: 10,\n marginBottom: 5,\n fontSize: 10,\n color: '#545454'\n },\n tableCellDay: {\n margin: 'auto',\n marginTop: 5,\n fontSize: 10,\n color: '#FF5B00',\n textTransform: 'uppercase'\n },\n tableCellDate: {\n margin: 'auto',\n marginBottom: 5,\n fontSize: 10,\n color: '#FF5B00'\n },\n tableCellStu: {\n margin: 5,\n fontSize: 10,\n textAlign: 'left',\n color: '#363636',\n fontWeight: 700\n },\n pageNumber: {\n fontFamily: 'Muli',\n borderStyle: 'solid',\n borderWidth: 1,\n borderLeftWidth: 0,\n borderTopWidth: 0,\n textAlign: 'center',\n borderColor: '#333',\n fontSize: 10\n }\n });\n\n const icon = day => {\n if (day === 1) {\n return <Image cache={false} src={LoginIcon}></Image>;\n }\n if (day === 0) {\n return <Image cache={false} src={NotLoginIcon}></Image>;\n }\n if (day === 2) {\n return <Image cache={false} src={NotLoginYetIcon}></Image>;\n }\n };\n\n // date\n let currentDate = new Date();\n let days = [];\n for (let i = 0; i <= 6; i++) {\n let first = currentDate.getDate() - currentDate.getDay() + i;\n let day = new Date(currentDate.setDate(first));\n days.push(day);\n }\n\n return (\n <Document>\n <Page size=\"A4\" style={styles.body} wrap>\n <Text style={styles.title} fixed>\n Login Report\n </Text>\n <View style={styles.items} fixed>\n <View>\n <Text style={styles.category}>Level</Text>\n <Text style={styles.content}>{`Primary ${selectedLevel}`}</Text>\n </View>\n <View>\n <Text style={styles.category}>Class</Text>\n <Text style={styles.content}>{selectedClass}</Text>\n </View>\n <View>\n <Text style={styles.category}>Date</Text>\n <Text style={styles.content}>{date}</Text>\n </View>\n </View>\n {/* Table */}\n <View style={styles.table}>\n <View style={styles.tableRow} fixed>\n <View style={styles.tableColHead}>\n <Text style={styles.tableCellHead}>Student Name</Text>\n </View>\n <View style={styles.tableColDaysHead}>\n <Text style={styles.tableCellHead}>Total</Text>\n </View>\n {days.map(day => (\n <View style={styles.tableColDaysHead}>\n <Text style={styles.tableCellDay}>\n {moment(day).format('ddd')}\n </Text>\n <Text style={styles.tableCellDay}>\n {moment(day)\n .subtract(weekId * 7, 'days')\n .format('DD/MM')}\n </Text>\n </View>\n ))}\n </View>\n {data &&\n data.map(item => (\n <View style={styles.tableRow}>\n <View style={styles.tableCol}>\n <Text style={styles.tableCellStu}>{item.Name}</Text>\n </View>\n <View style={styles.tableColDays}>\n <Text style={styles.tableCell}>{item.Total}</Text>\n </View>\n {item.LoginStatus.map(status => (\n <View style={styles.tableColDays}>\n <Text style={styles.tableCell}>{icon(status)}</Text>\n </View>\n ))}\n </View>\n ))}\n <Text\n style={styles.pageNumber}\n render={({ pageNumber, totalPages }) =>\n `${pageNumber} / ${totalPages}`\n }\n fixed\n />\n </View>\n </Page>\n </Document>\n );\n};\n\nexport default LoginReportPDF;\n","import styled from 'styled-components';\n\nexport const LoginReportTableStyle = styled.div`\n margin: 0 30px 30px;\n .empty-result {\n display: flex;\n justify-content: center;\n margin-top 100px;\n }\n .table {\n vertical-align: middle;\n text-align: center;\n border: 1px solid #e9e9e9;\n thead {\n position:sticky;\n top: 215px;\n @media (max-width: 882px) {\n top: 200px;\n }\n @media (max-width: 768px) {\n top: 215px;\n }\n @media (max-width: 767px) {\n top: 0;\n }\n }\n .date {\n width: 100px;\n text-transform: uppercase;\n color: #ff5b00;\n font-weight: normal;\n padding: 0.5rem;\n }\n .student,\n .total {\n color: #000000;\n font-weight: normal;\n padding: 0.5rem;\n\n }\n .student {\n text-align: left;\n padding-left: 30px;\n @media (max-width: 1024px) {\n width: 500px;\n }\n }\n .total {\n width: 100px;\n }\n thead {\n background-color: #fff2cf;\n font-size: 16px;\n th {\n vertical-align: middle;\n }\n }\n tbody {\n tr:nth-child(odd) {\n background-color: #ffffff;\n }\n tr:nth-child(even) {\n background-color: #f8f8f8;\n }\n td {\n vertical-align: middle;\n text-align: center;\n }\n }\n .student-name {\n display: flex;\n align-items: center;\n border-top: none;\n padding-left: 30px;\n text-align: left;\n img {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n }\n span {\n font-weight: bold;\n font-size: 14px;\n margin-left: 15px;\n color: #363636;\n }\n }\n .total-number {\n color: #545454;\n font-weight: bold;\n }\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport Avatar from 'assets/img/avatar.png';\nimport LoginIcon from 'assets/img/icon-login-report-active.svg';\nimport NotLoginIcon from 'assets/img/icon-login-report-not-login.svg';\nimport NotLoginYetIcon from 'assets/img/icon-login-report-not-active.svg';\nimport EmptyResult from 'assets/img/empty-search-results.svg';\nimport { LoginReportTableStyle } from './LoginReportTable.styles';\n\nconst LoginReportTable = ({ data, weekId, weekItems }) => {\n // login report status icon\n const { t } = useTranslation(['login-report']);\n const Login = <img src={LoginIcon} alt=\"login-icon\" />;\n const NotLogin = <img src={NotLoginIcon} alt=\"not-login-icon\" />;\n const NotLoginYet = <img src={NotLoginYetIcon} alt=\"not-login-yet-icon\" />;\n const icon = day => {\n if (day === 1) {\n return Login;\n }\n if (day === 0) {\n return NotLogin;\n }\n if (day === 2) {\n return NotLoginYet;\n }\n };\n // Set days of week\n const endDate = moment(\n weekItems[weekId].Display.split(' - ')[1],\n 'DD MMM YYYY'\n );\n const days = [endDate];\n for (let i = 1; i <= 6; i++) {\n const date = moment(\n weekItems[weekId].Display.split(' - ')[1],\n 'DD MMM YYYY'\n ).subtract(i, 'days');\n days.unshift(date);\n }\n return (\n <LoginReportTableStyle>\n {data && data.length === 0 ? (\n <div className=\"empty-result\">\n <img src={EmptyResult} alt=\"empty\" />\n </div>\n ) : (\n <table className=\"table table-bordered table-responsive-md\">\n <thead>\n <tr>\n <th scope=\"col\" className=\"student\">\n {t(`login-report:report.studName`, 'Student Name')}\n </th>\n <th scope=\"col\" className=\"total\">\n {t(`login-report:report.total`, 'Total')}\n </th>\n {days &&\n days.map((day, index) => (\n <th scope=\"col\" className=\"date\" key={index}>\n {t(\n `login-report:report.${day.format('ddd')}`,\n day.format('ddd')\n )}{' '}\n {day.format('D')}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data &&\n data.map((item, index) => (\n <tr key={index}>\n <td className=\"student-name\">\n <img\n onError={e => {\n e.target.src = Avatar;\n }}\n src={item.ProfileImage}\n alt=\"avatar\"\n />\n <span>{item.Name}</span>\n </td>\n <td className=\"total-number\">{item.Total}</td>\n {item.LoginStatus.map((status, index) => (\n <td key={index}>{icon(status)}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </LoginReportTableStyle>\n );\n};\n\nexport default LoginReportTable;\n","import styled from 'styled-components';\n\nexport const LoginReportContainer = styled.div`\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media (max-width: 639px) {\n padding-left: 0px;\n }\n .top-bar {\n display: flex;\n flex-direction: column;\n background: white;\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.161);\n position: sticky;\n right: 0;\n left: 195px;\n z-index: 100;\n top: 53px;\n @media (max-width: 1024px) {\n left: 56px;\n }\n @media (max-width: 639px) {\n left: 0px;\n }\n .title {\n text-align: center;\n margin: 25px 0px 10px;\n font-weight: bold;\n font-size: 16px;\n line-height: 20px;\n color: #202020;\n }\n .top-bar-content {\n display: flex;\n justify-content: space-between;\n padding: 0px 40px;\n margin-bottom: 5px;\n align-items: baseline;\n @media (max-width: 1038px) {\n padding: 0px 20px;\n }\n .dropdown-section {\n display: flex;\n .dropdown-label {\n margin-top: 5px;\n @media (max-width: 1038px) {\n margin-top: 8px;\n }\n }\n .dropdown-custom {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 160px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n @media (max-width: 882px) {\n font-size: 12px;\n width: 120px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n width: 110px;\n }\n }\n .level {\n width: 75px;\n }\n .class {\n width: 190px;\n }\n }\n .weekly-date-section {\n display: flex;\n margin-right: 200px;\n @media (max-width: 1375px) {\n margin-right: 300px;\n }\n @media (max-width: 1300px) {\n margin-right: 100px;\n }\n @media (max-width: 1000px) {\n margin-right: 0;\n }\n .nav-btn {\n border: none;\n background: none;\n margin: 0px 5px;\n &:hover {\n color: #ff5b00;\n }\n }\n .nav-btn:disabled {\n color: #d8d8d8;\n }\n .week,\n .date {\n margin-block-start: 1em;\n margin-block-end: 1em;\n border: 0.5px solid #c4c4c4;\n border-radius: 2px;\n padding: 8px 15px;\n }\n .week {\n border-bottom-right-radius: 0px;\n border-top-right-radius: 0px;\n font-size: 16px;\n color: #545454;\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n .date {\n border-left: none;\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n font-weight: 600;\n font-size: 16px;\n color: #ff5b00;\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n }\n .action-button {\n button {\n padding: 10px;\n background: none;\n border: 0.5px solid #c4c4c4;\n box-sizing: border-box;\n border-radius: 2px;\n color: #545454;\n &:hover {\n color: #ff5b00;\n }\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n span {\n margin-right: 10px;\n color: #545454;\n &:hover {\n color: #ff5b00;\n }\n img {\n @media (max-width: 882px) {\n width: 18px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n }\n }\n }\n }\n`;\n\nexport const SeparationBar = styled.div`\n height: 30px;\n width: 100%;\n position: sticky;\n z-index: 99;\n background: #f1f1f1;\n top: 186px;\n box-shadow: inset 0px 0px -3px 6px rgba(0, 0, 0, 0.161);\n @media (max-width: 882px) {\n top: 172px;\n }\n @media (max-width: 768px) {\n top: 186px;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport { Dropdown } from 'react-bootstrap';\nimport moment from 'moment';\nimport PrintIcon from 'assets/img/print-icon.svg';\nimport { PDFDownloadLink } from '@react-pdf/renderer';\nimport LoginReportPDF from 'components/Report/LoginReportPDF';\nimport LoginReportTable from 'components/Report/LoginReportTable';\nimport generateLevels from 'helpers/reportLevels';\nimport Spinner from 'components/Shared/Spinner';\nimport {\n fetchLoginReportRequest,\n fetchWeekItemsRequest,\n setSelectedClass,\n setClassLevel\n} from 'stores/report/actions';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { LoginReportContainer, SeparationBar } from './LoginReport.styles';\n\nconst LoginReport = () => {\n const { t } = useTranslation(['login-report']);\n const dispatch = useDispatch();\n // Redux States\n const {\n loginReport,\n weekItems,\n selectedClass,\n selectedClassLevel,\n isLoading\n } = useSelector(state => state.reports);\n const { classes } = useSelector(state => state.lookup);\n const reportLevels = generateLevels();\n const [weekId, setWeekId] = useState(0);\n\n // Filter out only classes of type 1\n const filteredClasses =\n classes.length > 0\n ? classes.filter(classObject => classObject.Type === 1)\n : [];\n\n useEffect(() => {\n dispatch(fetchClassRequest(selectedClassLevel));\n }, [dispatch, selectedClassLevel]);\n\n useEffect(() => {\n dispatch(fetchWeekItemsRequest({ numberOfPreviousWeek: 3 }));\n }, [dispatch]);\n\n useDeepCompareEffect(() => {\n if (selectedClass) {\n dispatch(\n fetchLoginReportRequest({\n classID: selectedClass && selectedClass.ID,\n weekID: weekId\n })\n );\n }\n }, [dispatch, selectedClass, weekId]);\n\n return (\n <LoginReportContainer>\n <div className=\"top-bar\">\n <div className=\"title\">\n {t(`login-report:header.loginReport`, 'Login Report')}\n </div>\n <div className=\"top-bar-content\">\n <div className=\"dropdown-section\">\n <p className=\"dropdown-label\">\n {t(`login-report:header.class`, 'Class')}\n </p>\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom level\"\n >\n {`P${selectedClassLevel}`}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {reportLevels.map(level => (\n <Dropdown.Item\n key={level}\n onClick={() => {\n dispatch(setClassLevel(level));\n }}\n >{`P${level}`}</Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n <Dropdown>\n <Dropdown.Toggle\n variant=\"light\"\n className=\"dropdown-custom class\"\n >\n {selectedClass && selectedClass.Name ? selectedClass.Name : '-'}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {filteredClasses.map(item => (\n <Dropdown.Item\n key={item.ID}\n onClick={event => {\n event.preventDefault();\n dispatch(setSelectedClass(item));\n }}\n >\n {item.Name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <div className=\"weekly-date-section\">\n <button\n className=\"nav-btn\"\n type=\"button\"\n disabled={weekId === 2}\n onClick={() => {\n setWeekId(weekId + 1);\n }}\n >{`<`}</button>\n <p className=\"week\">{`${t(`login-report:header.week`, 'Week')} ${\n weekItems\n ? moment(\n weekItems[weekId].Display.split(' - ')[1],\n 'DD MMM YYYY'\n ).isoWeek()\n : ''\n }`}</p>\n <p className=\"date\">\n {isLoading\n ? 'Loading...'\n : weekItems && weekItems[weekId].Display}\n </p>\n <button\n className=\"nav-btn\"\n type=\"button\"\n disabled={weekId === 0}\n onClick={() => {\n setWeekId(weekId - 1);\n }}\n >{`>`}</button>\n </div>\n {!isLoading && (\n <PDFDownloadLink\n document={\n <LoginReportPDF\n data={loginReport}\n weekId={weekId}\n selectedLevel={selectedClassLevel}\n selectedClass={selectedClass && selectedClass.Name}\n date={weekItems && weekItems[weekId].Display}\n />\n }\n fileName={`KooBits Login Report - ${weekItems &&\n weekItems[weekId].Display} - ${selectedClass &&\n selectedClass.Name}.pdf`}\n >\n <div className=\"action-button\">\n <button>\n <span>\n <img src={PrintIcon} alt=\"print-icon\" />\n </span>\n {t(`login-report:header.print`, 'Print')}\n </button>\n </div>\n </PDFDownloadLink>\n )}\n </div>\n </div>\n <SeparationBar />\n {isLoading ? (\n <div style={{ marginTop: '200px' }}>\n <Spinner />\n </div>\n ) : (\n weekItems && (\n <LoginReportTable\n data={loginReport}\n weekId={weekId}\n weekItems={weekItems}\n />\n )\n )}\n </LoginReportContainer>\n );\n};\n\nexport default LoginReport;\n","import styled from 'styled-components';\n\nexport const MonthlyReportStyle = styled.div`\n background-color: #ffffff;\n display: grid;\n grid-template-columns: repeat(6, 120px);\n grid-column-gap: 71px;\n grid-row-gap: 51px;\n padding: 47px 114px;\n justify-content: center;\n margin: 100px 38px 50px 38px;\n @media (max-width: 1450px) {\n grid-template-columns: repeat(4, 120px);\n grid-column-gap: 50px;\n padding: 47px 80px;\n }\n @media (max-width: 850px) {\n grid-template-columns: repeat(3, 120px);\n grid-column-gap: 50px;\n padding: 47px 60px;\n }\n .monthlyContainer {\n align-self: flex-start;\n border: none;\n background-color: transparent;\n }\n .reportName {\n font-size: 12px;\n }\n .monthlyImage {\n width: 78px;\n height: 78px;\n margin-bottom: 17px;\n }\n .available {\n text-align: center;\n margin-top: -15px;\n color: #f79a41;\n font-size: 12px;\n }\n`;\n","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { nextStep } from 'stores/utils/step/actions';\nimport { MonthlyReportStyle } from './MonthlyReport.styles';\n\nconst images = {\n ava_1: require('assets/img/report/report_icon_1.png'),\n ava_2: require('assets/img/report/report_icon_2.png'),\n ava_3: require('assets/img/report/report_icon_3.png'),\n ava_4: require('assets/img/report/report_icon_4.png'),\n ava_5: require('assets/img/report/report_icon_5.png'),\n ava_6: require('assets/img/report/report_icon_6.png'),\n ava_7: require('assets/img/report/report_icon_7.png'),\n ava_8: require('assets/img/report/report_icon_8.png'),\n ava_9: require('assets/img/report/report_icon_9.png'),\n ava_10: require('assets/img/report/report_icon_10.png'),\n ava_11: require('assets/img/report/report_icon_11.png'),\n ava_12: require('assets/img/report/report_icon_12.png'),\n no_1: require('assets/img/report/report_icon_no_1.png'),\n no_2: require('assets/img/report/report_icon_no_2.png'),\n no_3: require('assets/img/report/report_icon_no_3.png'),\n no_4: require('assets/img/report/report_icon_no_4.png'),\n no_5: require('assets/img/report/report_icon_no_5.png'),\n no_6: require('assets/img/report/report_icon_no_6.png'),\n no_7: require('assets/img/report/report_icon_no_7.png'),\n no_8: require('assets/img/report/report_icon_no_8.png'),\n no_9: require('assets/img/report/report_icon_no_9.png'),\n no_10: require('assets/img/report/report_icon_no_10.png'),\n no_11: require('assets/img/report/report_icon_no_11.png'),\n no_12: require('assets/img/report/report_icon_no_12.png')\n};\nconst MONTHLY = {\n 1: { name: 'Jan' },\n 2: { name: 'Feb' },\n 3: { name: 'Mar' },\n 4: { name: 'Apr' },\n 5: { name: 'May' },\n 6: { name: 'Jun' },\n 7: { name: 'Jul' },\n 8: { name: 'Aug' },\n 9: { name: 'Sep' },\n 10: { name: 'Oct' },\n 11: { name: 'Nov' },\n 12: { name: 'Dec' }\n};\n\nconst MonthlyReport = props => {\n const { data } = props;\n const { t } = useTranslation(['monthly-report']);\n const history = useHistory();\n const dispatch = useDispatch();\n\n const handlePress = useCallback(\n e => () => {\n dispatch(nextStep());\n history.push(\n `/report/teacherreport/monthlyreport?year=${e.Year}&month=${e.Month}`\n );\n },\n [dispatch, history]\n );\n return (\n <MonthlyReportStyle>\n {data &&\n data.map((e, index) => {\n return (\n <button\n disabled={!e.IsAvailable}\n type=\"button\"\n key={e.ReportName}\n className=\"monthlyContainer\"\n onClick={handlePress(e)}\n >\n {e.Month === index + 1 && (\n <img\n className=\"monthlyImage\"\n src={\n images[e.IsAvailable ? `ava_${e.Month}` : `no_${e.Month}`]\n }\n alt=\"monthImage\"\n />\n )}\n <p className=\"reportName\">\n {t(\n `monthly-report:report.titleReport`,\n {\n month: t(`monthly-report:month.${MONTHLY[e.Month].name}`)\n },\n `${MONTHLY[e.Month].name} Report`\n )}\n </p>\n {e.IsAvailable && (\n <p className=\"available\">\n {t(`monthly-report:report.Available`, 'Available')}\n </p>\n )}\n </button>\n );\n })}\n </MonthlyReportStyle>\n );\n};\nexport default MonthlyReport;\n","import styled from 'styled-components';\n\nexport const MonthlyActivity = styled.div`\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media (max-width: 639px) {\n padding-left: 0px;\n }\n .top-bar {\n display: flex;\n background: #ffffff;\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.161);\n position: fixed;\n right: 0;\n left: 195px;\n z-index: 100;\n justify-content: center;\n top: 53px;\n @media (max-width: 1024px) {\n left: 56px;\n }\n @media (max-width: 639px) {\n left: 0px;\n }\n .title {\n margin: 20px 30px 20px 0px;\n font-size: 20px;\n }\n .dropdown-section {\n display: flex;\n flex-direction: row;\n align-items: center;\n .dropdown-label {\n margin-top: 15px;\n font-size: 13px;\n font-weight: 600;\n }\n .dropdown-custom {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 75px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n @media (max-width: 882px) {\n font-size: 12px;\n width: 120px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n width: 110px;\n }\n }\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Dropdown } from 'react-bootstrap';\nimport MonthlyReport from 'components/Report/MonthlyReport';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fetchTeacherReportMonthRequest } from 'stores/report/actions';\nimport Spinner from 'components/Shared/Spinner';\nimport moment from 'moment';\nimport { MonthlyActivity } from './TeacherMonthlyReport.styles';\n\nconst years = () => {\n const dataYears = [];\n const dateStart = moment().subtract(1, 'y');\n const dateEnd = moment();\n while (dateEnd.diff(dateStart, 'years') >= 0) {\n dataYears.push(dateStart.format('YYYY'));\n dateStart.add(1, 'year');\n }\n return dataYears.reverse();\n};\n\nconst TeacherMonthlyReport = () => {\n const { t } = useTranslation(['monthly-report']);\n const [yearSelected, setYearSelected] = useState(new Date().getFullYear());\n const dispatch = useDispatch();\n\n const { isLoading, teacherMonthReport } = useSelector(state => state.reports);\n\n useEffect(() => {\n dispatch(fetchTeacherReportMonthRequest(yearSelected));\n }, [dispatch, yearSelected]);\n\n return (\n <MonthlyActivity>\n <div className=\"top-bar\">\n <p className=\"title\">\n {t(`monthly-report:header.monthlyReport`, 'Monthly Report')}\n </p>\n <div className=\"dropdown-section\">\n <p className=\"dropdown-label\">\n {t(`monthly-report:header.year`, 'Year')}\n </p>\n <Dropdown>\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom\">\n {yearSelected}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {years().map(e => (\n <Dropdown.Item key={e} onClick={() => setYearSelected(e)}>\n {e}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n </div>\n {isLoading && <Spinner />}\n <MonthlyReport data={teacherMonthReport} />\n </MonthlyActivity>\n );\n};\n\nexport default TeacherMonthlyReport;\n","import styled from 'styled-components';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const MonthlyReportChartStyle = styled.div`\n .printChart {\n background-color: #000;\n }\n background-color: #ffffff;\n padding: 30px 100px;\n display: block;\n text-align: center;\n margin: 80px 150px 50px 150px;\n @page {\n margin: 20mm 20mm 20mm 0mm;\n }\n @media (max-width: 1400px) {\n margin: 80px 80px 50px 80px;\n padding: 30px 80px;\n }\n @media (max-width: 900px) {\n margin: 80px 50px 50px 50px;\n padding: 30px 50px;\n }\n .koobitsTitle {\n font-size: 36px;\n color: #4a4a4a;\n align-self: center;\n }\n .monthlyText {\n font-size: 26px;\n color: #e26717;\n align-self: center;\n }\n .reportContainer {\n height: 300px;\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: center;\n margin-bottom: 30px;\n display: -webkit-box;\n -webkit-box-orient: block-axis;\n -webkit-box-lines: multiple;\n @media (max-width: 1450px) {\n height: 400px;\n }\n @media (max-width: 1300px) {\n height: auto;\n }\n }\n .renderReport {\n display: flex;\n margin: 10px 0px;\n width: 500px;\n @media (max-width: 1650px) {\n width: 400px;\n }\n @media (max-width: 1450px) {\n width: 300px;\n }\n @media (max-width: 1300px) {\n width: 500px;\n }\n @media (max-width: 1200px) {\n width: 400px;\n }\n @media (max-width: 900px) {\n width: 350px;\n }\n }\n .reportName {\n font-size: 22px;\n margin-left: 10px;\n }\n .number {\n min-width: 23px;\n max-width: 23px;\n height: 23px;\n background-color: #424242;\n color: white;\n border: 1px solid #424242;\n border-radius: 1000px;\n font-size: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n }\n .renderLevel {\n display: grid;\n grid-template-columns: repeat(3, 80px);\n grid-column-gap: 30px;\n grid-row-gap: 20px;\n }\n .levelButton {\n border: none;\n background-color: transparent;\n }\n .levelText {\n color: #337ab7;\n font-size: 14px;\n }\n .reportNameChart {\n display: flex;\n justify-content: center;\n margin-bottom: 10px;\n }\n .levelChartName {\n display: flex;\n justify-content: center;\n font-size: 14px;\n color: #333;\n }\n .chart {\n margin: 30px 0px;\n }\n .chartReportContainer {\n text-align: center;\n }\n`;\n","import { isNil } from 'ramda';\nimport React, { useEffect, useCallback, useState } from 'react';\nimport { Bar, PolarArea } from 'react-chartjs-2';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { MonthlyReportChartStyle } from './MonthlyReportChart.styles';\n\nconst MonthlyReportChart = props => {\n const { isLoading, classes } = useSelector(state => state.manageClasses);\n const { data, reportName } = props;\n const [barChart, setBarChart] = useState(null);\n const [polarChart, setPolarChart] = useState(null);\n const [horizontalChart, setHorizontalChart] = useState([]);\n const [tiltedChart, setTiltedChart] = useState([]);\n\n const { t } = useTranslation(['monthly-report']);\n const monthName = t(\n `monthly-report:month.${reportName.ReportName.slice(0, 3)}`,\n reportName.ReportName.slice(0, 3)\n );\n const handleClick = useCallback(\n (index, levelIndex) => () => {\n document\n .getElementById(`refPrimary_${index}_${levelIndex}`)\n .scrollIntoView();\n },\n []\n );\n\n const bar = useCallback(() => {\n const totalLoginData =\n data &&\n data.totalPercentLoginByMonthReportData.data.map(d => d.totallogindata);\n const loginPercentageData =\n data &&\n data.totalPercentLoginByMonthReportData.data.map(\n d => d.loginpercentageData\n );\n const chartData = {\n labels: [\n t('monthly-report:longMonths.January', 'January'),\n t('monthly-report:longMonths.February', 'February'),\n t('monthly-report:longMonths.March', 'March'),\n t('monthly-report:longMonths.April', 'April'),\n t('monthly-report:longMonths.May', 'May'),\n t('monthly-report:longMonths.June', 'June'),\n t('monthly-report:longMonths.July', 'July'),\n t('monthly-report:longMonths.August', 'August'),\n t('monthly-report:longMonths.September', 'September'),\n t('monthly-report:longMonths.October', 'October'),\n t('monthly-report:longMonths.November', 'November'),\n t('monthly-report:longMonths.December', 'December')\n ],\n datasets: [\n {\n type: 'line',\n label: t(\n 'monthly-report:SpecificMonthlyReport.loginPercentage',\n 'Login Percentage (%)'\n ),\n data: loginPercentageData,\n borderWidth: 2,\n borderColor: '#0D97E5',\n fill: true,\n yAxisID: 'yAxisLine',\n lineTension: 0.5\n },\n {\n type: 'bar',\n label: t(\n 'monthly-report:SpecificMonthlyReport.totalLogin',\n 'Total Login'\n ),\n data: totalLoginData,\n backgroundColor: '#ff6384',\n yAxisID: 'yAxisBar'\n }\n ]\n };\n setBarChart(chartData);\n }, [data, t]);\n\n const polar = useCallback(() => {\n const percentage =\n data &&\n data.loginComparisionByLevelReportData.data.map(d => d.percentage);\n const chartData = {\n labels: ['P1 (%)', 'P2 (%)', 'P3 (%)', 'P4 (%)', 'P5 (%)', 'P6 (%)'],\n datasets: [\n {\n data: percentage,\n label: 'Login % By Level',\n backgroundColor: [\n 'rgba(255,136,193,0.5)',\n 'rgba(255,203,158,0.5)',\n 'rgba(255,232,169,0.5)',\n 'rgba(127,227,223,0.5)',\n 'rgba(127,205,245,0.5)',\n 'rgba(219,127,255,0.5)'\n ],\n borderWidth: 1\n }\n ]\n };\n setPolarChart(chartData);\n }, [data]);\n\n const horizontalBar = useCallback(() => {\n const temp = data && data.loginComparisionByLevelAndClassReportData.data;\n const percentage = temp.map(e =>\n !isNil(e.classes) ? e.classes.map(e => e.percentage) : []\n );\n const label = temp.map(e =>\n !isNil(e.classes) ? e.classes.map(e => e.className) : []\n );\n const chartData = [];\n temp.forEach((e, i) => {\n chartData[i] = {\n labels: label[i],\n datasets: [\n {\n data: percentage[i],\n label: t(\n 'monthly-report:SpecificMonthlyReport.loginPercentage',\n 'Login Percentage (%)'\n ),\n backgroundColor: 'rgba(255,136,193,0.5)',\n borderWidth: 1,\n yAxisID: 'yAxisBar'\n }\n ]\n };\n });\n setHorizontalChart(chartData);\n }, [data, t]);\n\n const tiltedBar = useCallback(() => {\n const temp =\n data && data.averageHomeworkQuestionsPerStudentPerclassReportData.data;\n const homeworkQuestionData = temp.map(e =>\n !isNil(e.classes) ? e.classes.map(e => e.homeworkQuestionData) : []\n );\n const SDLQuestionData = temp.map(e =>\n !isNil(e.classes) ? e.classes.map(e => e.sdlQuestionData) : []\n );\n const label = temp.map(e =>\n !isNil(e.classes) ? e.classes.map(e => e.className) : []\n );\n const chartData = [];\n temp.forEach((e, i) => {\n chartData[i] = {\n labels: label[i],\n datasets: [\n {\n data: homeworkQuestionData[i],\n label: t(\n 'monthly-report:SpecificMonthlyReport.averageHw',\n 'Average homework questions per student per class per month'\n ),\n backgroundColor: 'rgba(255,136,193,0.5)',\n borderWidth: 1\n },\n {\n data: SDLQuestionData[i],\n label: t(\n 'monthly-report:SpecificMonthlyReport.averageSelf',\n 'Average self-directed learning questions per student'\n ),\n backgroundColor: 'rgba(127,205,245,0.5)',\n borderWidth: 1\n }\n ]\n };\n });\n setTiltedChart(chartData);\n }, [data, t]);\n\n useEffect(() => {\n if (data) {\n bar();\n polar();\n horizontalBar();\n tiltedBar();\n }\n }, [data, bar, polar, horizontalBar, tiltedBar]);\n\n return (\n <MonthlyReportChartStyle>\n <p className=\"koobitsTitle\">\n {!isLoading && classes !== null && (classes.Name || '')}\n </p>\n <p className=\"monthlyText\">\n {t(\n `monthly-report:SpecificMonthlyReport.MonthlyReportTitle`,\n {\n month: monthName,\n year: reportName.Year\n },\n `Monthly Report - ${monthName} ${reportName.Year}`\n )}\n </p>\n <div className=\"reportContainer\">\n {data &&\n Object.entries(data).map((e, index) => {\n if (index > 1) {\n return (\n <div className=\"renderReport\" key={e[1].reportName}>\n <p className=\"number\">{index - 1}</p>\n <div>\n <p className=\"reportName\">\n {t(\n `monthly-report:SpecificMonthlyReport.${e[1].reportName}`,\n `${e[1].reportName}`\n )}\n </p>\n <div className=\"renderLevel\">\n {!isNil(e[1].data) &&\n e[1].data.map((level, levelIndex) => {\n if (index > 3) {\n return (\n <button\n className=\"levelButton\"\n type=\"button\"\n key={level.levelName}\n onClick={handleClick(index, levelIndex)}\n >\n <p className=\"levelText\">\n {t(\n `monthly-report:SpecificMonthlyReport.${level.levelName}`,\n `${level.levelName}`\n )}\n </p>\n </button>\n );\n }\n return null;\n })}\n </div>\n </div>\n </div>\n );\n }\n return null;\n })}\n </div>\n <div className=\"chartReportContainer\">\n {data &&\n Object.entries(data).map((e, index) => {\n if (index > 1) {\n return (\n <div key={`chart-${e[1].reportName}`}>\n <div className=\"reportNameChart\">\n <p className=\"number\">{index - 1}</p>\n <p className=\"reportName\">\n {t(\n `monthly-report:SpecificMonthlyReport.${e[1].reportName}`,\n `${e[1].reportName}`\n )}\n </p>\n </div>\n <div>\n {index - 2 === 0 ? (\n <>\n <Bar\n data={barChart}\n options={{\n responsive: true,\n plugins: {\n title: {\n display: true,\n text: t(\n 'monthly-report:SpecificMonthlyReport.loginData',\n 'Login Data'\n )\n }\n },\n tooltips: {\n mode: 'index',\n intersect: true\n },\n scales: {\n yAxisLine: {\n position: 'right',\n grid: {\n drawOnChartArea: false\n },\n suggestedMin: 0,\n suggestedMax: 100\n }\n }\n }}\n />\n <hr />\n </>\n ) : null}\n {index - 2 === 1 ? (\n <>\n <div style={{ width: '75%', margin: '0 auto' }}>\n <PolarArea\n data={polarChart}\n options={{\n responsive: true,\n plugins: {\n legend: {\n position: 'right'\n },\n title: {\n display: true,\n text: t(\n 'monthly-report:SpecificMonthlyReport.login',\n 'Login %'\n )\n }\n },\n scale: {\n ticks: {\n beginAtZero: true,\n stepSize: 10\n },\n reverse: false\n },\n animation: {\n animateRotate: false,\n animateScale: true\n }\n }}\n />\n </div>\n <hr />\n </>\n ) : null}\n {e[1].data.map((d, levelIndex) => {\n if (index - 2 === 2) {\n return (\n <>\n <div\n id={`refPrimary_${index}_${levelIndex}`}\n className=\"chart\"\n key={d.levelName}\n >\n <p className=\"levelChartName\">\n {' '}\n {t(\n `monthly-report:SpecificMonthlyReport.${d.levelName}`,\n `${d.levelName}`\n )}\n </p>\n\n <Bar\n id={`horizontalBarChart-${levelIndex}`}\n data={horizontalChart[levelIndex]}\n options={{\n indexAxis: 'y',\n plugins: {\n legend: {\n position: 'right',\n align: 'start',\n labels: {\n padding: 35\n }\n },\n title: {\n display: true,\n text: t(\n 'monthly-report:SpecificMonthlyReport.loginPercentage',\n 'Login Percentage (%)'\n )\n }\n },\n scales: {\n yAxisBar: {\n ticks: {\n autoSkip: false\n }\n }\n }\n }}\n />\n </div>\n <hr />\n </>\n );\n }\n if (index - 2 === 3) {\n return (\n <>\n <div\n id={`refPrimary_${index}_${levelIndex}`}\n className=\"chart\"\n key={d.levelName}\n >\n <p className=\"levelChartName\">\n {' '}\n {t(\n `monthly-report:SpecificMonthlyReport.${d.levelName}`,\n `${d.levelName}`\n )}\n </p>\n <Bar\n id={`tiltedBarChart-${levelIndex}`}\n data={tiltedChart[levelIndex]}\n options={{\n plugins: {\n title: {\n display: true,\n text: t(\n 'monthly-report:SpecificMonthlyReport.qnSubmissions',\n { level: index + 1 },\n `Question submissions - P${index + 1}`\n )\n }\n },\n scales: {\n xAxes: [\n {\n ticks: {\n maxRotation: 50,\n minRotation: 50\n }\n }\n ]\n }\n }}\n />\n </div>\n <hr />\n </>\n );\n }\n return null;\n })}\n </div>\n </div>\n );\n }\n return null;\n })}\n </div>\n </MonthlyReportChartStyle>\n );\n};\nexport default MonthlyReportChart;\n","import styled from 'styled-components';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const SpecificMonthlyReportStyle = styled.div`\n padding-left: 195px;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media (max-width: 639px) {\n padding-left: 0px;\n }\n .top-bar {\n display: flex;\n background: #ffffff;\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.161);\n position: fixed;\n right: 0;\n left: 195px;\n z-index: 100;\n justify-content: space-between;\n top: 53px;\n padding: 10px 100px 10px 50px;\n @media (max-width: 1024px) {\n left: 56px;\n }\n @media (max-width: 639px) {\n left: 0px;\n }\n .backButtonWrapper {\n align-self: center;\n }\n .headerRight {\n display: flex;\n }\n .dropdown-section {\n display: flex;\n flex-direction: row;\n align-items: center;\n .dropdown-label {\n margin-top: 15px;\n font-size: 16pxpx;\n font-weight: 700;\n }\n .dropdown-custom {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 100px;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n @media (max-width: 882px) {\n font-size: 12px;\n width: 120px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n width: 110px;\n }\n }\n }\n .back-button {\n color: #545454;\n cursor: pointer;\n flex: 1.5;\n /* flex-basis: 45%; */\n &:hover {\n color: #ff5b00;\n }\n border: none;\n background-color: transparent;\n }\n .action-button {\n button {\n padding: 10px;\n margin-left: 30px;\n background: none;\n border: 1px solid rgba(112, 112, 112, 0.48);\n box-sizing: border-box;\n border-radius: 1px;\n color: #545454;\n &:hover {\n color: #ff5b00;\n }\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n .printIcon {\n margin-right: 10px;\n color: #545454;\n img {\n @media (max-width: 882px) {\n width: 18px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n }\n }\n }\n`;\n","import React, {\n useEffect,\n useState,\n useRef,\n useCallback,\n useMemo\n} from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { Dropdown } from 'react-bootstrap';\nimport PrintIcon from 'assets/img/print-icon.svg';\nimport MonthlyReportChart from 'components/Report/MonthlyReportChart';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n fetchTeacherReportMonthRequest,\n fetchTeacherReportSpecificMonthRequest\n} from 'stores/report/actions';\nimport Spinner from 'components/Shared/Spinner';\nimport { useReactToPrint } from 'react-to-print';\nimport { useTranslation } from 'react-i18next';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport { find, propEq } from 'ramda';\nimport { SpecificMonthlyReportStyle } from './SpecificMonthlyReport.styles';\n\nconst useQuery = () => {\n return new URLSearchParams(useLocation().search);\n};\n\nclass MonthlyReportChartComponent extends React.PureComponent {\n render() {\n const { data, reportName } = this.props;\n\n return <MonthlyReportChart data={data} reportName={reportName} />;\n }\n}\n\nconst SpecificMonthlyReport = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const query = useQuery();\n const year = query.get('year');\n const month = query.get('month');\n const { t } = useTranslation(['monthly-report', 'common', 'login-report']);\n const [name, setName] = useState(null);\n const [monthSelected, setMonthSelected] = useState(month);\n const {\n isLoading,\n teacherSpecificMonthReport,\n teacherMonthReport\n } = useSelector(state => state.reports);\n\n useEffect(() => {\n dispatch(fetchTeacherReportMonthRequest(year));\n }, [dispatch, year]);\n\n useEffect(() => {\n const selected =\n !isNilOrEmpty(teacherMonthReport) &&\n find(propEq('Month', parseInt(monthSelected, 10)))(teacherMonthReport);\n\n if (!selected.IsAvailable && selected.Year === year) {\n history.push('/report/school-report/monthly-activity');\n }\n\n dispatch(\n fetchTeacherReportSpecificMonthRequest({\n year,\n month: monthSelected\n })\n );\n }, [dispatch, year, monthSelected, teacherMonthReport, history]);\n\n useEffect(() => {\n const selectedName =\n !isNilOrEmpty(teacherMonthReport) &&\n teacherMonthReport.filter(e => e.Month === parseInt(monthSelected, 10));\n\n setName(selectedName[0]);\n }, [dispatch, teacherMonthReport, monthSelected]);\n\n const printRef = useRef();\n const handlePrint = useReactToPrint({\n content: () => printRef.current\n });\n\n const handleChangeMonth = useCallback(\n selectedMonth => () => {\n setMonthSelected(selectedMonth);\n const currentUrlParams = new URLSearchParams(window.location.search);\n currentUrlParams.set('month', selectedMonth);\n history.push(\n `${window.location.pathname}?${currentUrlParams.toString()}`\n );\n },\n [history]\n );\n\n const MonthlyReportChartMemo = useMemo(\n () =>\n name && (\n <MonthlyReportChartComponent\n ref={printRef}\n data={teacherSpecificMonthReport}\n reportName={name}\n />\n ),\n [name, teacherSpecificMonthReport]\n );\n\n return (\n <SpecificMonthlyReportStyle>\n <div className=\"top-bar\">\n <div className=\"backButtonWrapper\">\n <button\n type=\"button\"\n className=\"back-button\"\n onClick={() => {\n history.push('/report/school-report/monthly-activity');\n }}\n >\n &lt; {t(`common:back`, 'Back')}\n </button>\n </div>\n <div className=\"headerRight\">\n <div className=\"dropdown-section\">\n <p className=\"dropdown-label\">\n {t(`monthly-report:specificHeader.chooseMonth`, 'Choose Month')}\n </p>\n <Dropdown>\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom\">\n {t(\n `monthly-report:month.${name && name.ReportName.slice(0, 3)}`,\n `${name && name.ReportName.slice(0, 3)}`\n )}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {!isNilOrEmpty(teacherMonthReport) &&\n teacherMonthReport\n .filter(e => e.IsAvailable)\n .map(e => (\n <Dropdown.Item\n key={e.ReportName.slice(0, 3)}\n onClick={handleChangeMonth(e.Month)}\n >\n {t(\n `monthly-report:month.${e.ReportName.slice(0, 3)}`,\n `${e.ReportName.slice(0, 3)}`\n )}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <div className=\"action-button\">\n <button type=\"button\" onClick={handlePrint}>\n <img className=\"printIcon\" src={PrintIcon} alt=\"print-icon\" />\n {t(`login-report:header.print`, 'Print')}\n </button>\n </div>\n </div>\n </div>\n {isLoading && <Spinner />}\n {MonthlyReportChartMemo}\n </SpecificMonthlyReportStyle>\n );\n};\n\nexport default SpecificMonthlyReport;\n","import styled from 'styled-components';\n\nexport const Header = styled.div`\n background: white;\n position: fixed;\n width: calc(100vw - 195px);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1.2rem 0;\n box-shadow: 0 3px 6px rgba(129, 129, 129, 0.16);\n z-index: 10;\n .back-button {\n color: #545454;\n cursor: pointer;\n width: 100px;\n font-size: 0.94rem;\n position: absolute;\n margin-left: 1.5rem;\n &:hover {\n color: #ff5b00;\n }\n }\n\n @media (max-width: 1024px) {\n width: calc(100vw - 56px);\n }\n @media (max-width: 639px) {\n width: 100vw;\n }\n`;\n\nexport const SkillInfo = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n row-gap: 10px;\n padding-left: 10%;\n width: -webkit-fill-available;\n padding-right: 5%;\n\n .skill-label {\n flex-grow: 0.8;\n margin-bottom: 0;\n font-weight: 700;\n color: #363636;\n max-width: 450px;\n }\n\n .dropdown-container {\n flex-grow: 1;\n max-width: 415px;\n @media (max-width: 882px) {\n max-width: 250px;\n }\n }\n\n .dropdown-custom {\n width: 100%;\n margin-left: 10px;\n border: 1px solid rgba(112, 112, 112, 0.48);\n background-color: #ffffff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n justify-content: space-between;\n align-items: center;\n @media (max-width: 882px) {\n font-size: 12px;\n }\n @media (max-width: 744px) {\n font-size: 10px;\n }\n }\n\n .skills {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n position: relative;\n max-width: 380px;\n &::after {\n position: absolute;\n top: 50%;\n right: 6px;\n transform: translateY(-50%);\n }\n }\n\n .menu-custom {\n width: -webkit-fill-available;\n }\n\n .item-custom {\n white-space: break-spaces;\n display: block;\n position: relative;\n }\n\n .right {\n flex-grow: 0.5;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n\n .right-progress-bar {\n width: 118px;\n margin-right: 0.8rem;\n }\n .progress-label {\n color: #363636;\n font-size: 0.625rem;\n span {\n font-weight: bold;\n }\n }\n }\n`;\n","import React from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Dropdown } from 'react-bootstrap';\n\nimport ProgressBar from 'components/Report/ProgressBar';\nimport { Header, SkillInfo } from './SkillTopbar.styles';\n\nconst Topbar = ({\n type,\n item,\n progressBar,\n skillList,\n back,\n setSortDetail\n}) => {\n const { t } = useTranslation(['proficiency-report', 'high-score-report']);\n const history = useHistory();\n const { topicID } = useParams();\n\n return (\n <Header>\n <div className=\"back-button\" role=\"button\" onClick={back}>\n {t(`proficiency-report:studentReport.back`, '< Back')}\n </div>\n <SkillInfo>\n <p className=\"skill-label\">{item.TopicName}</p>\n <Dropdown className=\"dropdown-container\">\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom skills\">\n {t(`proficiency-report:studentReportSide.skill`, 'Skill')}{' '}\n {item.Display} {item.SkillName}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false} className=\"menu-custom\">\n {skillList.map(skill => (\n <Dropdown.Item\n key={skill.SkillId}\n className=\"item-custom\"\n onClick={() => {\n if (type === 'proficiency') {\n setSortDetail(null);\n }\n history.push(\n `/report/${type}-report/skill/${topicID}/${skill.SkillId}`\n );\n }}\n >\n {t(`proficiency-report:studentReportSide.skill`, 'Skill')}{' '}\n {skill.Display} {skill.SkillName}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n <div className=\"right\">\n <span className=\"right-progress-bar\">\n <ProgressBar height=\"14px\" visualParts={progressBar} />\n </span>\n <p className=\"progress-label\">\n {type === 'proficiency' && (\n <>\n <span>{item.CompetencyDetails.Mastered}</span>{' '}\n {`/${item.TotalNoOfStudents} ${\n item.TotalNoOfStudents >= 2\n ? t(`proficiency-report:classReport.students`, 'students')\n : t(`proficiency-report:classReport.student`, 'student')\n } ${t(`proficiency-report:classReport.mastery`, 'mastery')}`}\n </>\n )}\n {type === 'high-score' && (\n <>\n <span>{item.MasteryLevels.A}</span>{' '}\n {`/${item.TotalNoOfUsers} ${\n item.TotalNoOfUsers >= 2\n ? t(`proficiency-report:classReport.students`, 'students')\n : t(`proficiency-report:classReport.student`, 'student')\n } ${t(`high-score-report:legend.AStar`, 'A Star')}`}\n </>\n )}\n </p>\n </div>\n </SkillInfo>\n </Header>\n );\n};\n\nexport default Topbar;\n","import styled, { css } from 'styled-components';\nimport { proficiencyColors, masteryColors } from 'constants/index';\n\nexport const Content = styled.div`\n /* margin-top: 7rem; */\n overflow-y: scroll;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 1.5rem 5% 2.5rem 10%;\n border-bottom: ${props => !props.isLast && '1px solid #e9e9e9'};\n table {\n width: 100%;\n\n td {\n width: 50%;\n }\n }\n .incomplete-desc {\n margin-bottom: 0.4rem;\n color: #ff0303;\n font-size: 0.625rem;\n position: relative;\n left: 50%;\n }\n`;\n\nexport const TableTitle = styled.div`\n display: flex;\n align-items: flex-end;\n font-size: 0.625rem;\n font-family: 'Nunito';\n p {\n margin-bottom: 0;\n }\n .student-count {\n font-size: 1.75rem;\n font-weight: 700;\n margin-right: 0.5rem;\n color: #363636;\n line-height: 1.2rem;\n }\n .student-detail {\n color: #363636;\n }\n`;\n\nexport const TableContent = styled.table`\n margin-top: ${({ sortBtn }) => !sortBtn && '0.8rem'};\n tr:nth-child(odd) {\n background: ${({ level, report }) =>\n report === 'proficiency'\n ? proficiencyColors[level].tableOddColor\n : masteryColors[level].tableOddColor};\n }\n\n tr:nth-child(even) {\n background: ${({ level, report }) =>\n report === 'proficiency'\n ? proficiencyColors[level].tableEvenColor\n : masteryColors[level].tableEvenColor};\n }\n\n td {\n border: solid 1px\n ${({ level, report }) =>\n report === 'proficiency'\n ? proficiencyColors[level].tableBorderColor\n : masteryColors[level].tableBorderColor};\n padding: 0.5rem 0.8rem;\n font-weight: 700;\n font-family: 'Nunito';\n li {\n font-weight: 600;\n font-family: 'Muli';\n }\n }\n\n .percentage {\n font-weight: 700;\n color: ${({ level }) => level === 'incomplete' && '#CCCCCC'};\n }\n`;\n\nexport const ProficiencySkills = styled.div`\n display: flex;\n align-items: baseline;\n margin-left: 15px;\n margin-right: 15px;\n .icon {\n width: 13px;\n height: 13px;\n background: ${props => proficiencyColors[props.proficiency].color};\n border-radius: 3px;\n border: solid 1px\n ${props => proficiencyColors[props.proficiency].borderColor};\n }\n .prof-name {\n font-family: 'Nunito';\n font-weight: 700;\n text-transform: capitalize;\n color: #363636;\n font-size: 0.625rem;\n margin-left: 0.5rem;\n }\n .prof-descricption {\n font-size: 0.5rem;\n display: flex;\n align-items: baseline;\n color: #727272;\n margin-left: 0.25rem;\n span {\n font-weight: 700;\n margin-left: 0.2rem;\n }\n }\n @media screen and (max-width: 895px) {\n margin-right: 0 !important;\n }\n`;\n\nexport const MasterySkills = styled.div`\n display: flex;\n align-items: flex-end;\n img {\n margin: 0 0.5rem 0 1rem;\n width: 35px;\n }\n .skill-detail {\n color: #727272;\n span {\n font-weight: 700;\n }\n }\n`;\n\nexport const SortButtonContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #e9e9e9;\n border-bottom: none;\n width: 80px;\n position: relative;\n left: 50%;\n margin-top: -0.8rem;\n\n @media (max-width: 600px) {\n margin-top: 0.5rem;\n }\n`;\nexport const SortButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: 50%;\n padding: 8px 0;\n background: ${({ active }) => (active ? '#9A9A9A' : 'white')};\n svg {\n path {\n fill: ${({ active }) => (active ? 'white' : '#DBDBDB')};\n }\n }\n ${({ type }) =>\n type === 'asc' &&\n css`\n border-left: 1px solid #e9e9e9;\n svg {\n transform: rotate(180deg);\n }\n `}\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty, isNil } from 'ramda';\n\nimport { ProficiencyStatus, MasteryLevelRange } from 'constants/index';\n\nimport { ReactComponent as TriangleIcon } from 'assets/img/report/icon-triangle.svg';\n\nimport {\n Content,\n TableTitle,\n TableContent,\n ProficiencySkills,\n MasterySkills,\n SortButtonContainer,\n SortButton\n} from './SkillDetailContent.styles';\n\nconst ProficiencyLegend = ({ data }) => {\n const { t } = useTranslation(['proficiency-report']);\n const profScore = {\n mastery: '80-100',\n competent: '60-79',\n beginning: '0-59',\n incomplete: '< 10'\n };\n return (\n <ProficiencySkills proficiency={ProficiencyStatus[data.CompetencyLevel]}>\n <div className=\"icon\" />\n <p className=\"prof-name\">\n {t(\n `proficiency-report:legend.${\n ProficiencyStatus[data.CompetencyLevel]\n }`,\n ProficiencyStatus[data.CompetencyLevel]\n )}\n </p>\n <p className=\"prof-descricption\">\n {ProficiencyStatus[data.CompetencyLevel] === 'incomplete'\n ? t(`proficiency-report:legend.question`, 'Question')\n : t(`proficiency-report:legend.proficiency`, 'Proficiency')}\n <span>{profScore[ProficiencyStatus[data.CompetencyLevel]]}</span>\n </p>\n </ProficiencySkills>\n );\n};\n\nconst MasteryLegend = ({ data }) => {\n const { t } = useTranslation(['high-score-report']);\n return (\n <MasterySkills>\n <span>\n <img src={MasteryLevelRange[data.MasteryLevelName]?.icon} alt=\"icon\" />\n </span>\n {data.MasteryLevelName !== 'Incomplete' ? (\n <p className=\"skill-detail\">\n <span>{MasteryLevelRange[data.MasteryLevelName]?.noQn}</span> / 10\n {t(`high-score-report:perSkill`, 'Qn per skill')}\n </p>\n ) : (\n <p className=\"skill-detail\">\n {t(`high-score-report:beCompleted`, 'To be completed')}\n </p>\n )}\n </MasterySkills>\n );\n};\n\nconst SkillDetailContent = ({\n data,\n reportType,\n isLast,\n isSorting,\n descSortHandler,\n descActive,\n ascSortHandler,\n ascActive,\n level\n}) => {\n const { t } = useTranslation(['proficiency-report']);\n return (\n <Content isLast={isLast}>\n <TableTitle>\n <p className=\"student-count\">{data.Counts}</p>\n <p className=\"student-detail\">Students</p>\n {reportType === 'proficiency' && <ProficiencyLegend data={data} />}\n {reportType === 'high-score' && <MasteryLegend data={data} />}\n </TableTitle>\n {!isEmpty(data.Data) && (\n <>\n {isSorting &&\n ProficiencyStatus[data.CompetencyLevel] !== 'incomplete' && (\n <SortButtonContainer>\n <SortButton active={descActive} onClick={descSortHandler}>\n <TriangleIcon />\n </SortButton>\n <SortButton\n type=\"asc\"\n active={ascActive}\n onClick={ascSortHandler}\n >\n <TriangleIcon />\n </SortButton>\n </SortButtonContainer>\n )}\n {isSorting &&\n ProficiencyStatus[data.CompetencyLevel] === 'incomplete' && (\n <p className=\"incomplete-desc\">\n {t(\n `proficiency-report:skillReports.lessQn`,\n 'Completed less than 10 questions, so the proficiency is grey.'\n )}\n </p>\n )}\n\n <TableContent level={level} sortBtn={isSorting} report={reportType}>\n <tbody>\n {data.Data.map(student => (\n <tr key={student.UserId}>\n <td>\n <li>{student.FullName}</li>\n </td>\n <td className=\"percentage\">\n {reportType === 'proficiency' && (\n <>\n {isNil(student.Proficiency)\n ? '0%'\n : `${(student.Proficiency * 100).toFixed()}%`}\n </>\n )}\n {reportType === 'high-score' && (\n <>\n <img src={MasteryLevelRange[level]?.icon} alt={level} />\n </>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </TableContent>\n </>\n )}\n </Content>\n );\n};\n\nexport default SkillDetailContent;\n","import styled from 'styled-components';\n\nconst SkillDetailPage = styled.div`\n background-color: #ffffff;\n padding-left: 195px;\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n @media (max-width: 1024px) {\n padding-left: 56px;\n }\n @media (max-width: 639px) {\n padding-left: 0;\n }\n .error {\n width: 100%;\n text-align: center;\n margin-top: 2rem;\n }\n .content-detail {\n margin-top: 6rem;\n }\n`;\n\nexport default SkillDetailPage;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { isNil } from 'ramda';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { compareValues } from 'helpers/singleClassReport';\nimport { ProficiencyStatus, proficiencyColors } from 'constants/index';\nimport calculatePercentageString from 'helpers/calculatePercentageString';\nimport {\n fetchSkillProficiencyDetailReportRequest,\n fetchProficiencySkillReportRequest,\n setReportLevel\n} from 'stores/report/actions';\n\nimport Spinner from 'components/Shared/Spinner';\nimport SkillTopbar from 'components/Report/SkillReportDetail/SkillTopbar';\nimport SkillDetailContent from 'components/Report/SkillReportDetail/SkillDetailContent';\nimport NoReport from 'components/Report/NoReport';\n\nimport SkillDetailPage from './SkillProficiencyReport.styles';\n\nconst SkillProficiencyReport = () => {\n const { t } = useTranslation(['proficiency-report']);\n const history = useHistory();\n const dispatch = useDispatch();\n const { topicID, skillID } = useParams();\n const {\n selectedClass,\n reportLevel,\n selectedSyllabus,\n skillDetailReport,\n proficiencySkill\n } = useSelector(state => state.reports);\n const [sortDetail, setSortDetail] = useState(null);\n const pageLoading =\n proficiencySkill.isLoading || skillDetailReport?.isLoading;\n useEffect(() => {\n dispatch(\n fetchSkillProficiencyDetailReportRequest({\n classID: selectedClass.ID,\n reportLevel: reportLevel?.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID,\n skillID\n })\n );\n dispatch(\n fetchProficiencySkillReportRequest({\n classID: selectedClass.ID,\n reportLevel: reportLevel?.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, skillID, reportLevel]);\n useDeepCompareEffect(() => {\n if (selectedSyllabus && isNil(reportLevel) && selectedSyllabus.Levels) {\n const firstLevel = selectedSyllabus.Levels[0];\n dispatch(setReportLevel(firstLevel));\n }\n }, [reportLevel, selectedSyllabus]);\n const progressbarNumber = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: proficiencyColors.mastery.color,\n borderColor: proficiencyColors.mastery.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.competent.color,\n borderColor: proficiencyColors.competent.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.beginning.color,\n borderColor: proficiencyColors.beginning.borderColor\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const proficiencyIndex = {\n Incomplete: 3,\n NeedImprove: 2,\n Passed: 1,\n Mastered: 0\n };\n\n // eslint-disable-next-line no-restricted-syntax\n for (const proficiency of Object.keys(data?.CompetencyDetails)) {\n if (data?.CompetencyDetails[proficiency] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data?.CompetencyDetails[proficiency],\n data?.TotalNoOfStudents\n );\n progressBarInput[\n proficiencyIndex[proficiency]\n ].percentage = percentageString;\n } else {\n progressBarInput[proficiencyIndex[proficiency]].percentage = '0%';\n }\n }\n return progressBarInput.filter(\n proficiency => proficiency.percentage !== '0%'\n );\n };\n\n // note: proficiency from backend is always sorted desc\n const handleSortClick = ({ level, order }) => {\n setSortDetail(prev => {\n if (prev) {\n return prev.level === level && prev.order === order\n ? null\n : { level, order };\n }\n return { level, order };\n });\n };\n\n const parseProfSkill = [];\n\n for (let i = 0; i <= 4; i += 1) {\n if (i !== 2) {\n const findItem = skillDetailReport?.data?.findIndex(\n item => item.CompetencyLevel === i\n );\n if (findItem !== -1) {\n parseProfSkill.push(\n skillDetailReport?.data && skillDetailReport?.data[findItem]\n );\n } else {\n parseProfSkill.push({ Counts: 0, CompetencyLevel: i, Data: [] });\n }\n }\n }\n\n const sorted = useCallback(() => {\n const clonedData = cloneDeep(parseProfSkill);\n const result = [];\n if (!isNil(sortDetail)) {\n clonedData.forEach(item => {\n if (item.CompetencyLevel === sortDetail?.level) {\n item.Data.sort(compareValues('Proficiency', sortDetail?.order));\n result.push(item);\n } else {\n result.push(item);\n }\n });\n return result.sort(compareValues('CompetencyLevel', 'desc'));\n }\n return parseProfSkill.sort(compareValues('CompetencyLevel', 'desc'));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortDetail, skillDetailReport?.data]);\n\n const skillData = proficiencySkill?.data?.find(\n skill => skill.SkillId === parseInt(skillID, 10)\n );\n\n return (\n <SkillDetailPage>\n {pageLoading && <Spinner />}\n {!pageLoading && !isNil(skillDetailReport?.error) && (\n <NoReport\n message={t(\n `proficiency-report:noReports.skillDesc`,\n 'Select another skill to show reports.'\n )}\n />\n )}\n {!pageLoading && skillData && (\n <SkillTopbar\n type=\"proficiency\"\n item={skillData}\n skillList={proficiencySkill.data}\n progressBar={progressbarNumber(skillData)}\n back={() => history.push('/report', { type: 'skill' })}\n setSortDetail={setSortDetail}\n />\n )}\n\n <div className=\"content-detail\">\n {!pageLoading &&\n skillDetailReport?.data &&\n sorted().map(data => (\n <SkillDetailContent\n key={data.CompetencyLevel}\n data={data}\n reportType=\"proficiency\"\n isLast={ProficiencyStatus[data.CompetencyLevel] === 'incomplete'}\n descActive={\n sortDetail?.level === data.CompetencyLevel &&\n sortDetail?.order === 'desc'\n }\n descSortHandler={() => {\n handleSortClick({\n level: data.CompetencyLevel,\n order: 'desc'\n });\n }}\n ascActive={\n sortDetail?.level === data.CompetencyLevel &&\n sortDetail?.order === 'asc'\n }\n ascSortHandler={() => {\n handleSortClick({\n level: data.CompetencyLevel,\n order: 'asc'\n });\n }}\n isSorting\n level={ProficiencyStatus[data.CompetencyLevel]}\n />\n ))}\n </div>\n </SkillDetailPage>\n );\n};\n\nexport default SkillProficiencyReport;\n","import React, { useEffect } from 'react';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\n\nimport { compareValues } from 'helpers/singleClassReport';\nimport { proficiencyColors } from 'constants/index';\nimport calculatePercentageString from 'helpers/calculatePercentageString';\n\nimport {\n fetchSkillHighScoreDetailReportRequest,\n fetchHighScoreSkillReportRequest\n} from 'stores/report/actions';\n\nimport SkillTopbar from 'components/Report/SkillReportDetail/SkillTopbar';\nimport SkillDetailContent from 'components/Report/SkillReportDetail/SkillDetailContent';\nimport NoReport from 'components/Report/NoReport';\nimport Spinner from 'components/Shared/Spinner';\n\nimport { isNil } from 'ramda';\nimport SkillDetailPage from './SkillProficiencyReport.styles';\n\nconst SkillHighScoreReport = () => {\n const { t } = useTranslation(['proficiency-report']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { topicID, skillID } = useParams();\n const {\n selectedClass,\n reportLevel,\n selectedSyllabus,\n skillDetailReport,\n highScoreSkill\n } = useSelector(state => state.reports);\n const pageLoading = highScoreSkill.isLoading || skillDetailReport?.isLoading;\n\n useEffect(() => {\n dispatch(\n fetchSkillHighScoreDetailReportRequest({\n classID: selectedClass.ID,\n reportLevel: reportLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID,\n skillID\n })\n );\n dispatch(\n fetchHighScoreSkillReportRequest({\n classID: selectedClass.ID,\n reportLevel: reportLevel.ID,\n curriculumID: selectedSyllabus.CurriculumID,\n topicID\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, skillID]);\n\n const parseHighScoreProgressBar = data => {\n const progressBarInput = [\n {\n percentage: '',\n color: '#FFC219',\n borderColor: '#D2A905'\n },\n {\n percentage: '',\n color: '#FFEAAF',\n borderColor: '#E5D582'\n },\n {\n percentage: '',\n color: '#FFEAAF',\n borderColor: '#E5D582'\n },\n {\n percentage: '',\n color: '#FFEAAF',\n borderColor: '#E5D582'\n },\n {\n percentage: '',\n color: proficiencyColors.incomplete.color,\n borderColor: proficiencyColors.incomplete.borderColor\n }\n ];\n const masteryIndex = {\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n Incomplete: 4\n };\n // eslint-disable-next-line no-restricted-syntax\n for (const mastery of Object.keys(data?.MasteryLevels)) {\n if (data?.MasteryLevels[mastery] > 0) {\n // Calculate percentage string\n const percentageString = calculatePercentageString(\n data?.MasteryLevels[mastery],\n data?.TotalNoOfUsers\n );\n progressBarInput[masteryIndex[mastery]].percentage = percentageString;\n } else {\n progressBarInput[masteryIndex[mastery]].percentage = '0%';\n }\n }\n return progressBarInput.filter(mastery => mastery.percentage !== '0%');\n };\n\n const skillData = highScoreSkill?.data?.find(\n skill => skill.SkillId === parseInt(skillID, 10)\n );\n\n const parseHighScoreSkill = [];\n for (let i = 0; i <= 4; i += 1) {\n const MasteryStatus = {\n 0: 'D',\n 1: 'C',\n 2: 'B',\n 3: 'A',\n 4: 'Incomplete'\n };\n const findItem = skillDetailReport?.data?.findIndex(\n item => item.MasteryLevelName === MasteryStatus[i]\n );\n\n if (findItem !== -1) {\n parseHighScoreSkill.push(\n skillDetailReport?.data && skillDetailReport?.data[findItem]\n );\n } else {\n parseHighScoreSkill.push({\n Counts: 0,\n MasteryLevelName: MasteryStatus[i],\n Data: []\n });\n }\n }\n\n return (\n <SkillDetailPage>\n {pageLoading && <Spinner />}\n {!pageLoading && !isNil(skillDetailReport?.error) && (\n <NoReport\n message={t(\n `proficiency-report:noReports.skillDesc`,\n 'Select another skill to show reports.'\n )}\n />\n )}\n {!pageLoading && skillData && (\n <SkillTopbar\n type=\"high-score\"\n item={skillData}\n progressBar={parseHighScoreProgressBar(skillData)}\n skillList={highScoreSkill.data}\n back={() =>\n history.push('/report/class-report/high-score-report', {\n type: 'skill'\n })\n }\n />\n )}\n <div className=\"content-detail\">\n {!pageLoading &&\n skillDetailReport?.data &&\n parseHighScoreSkill\n .sort(compareValues('MasteryLevelName'))\n .map(data => (\n <SkillDetailContent\n key={data.MasteryLevelName}\n data={data}\n reportType=\"high-score\"\n isLast={data.MasteryLevelName === 'Incomplete'}\n level={data.MasteryLevelName}\n />\n ))}\n </div>\n </SkillDetailPage>\n );\n};\n\nexport default SkillHighScoreReport;\n","import React, { useState } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Header from 'components/Header/Header';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport SidebarReport from 'components/Sidebar/SidebarReport/SidebarReport';\nimport Overlay from 'components/Content/Overlay';\nimport ProficiencyReport from './ProficiencyReport';\nimport HighScoreReport from './HighScoreReport';\nimport StudentHighScoreReport from './StudentHighScoreReport';\nimport StudentProficiencyReport from './StudentProficiencyReport';\nimport LoginReport from './LoginReport';\nimport TeacherMonthlyReport from './TeacherMonthlyReport';\nimport SpecificMonthlyReport from './SpecificMonthlyReport';\nimport SkillProficiencyReport from './SkillProficiencyReport';\nimport SkillHighScoreReport from './SkillHighScoreReport';\n\nexport default function Report() {\n const [expanded, setExpanded] = useState(false);\n const toggleNavigation = () => setExpanded(!expanded);\n\n return (\n <>\n <Header />\n <main className=\"report\">\n <Sidebar\n expanded={expanded}\n toggleNavigation={toggleNavigation}\n className=\"sidebar--auto\"\n >\n <SidebarReport />\n </Sidebar>\n <div className=\"report-content\">\n <Overlay isVisible={expanded} toggleVisible={toggleNavigation} />\n <Switch>\n <Route exact path=\"/report\" component={ProficiencyReport} />\n <Route\n exact\n path=\"/report/proficiency-report/skill/:topicID/:skillID\"\n component={SkillProficiencyReport}\n />\n <Route\n exact\n path=\"/report/proficiency-report/:studentID\"\n component={StudentProficiencyReport}\n />\n <Route\n exact\n path=\"/report/class-report/high-score-report\"\n component={HighScoreReport}\n />\n <Route\n exact\n path=\"/report/high-score-report/skill/:topicID/:skillID\"\n component={SkillHighScoreReport}\n />\n <Route\n path=\"/report/class-report/high-score-report/:studentID\"\n component={StudentHighScoreReport}\n />\n <Route\n path=\"/report/class-report/login-report\"\n component={LoginReport}\n />\n <Route\n path=\"/report/school-report/monthly-activity\"\n component={TeacherMonthlyReport}\n />\n <Route\n path=\"/report/teacherreport/monthlyreport\"\n component={SpecificMonthlyReport}\n />\n </Switch>\n </div>\n </main>\n </>\n );\n}\n","// Helper to aggregate login report data to format for chart\nconst aggregateLoginReportData = data => {\n const classSize = data.length;\n const reducer = (accumulator, item) => {\n const result = accumulator.map((dayTotal, index) => {\n if (item?.LoginStatus[index] === 1) {\n return dayTotal + item?.LoginStatus[index];\n }\n return dayTotal;\n });\n return result;\n };\n const aggregatedLoginCountsTotal = data.reduce(reducer, Array(7).fill(0));\n const daysOfWeek = [\n {\n name: 'Sun',\n total: classSize\n },\n {\n name: 'Mon',\n total: classSize\n },\n {\n name: 'Tue',\n total: classSize\n },\n {\n name: 'Wed',\n total: classSize\n },\n {\n name: 'Thu',\n total: classSize\n },\n {\n name: 'Fri',\n total: classSize\n },\n {\n name: 'Sat',\n total: classSize\n }\n ];\n if (data.length <= 0) {\n return daysOfWeek.map(day => {\n return {\n ...day,\n loggedIn: 0,\n future: false\n };\n });\n }\n const aggregatedTotal = daysOfWeek.map((day, index) => {\n const isFuture = data[0].LoginStatus[index] === 2;\n if (isFuture) {\n return {\n ...day,\n total: 0,\n loggedIn: 0,\n future: day.total\n };\n }\n return {\n ...day,\n total: day.total - aggregatedLoginCountsTotal[index],\n loggedIn: aggregatedLoginCountsTotal[index],\n future: 0\n };\n });\n return aggregatedTotal;\n};\n\nexport default aggregateLoginReportData;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n background: white;\n border-radius: 4px;\n height: 350px;\n .dropdown-container {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n .dropdown-custom {\n background: #f2f2f2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .dropdown-label {\n width: 80px;\n padding-right: 0.5rem;\n text-align: right;\n white-space: nowrap;\n }\n .level-dropdown {\n margin: 0 1rem 0 0;\n }\n .week {\n width: 85%;\n > button {\n width: 100%;\n text-align: left;\n }\n .dropdown-menu {\n width: 100%;\n }\n }\n .class {\n width: 100%;\n > button {\n width: 100%;\n text-align: left;\n }\n .dropdown-menu {\n width: 100%;\n }\n }\n }\n`;\n\nexport const ClassAttendance = styled.div`\n .indicator {\n margin-left: 1.6rem;\n }\n .num-logged-in {\n margin-left: 0.5rem;\n font-size: 1.875rem;\n font-weight: 700;\n color: black;\n }\n .class-size {\n font-size: 1rem;\n color: #9a9a9a;\n margin-right: 1rem;\n }\n .logged-in-date {\n font-size: 0.75rem;\n color: #8a8a8a;\n }\n .recharts-bar-rectangles {\n cursor: pointer;\n }\n`;\n\nexport const BarContainer = styled.div`\n padding: 1rem;\n background: yellow;\n`;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport generateLevels from 'helpers/reportLevels';\nimport {\n fetchLoginReportRequest,\n fetchWeekItemsRequest,\n setSelectedClass,\n setClassLevel\n} from 'stores/report/actions';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { fetchClassRequest } from 'stores/utils/lookup/actions';\nimport { Dropdown } from 'react-bootstrap';\nimport { BarChart, Bar, Cell, XAxis, YAxis } from 'recharts';\nimport moment from 'moment';\nimport { isNil } from 'ramda';\nimport { useTranslation } from 'react-i18next';\nimport aggregateLoginReportData from 'helpers/aggregateLoginReportData';\nimport { Container, ClassAttendance } from './LoginReportCard.styles';\n\nconst LoginReportCard = () => {\n const { t } = useTranslation(['dashboard']);\n const dispatch = useDispatch();\n const ref = useRef(null);\n // Redux States\n const {\n loginReport,\n weekItems,\n selectedClass,\n selectedClassLevel,\n isLoading,\n reportError\n } = useSelector(state => state.reports);\n const { classes } = useSelector(state => state.lookup);\n const currentDayOfWeek = moment().day();\n const reportLevels = generateLevels();\n const [weekId, setWeekId] = useState(0);\n const [selectedBarChartDay, setSelectedBarChartDay] = useState(\n currentDayOfWeek\n );\n const [barWidth, setBarWidth] = useState(0);\n // Filter out only classes of type 1\n const filteredClasses =\n classes.length > 0\n ? classes.filter(classObject => classObject.Type === 1)\n : [];\n\n let aggregatedData;\n if (loginReport) {\n aggregatedData = aggregateLoginReportData(loginReport);\n }\n\n // UseEffects\n useEffect(() => {\n dispatch(fetchClassRequest(selectedClassLevel));\n }, [dispatch, selectedClassLevel]);\n\n useEffect(() => {\n dispatch(fetchWeekItemsRequest({ numberOfPreviousWeek: 3 }));\n }, [dispatch]);\n\n useDeepCompareEffect(() => {\n if (selectedClass) {\n dispatch(\n fetchLoginReportRequest({\n classID: selectedClass && selectedClass.ID,\n weekID: weekId\n })\n );\n }\n }, [dispatch, selectedClass, weekId]);\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n if (ref.current.offsetWidth > 525) {\n setBarWidth(525);\n } else {\n setBarWidth(ref.current.offsetWidth);\n }\n }\n };\n window.addEventListener('resize', handleResize);\n window.addEventListener(\n 'DOMContentLoaded',\n setBarWidth(ref.current.offsetWidth)\n );\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n return (\n <Container ref={ref}>\n <div className=\"dropdown-container\">\n <span className=\"dropdown-label\">\n {t('dashboard:loginReport.classFrom', 'Class from')}\n </span>\n <Dropdown bsPrefix=\"level-dropdown\">\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom level\">\n {`P${selectedClassLevel}`}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {reportLevels.map(level => (\n <Dropdown.Item\n key={level}\n onClick={() => {\n dispatch(setClassLevel(level));\n }}\n >{`P${level}`}</Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n <Dropdown className=\"class\">\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom\">\n {selectedClass && selectedClass.Name ? selectedClass.Name : '-'}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {filteredClasses.map(item => (\n <Dropdown.Item\n key={item.ID}\n onClick={event => {\n event.preventDefault();\n dispatch(setSelectedClass(item));\n }}\n >\n {item.Name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n <div className=\"dropdown-container\">\n <span className=\"dropdown-label\">\n {t('dashboard:loginReport.Time', 'Time')}\n </span>\n <Dropdown className=\"week\">\n <Dropdown.Toggle variant=\"light\" className=\"dropdown-custom\">\n {`Week ${\n !isNil(weekItems)\n ? moment(\n weekItems[weekId].Display.split(' - ')[1],\n 'DD MMM YYYY'\n ).isoWeek()\n : ''\n }`}\n </Dropdown.Toggle>\n <Dropdown.Menu flip={false}>\n {!isNil(weekItems) &&\n weekItems.map(week => (\n <Dropdown.Item\n key={week.Id}\n onClick={event => {\n event.preventDefault();\n setWeekId(week.Id);\n }}\n >\n {`Week ${moment(\n week.Display.split(' - ')[1],\n 'DD MMM YYYY'\n ).isoWeek()}`}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n\n <ClassAttendance>\n <svg width=\"6.04px\" height=\"6.81px\" className=\"indicator\">\n <rect width=\"6.04px\" height=\"6.81px\" style={{ fill: '#46C2CB' }} />\n </svg>\n <span className=\"num-logged-in\">\n {!isNil(aggregatedData)\n ? aggregatedData[selectedBarChartDay].loggedIn\n : ''}\n </span>\n <span className=\"class-size\">\n {!isNil(aggregatedData) &&\n ` /${aggregatedData[selectedBarChartDay]?.total +\n aggregatedData[selectedBarChartDay]?.loggedIn}`}\n </span>\n {!isNil(weekItems) && (\n <span className=\"logged-in-date\">\n {t('dashboard:loginReport.loggedInOn', 'Logged in on')}{' '}\n {moment(weekItems[weekId].Display.split(' - ')[1], 'DD MMM YYYY')\n .subtract(6 - selectedBarChartDay, 'days')\n .format('DD/MM/YYYY, dddd')}\n </span>\n )}\n {isLoading && <div>Loading...</div>}\n {!isLoading && reportError !== null && <p>{reportError}</p>}\n {!isLoading && reportError === null && !isNil(aggregatedData) && (\n <BarChart\n width={barWidth}\n height={180}\n data={aggregatedData}\n margin={{\n top: 20\n }}\n barSize={30}\n >\n <XAxis dataKey=\"name\" />\n <YAxis tick={false} width={30} />\n <Bar dataKey=\"loggedIn\" stackId=\"a\" fill=\"#46C2CB\">\n {aggregatedData.map((entry, index) => (\n <Cell\n key={entry.name}\n stroke={index === selectedBarChartDay ? '#FFE330' : '#DBDBDB'}\n strokeWidth={index === selectedBarChartDay ? '4px' : 0}\n onClick={() => {\n setSelectedBarChartDay(index);\n }}\n />\n ))}\n </Bar>\n <Bar dataKey=\"total\" stackId=\"a\" fill=\"#DBDBDB\">\n {aggregatedData.map((entry, index) => (\n <Cell\n key={entry.name}\n stroke={index === selectedBarChartDay ? '#FFE330' : '#DBDBDB'}\n strokeWidth={index === selectedBarChartDay ? '4px' : 0}\n onClick={() => {\n setSelectedBarChartDay(index);\n }}\n />\n ))}\n </Bar>\n <Bar dataKey=\"future\" stackId=\"a\" fill=\"rgba(219, 219, 219, 0.21)\">\n {aggregatedData.map((entry, index) => (\n <Cell\n key={entry.name}\n stroke={\n index === selectedBarChartDay\n ? '#FFE330'\n : 'rgba(219, 219, 219, 0.21)'\n }\n strokeWidth={index === selectedBarChartDay ? '4px' : 0}\n />\n ))}\n </Bar>\n </BarChart>\n )}\n </ClassAttendance>\n </Container>\n );\n};\n\nexport default LoginReportCard;\n","import styled from \"styled-components\";\n\nexport const EmptyAssignmentContainer = styled.div`\n color: #46535e;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin-bottom: 1rem;\n h1 {\n font-size: 0.9rem;\n line-height: 2;\n }\n a {\n font-size: 1rem;\n line-height: 1.5;\n padding: 0.3em 4em;\n border-radius: 4px;\n }\n img {\n margin: 1rem 0;\n margin-left: 1rem;\n }\n\n .btn-primary {\n background-color: #ff5b00;\n border-color: #ff5b00;\n }\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { NoAssignmentSVG } from 'assets/img/dashboardv2';\nimport { EmptyAssignmentContainer } from './EmptyAssignment.styles';\n\nconst EmptyAssignment = () => {\n const { t } = useTranslation(['track-assignment-assigned-me']);\n return (\n <EmptyAssignmentContainer>\n <img src={NoAssignmentSVG} alt=\"Empty Assignment\" />\n <h1 className=\"text-center\">\n <b>\n {t(\n `track-assignment-assigned-me:emptyState.emptyMsg`,\n `You haven't assigned any homework yet.`\n )}\n </b>\n </h1>\n <Link type=\"button\" className=\"btn btn-primary\" to=\"/browse-content\">\n {t(\n `track-assignment-assigned-me:emptyState.browseContent`,\n 'Create Assignment'\n )}\n </Link>\n </EmptyAssignmentContainer>\n );\n};\n\nexport default EmptyAssignment;\n","import styled from 'styled-components';\n\nexport const StyledContainer = styled.div`\n margin-bottom: 2rem;\n`;\n\nexport const StyledLink = styled.div`\n margin-top: 1rem;\n text-align: right;\n\n .more-link {\n color: #ff5b00;\n font-size: 16px;\n text-decoration: underline;\n }\n`;\n\nexport const StyledCard = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: #fff;\n border-radius: 5px;\n margin-bottom: 1rem;\n border: solid 1px #dfdfdf;\n color: #1e1e1e;\n padding: 0.5rem 1rem;\n box-shadow: 0 1px 3px 0px rgb(0 0 0 / 16%);\n .track-row {\n display: flex;\n align-items: center;\n }\n .hw-link {\n font-family: 'Muli', sans-serif;\n color: #000000;\n font-weight: 600;\n font-size: 15px;\n word-break: break-all;\n }\n .hw-type-icon {\n width: 31px;\n height: 31px;\n border-radius: 50%;\n padding: 0.5rem;\n font-family: Helvetica, sans-serif;\n font-size: 19px;\n font-weight: 100;\n color: #fff;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-right: 0.7rem;\n\n img {\n width: 31px;\n height: 31px;\n }\n }\n .hw-assign-date {\n font-size: 12px;\n color: #8a8a8a;\n margin-right: 2rem;\n }\n .open-track-btn {\n color: #ff5b00;\n background-color: #ffffff;\n padding: 0.3rem 1.5rem;\n text-decoration: none;\n\n :hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport moment from 'moment-timezone';\nimport { FactualFluencyPNG } from 'assets/img/dashboardv2';\nimport { fetchAssignmentsRequest } from 'stores/assignments/actions';\nimport { homeworkTypes } from 'constants/index';\nimport { Button } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory, Link } from 'react-router-dom';\nimport { isEmpty } from 'ramda';\n\nimport EmptyAssignment from '../EmptyAssignment/EmptyAssignment';\nimport {\n StyledCard,\n StyledContainer,\n StyledLink\n} from './AssignmentTrackingCard.styles';\n\nconst getIcon = homeworkType => {\n if (homeworkType === 13) {\n return <img src={FactualFluencyPNG} width={30} alt=\"iconFactualFluency\" />;\n }\n if (homeworkTypes[homeworkType]) {\n return homeworkTypes[homeworkType].logo;\n }\n return 'H';\n};\n\nconst AssignmentTrackingCard = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const history = useHistory();\n const { assignments, isLoading } = useSelector(state => state.assignments);\n\n const filteredData = assignments.length > 0 ? assignments.slice(0, 4) : [];\n\n useEffect(() => {\n dispatch(\n fetchAssignmentsRequest({\n date: moment().year(),\n pageSize: 4,\n pageIndex: 0\n })\n );\n }, [dispatch]);\n\n return (\n <div style={{ marginTop: '1rem' }}>\n {isLoading && 'Loading...'}\n {!isLoading && isEmpty(filteredData) && <EmptyAssignment />}\n {!isLoading && !isEmpty(filteredData) && (\n <StyledContainer>\n {filteredData.map(assignment => (\n <StyledCard key={assignment.HomeWorkId}>\n <div className=\"track-row\">\n <span\n className=\"hw-type-icon\"\n style={{\n background: homeworkTypes[assignment.HomeWorkType]\n ? homeworkTypes[assignment.HomeWorkType].bgColor\n : '#49C8AA'\n }}\n >\n {getIcon(assignment.HomeWorkType)}\n </span>\n <div className=\"hw-link\">{assignment.HomeWorkTitle}</div>\n </div>\n <div className=\"track-row\">\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"open-button\"\n className=\"open-track-btn\"\n onClick={() => {\n history.push(\n // eslint-disable-next-line no-nested-ternary\n assignment.TrackingGroup.length > 0 &&\n (assignment.TrackingIndividual === null ||\n assignment.TrackingIndividual.TotalAssignee > 0)\n ? assignment.TrackingGroup.length === 1\n ? `/track-assignment/homework/${assignment.HomeWorkId}/${assignment.TrackingGroup[0].ClassID}`\n : `/track-assignment/homework/${assignment.HomeWorkId}`\n : `/track-assignment/homework/${assignment.HomeWorkId}/all`\n );\n }}\n >\n {t('dashboard:assignmentTracking.trackBtn', 'Track')}\n </Button>\n </div>\n </StyledCard>\n ))}\n <StyledLink>\n <Link to=\"/track-assignment\" className=\"more-link\">\n {t(\n 'dashboard:assignmentTracking.moreAssignments',\n 'More Assignments'\n )}\n </Link>\n </StyledLink>\n </StyledContainer>\n )}\n </div>\n );\n};\n\nexport default AssignmentTrackingCard;\n","import {\n CubeSVG,\n QuestionSVG,\n VideoSVG,\n WorksheetSVG,\n FactualFluencyPNG\n} from 'assets/img/dashboardv2';\n\nconst dashboardCards = [\n {\n id: 1,\n title: 'Browse',\n subTitle: 'Questions',\n backgroundColor: '#FFFBEA',\n icon: QuestionSVG,\n url: `/browse-content`,\n urlType: 'REDIRECT'\n },\n {\n id: 2,\n title: 'Watch',\n subTitle: 'Video Tutorials',\n backgroundColor: '#FFF9EF',\n icon: VideoSVG,\n url: `/browse-content/problemsums-trial`,\n urlType: 'REDIRECT'\n },\n {\n id: 3,\n title: 'Assign',\n subTitle: 'Topical worksheet',\n backgroundColor: '#FFF9EF',\n icon: WorksheetSVG,\n url: `/create-and-assign/topical-worksheet`,\n urlType: 'REDIRECT'\n },\n {\n id: 4,\n title: 'Play',\n subTitle: 'IVM',\n backgroundColor: '#FEFFF5',\n icon: CubeSVG,\n url: `https://ivm.koobits.com/dashboardv5/index.html`,\n urlType: 'NEW_TAB'\n },\n {\n id: 5,\n title: 'Practice',\n subTitle: 'Factual Fluency',\n backgroundColor: '#FFFDF7',\n icon: FactualFluencyPNG,\n url: `/create-and-assign/factual-fluency`,\n urlType: 'REDIRECT'\n }\n];\n\nexport default dashboardCards;\n","import { Card } from 'react-bootstrap';\nimport styled, { css } from 'styled-components';\n\nexport const Content = styled.div`\n padding-left: 4%;\n padding-right: 4%;\n\n .dashed-line {\n border-top: 1px dashed #cccccc;\n }\n`;\n\nexport const MainContent = styled.div`\n margin-top: 2rem;\n`;\n\nexport const StyledWelcomeText = styled.div`\n display: flex;\n flex-direction: row;\n align-items: end;\n h1 {\n color: #1e1e1e;\n font-style: italic;\n font-family: 'Ichlthni';\n font-size: 38px;\n }\n h2 {\n padding-left: 10px;\n padding-bottom: 4px;\n color: #1e1e1e;\n font-size: 24px;\n font-family: 'Muli';\n }\n\n .user-name {\n font-weight: 900;\n }\n\n .class-name {\n font-size: 18px;\n font-weight: 500;\n padding-bottom: 6px;\n }\n @media (max-width: 1366px) {\n h1 {\n font-size: 28px;\n }\n .user-name {\n font-size: 18px;\n }\n .class-name {\n font-size: 14px;\n }\n }\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n align-items: start;\n\n .user-name,\n .class-name {\n padding: 0px;\n margin: 0px;\n }\n }\n`;\n\nexport const StyledCardRow = styled.div`\n display: flex;\n justify-content: row;\n\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n }\n`;\n\nexport const StyledCard = styled(Card)`\n width: 100%;\n display: flex;\n background-color: ${props => props.backgroundcolor};\n min-height: 100px;\n padding: 24px 30px;\n border-radius: 8px;\n box-shadow: 2px 2px #d8d8d8;\n cursor: pointer;\n\n &:hover {\n opacity: 0.7;\n }\n @media (max-width: 1366px) {\n padding: 32px 20px;\n }\n\n @media (max-width: 767px) {\n width: 100%;\n margin-bottom: 1rem;\n margin-right: 0px;\n }\n`;\n\nexport const StyledInnerCardRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n .title {\n margin-top: -10px;\n font-size: 24px;\n font-family: 'Muli', sans-serif;\n font-weight: 700;\n color: #000000;\n }\n\n .subtitle {\n margin-top: -5px;\n margin-left: 2px;\n color: #000000;\n font-size: 18px;\n }\n .card-body {\n padding: 1.25rem 1.25rem 1.25rem 0;\n }\n .card-img {\n width: 80px;\n }\n @media (max-width: 1366px) {\n .title {\n font-size: 18px;\n }\n .subtitle {\n font-size: 14px;\n }\n .card-img {\n width: 60px;\n }\n }\n ${({ title }) =>\n title === 'Play' &&\n css`\n .card-img {\n width: 70px;\n }\n @media (max-width: 1366px) {\n .card-img {\n width: 50px;\n }\n }\n `}\n`;\n\nexport const BottomCard = styled(Card)`\n background-color: ${props => props.backgroundcolor};\n min-height: 100px;\n padding: 10px;\n padding-left: 20px;\n padding-right: 20px;\n border-radius: 8px;\n box-shadow: 2px 2px #d8d8d8;\n margin-top: 2rem;\n margin-bottom: 2rem;\n\n .graph-subtitle {\n font-size: 16px;\n font-family: 'Muli', sans-serif;\n font-weight: 700;\n color: #000000;\n margin-top: 0.5rem;\n }\n\n @media (max-width: 767px) {\n margin-top: 1rem;\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Card, Col, Row } from 'react-bootstrap';\nimport { useHistory } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { fetchClassesRequest } from 'stores/manage-class/actions';\nimport moment from 'moment';\nimport { fetchProfileDataRequest } from 'stores/profileSettings/actions';\n// import LoginReportCard from './components/LoginReportCard';\nimport LoginReportCard from 'components/Dashboard/LoginReportCard';\nimport Header from 'components/Header/Header';\nimport AssignmentTrackingCard from './components/AssignmentTrackingCard';\nimport dashboardCards from './constants/dashboardCards';\nimport {\n BottomCard,\n Content,\n StyledCardRow,\n StyledInnerCardRow,\n StyledCard,\n StyledWelcomeText,\n MainContent\n} from './DashboardV2.styled';\n\nconst DashboardV2 = () => {\n const { t } = useTranslation(['dashboard']);\n const dispatch = useDispatch();\n const history = useHistory();\n const { isLoading, profileData } = useSelector(\n state => state.profileSettings\n );\n\n useEffect(() => {\n dispatch(fetchProfileDataRequest());\n dispatch(fetchClassesRequest({ year: moment().format('YYYY') }));\n }, [dispatch]);\n\n const redirectToPage = ({ url, urlType }) => {\n if (urlType === 'NEW_TAB') {\n return window.open(url, '_blank', 'noreferrer');\n }\n return history.push(url);\n };\n\n return (\n <Content>\n <Header />\n <MainContent>\n {isLoading && 'Loading...'}\n {!isLoading && (\n <StyledWelcomeText>\n <h1>{t('dashboard:greeting.hello', 'Hello')},</h1>\n <h2 className=\"user-name\">{profileData.FullName}</h2>\n <h2 className=\"class-name\">{profileData.SchoolName}</h2>\n </StyledWelcomeText>\n )}\n <hr className=\"dashed-line\" />\n <StyledCardRow>\n {dashboardCards.map(dashboardCard => (\n <StyledCard\n key={dashboardCard.id}\n backgroundcolor={dashboardCard.backgroundColor}\n onClick={() => redirectToPage(dashboardCard)}\n style={{\n marginRight:\n dashboardCards.length !== dashboardCard.id && '15px'\n }}\n >\n <StyledInnerCardRow title={dashboardCard.title}>\n <Card.Body>\n <Card.Title className=\"title\">\n {t(\n `dashboard:navigation.${dashboardCard.title}`,\n dashboardCard.title\n )}\n </Card.Title>\n <Card.Text className=\"subtitle\">\n {t(\n `dashboard:navigation.${dashboardCard.subTitle}`,\n dashboardCard.subTitle\n )}\n </Card.Text>\n </Card.Body>\n <Card.Img className=\"card-img\" src={dashboardCard.icon} />\n </StyledInnerCardRow>\n </StyledCard>\n ))}\n </StyledCardRow>\n <Row>\n <Col md={5}>\n <BottomCard backgroundcolor=\"#FFFFFF\" className=\"\">\n <Card.Title className=\"graph-subtitle\">\n {t('dashboard:loginReport.title', 'Student Login')}\n </Card.Title>\n <LoginReportCard />\n </BottomCard>\n </Col>\n <Col md={7}>\n <BottomCard backgroundcolor=\"#FFFFFF\">\n <Card.Title className=\"graph-subtitle\">\n {t(\n 'dashboard:assignmentTracking.title',\n 'Latest Assignment Tracking'\n )}\n </Card.Title>\n <AssignmentTrackingCard />\n </BottomCard>\n </Col>\n </Row>\n </MainContent>\n </Content>\n );\n};\n\nexport default DashboardV2;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n font-family: 'Linotte Regular';\n display: flex;\n flex-direction: column;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n`;\n\nexport const NoParticipant = styled.div`\n display: flex;\n flex-direction: column;\n align-self: center;\n background: #ffffff;\n width: 70%;\n height: 100%;\n padding: 20px 30px;\n text-align: center;\n`;\n","import styled from 'styled-components';\nimport HeaderBg from 'assets/img/leaderboard/leaderboard-bg.png';\n\nexport const Topbar = styled.div`\n height: 390px;\n background-image: url(${HeaderBg});\n background-repeat: no-repeat;\n background-size: cover;\n display: flex;\n padding: 0 20px;\n position: relative;\n .button-back {\n position: absolute;\n top: 20px;\n left: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgb(0, 74, 137, 0.61);\n color: #ffffff;\n border-radius: 2rem;\n border: none;\n padding: 0.3rem 1.2rem;\n font-weight: 600;\n cursor: pointer;\n font-size: 1rem;\n img {\n margin-right: 0.3rem;\n }\n }\n .badge-img {\n margin-left: 5%;\n }\n .middle-content {\n display: flex;\n width: 100%;\n align-items: center;\n }\n .scoring-period {\n color: #ffffff;\n font-size: 26px;\n display: flex;\n margin-top: 24px;\n font-weight: 700;\n span {\n font-size: 16px;\n margin-right: 5px;\n }\n }\n .rules {\n position: absolute;\n right: -3%;\n bottom: 40px;\n cursor: pointer;\n }\n`;\n\nexport const Container = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n`;\n\nexport const TitleHeading = styled.div`\n font-size: 1.6rem;\n width: 40%;\n text-align: center;\n color: #ffffff;\n margin-bottom: 20px;\n\n img {\n width: 30px;\n height: 30px;\n margin-right: 10px;\n }\n`;\n\nexport const TitleMeta = styled.div`\n display: flex;\n width: 25%;\n justify-content: space-between;\n color: #ffffff;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport {\n Topbar,\n Container,\n TitleHeading,\n TitleMeta\n} from './LeaderboardHeader.styles';\nimport iconFactualFluency from 'assets/img/icon-factual-fluency.png';\nimport BackIcon from 'assets/img/back-icon.svg';\n\nimport moment from 'moment';\n\nconst LeaderboardHeader = props => {\n const { homework } = props;\n const { t } = useTranslation(['leaderboard']);\n const history = useHistory();\n return (\n <Topbar>\n <div\n className=\"button-back\"\n onClick={() => {\n history.goBack();\n }}\n >\n <img src={BackIcon} alt=\"Back\" />\n {`${t(`track-assignment-multi-class:main.back`, `Back`)}`}\n </div>\n <Container>\n <TitleHeading>\n <img src={iconFactualFluency} alt=\"iconFactualFluency\" />\n {homework.HomeWorkTitle}\n </TitleHeading>\n <TitleMeta>\n <span>Assigned by: {homework.TeacherName}</span>\n <span>\n {`${moment(homework.StartDate).format('DD/MM/YYYY')}-${moment(\n homework.Deadline\n ).format('DD/MM/YYYY')}`}\n </span>\n </TitleMeta>\n </Container>\n </Topbar>\n );\n};\n\nexport default React.memo(LeaderboardHeader);\n","import styled from 'styled-components';\nimport DefaultBadge from 'assets/img/leaderboard/default-pos.svg';\nimport FirstBadge from 'assets/img/leaderboard/first-pos.svg';\nimport SecondBadge from 'assets/img/leaderboard/second-pos.svg';\nimport ThirdBadge from 'assets/img/leaderboard/third-pos.svg';\n\nconst allBadge = {\n default: {\n bgImg: DefaultBadge,\n badgeColor: '#ffffff',\n gradinet: null,\n borderCol: null\n },\n first: {\n bgImg: FirstBadge,\n badgeColor: '#CC7900',\n gradinet:\n 'linear-gradient(to right, #FFDC5D, #FFFFFF, #FFC903, #FFC903, #FFC903, #FFC903, #FFC903, #FFC903, #FFCA07)',\n borderCol: '#fac500'\n },\n second: {\n bgImg: SecondBadge,\n badgeColor: '#849AB1',\n gradinet:\n 'linear-gradient(to right, #dfe5eb, #ffffff, #e4e9eb, #e4e9eb, #e4e9eb, #e4e9eb, #e4e9eb, #e4e9eb, #deecf4)',\n borderCol: '#a6bdc6'\n },\n third: {\n bgImg: ThirdBadge,\n badgeColor: '#D17D1F',\n gradinet:\n 'linear-gradient(to right, #fcd094, #f8f8f8, #fddfbb, #fddfbb, #fddfbb, #fddfbb, #fddfbb, #fddfbb, #fddfbb, #ffc37b)',\n borderCol: '#e3af70'\n }\n};\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-self: center;\n background: #ffffff;\n width: ${props => (props.challengeMode === 'hallOfFame' ? '100%' : '70%')};\n height: 100%;\n padding: 20px 30px;\n .list-headings {\n display: flex;\n width: 100%;\n padding: 0 5px 10px 35px;\n }\n .nearby-container {\n background-color: #f0fcff;\n border: 1px solid transparent;\n border-radius: 20px;\n margin: 5px 0 20px;\n display: flex;\n justify-content: center;\n .nearby {\n border: 1px solid #9adcf5;\n background-color: #dbf7ff;\n border-radius: 20px;\n color: #0081b1;\n font-size: 18px;\n padding: 5px 10px;\n width: 30%;\n text-align: center;\n cursor: pointer;\n }\n }\n .current-user {\n background-color: #fece18 !important;\n }\n`;\n\nexport const Headings = styled.div`\n margin-left: 10px;\n display: flex;\n flex-direction: column;\n color: #5ec0eb;\n flex: ${props => props.flex};\n font-weight: 700;\n`;\n\nexport const Lists = styled.div`\n display: flex;\n margin-bottom: 10px;\n border: 1px solid black;\n align-items: center;\n padding: 3px 10px 3px 45px;\n border: 1px solid;\n border-radius: 30px;\n position: relative;\n font-size: 14px;\n cursor: pointer;\n :nth-of-type(odd) {\n background-color: #ffffff;\n border-color: #d4ecf5;\n }\n :nth-of-type(even) {\n background-color: #def6ff;\n border-color: #b9e6f7;\n }\n border-color: ${props =>\n props.currPos !== 'default'\n ? allBadge[props.currPos].borderCol\n : 'auto'}!important;\n background-image: ${props => allBadge[props.currPos].gradinet};\n .postions {\n color: ${props => allBadge[props.currPos].badgeColor};\n background: url(${props => allBadge[props.currPos].bgImg});\n position: absolute;\n left: ${props => (props.currPos === 'default' ? '-8px' : '-12px')};\n height: ${props => (props.currPos === 'default' ? '30px' : '40px')};\n width: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 18px;\n font-weight: 700;\n background-repeat: no-repeat;\n background-size: 50px 100%;\n }\n .list-name {\n flex: 2;\n display: flex;\n }\n .list-class {\n flex: 2;\n display: flex;\n }\n .list-points {\n flex: 1;\n display: flex;\n font-size: 17px;\n font-weight: 700;\n\n .total-score {\n font-weight: normal;\n }\n }\n .list-achivement {\n flex: 1;\n display: flex;\n }\n`;\n\nexport const ClassList = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-around;\n margin-bottom: 20px;\n border: 1px solid black;\n padding: 3px 0px;\n font-size: 16px;\n border: 1px solid #fac500;\n border-radius: 30px;\n user-select: none;\n cursor: pointer;\n background-image: linear-gradient(\n to right,\n #ffdc5d,\n #ffffff,\n #ffc903,\n #ffc903,\n #ffc903,\n #ffc903,\n #ffca07\n );\n span {\n font-size: 18px;\n }\n .total-participants,\n .total-details {\n font-size: 14px;\n }\n .total-participants {\n span {\n font-weight: bold;\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport Spinner from 'components/Shared/Spinner';\nimport { Container, Headings, Lists } from './StudentList.styles';\nimport { milisecondToString } from 'helpers/timesParser';\n\nconst StudentList = ({ data, isTopFifty, challengeMode, isLoading }) => {\n const { t } = useTranslation(['leaderboard']);\n const { userID } = useSelector(state => state.login);\n const [list, setList] = useState(data);\n const showLabel = () => {\n return t('leaderboard:leaderboardRanking.class', 'Class');\n };\n const labels = [\n {\n name: t('leaderboard:leaderboardRanking.name', 'Name'),\n flex: 2\n },\n {\n name: showLabel(),\n flex: 2\n },\n {\n name: t('leaderboard:leaderboardRanking.score', 'Score'),\n flex: 1\n },\n {\n name: t('leaderboard:leaderboardRanking.totalTime', 'Total Time'),\n flex: 1\n }\n ];\n\n const showPosition = pos => {\n if (isTopFifty && pos < 4) {\n if (pos === 1) return 'first';\n if (pos === 2) return 'second';\n if (pos === 3) return 'third';\n }\n return 'default';\n };\n\n useEffect(() => {\n if (data && !isTopFifty) {\n let tempList = [...list];\n tempList = data.slice(2);\n setList(tempList);\n } else {\n setList(data);\n }\n // eslint-disable-next-line\n }, [data]);\n\n const cpValue = item => {\n return (\n <>\n {item.CurrentScore}/\n <span className=\"total-score\">{item.TotalScore}</span>\n </>\n );\n };\n\n return (\n <Container challengeMode={challengeMode}>\n <div className=\"list-headings\">\n {labels.map((item, index) => (\n <Headings key={index} flex={item.flex}>\n {item.name}\n </Headings>\n ))}\n </div>\n {isLoading && <Spinner />}\n {!isLoading &&\n list.map((item, i) => (\n <React.Fragment key={item.UserId}>\n <Lists\n className={item.UserId === userID && 'current-user'}\n currPos={showPosition(i + 1)}\n >\n {isTopFifty && <div className=\"postions\">{i + 1}</div>}\n <div className=\"list-name\">{item.UserName}</div>\n <div className=\"list-class\">{item.ClassName}</div>\n <div className=\"list-points\">{cpValue(item)}</div>\n <div className=\"list-achivement\">\n {milisecondToString(item.TimeTaken)}\n </div>\n </Lists>\n </React.Fragment>\n ))}\n </Container>\n );\n};\n\nexport default React.memo(StudentList);\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Container, NoParticipant } from './Leaderboard.styles';\nimport LeaderboardHeader from 'components/Leaderboard/LeaderboardHeader';\nimport StudentList from 'components/Leaderboard/StudentList';\nimport Header from 'components/Header/Header';\n\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport {\n fetchFactualFluencyLeaderboardRequest,\n factualFluencyLeaderboardReset\n} from 'stores/factual-fluency/actions';\nimport {\n clearSingleClassReport,\n fetchSingleClassReportRequest\n} from 'stores/assignments/actions';\n\nconst Leaderboard = ({ match }) => {\n const homeworkID = parseInt(match.params.homeworkID, 10);\n const { t } = useTranslation(['leaderboard']);\n const dispatch = useDispatch();\n\n const { singleClassReport } = useSelector(state => state.assignments);\n\n const { isLoading, leaderboard } = useSelector(state => state.factualFluency);\n\n useEffect(() => {\n dispatch(\n fetchSingleClassReportRequest({\n homeworkID\n })\n );\n dispatch(fetchFactualFluencyLeaderboardRequest(homeworkID));\n return () => {\n dispatch(factualFluencyLeaderboardReset());\n dispatch(clearSingleClassReport());\n };\n }, [dispatch, homeworkID]);\n\n return (\n <>\n <Header />\n\n <Container>\n <LeaderboardHeader\n homework={!isNilOrEmpty(singleClassReport[0]) && singleClassReport[0]}\n />\n <StudentList\n data={leaderboard}\n isTopFifty={true}\n isLoading={isLoading}\n />\n {!isLoading && leaderboard.length === 0 && (\n <NoParticipant>\n {t(\n 'leaderboard:banner.noParticipant',\n 'No participants at the moment.'\n )}\n </NoParticipant>\n )}\n </Container>\n </>\n );\n};\n\nexport default Leaderboard;\n","import styled from 'styled-components';\n\nexport const TopBarFixed = styled.div`\n background-color: #064da4;\n border-bottom: 0;\n padding: 0;\n color: #fff;\n\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const LeftNav = styled.div`\n margin-left: 50px;\n flex-grow: 1;\n`;\n\nexport const RightNav = styled.div`\n width: 270px;\n margin-left: auto;\n`;\n\nexport const ButtonHeader = styled.button`\n width: 50%;\n float: left;\n border-radius: 0;\n background-color: #2167be;\n height: 100px;\n`;\n","import styled from 'styled-components';\nimport iconTimer from 'assets/img/factual-fluency/bg-timer.png';\n\nexport const TimerWrap = styled.div`\n display: inline-block;\n vertical-align: middle;\n font-size: 20px;\n`;\n\nexport const TimerCountdown = styled.span`\n border: 1px solid #fff;\n font-size: 42px;\n display: inline-block;\n vertical-align: middle;\n border-radius: 4px;\n line-height: 1;\n padding: 7px 20px;\n margin-left: 10px;\n min-width: 145px;\n`;\n\nexport const ProgressWrap = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n justify-content: center;\n`;\n\nexport const ProgressTime = styled.div`\n width: 440px;\n display: inline-block;\n vertical-align: middle;\n\n .progress {\n height: 46px;\n background-color: #fff;\n border: 6px solid #082b56;\n border-radius: 10px;\n display: flex;\n overflow: hidden;\n font-size: 0.75rem;\n\n .progress-bar {\n background-color: #ff7201;\n border-radius: 0 4px 4px 0;\n width: 100%;\n\n &.active {\n width: 0%;\n }\n }\n }\n`;\n\nexport const CountdownNumber = styled.div`\n background: url(${iconTimer}) no-repeat;\n width: 81px;\n height: 75px;\n color: #fff;\n font-size: 51px;\n text-align: center;\n line-height: 75px;\n margin-left: 30px;\n padding-right: 6px;\n`;\n","import React from 'react';\nimport {\n CountdownNumber,\n ProgressTime,\n ProgressWrap,\n TimerCountdown,\n TimerWrap\n} from './FactualFluencyTimer.style';\n\nconst FactualFluencyTimer = ({ timeType, time, intervalActive, limit }) => {\n const renderTime = (timeType, time) => {\n switch (timeType.value) {\n case 4:\n return (\n <>\n {timeType.name}\n <TimerCountdown>\n {time.m} : {time.s < 10 ? `0${time.s}` : time.s}\n </TimerCountdown>\n </>\n );\n case 5:\n return (\n <ProgressWrap>\n <ProgressTime>\n <div className=\"progress\">\n <div\n className={`progress-bar ${intervalActive ? 'active' : ''}`}\n style={\n intervalActive\n ? {\n transition: `width ${limit}s ease-in-out`\n }\n : { width: '101%' }\n }\n ></div>\n </div>\n </ProgressTime>\n <CountdownNumber>{time.s}</CountdownNumber>\n </ProgressWrap>\n );\n default:\n break;\n }\n };\n return <TimerWrap>{renderTime(timeType, time)}</TimerWrap>;\n};\n\nexport default React.memo(FactualFluencyTimer);\n","import 'assets/icons/icon.css';\nimport React, { useCallback } from 'react';\nimport {\n ButtonHeader,\n LeftNav,\n RightNav,\n TopBarFixed\n} from './FactualFluencyHeader.style';\nimport FactualFluencyTimer from './FactualFluencyTimer';\n\nconst FactualFluencyHeader = ({\n timeType,\n time,\n intervalActive,\n limit,\n mute,\n onMute\n}) => {\n const onClose = useCallback(() => {\n window.open('', '_self');\n window.close();\n }, []);\n\n return (\n <TopBarFixed>\n <LeftNav>\n <FactualFluencyTimer\n timeType={timeType}\n time={time}\n intervalActive={intervalActive}\n limit={limit}\n />\n </LeftNav>\n <RightNav>\n <ButtonHeader\n className={`btn ${!mute ? 'active' : ''}`}\n onClick={onMute}\n >\n <i className=\"icon-koo-volume\" />\n </ButtonHeader>\n <ButtonHeader className=\"btn\" onClick={onClose}>\n <i className=\"icon-koo-close2\" />\n </ButtonHeader>\n </RightNav>\n </TopBarFixed>\n );\n};\n\nexport default React.memo(FactualFluencyHeader);\n","import styled from 'styled-components';\n\nexport const QuestionWrap = styled.div`\n text-align: center;\n margin-top: 150px;\n\n &.have-pad {\n padding-right: 270px;\n }\n\n .question {\n display: inline-block;\n vertical-align: middle;\n }\n`;\n\nexport const QuestionNumber = styled.div`\n font-size: 72px;\n margin-right: 80px;\n color: #e06400;\n font-weight: 800;\n`;\n\nexport const QuestionText = styled.div`\n font-size: 131px;\n margin-right: 20px;\n font-weight: 800;\n color: #212529;\n`;\n\nexport const QuestionAnswer = styled.div`\n .form-control {\n background-color: #e4f0ff;\n border: 0;\n height: 137px;\n font-size: 131px;\n width: 200px;\n color: #212529;\n text-align: center;\n border-radius: 10px;\n padding: 0;\n }\n`;\n","import React from 'react';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport HTMLReactParser from 'html-react-parser';\nimport {\n QuestionAnswer,\n QuestionNumber,\n QuestionText,\n QuestionWrap\n} from './FactualFluencyQuestion.style';\n\nconst FactualFluencyQuestion = ({\n questionNumber,\n question,\n onChange,\n onSubmitAnswer,\n value\n}) => {\n const { title } = questionParser(question.CartQuestion);\n\n const renderQuestion = HTMLReactParser(convertTagsToHTML(title, false), {\n replace: domNode => {\n if (domNode.name === 'p') {\n return (\n <QuestionText className=\"question\">\n {domNode.children[0]?.data.replace('__', '') ?? ''}\n </QuestionText>\n );\n }\n if (domNode.name === 'input') {\n return (\n <QuestionAnswer className=\"question\">\n <input\n type=\"text\"\n className=\"form-control\"\n onChange={onChange}\n onKeyPress={onSubmitAnswer}\n value={value}\n />\n </QuestionAnswer>\n );\n }\n return domNode;\n }\n }).filter(el => el.type !== 'br');\n return (\n <QuestionWrap>\n <QuestionNumber className=\"question\">{`Q${questionNumber}:`}</QuestionNumber>\n {renderQuestion}\n </QuestionWrap>\n );\n};\n\nexport default React.memo(FactualFluencyQuestion);\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding-top: 100px;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI',\n 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',\n 'Helvetica Neue', sans-serif;\n }\n`;\n\nexport const FactualFluencyBody = styled.div``;\nexport const FactualFluencySideBar = styled.div`\n position: fixed;\n right: 0;\n bottom: 0;\n width: 270px;\n background-color: #4484d2;\n border-left: 0;\n top: 100px;\n`;\n\nexport const ButtonSkip = styled.button`\n font-size: 36px;\n margin-right: 0;\n margin-left: auto;\n background-color: #094a9b;\n color: #fff;\n border: 0;\n display: block;\n padding: 10px 20px 5px 30px;\n`;\n\nexport const ButtonPrev = styled.button`\n font-size: 36px;\n margin-right: 0;\n margin-left: auto;\n background-color: #094a9b;\n color: #fff;\n border: 0;\n display: block;\n position: fixed;\n left: 0;\n bottom: 80px;\n border-radius: 0 32px 32px 0;\n padding: 3px 30px 5px 20px;\n font-weight: 800;\n`;\n\nexport const ButtonNext = styled.button`\n font-size: 36px;\n margin-right: 0;\n margin-left: auto;\n background-color: #094a9b;\n color: #fff;\n border: 0;\n display: block;\n padding: 3px 20px 5px 30px;\n position: fixed;\n right: 0;\n bottom: 80px;\n border-radius: 32px 0 0 32px;\n font-weight: 800;\n`;\n\nexport const Backdrop = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, 0.65);\n z-index: 1040;\n`;\n\nexport const Countdown = styled.div`\n width: 484px;\n height: 484px;\n border-radius: 50%;\n background-color: #e06400;\n border: 40px solid #fff;\n position: fixed;\n top: 50%;\n left: 50%;\n margin: -242px 0 0 -242px;\n z-index: 1050;\n font-size: 210px;\n text-align: center;\n color: #fff;\n line-height: 404px;\n justify-content: center;\n font-weight: 700;\n`;\n","import React, { useCallback, useEffect } from 'react';\nimport FactualFluencyHeader from 'components/CreateAndAssign/FactualFluency/Preview/FactualFluencyHeader';\nimport FactualFluencyQuestion from 'components/CreateAndAssign/FactualFluency/Preview/FactualFluencyQuestion';\n\nimport {\n Backdrop,\n ButtonPrev,\n ButtonNext,\n Container,\n Countdown,\n FactualFluencyBody\n} from './FactualFluencyPreview.styles';\nimport { useState } from 'react';\nimport { getTimeType, secondsToTime } from 'helpers/timesParser';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\n\nconst FactualFluencyPreview = ({ onMute, mute }) => {\n const history = useHistory();\n const { assignmentType, timeLimit } = useSelector(state => state.worksheet);\n\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n const [isStart, setIsStart] = useState(true);\n const [intervalActive, setIntervalActive] = useState(false);\n const [countdown, setCountdown] = useState(3);\n const [time, setTime] = useState(secondsToTime(timeLimit));\n const [seconds, setSeconds] = useState(timeLimit);\n const [currentQuestion, setCurrentQuestion] = useState(0);\n const [inputValue, setInputValue] = useState('');\n\n const timeType = getTimeType(assignmentType);\n\n const resetInterval = useCallback(() => {\n setIntervalActive(false);\n setSeconds(timeLimit);\n setTime(secondsToTime(timeLimit));\n setTimeout(function() {\n setIntervalActive(true);\n }, 500);\n // eslint-disable-next-line\n }, []);\n\n const onChange = useCallback(e => {\n setInputValue(e.target.value);\n }, []);\n\n const onSkip = useCallback(() => {\n if (currentQuestion < createFactualFluencyItems.length - 1) {\n setInputValue('');\n setCurrentQuestion(currentQuestion + 1);\n\n if (timeType.value === 5) {\n resetInterval();\n }\n } else {\n history.push('/factual-fluency/result');\n }\n // eslint-disable-next-line\n }, [currentQuestion, timeType]);\n\n const onPrev = useCallback(() => {\n if (currentQuestion > 0) {\n setInputValue('');\n setCurrentQuestion(currentQuestion - 1);\n if (timeType.value === 5) {\n resetInterval();\n }\n }\n // eslint-disable-next-line\n }, [currentQuestion, timeType]);\n\n const onSubmitAnswer = useCallback(\n e => {\n if (e.key === 'Enter') {\n if (currentQuestion < createFactualFluencyItems.length - 1) {\n setInputValue('');\n setCurrentQuestion(prev => prev + 1);\n if (timeType.value === 5) {\n resetInterval();\n }\n } else {\n history.push('/factual-fluency/result');\n }\n }\n },\n // eslint-disable-next-line\n [inputValue, timeType]\n );\n\n useEffect(() => {\n let interval;\n let timeout;\n\n switch (timeType.value) {\n case 4:\n if (isStart) {\n interval = setInterval(() => {\n setSeconds(seconds - 1);\n setTime(secondsToTime(seconds - 1));\n }, 1000);\n if (seconds === 0) {\n clearInterval(interval);\n }\n }\n break;\n case 5:\n if (isStart) {\n timeout = setTimeout(function() {\n setIntervalActive(true);\n }, 500);\n }\n interval = setInterval(() => {\n setSeconds(seconds - 1);\n setTime(secondsToTime(seconds - 1));\n }, 1000);\n if (seconds <= 0) {\n if (currentQuestion < createFactualFluencyItems.length - 1) {\n setInputValue('');\n setCurrentQuestion(currentQuestion + 1);\n resetInterval();\n } else {\n clearInterval(interval);\n clearTimeout(timeout);\n history.push('/factual-fluency/result');\n }\n }\n break;\n default:\n break;\n }\n\n return () => {\n clearInterval(interval);\n clearTimeout(timeout);\n };\n // eslint-disable-next-line\n }, [seconds, timeType, isStart, currentQuestion, createFactualFluencyItems]);\n\n useEffect(() => {\n let interval;\n setIsStart(false);\n switch (timeType.value) {\n case 4:\n interval = setInterval(() => {\n setCountdown(countdown - 1);\n }, 1000);\n if (countdown === 0) {\n setIsStart(true);\n clearInterval(interval);\n }\n break;\n default:\n setIsStart(true);\n clearInterval(interval);\n break;\n }\n\n return () => clearInterval(interval);\n }, [countdown, timeType]);\n\n return (\n <Container>\n {!isStart && (\n <>\n <Backdrop />\n <Countdown>{countdown}</Countdown>\n </>\n )}\n\n <FactualFluencyHeader\n timeType={timeType}\n time={time}\n intervalActive={intervalActive}\n limit={timeLimit}\n onMute={onMute}\n mute={mute}\n />\n <FactualFluencyBody>\n <FactualFluencyQuestion\n questionNumber={currentQuestion + 1}\n question={createFactualFluencyItems[currentQuestion]}\n value={inputValue}\n onChange={onChange}\n onSubmitAnswer={onSubmitAnswer}\n />\n </FactualFluencyBody>\n {currentQuestion > 0 && (\n <ButtonPrev className=\"btn\" onClick={onPrev}>\n <i className=\"icon-koo-prev\" /> Prev\n </ButtonPrev>\n )}\n <ButtonNext className=\"btn\" onClick={onSkip}>\n <i className=\"icon-koo-skip\" /> Next\n </ButtonNext>\n </Container>\n );\n};\n\nexport default React.memo(FactualFluencyPreview);\n","import styled from 'styled-components';\nimport bgFactualFluency from 'assets/img/factual-fluency/bg-blue_hover.jpeg';\n\nexport const Container = styled.div`\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI',\n 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',\n 'Helvetica Neue', sans-serif;\n\n position: relative;\n margin-top: -53px;\n background: #0066b8 url(${bgFactualFluency});\n color: #fff;\n height: 100vh;\n\n .title-text {\n font-size: 60px;\n font-weight: 700;\n margin-bottom: 80px;\n\n .btn-close-rt {\n position: absolute;\n top: 20px;\n right: 20px;\n background-color: transparent;\n }\n`;\n\nexport const CenterMiddle = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n text-align: center;\n transform: translate(-50%, -50%);\n -webkit-transform: translate(-50%, -50%);\n\n .title {\n font-family: 'Varela Round', sans-serif;\n font-size: 60px;\n font-weight: 700;\n margin-bottom: 80px;\n }\n`;\n\nexport const InfoGroup = styled.div`\n max-width: 720px;\n margin: 0 auto 30px;\n &::after {\n display: block;\n clear: both;\n content: '';\n }\n`;\n\nexport const InfoGroupBtn = styled.div`\n margin: 70px auto 0;\n max-width: 770px;\n\n .btn-xlg {\n font-size: 50px;\n font-weight: 700;\n text-transform: uppercase;\n line-height: 70px;\n border-radius: 40px;\n }\n`;\n\nexport const InfoLabel = styled.div`\n float: left;\n line-height: 50px;\n padding: 10px 20px;\n background-color: #0e8bff;\n color: #fff;\n width: 270px;\n text-align: center;\n border-radius: 10px 0 0 10px;\n font-size: 30px;\n`;\n\nexport const InfoDesc = styled.div`\n float: left;\n line-height: 50px;\n padding: 10px 20px;\n width: 450px;\n background-color: #fff;\n color: #212529;\n border-radius: 0 10px 10px 0;\n padding-left: 45px;\n padding-right: 45px;\n font-size: 36px;\n`;\n\nexport const CloseButton = styled.button`\n position: absolute;\n pointer-events: all;\n top: 20px;\n right: 20px;\n z-index: 100;\n`;\n","import { getTimeType, renderTimes, secondsToTime } from 'helpers/timesParser';\nimport React, { useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n Container,\n CenterMiddle,\n InfoGroup,\n InfoDesc,\n InfoLabel,\n InfoGroupBtn,\n CloseButton\n} from './FactualFluencyReady.styles';\n\nconst FactualFluencyReady = ({ onMute }) => {\n const { t, i18n } = useTranslation(['create-assign-question']);\n const timeUnit = unit => {\n return `${t(`create-assign-question:timeSetting.${unit}`, unit)}`;\n };\n const { title, assignmentType, timeLimit } = useSelector(\n state => state.worksheet\n );\n\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n\n const { profileData } = useSelector(state => state.profileSettings);\n\n const timeType = getTimeType(assignmentType);\n\n const times = secondsToTime(timeLimit);\n\n const history = useHistory();\n const onClose = useCallback(() => {\n window.open('', '_self');\n window.close();\n }, []);\n\n useEffect(() => {\n const lang = localStorage.getItem('current_locale');\n i18n.changeLanguage(lang);\n }, [i18n]);\n\n const onClick = useCallback(() => {\n onMute();\n history.push('/factual-fluency/preview');\n }, [history, onMute]);\n return (\n <Container>\n <CloseButton type=\"button\" className=\"btn btn-close-rt\" onClick={onClose}>\n <i className=\"icon-koo-close2\" />\n </CloseButton>\n <CenterMiddle>\n <div className=\"container\">\n <h1 className=\"title-text text-center\">{title}</h1>\n {/* <InfoGroup>\n <InfoLabel>Deadline</InfoLabel>\n <InfoDesc>Total 1 Min</InfoDesc>\n </InfoGroup> */}\n <InfoGroup>\n <InfoLabel>\n {t(`create-assign-question:readyFF.assignBy`, 'Assigned By')}\n </InfoLabel>\n <InfoDesc>{profileData.FullName}</InfoDesc>\n </InfoGroup>\n <InfoGroup>\n <InfoLabel>\n {t(`create-assign-question:readyFF.time`, 'Time')}\n </InfoLabel>\n <InfoDesc>\n {timeType.name}{' '}\n {timeType.value !== 6 && renderTimes(times, timeUnit)}\n </InfoDesc>\n </InfoGroup>\n <InfoGroup>\n <InfoLabel>\n {t(`create-assign-question:readyFF.noOfQn`, 'No. of Qns')}\n </InfoLabel>\n <InfoDesc>\n {createFactualFluencyItems.length}{' '}\n {t(`create-assign-question:readyFF.qn`, 'Qns')}\n </InfoDesc>\n </InfoGroup>\n <InfoGroupBtn>\n <button\n type=\"button\"\n className=\"btn btn-primary btn-block btn-xlg\"\n onClick={onClick}\n >\n {t(`create-assign-question:readyFF.ready`, 'Ready, Go!')}\n </button>\n </InfoGroupBtn>\n </div>\n </CenterMiddle>\n </Container>\n );\n};\n\nexport default React.memo(FactualFluencyReady);\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding-top: 100px;\n font-family: 'Linotte Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI',\n 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',\n 'Helvetica Neue', sans-serif;\n\n .wrap-button-right {\n width: 135px;\n margin: 0;\n\n .single-btn {\n width: 100%;\n }\n }\n`;\n\nexport const NavTitle = styled.div`\n font-size: 46px;\n font-weight: 700;\n padding-left: 135px;\n margin: 0 auto;\n\n span {\n font-size: 60px;\n text-align: center;\n }\n`;\n\nexport const ResultBody = styled.div`\n font-weight: 700;\n display: table;\n margin: 0 auto;\n`;\nexport const QuestionWrap = styled.div`\n margin-top: 20px;\n padding-right: 0px;\n display: table-row;\n\n .question-number {\n display: table-cell;\n vertical-align: middle;\n padding-right: 50px;\n font-size: 44px;\n color: #e06400;\n }\n\n .question-wrap {\n display: table-cell;\n vertical-align: middle;\n padding-right: 30px;\n\n .question-text {\n font-size: 54px;\n margin-right: 0;\n text-align: right;\n line-height: 1;\n color: #212529;\n\n &.answer {\n margin-left: 20px;\n color: #064da4;\n }\n }\n }\n`;\n","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ButtonHeader,\n RightNav,\n TopBarFixed\n} from 'components/CreateAndAssign/FactualFluency/Preview/FactualFluencyHeader.style';\nimport { useSelector } from 'react-redux';\nimport questionParser from 'helpers/questionParser';\nimport HTMLReactParser from 'html-react-parser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport {\n Container,\n NavTitle,\n QuestionWrap,\n ResultBody\n} from './FactualFluencyResult.styles';\n\nconst renderQuestionAnswer = (question, number) => {\n const { solution } = questionParser(question);\n const renderQuestion = HTMLReactParser(convertTagsToHTML(solution, false), {\n replace: domNode => {\n if (domNode.name === 'p') {\n let questionText = '';\n let answerText = '';\n const text = domNode.children[0]?.data ?? '';\n if (text) {\n const split = text.split('=');\n questionText = !isNilOrEmpty(split[0]) ? split[0].trim() : '';\n answerText = !isNilOrEmpty(split[1]) ? split[1].trim() : '';\n }\n return (\n <QuestionWrap>\n <div className=\"question-number\">{`Q${number}:`}</div>\n <div className=\"question-wrap\">\n <span className=\"question-text\">{questionText}</span>\n </div>\n <div className=\"question-wrap\">\n <span className=\"question-text\">=</span>\n </div>\n <div className=\"question-wrap\">\n <span className=\"question-text answer\">{answerText}</span>\n </div>\n </QuestionWrap>\n );\n }\n return domNode;\n }\n }).filter(el => el.type !== 'br');\n\n return renderQuestion;\n};\n\nconst FactualFluencyResult = () => {\n const { createFactualFluencyItems } = useSelector(\n state => state.factualFluency\n );\n const { t } = useTranslation(['create-assign-factual-fluency']);\n\n const onClose = useCallback(() => {\n window.open('', '_self');\n window.close();\n }, []);\n return (\n <Container>\n <TopBarFixed>\n <NavTitle>\n {t('create-assign-factual-fluency:answers', 'Answers')}:{' '}\n <span>Q1 - Q{createFactualFluencyItems.length}</span>\n </NavTitle>\n <RightNav className=\"wrap-button-right\">\n <ButtonHeader className=\"btn single-btn\" onClick={onClose}>\n <i className=\"icon-koo-close2\" />\n </ButtonHeader>\n </RightNav>\n </TopBarFixed>\n <ResultBody>\n {createFactualFluencyItems.map((question, key) => {\n return renderQuestionAnswer(question.CartQuestion, key + 1);\n })}\n </ResultBody>\n </Container>\n );\n};\n\nexport default React.memo(FactualFluencyResult);\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Route, Switch, useLocation } from 'react-router-dom';\nimport useSound from 'use-sound';\nimport FactualFluencyPreview from './FactualFluencyPreview';\nimport FactualFluencyReady from './FactualFluencyReady';\nimport bgAudio from 'assets/audio/bg-music.mp3';\nimport FactualFluencyResult from './FactualFluencyResult';\n\nconst FactualFluencyGame = () => {\n const [mute, setMute] = useState(true);\n const { pathname } = useLocation();\n\n const onMute = useCallback(() => {\n setMute(!mute);\n }, [mute]);\n\n const [play, { stop }] = useSound(bgAudio, { interrupt: true });\n\n useEffect(() => {\n if (mute) {\n stop();\n } else {\n play();\n }\n return () => {\n stop();\n };\n // eslint-disable-next-line\n }, [mute]);\n\n useEffect(() => {\n if (\n pathname === '/factual-fluency/ready' ||\n pathname === '/factual-fluency/result'\n ) {\n setMute(true);\n } else {\n setMute(false);\n }\n }, [pathname]);\n\n return (\n <Switch>\n <Route\n exact\n path=\"/factual-fluency/ready\"\n component={props => <FactualFluencyReady {...props} onMute={onMute} />}\n />\n\n <Route\n exact\n path=\"/factual-fluency/preview\"\n component={props => (\n <FactualFluencyPreview {...props} onMute={onMute} mute={mute} />\n )}\n />\n <Route\n exact\n path=\"/factual-fluency/result\"\n component={props => <FactualFluencyResult {...props} />}\n />\n </Switch>\n );\n};\n\nexport default React.memo(FactualFluencyGame);\n","import styled from 'styled-components';\n\nexport const MediaBody = styled.div`\n margin-right: 50px;\n p {\n line-height: 1.4285;\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n margin-bottom: -6px;\n }\n\n .question {\n margin-bottom: 10px;\n }\n`;\n\nexport const McqOptionsList = styled.ul`\n list-style-type: circle;\n li {\n line-height: 1.4285;\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n }\n`;\n\nexport const TableModal = styled.div`\n line-height: 1.4285;\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n table {\n width: 100%;\n margin-left: initial !important;\n margin: auto;\n }\n table tbody tr td {\n text-align: center;\n }\n table tbody tr td hr {\n margin-top: 0;\n margin-bottom: 3px;\n border-color: darkgray;\n }\n table tbody tr td input {\n max-width: 25px !important;\n height: 35px;\n text-align: center;\n }\n input {\n border-color: transparent;\n background-color: rgba(144, 144, 144, 0.2);\n }\n @media print {\n td {\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n }\n }\n`;\n","import React from 'react';\nimport { isNil } from 'ramda';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport {\n MediaBody,\n McqOptionsList,\n TableModal\n} from './QuestionContentPrint.styles';\n\nexport default function QuestionContentPrint({ question }) {\n // jsx renders\n const { title, mcqOptions } = questionParser(question);\n const renderOptions = mcqOptions.map(option =>\n HTMLReactParser(convertTagsToHTML(option, false), {\n replace: domNode => {\n if (domNode.name === 'img') {\n domNode.attribs.style = 'width: 68%';\n return domNode;\n }\n return domNode;\n }\n })\n );\n const renderQuestion = HTMLReactParser(convertTagsToHTML(title), {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img src={domNode.attribs?.url} alt={domNode.attribs?.uniqueid} />\n );\n }\n if (domNode.name === 'helptext') {\n return (\n <small id=\"questionHelp\" className=\"form-text text-muted\">\n {domNode.children[0]?.data ?? ''}\n </small>\n );\n }\n if (domNode.name === 'table') {\n domNode.attribs.cellspacing = '0';\n domNode.attribs.cellpadding = '0';\n domNode.attribs.style = 'align-content: center;';\n return domNode;\n }\n if (domNode.name === 'td') {\n if (\n domNode.attribs.hasOwnProperty('style') &&\n !domNode.attribs.style.includes('border')\n ) {\n domNode.attribs.style = 'width: 20%';\n }\n return domNode;\n }\n return domNode;\n }\n });\n return (\n <div className=\"media\">\n <MediaBody>\n <TableModal>{renderQuestion}</TableModal>\n {mcqOptions.length > 0 && (\n <McqOptionsList>\n {renderOptions.map(option => (\n <li key={option}>{option}</li>\n ))}\n </McqOptionsList>\n )}\n </MediaBody>\n </div>\n );\n}\n","import styled from 'styled-components';\n\nexport const MediaBody = styled.div`\n flex-direction: column;\n p {\n span {\n font-weight: 600;\n }\n line-height: 1.4285;\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n }\n @media print {\n td {\n font-size: 18px;\n color: #000;\n font-family: Arial, sans-serif;\n }\n }\n`;\n\nexport const McqOptionsList = styled.ul`\n list-style-type: circle;\n`;\n","import React, { useMemo } from 'react';\nimport { isEmpty, isNil } from 'ramda';\nimport HTMLReactParser from 'html-react-parser';\nimport questionParser from 'helpers/questionParser';\nimport convertTagsToHTML from 'helpers/text/convertTagsToHTML';\nimport { questionTypeIDs } from 'constants/index';\nimport { MediaBody } from './SolutionContentPrint.styles';\n\nexport default function SolutionContentPrint({ question }) {\n // jsx renders\n const { solution, questionAnswer, correctMCQAnswers } = questionParser(\n question\n );\n\n const type = questionTypeIDs[question.QuestionType];\n\n const answer = !isEmpty(questionAnswer)\n ? Object.entries(questionAnswer.map(e => e.$))\n : '-';\n\n const renderSolutions = HTMLReactParser(convertTagsToHTML(solution, false), {\n replace: domNode => {\n return domNode;\n }\n });\n\n const renderAnswer = useMemo(() => {\n if (type === 'mcq') {\n return (\n <>\n <p>\n <span>Answer:</span>\n </p>\n {!isEmpty(correctMCQAnswers) &&\n correctMCQAnswers.map(correctAnswer => {\n return HTMLReactParser(correctAnswer, {\n replace: domNode => {\n if (domNode.name === 'img' && !isNil(domNode.attribs?.url)) {\n return (\n <img\n src={domNode.attribs?.url}\n alt={domNode.attribs?.uniqueid}\n />\n );\n }\n\n if (domNode.type === 'text') {\n return <p key={domNode.data}>{domNode.data}</p>;\n }\n\n return domNode;\n }\n });\n })}\n </>\n );\n }\n\n return (\n <>\n <p>\n <span>Answer:</span>\n {!isEmpty(answer) && answer === '-' ? '-' : null}\n </p>\n {!isEmpty(answer) &&\n answer !== '-' &&\n answer.map(e => {\n return <p key={e}>{e[1].Value}</p>;\n })}\n </>\n );\n }, [answer, correctMCQAnswers, type]);\n\n return (\n <MediaBody>\n {renderAnswer}\n <p>\n <span>Solution:</span>\n </p>\n <p>{renderSolutions}</p>\n </MediaBody>\n );\n}\n","const { default: styled } = require('styled-components');\n\nexport const ContainerPrint = styled.div`\n width: 210mm;\n height: 297mm;\n font-size: 12px;\n font-family: 'Verdana', Arial, Helvetica, sans-serif;\n color: #222;\n margin: 0 auto;\n @media all {\n .page-break {\n display: none;\n }\n .question-break {\n display: none;\n }\n }\n @media print {\n html,\n body {\n height: initial !important;\n overflow: initial !important;\n -webkit-print-color-adjust: exact;\n }\n }\n @media print {\n .page-break {\n margin-top: 0px;\n display: block;\n page-break-after: always;\n }\n }\n @page {\n margin: 20mm 0mm;\n size: 210mm 290mm;\n }\n`;\n\nexport const ContainerPaper = styled.div`\n color: #000;\n @media print {\n padding: 0px auto;\n }\n .worksheet-title {\n margin: 0 0 20px 0;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n .left-title {\n width: 50%;\n p {\n text-align: left;\n font-size: 30px;\n margin-bottom: 10px;\n margin-top: -10px;\n }\n }\n .right-title {\n width: 50%;\n text-align: right;\n p {\n span {\n border-bottom: 1px solid black;\n }\n }\n }\n .inputWrapper {\n margin-left: 5px;\n }\n }\n\n .header-text {\n padding: 15px 0;\n border-bottom: 1px solid #ebebeb;\n margin-bottom: 15px;\n }\n\n @media print {\n .question-break {\n margin-bottom: 10mm;\n display: block;\n page-break-inside: auto;\n }\n }\n`;\n\nexport const QuestionsList = styled.div`\n .question-item-body {\n margin-bottom: 50px;\n }\n\n @media print {\n .question-item-body {\n margin-top: 10mm;\n page-break-inside: avoid;\n }\n }\n`;\n\nexport const SolutionsList = styled.div`\n padding-top: 200px;\n .solution-header {\n font-size: 40px;\n text-align: center;\n margin-bottom: 30px;\n }\n\n .solution-item-body {\n margin-bottom: 10px;\n }\n\n @media print {\n padding-top: 0;\n .solution-item-body {\n page-break-inside: avoid;\n }\n }\n`;\n\nexport const Container = styled.div`\n .top {\n display: flex;\n width: 100%;\n padding: 0 2rem;\n margin-bottom: 2rem;\n justify-content: flex-end;\n }\n`;\n","import React, { useEffect, useRef } from 'react';\nimport QuestionContentPrint from 'components/Print/QuestionContentPrint';\nimport SolutionContentPrint from 'components/Print/SolutionContentPrint';\nimport isNilOrEmpty from 'helpers/isNilOrEmpty';\nimport { useReactToPrint } from 'react-to-print';\nimport { Button } from 'react-bootstrap';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getWorksheet } from 'stores/worksheet/actions';\nimport {\n ContainerPaper,\n ContainerPrint,\n QuestionsList,\n SolutionsList,\n Container\n} from './WorksheetPrint.styles';\n\nclass WorksheetPrintComponent extends React.PureComponent {\n render() {\n const { selectedWorksheet, containerRef } = this.props;\n\n return (\n !isNilOrEmpty(selectedWorksheet) && (\n <ContainerPrint ref={containerRef}>\n <ContainerPaper>\n <div className=\"worksheet-title\">\n <div className=\"left-title\">\n <p>{selectedWorksheet.Title}</p>\n </div>\n <div className=\"right-title\">\n <p>\n Name:\n <span className=\"inputWrapper\">\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n </span>\n </p>\n <p>\n Class:\n <span className=\"inputWrapper\">\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n </span>\n </p>\n </div>\n </div>\n <QuestionsList>\n {selectedWorksheet.Questions.map((question, key) => {\n const order = key + 1;\n return (\n <>\n <div\n className=\"question-item-body\"\n key={`question-${order}`}\n >\n <p className=\"header-text\">Question {order}</p>\n <QuestionContentPrint question={question.CartQuestion} />\n </div>\n <div className=\"question-break\" />\n </>\n );\n })}\n </QuestionsList>\n <div className=\"page-break\" />\n <SolutionsList>\n <p className=\"solution-header\">Answers and Solutions</p>\n {selectedWorksheet.Questions.map((question, key) => {\n const order = key + 1;\n return (\n <>\n <div\n className=\"solution-item-body\"\n key={`solution-${order}`}\n >\n <p className=\"header-text\">Question {order}</p>\n <SolutionContentPrint question={question.CartQuestion} />\n </div>\n <div className=\"question-break\" />\n </>\n );\n })}\n </SolutionsList>\n </ContainerPaper>\n </ContainerPrint>\n )\n );\n }\n}\n\nconst WorksheetPrint = ({ match }) => {\n const containerRef = useRef(null);\n const dispatch = useDispatch();\n const homeworkID = parseInt(match.params.homeworkID, 10);\n const { selectedWorksheet } = useSelector(state => state.worksheet);\n\n useEffect(() => {\n dispatch(getWorksheet(homeworkID));\n }, [dispatch, homeworkID]);\n\n const handlePrint = useReactToPrint({\n content: () => containerRef.current\n });\n\n console.log(selectedWorksheet, 'a');\n return (\n <>\n <Container>\n <div className=\"top\">\n <Button variant=\"primary\" onClick={() => handlePrint()}>\n Print Worksheet\n </Button>\n </div>\n </Container>\n {selectedWorksheet && (\n <WorksheetPrintComponent\n containerRef={containerRef}\n selectedWorksheet={selectedWorksheet}\n />\n )}\n </>\n );\n};\n\nexport default React.memo(WorksheetPrint);\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Router, Switch, Route, Redirect } from 'react-router-dom';\nimport history from 'helpers/history';\nimport startup from 'stores/startup/actions';\nimport BrowseContent from 'pages/BrowseContent/BrowseContent';\nimport ChooseLevel from 'pages/ChooseLevel';\nimport CreateAndAssign from 'pages/CreateAndAssign/CreateAndAssign';\nimport TrackAssignment from 'pages/TrackAssignment/TrackAssignment';\nimport ManageClass from 'pages/ManageClass/ManageClass';\nimport ProfileSetting from 'pages/ProfileSetting/ProfileSetting';\nimport LoginNew from 'pages/LoginNew';\nimport PrintAssignment from 'pages/TrackAssignment/PrintAssignment';\nimport AuthenticatedRoute from 'components/Utils/AuthenticatedRoute';\nimport Report from 'pages/Report/Report';\nimport Dashboard from 'pages/DashboardV2';\nimport Leaderboard from 'pages/CreateAndAssign/FactualFluency/Leaderboard';\nimport FactualFluencyGame from 'pages/CreateAndAssign/FactualFluency/FactualFluencyGame';\nimport WorksheetPrint from 'pages/CreateAndAssign/Print/WorksheetPrint';\n\nexport default function Routes() {\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(startup());\n }, [dispatch]);\n return (\n <Router history={history}>\n <Switch>\n <Redirect\n exact\n from=\"/teacherreport/monthlyreport\"\n to={{\n pathname: '/report/teacherreport/monthlyreport',\n search: window.location.search\n }}\n />\n <AuthenticatedRoute exact path=\"/\" component={Dashboard} />\n <AuthenticatedRoute\n exact\n path=\"/choose-level\"\n component={ChooseLevel}\n />\n <AuthenticatedRoute path=\"/browse-content\" component={BrowseContent} />\n <AuthenticatedRoute path=\"/dashboard\" component={Dashboard} />\n <AuthenticatedRoute\n path=\"/create-and-assign\"\n component={CreateAndAssign}\n />\n <AuthenticatedRoute\n path=\"/track-assignment\"\n component={TrackAssignment}\n />\n <AuthenticatedRoute path=\"/report\" component={Report} />\n <AuthenticatedRoute path=\"/manage-class\" component={ManageClass} />\n <AuthenticatedRoute\n path=\"/profile-setting\"\n component={ProfileSetting}\n />\n <AuthenticatedRoute\n exact\n path=\"/print/:homeworkID\"\n component={props => <PrintAssignment {...props} />}\n />\n <AuthenticatedRoute\n exact\n path=\"/worksheet/print/:homeworkID\"\n component={props => <WorksheetPrint {...props} />}\n />\n <AuthenticatedRoute\n path=\"/factual-fluency\"\n component={props => <FactualFluencyGame {...props} />}\n />\n <AuthenticatedRoute\n exact\n path=\"/leaderboard/:homeworkID\"\n component={props => <Leaderboard {...props} />}\n />\n <Route exact path=\"/login\" component={LoginNew} />\n <Route\n exact\n path=\"/members-login\"\n render={() => {\n window.location.href = process.env.REACT_APP_MEMBERS_LOGIN_URL;\n }}\n />\n </Switch>\n </Router>\n );\n}\n","import APP_STARTUP from './actionTypes';\n\nexport default () => {\n return { type: APP_STARTUP };\n};\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { PersistGate } from 'redux-persist/lib/integration/react';\nimport createStore from 'stores';\nimport { isNil } from 'ramda';\nimport useSecret from 'hooks/useSecret';\nimport Routes from './Routes';\n\nconst { store, persistor } = createStore();\n\nconst App = () => {\n const { i18n } = useTranslation(['navigation']);\n const { localePreferences } = useSelector(state => state.login);\n const updatedLocale = localStorage.getItem('current_locale');\n\n useSecret();\n\n const onChangeLanguage = () => {\n const sameLocale =\n localePreferences &&\n localePreferences.Value === updatedLocale &&\n updatedLocale;\n // for reload\n if (!isNil(updatedLocale) && !sameLocale) {\n i18n.changeLanguage(updatedLocale);\n // for display lang on login\n } else if (!isNil(localePreferences) && localePreferences.Value !== '') {\n i18n.changeLanguage(localePreferences.Value);\n } else {\n i18n.changeLanguage('en');\n }\n };\n\n useEffect(() => {\n onChangeLanguage();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [localePreferences]);\n\n // expose store when run in Cypress\n if (window.Cypress) {\n window.store = store;\n }\n\n return (\n <PersistGate loading={null} persistor={persistor}>\n <Routes />\n </PersistGate>\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.0/8 are 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 headers: { 'Service-Worker': 'script' }\n })\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 i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport Backend from 'i18next-http-backend';\n\ni18n\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\n // learn more: https://github.com/i18next/i18next-http-backend\n .use(Backend)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: 'en',\n debug: true,\n lng: 'en',\n whitelist: ['en', 'ba', 'zh_CN', 'zh_TW'],\n\n interpolation: {\n escapeValue: false // not needed for react as it escapes by default\n },\n backend: {\n loadPath: '/locales/{{lng}}/{{ns}}.json'\n }\n });\n\nexport default i18n;\n","import React, { Suspense } from 'react';\nimport { Provider } from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport createStore from 'stores';\nimport 'bootstrap/scss/bootstrap.scss';\nimport 'assets/scss/style.scss';\nimport { CookiesProvider } from 'react-cookie';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport './i18n';\n\nconst { store } = createStore();\n\nReactDOM.render(\n <React.StrictMode>\n <Suspense fallback={null}>\n <Provider store={store}>\n <CookiesProvider>\n <App />\n </CookiesProvider>\n </Provider>\n </Suspense>\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","module.exports = __webpack_public_path__ + \"static/media/icon-error.827b720a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-student-list-plan-school.2467c838.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-student-list-plan-standard.80c4b3bf.svg\";","module.exports = __webpack_public_path__ + \"static/media/icons8-trash.d543d333.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-print-active.bcc6a434.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-download.e71fcf99.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-wrong-ans.9dbb6613.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-collapse-show.db5aa1eb.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-insight.b1023661.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-group.f1f53d58.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-play.2e06dcd6.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-topical-worksheet-white.7ec0a016.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-no-syllabus.3aeb2f03.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-calendar-white.fbb50a92.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-leaderboard.333c85ca.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-open-hw.c91ba277.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty-search-results.7a1b613f.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-lup.e5348dcc.svg\";","module.exports = __webpack_public_path__ + \"static/media/mascot.8637edc6.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-milestone.ab5d88d6.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-print.4b02743b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-print-arrow.6332e6bd.svg\";","module.exports = __webpack_public_path__ + \"static/media/print-icon.652cb9e3.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.9e756b7e.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-topic-revision.084ce570.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-check-orange.a5783ba3.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-show-pswd.9c788937.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-hide-pswd.28a45181.svg\";","module.exports = __webpack_public_path__ + \"static/media/download-csv.9840bdb4.svg\";","module.exports = __webpack_public_path__ + \"static/media/avatar.1acf810c.png\";","module.exports = __webpack_public_path__ + \"static/media/cube.f9f82fb2.svg\";","module.exports = __webpack_public_path__ + \"static/media/question.efc89efd.svg\";","module.exports = __webpack_public_path__ + \"static/media/video.416e20af.svg\";","module.exports = __webpack_public_path__ + \"static/media/worksheet.62d2d443.svg\";","module.exports = __webpack_public_path__ + \"static/media/no-track-assignment.667740a7.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/Icon Select.a0a45965.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-ivm.52402847.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-questions.3ad22e95.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-trial-account.0dbf6ff1.png\";","module.exports = __webpack_public_path__ + \"static/media/icon-trial-account-expired.5d3d7635.png\";","module.exports = __webpack_public_path__ + \"static/media/icon-play-video.5be3a81a.svg\";","module.exports = __webpack_public_path__ + \"static/media/no-videos-found.4d56b44d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-c1.c14b00c7.svg\";","module.exports = __webpack_public_path__ + \"static/media/logoTeacher.d02692e0.svg\";","module.exports = __webpack_public_path__ + \"static/media/logoAdmin.7534c94b.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow.545de504.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-tick-red.c177d488.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-question-cart.a0ed2771.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-topical-worksheet.43c6e319.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/empty-cart.dc516550.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-question-card-kebab.ec9a682c.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-question-card-kebab-active.9908a75c.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-list.76f2e8c4.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-list-active.be56e963.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-up.92ca93a7.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-up-active.efe04025.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-up-end.c49b6ce4.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-up-end-active.9698af8a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-down.4a3b507b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-down-active.547f06c5.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-down-end.a12061a9.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-menu-down-end-active.32be3841.svg\";","module.exports = __webpack_public_path__ + \"static/media/worksheet-type.3d6f3365.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-schedule-orange.1db281f1.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-assigned.3bdcb4f2.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-assign-now.afc5b7fb.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-saved-worksheet-grey.3e1c8e02.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty-worksheet.769b739f.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty-worksheet-navigator.b54a5c75.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-push-cart.68d0943b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-right-purple.1b7ab7cf.svg\";","module.exports = __webpack_public_path__ + \"static/media/interval-time.66284d09.gif\";","module.exports = __webpack_public_path__ + \"static/media/total-time.55aa970e.png\";","module.exports = __webpack_public_path__ + \"static/media/no-time.745ef028.png\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-assigned-by-me.8b4dea8f.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-assigned-by-others.2625008f.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-assigned-by-me-active.abb1b2fc.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-assigned-by-others-active.657edd52.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty-assignment.dd280b58.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-track-assignment-summary.1b9e699a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-tick.447a23b8.svg\";","module.exports = __webpack_public_path__ + \"static/media/other-assignments-splash.bfd725c3.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-success-check.1f6bea9e.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-class.65df50e9.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-game-setting.93d33a67.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-student-list-plan-premium.015a200a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-linked-active.97e5fb93.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-report.d0641628.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-edit.765c2164.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-student.c72ea052.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-student-list-link.83905d60.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-remove.39e3e2e4.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-mail.a27e8917.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-change-class.6aa2764d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-manage-class-notification.d615c355.svg\";","module.exports = __webpack_public_path__ + \"static/media/Group_icon.06663f01.svg\";","module.exports = __webpack_public_path__ + \"static/media/group-logo-white.8a288011.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-small-group.87d04c2d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-right-arrow.0c766d08.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-toga.2b033bfb.svg\";","module.exports = __webpack_public_path__ + \"static/media/defaulticon.4129a037.svg\";","module.exports = __webpack_public_path__ + \"static/media/profile-camera.2a1d2260.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-partners.2c3a590a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-school-signup.fdcfb28e.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-parent-app.a1a2be4e.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAfCAYAAABplKSyAAAAAXNSR0IArs4c6QAAAt5JREFUWAm1V++V2jAMl0JfS/rl6ARlg9IJmi5QyAbcBGUENjiYADoB5DrAsQF0g94ER79crn1gVXKIY0ICTsL5PUC2/v0sy7JAaDAojuYA9BHaFCKG27qmvLqKWo+gA4ABxPhA8aJb11YzEAgb7RixB4Rr+rfoXQIiMvQc3dmyzUDYHhE7sJOI3A/t5ZSWdXpermHvrQFhBHuJYjLepMRVfgUI0Ixeohts96f6iMj7zmtD/nQA8eCGHtEPV6nP64JIrRJMKF6OOF+6vGseqXOheaA3SYjku9lxeN7GNnZMY/d4bs3e7efWDJqBULutbcyR/pG/zs1AQKvr6DgTa6mjoxBGrZxIEg7vONkGmXUHiuAXvg1PjrASCKJFB14k22GczzUHCJyQeBIF0culbbkp+vtzAGrPu8duudQFDtEGfPqaz4mLkUh2jwtQKqiAuRiNVNYYHpj52RZwS0zCP7ZSI5qBcA2Z2Tacj0OUOCEDIE+SMeCD/GQbqk7THP3BrehVAmE7So6pxYAoSG4J3th8Nxpv0f82rw3CdsJ9xYrnX+w1Z9rzwsLE1LuMcQZIU/uhOWN4xbxTEARTfN8fpXr6+U5fT2zx88+PmtptTkAcAHAG85PX5iuVG4khXag4lOFvzZY3RKm85CNfx7G9mCtUq5R3dDt0JeQuSQPwVZC/zxoA9wzcwHwwAMQS7yY1mP3SMK+f8Y4pA0I74O7oIgDEiEPcs80kgCi7xgSR4zFqMxqE2SEgh7AgAlItJQICwO8PbQAZjYdoMBhflchk0jblGQDsoBCAtGtKLc4D0CZX+ttrOR+DAcLVa5u07mbJELovjCPixnRiFksI2YyLXKG6jkQhRyokAyhoXBOHyzXzxyWq11vWtyVn7gDgiXe90dc5x68zrVQxddQkQUsSuA6ASjomAvqvXyXV6whLQ8N/XJ7KEvg6Xs5YMTfkFSNgKmY5Dn6q5SEqLVLlmq6c/9mSVnVTYGnSAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/icon-report-student-report.d0b4f011.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-card.6c199e37.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-school-report.89c79b9b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-monthly.1653fb7b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-yearly.7bb95395.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-progress.4d65bd8d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-class-report.aa3d3b0d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-proficiency.171bfeba.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-high-score.c77f9d83.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-login.71ad79cc.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-sidebar-active.90d05248.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-closed.1b954019.svg\";","module.exports = __webpack_public_path__ + \"static/media/no-reports.bd0c922e.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-report-skill-star.94288273.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEgSURBVHgBfZFBTsMwEEVn7ASxYOEj5AhFZE98A67ADcqui6C4kD1wgnKE3sDpDokg5Qi5AVmwJJ16mrhNXakjRRl7nsd/vhGCmNm5ugalOP/Spg3reAQXSYTxilP3qbHYEuJnff+yPDlwZ/MHRFx58CwINrV+zTiNuPMlmAC6HuTcr4XEuBhgqrYETw5oT2CSutGm8XuRAMi4UGelHmYxa4m95SYhzGqEgxPvDv8d0DIYwukmL2KnBtPq+XeU1PzTn4Peu3AOhoHQENGHYHA0bBbhjfU3hfC4rISbbHks+0OLZICLNw+zGT+6XO/fIbW5AcRi0tjLUhO3bnk+wRu1Lo2z9HFiqYLDu1Dl4b2GswFtnm2dNIC+k3DVfE+c4tgBXgmEPy2pf1kAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE6SURBVHgBfZG9boMwFIWDA2ahSzqAGJKFLs2UFYoEqhj6Arxepy70ATIi6NQp3dulLCAhMbHw33ORqaKojSXL9r2f7z0+llZiRFHEdV3fT9NkrddrTZKktu/7inP+2TRNraqqZtv2l0RwHMeaLMtP2GqrKwMFXtk5PAxDgeDRdd3nPM9f0C1bYMr5vl/LaH0gGMnK87zjAkDeDrntcoZMg2QzRVE2osL7kkyS5I4x9kB7rCfMb9obhmGxcRznC2hX/AU7jvOBTrM0rBuS1EIOFy7tLmHxWA5uBa6VyTrSZ5rmIwLGJSwq72mFvQUDdKLDfzAkHoSDdRAEGRyV+bnXXdfdpGl6T3u8jyQawqXZFJLEcWn2maRhWohbAqJ4je5viym/P02fQiugLSrfonIDuCrLMgvDsF0U/ACOnqj44/ENTwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEiSURBVHgBdZK7boQwEEVj82qokJCoUuUDoIqEhICCYn+AJn9Il4p0CAFF0qRKl2qbuKKiAfHIDPJovZbWkuXBPtczcw170kZVVbbv+zbGeZ5P+jmjoGkalzGWmKbpHcdhy+1p3/ffNE2/7wRd1z0jrID6+EuS5AMDTjc/giHDYhjGF31zgCOEt20TsH7COqmwZVl1HMcj7ZmgDvAgy7Ja9nIF0QUusnUYq+GwuuQOOQOZah1u2zYCQ0LW9/0blgRzFELUZVkueh8Ic85DYH74uq7nLVCCFwTBhTLpMMbzPAsOqpvHUoS1SrtfCUYziqK4nu8wDEMIjUeK8CyLrEZTYL5jf+pLv6DF4JqrliTt7ug3YXqDIAxA5AG4OI4zqk7h+Ad7aq5EcjO/xgAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/Muli.328d5579.ttf\";","module.exports = __webpack_public_path__ + \"static/media/MuliB.077ceb91.ttf\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-report-active.92938913.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-report-not-login.2246d5d5.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-login-report-not-active.42af00c4.svg\";","module.exports = __webpack_public_path__ + \"static/media/leaderboard-bg.7f0d6d63.png\";","module.exports = __webpack_public_path__ + \"static/media/back-icon.c2befcca.svg\";","module.exports = __webpack_public_path__ + \"static/media/default-pos.3b5bb6d2.svg\";","module.exports = __webpack_public_path__ + \"static/media/first-pos.3a446375.svg\";","module.exports = __webpack_public_path__ + \"static/media/second-pos.4e0386c6.svg\";","module.exports = __webpack_public_path__ + \"static/media/third-pos.6f8f9950.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABLCAYAAAAIwmvLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NDhjN2Q5My0wODcyLTYwNGUtYjBiZS03MGRiODRlYjFjMzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTA2NDI3MTYyODUwMTFFODg0QkVFNEVBMTMyODQ3QjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTA2NDI3MTUyODUwMTFFODg0QkVFNEVBMTMyODQ3QjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk1MjVhMTgtZDAzNi1lYjQwLTlmNDctOTJlMGMwMzcyYzM4IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NGI4ZDIyMmQtMWQyYy0xMWU4LTkwNTIt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\"","module.exports = __webpack_public_path__ + \"static/media/bg-blue_hover.305bd1fe.jpeg\";","module.exports = __webpack_public_path__ + \"static/media/bg-music.d8c559ae.mp3\";"],"sourceRoot":""}