{"version":3,"sources":["hooks/useBreakpoint.js","hooks/useCssBreakpoint.js","hooks/useCustomTheme.js","hooks/useEventListener.js","hooks/useLocalstorage.js","hooks/useModal.jsx","hooks/useScrollPosition.js","hooks/useIntersection.js","state/Utils.js","state/api/helpers/attach-relation.js","state/api/JsonApi.js","state/api/helpers/detach-relation.js","pages/curriculum/api.js","helpers/ie11domfull.js","translations/nl/yup-validation.inline.js","i18n.js","state/api/authorizationApi.js","helpers/session.helper.js","state/api/helpers/oauth2.js","state/api/AuthenticatedClient.js","theme/CustomTheme.js","providers/OauthProvider.jsx","state/models/BaseModel.js","state/models/LessonContent.js","state/models/QuestionOption.js","state/models/PollWidget/PollWidget.js","state/models/WordCloudWidget/WordCloud.js","state/models/QuestionWidget.js","state/models/LessonEdit.js","state/modelsEwapi/Author.js","state/modelsEwapi/Profession.js","state/modelsEwapi/Course.js","state/modelsEwapi/CourseResults.js","state/modelsEwapi/User.js","state/modelsEwapi/LessonContainer.js","state/RootStoreFetch.js","state/models/Banner.js","state/models/AccreditationOrganisation.js","state/models/AccreditationLink.js","state/models/Author.js","state/models/Lesson.js","state/models/LessonContainer.js","state/models/Course.js","state/models/CourseContainer.js","state/models/CourseEdit.js","state/models/AuthorEdit.js","state/models/CourseCopy.js","state/modelsEwapi/Likes.js","state/modelsEwapi/Hidden.js","state/modelsEwapi/Product.js","state/modelsEwapi/Profile.js","state/modelsEwapi/Package.js","state/modelsEwapi/Favorites.js","state/modelsEwapi/BaseProduct.js","state/modelsEwapi/Subscription.js","state/models/Lms/LmsDashboard.js","pages/curriculum/constants.js","pages/curriculum/store.js","state/RootStore.js","providers/GTMProvider.jsx","components/common/SessionPing.jsx","providers/WithStoreProvided.jsx","providers/ProtectedRoutesMiddleWare.jsx","state/RoutesActions.js","pages/home/HomeRoute.js","pages/course/CourseIntroductionViewRoute.js","pages/course/CourseOverviewRoute.js","pages/course/DefCourseOverviewRoute.js","pages/teachersOverview/TeacherDetailViewRoute.js","pages/teachersOverview/TeachersViewRoute.js","pages/play/questions/EditWidgetButton.jsx","pages/play/questions/useWidget.jsx","pages/play/questions/lib/seededShuffle.js","pages/play/questions/RadioQuestion.jsx","pages/play/questions/CheckQuestion.jsx","components/widgets/Open.jsx","pages/play/questions/OpenQuestion.jsx","components/widgets/Sort.jsx","components/widgets/DragDropUtils.js","pages/play/questions/SortQuestion.jsx","components/widgets/DragDropZone.jsx","components/widgets/Match.jsx","pages/play/questions/MatchSortUtils.js","pages/play/questions/MatchQuestion.jsx","pages/play/questions/VideoQuestion.jsx","components/widgets/Html.jsx","pages/play/questions/HtmlQuestion.jsx","components/widgets/Numerical.jsx","pages/play/questions/NumericalQuestion.jsx","pages/play/questions/PollWidget/PollVote.jsx","pages/play/questions/PollWidget/PollWidget.jsx","pages/play/questions/WordCloudWidget.jsx","pages/play/PageParsing.jsx","helpers/cmi5.js","state/models/LessonResult.js","state/models/Package.js","state/models/BaseProduct.js","state/models/Product.js","state/models/User.js","state/models/Contract.js","state/models/Subscription.js","state/models/CourseResult.js","state/models/PollWidget/PollWidgetLessonPlay.js","state/models/WordCloudWidget/WordCloudLessonPlay.js","state/models/LessonPlay.js","pages/play/lib/shuffledQuestionWidgetsArray.js","pages/specialAccess/SpecialAccessRoute.js","pages/adminCourses/dashboard/DashboardViewRoutes.js","pages/adminCourses/onlineCourses/OnlineCoursesViewRoute.js","pages/adminCourses/offlineCourses/OfflineCoursesViewRoute.js","pages/adminCourses/addCourse/EditCourseViewRoutes.js","state/RoutesActionsAdminCourse.js","pages/adminCourses/lessonPlay/lessonPlayRoute.js","pages/adminCourses/viewCourses/ViewCoursesRoute.js","pages/adminCourses/search/CourseSearchBarViewRoute.js","pages/account/accountRoutes/SubscriptionsRoute.js","pages/account/accountRoutes/SettingsRoute.js","pages/account/accountRoutes/ProfileRoute.js","pages/account/accountRoutes/CertificateRoute.js","pages/login/loginRoute/LoginRoute.js","pages/play/lessonPlayRoutes/LessonPlayRoute.js","pages/play/lessonPlayRoutes/EvaluationLesRoute.js","pages/play/lessonPlayRoutes/TermsLesRoute.js","pages/play/lessonPlayRoutes/FeedbackLesRoute.js","pages/assistentManagment/assistantManagementRoute.js","pages/lms/LmsRouteActions.js","pages/lms/lmsDashboard/LmsDashboardRoute.js","pages/lms/lmsStudents/LmsStudentsRoute.js","pages/lms/lmsStudentDetail/LmsStudentDetailRoute.js","pages/lms/lmsCourses/lmsCoursesRoute.js","pages/lms/lmsCourseDetail/LmsCourseDetailRoute.js","pages/lms/lmsOrganisations/LmsOrganisationsRoute.js","pages/misc/miscRoutes/ErrorPageRoute.js","pages/misc/miscRoutes/NotFoundPageRoute.js","pages/vtbDashboard/vtbRoutes/VtbRoute.js","pages/vtbDashboard/vtbRoutes/AttendanceSheetVtbRoute.js","pages/curriculum/curriculumDashboard/curriculumDashboardRoute.js","pages/curriculum/curriculumStages/curriculumStagesRoute.js","pages/faq/faqRoutes/FaqRoute.js","pages/faq/faqRoutes/Faq2Route.js","pages/faq/faqRoutes/Faq3Route.js","pages/faq/faqRoutes/ArticleRoute.js","pages/colophon/colophonRoutes/ColophonRoute.js","pages/search/SearchOverviewRoute.js","state/Routes.js","pages/ewiseUserSelectProduct/SelectProductRoute.js","hooks/useEwapi.js","pages/ewiseUserSelectProduct/SelectProduct.jsx","pages/ewiseUserSelectProduct/SelectProductViewMap.jsx","components/icons/SubscribeTab.jsx","pages/account/AccountSidebar.jsx","pages/account/Accountv2.jsx","pages/account/components/Certificates.jsx","pages/account/accountViewMap/CertificatesViewMap.jsx","components/form/RHF/DatePicker/MyDatepicker.jsx","components/icons/Mail.svg","components/icons/Calendar.jsx","components/form/RHF/ImageUpload/ImageUploader.jsx","components/form/RHF/Autocomplete/MyAutocomplete.jsx","pages/account/forms/ProfileFields.jsx","pages/account/forms/beans/Profile.ValidationSchema.js","pages/account/forms/beans/profileData.js","pages/account/components/AccreditationFieldsMsg.jsx","pages/account/forms/Profile.jsx","pages/account/forms/beans/PasswordReset.ValidationSchema.js","pages/account/forms/ProfileExtras.jsx","pages/account/forms/ResetOnboarding.jsx","pages/account/components/ProfileContainer.jsx","pages/account/accountViewMap/ProfileViewMap.jsx","pages/account/components/Settings.jsx","pages/account/accountViewMap/SettingsViewMap.jsx","pages/account/components/Subscriptions.jsx","pages/account/accountViewMap/SubscriptionViewMap.jsx","pages/play/evaluation/components/Header.jsx","pages/play/evaluation/forms/beans/Evaluation.ValidationSchema.js","pages/play/evaluation/forms/beans/dataFile.js","pages/play/evaluation/forms/EvaluationForm.jsx","pages/play/lessonPlayViewMaps/EvaluationViewMap.jsx","components/icons/download.jsx","pages/play/evaluation/forms/LtiUserForm.jsx","pages/play/evaluation/LastStep.jsx","pages/play/lessonPlayViewMaps/TermsViewMap.jsx","pages/play/evaluation/ScorePage.jsx","pages/play/lessonPlayViewMaps/FeedbackViewMap.jsx","pages/adminCourses/components/layout/Logo.jsx","pages/adminCourses/components/loading/LoadingContent.jsx","pages/adminCourses/components/layout/menuList.helper.js","pages/adminCourses/hooks/useEwapi.js","pages/adminCourses/components/layout/MenuList.jsx","pages/adminCourses/components/toolbar/ToolbarAccount.jsx","pages/adminCourses/components/Toasts/Toast.jsx","pages/adminCourses/components/Toasts/ToastContainer.jsx","pages/adminCourses/components/layout/PackageListDialog.jsx","pages/adminCourses/AdminCourseLayout.jsx","pages/misc/NotFound.jsx","pages/adminCourses/addCourse/EditCourse.helper.js","pages/adminCourses/components/dashboard/SectionTitle.jsx","pages/adminCourses/components/loading/LoaderWithBackdrop.jsx","pages/adminCourses/helpers/utils.js","pages/adminCourses/components/dashboard/DashboardTable.jsx","pages/adminCourses/components/infoCards/InfoCardText.jsx","pages/adminCourses/components/infoCards/infoCardFavo.jsx","pages/adminCourses/components/dashboard/sxInfoCards.js","pages/adminCourses/components/dashboard/InfoCards.jsx","pages/adminCourses/components/dashboard/ListEndingCourses.jsx","pages/adminCourses/components/dashboard/ListLinkedCourses.jsx","pages/adminCourses/components/dashboard/MyDraftCourses.jsx","pages/adminCourses/components/dashboard/BtnNewCourse.jsx","pages/adminCourses/components/RHF/MyAutocompleteTaxonomy.jsx","pages/adminCourses/components/dialog/form/beans/NewCourse.ValidationSchema.js","pages/adminCourses/components/dialog/form/NewCourseForm.jsx","pages/adminCourses/components/dialog/NewCourseDialog.jsx","pages/adminCourses/components/layout/BtnShowSidebar.jsx","pages/adminCourses/dashboard/Dashboard.jsx","pages/adminCourses/dashboard/DashboardViewMap.jsx","pages/adminCourses/components/advancedCourseActions/AdvancedSelectLabel.jsx","pages/adminCourses/components/advancedCourseActions/advancedCourse.helper.js","pages/adminCourses/components/advancedCourseActions/AdvancedCourseMenuList.jsx","pages/adminCourses/components/advancedCourseActions/AdvancedCourseTables.jsx","pages/adminCourses/components/advancedCourseActions/AdvancedCourseActions.jsx","pages/adminCourses/components/advancedCourseActions/AdvancedCourseCategories.jsx","pages/adminCourses/components/advancedCourseActions/context.js","pages/adminCourses/components/advancedCourseActions/AdvancedCourseScreen.jsx","pages/adminCourses/components/advancedCourseDialog/CopyCourseDialog.jsx","pages/adminCourses/components/tables/TableFilterItems.jsx","pages/adminCourses/components/tables/TableSelectFilter.jsx","pages/adminCourses/components/tables/OpenNewEditWindow.jsx","pages/adminCourses/components/tables/EwapiTables.jsx","pages/adminCourses/onlineCourses/OnlineCourses.jsx","pages/adminCourses/onlineCourses/OnlineCoursesViewMap.jsx","pages/adminCourses/offlineCourses/OfflineCourses.jsx","pages/adminCourses/offlineCourses/OfflineCoursesViewMap.jsx","pages/adminCourses/components/RHF/MyMultiSelect.jsx","pages/adminCourses/components/RHF/MyNumberfield.jsx","pages/adminCourses/components/editCourse/UploadButton.jsx","pages/adminCourses/addCourse/forms/CourseEditForm.jsx","helpers/image.helper.js","pages/adminCourses/components/RHF/ImageUploader.jsx","pages/adminCourses/addCourse/forms/ImageEditForm.jsx","pages/adminCourses/components/VideoPlayer.jsx","pages/adminCourses/components/AutocompleteTags2.jsx","pages/adminCourses/addCourse/forms/LessonContainerEditForm.jsx","pages/adminCourses/addCourse/forms/LessonContainerSharingEditForm.jsx","pages/adminCourses/hooks/useIsComponentMounted.js","pages/adminCourses/components/lesson/MenuShowInPlayer.jsx","pages/adminCourses/addCourse/forms/LessonsEditForm.jsx","pages/adminCourses/addCourse/forms/LessonTabStudents.jsx","pages/adminCourses/addCourse/forms/TableTotal.jsx","pages/adminCourses/addCourse/forms/FeedbackTableDetail.jsx","pages/adminCourses/addCourse/forms/CourseTabFeedback.jsx","pages/adminCourses/helpers/jsonApiRemoteFilter.helper.js","pages/adminCourses/components/dialog/form/beans/lesson.helper.js","pages/adminCourses/components/dialog/form/OneAnswerGroup.jsx","pages/adminCourses/components/loading/LoadingLinearProgress.jsx","pages/adminCourses/components/dialog/formWidgets/formWidgets.helper.js","pages/adminCourses/components/lesson/DialogWidgetsTableDetailPanel.jsx","pages/adminCourses/components/lesson/DialogWidgetsTableNoOdt.jsx","pages/adminCourses/components/lesson/DialogWidgetsTable.jsx","pages/adminCourses/components/dialog/form/LessonEditForm.jsx","pages/adminCourses/components/dialog/LessonScreen.jsx","pages/adminCourses/components/previewIntroduction/CourseInformation.jsx","pages/adminCourses/components/previewIntroduction/CourseSubHeaders.jsx","pages/adminCourses/components/previewIntroduction/CoursePodcast.jsx","pages/adminCourses/components/previewIntroduction/CourseVideo.jsx","pages/adminCourses/components/previewIntroduction/CourseGoals.jsx","pages/adminCourses/components/previewIntroduction/CourseImage.jsx","pages/adminCourses/components/previewIntroduction/CourseImageHeader.jsx","pages/adminCourses/components/previewIntroduction/CourseDetails.jsx","pages/adminCourses/components/previewIntroduction/CourseAuthor.jsx","pages/adminCourses/components/previewIntroduction/CourseAuthors.jsx","pages/adminCourses/components/dialog/IntroductionPreviewDialog.jsx","pages/adminCourses/components/dialog/formWidgets/FormWidgetOptions.jsx","pages/adminCourses/components/dialog/formWidgets/FormActionBar.jsx","pages/adminCourses/components/dialog/formWidgets/FormDefaultWidgetsAttributes.jsx","pages/adminCourses/components/dialog/formWidgets/FormRadioQuestion.jsx","pages/adminCourses/components/dialog/formWidgets/FormVideoWidget.jsx","pages/adminCourses/components/dialog/formWidgets/FormOpenQuestion.jsx","pages/adminCourses/components/dialog/formWidgets/FormHtmlWidget.jsx","pages/adminCourses/components/dialog/formWidgets/FormSortOptions.jsx","pages/adminCourses/components/dialog/formWidgets/FormSortQuestion.jsx","pages/adminCourses/components/dialog/formWidgets/FormMatchMatches.jsx","pages/adminCourses/components/dialog/formWidgets/FormMatchOptions.jsx","pages/adminCourses/components/dialog/formWidgets/FormMatchQuestion.jsx","pages/adminCourses/components/dialog/formWidgets/FormNumericalQuestion.jsx","pages/adminCourses/components/dialog/formWidgets/WidgetInCourses.jsx","pages/adminCourses/components/dialog/formWidgets/FormPollWidgetEdit.jsx","pages/adminCourses/components/dialog/formWidgets/FormPollWidgetShow.jsx","pages/adminCourses/components/dialog/formWidgets/FormPollWidgetPreview.jsx","pages/adminCourses/components/dialog/formWidgets/SearchPollWordcloudWidgets.jsx","pages/adminCourses/components/dialog/formWidgets/FormPollWidgetNew.jsx","pages/adminCourses/components/dialog/formWidgets/FormPollWidget.jsx","pages/adminCourses/components/dialog/formWidgets/WordCloudBlackList.jsx","pages/adminCourses/components/dialog/formWidgets/FormWordCloudWidgetPreview.jsx","pages/adminCourses/components/dialog/formWidgets/FormWordCloudWidgetEdit.jsx","pages/adminCourses/components/dialog/formWidgets/FormWordCloudWidgetNew.jsx","pages/adminCourses/components/dialog/formWidgets/FormWordCloudWidgetShow.jsx","pages/adminCourses/components/dialog/formWidgets/FormWordCloudWidget.jsx","pages/adminCourses/components/dialog/EditWidgetDialog.jsx","pages/adminCourses/components/editCourse/BtnLinkedCourse.jsx","pages/adminCourses/components/editCourse/BtnPreviewIntroduction.jsx","pages/adminCourses/components/editCourse/BtnDownloadAsCsv.jsx","pages/adminCourses/components/editCourse/BtnReUsedCourse.jsx","pages/adminCourses/components/editCourse/CheckboxEnableEdit.jsx","pages/adminCourses/components/editCourse/BtnCopyToCourseLink.jsx","pages/adminCourses/components/editCourse/BtnDropdownOptions.jsx","pages/adminCourses/addCourse/forms/beans/EditCourse.ValidationSchema.js","pages/adminCourses/addCourse/EditCourse.jsx","pages/adminCourses/addCourse/EditCourseViewMap.jsx","pages/adminCourses/viewCourses/ViewCourses.jsx","pages/adminCourses/viewCourses/ViewCoursesViewMap.jsx","pages/adminCourses/search/CourseSearchBar.jsx","pages/adminCourses/search/CourseSearchBarViewMap.jsx","pages/misc/miscViewMaps/ErrorPageViewMap.jsx","pages/misc/miscViewMaps/NotFoundViewMap.jsx","pages/faq/components/SearchBar.jsx","pages/faq/faq.jsx","pages/faq/faqViewMaps/FaqViewMap.jsx","pages/faq/faq2.jsx","pages/faq/faqViewMaps/Faq2ViewMap.jsx","pages/faq/faq3.jsx","pages/faq/faqViewMaps/Faq3ViewMap.jsx","pages/faq/components/ArticlePage.jsx","pages/faq/faqViewMaps/ArticleViewMap.jsx","pages/colophon/ColophonOverview.jsx","pages/colophon/ColophonViewMap.jsx","pages/lms/components/NavBar.jsx","pages/lms/components/ShortCuts.jsx","pages/lms/components/AssistantsNavBar.jsx","pages/lms/LmsTheme.js","pages/lms/components/LmsDownloadManualBtns.jsx","pages/lms/LmsLayout.jsx","pages/lms/components/TabsLayout.jsx","pages/lms/lmsDashboard/LmsDashboardLayout.jsx","pages/lms/lmsDashboard/LmsDashboardViewMap.jsx","pages/lms/lmsStudents/LmsStudentsLayout.jsx","pages/lms/lmsStudents/LmsStudentsViewMap.jsx","pages/lms/lmsStudentDetail/LmsStudentDetailViewMap.jsx","pages/lms/lmsCourses/LmsCoursesLayout.jsx","pages/lms/lmsCourses/lmsCoursesViewMap.jsx","pages/lms/lmsOrganisations/LmsOrganisations.jsx","pages/lms/lmsOrganisations/LmsOrganisationsViewMap.jsx","pages/lms/lmsCourseDetail/LmsCourseDetailViewMap.jsx","pages/attendanceSheet/getEvents.js","pages/attendanceSheet/getStudents.js","pages/attendanceSheet/AttendanceSheetLayout.jsx","pages/vtbDashboard/vtbViewMaps/AttendanceSheetViewMap.jsx","pages/vtbDashboard/lib/getYearsFromStartToCurrent.js","pages/vtbDashboard/EventTypeTitleHead/CertificateIcon.jsx","pages/vtbDashboard/EventTypeTitleHead/InformationIcon.jsx","pages/vtbDashboard/FilterBar.jsx","pages/vtbDashboard/hooks/useVtbOverview.js","pages/vtbDashboard/EventTypeTitleHead/EventTypeTitleHead.jsx","pages/vtbDashboard/MidContentSection/DialogBox.jsx","pages/vtbDashboard/lib/formatDate.js","pages/vtbDashboard/MidContentSection/RegisterEventDialogBox.jsx","pages/vtbDashboard/hooks/useEwaApiPost.js","pages/vtbDashboard/LocationButton/LocationContent.jsx","pages/vtbDashboard/LocationButton/LocationButtonBase.jsx","pages/vtbDashboard/LocationButton/LocationButtonMobile.jsx","pages/vtbDashboard/VtbTooltip.jsx","pages/vtbDashboard/LocationButton/LocationButtonDesktop.jsx","pages/vtbDashboard/LocationButton/LocationButton.jsx","pages/vtbDashboard/MidContentSection/LocationRow/EventTypeColumn/EventButton.jsx","pages/vtbDashboard/MidContentSection/LocationRow/EventTypeColumn/EventTypeColumn.jsx","pages/vtbDashboard/MidContentSection/LocationRow/LocationRow.jsx","pages/vtbDashboard/lib/getOtherEventsOfSameEventType.js","pages/vtbDashboard/MidContentSection/EventTypeDescriptionDialog/EventTypeDescriptionDialog.jsx","pages/vtbDashboard/MidContentSection/MidContentSection.jsx","pages/vtbDashboard/MidContentSection/useEventTypeDescriptions.jsx","pages/vtbDashboard/BottomDescription.jsx","pages/vtbDashboard/VTBLayout.jsx","pages/vtbDashboard/vtbViewMaps/VtbViewMap.jsx","pages/curriculum/CurriculumLayout.jsx","pages/curriculum/components/Button.jsx","pages/curriculum/components/Dialog.jsx","pages/curriculum/components/ConfirmationModal.jsx","pages/curriculum/components/useDisclaimer.js","pages/curriculum/components/DisclaimerDialog.jsx","components/dialog/Dialog.js","components/dialog/DialogTitle.js","pages/curriculum/components/styles.js","pages/curriculum/curriculumDashboard/AddNewCurriculumDialog.jsx","pages/curriculum/utils.js","pages/curriculum/curriculumDashboard/CurriculumTable.jsx","pages/curriculum/curriculumDashboard/FilterButton.jsx","pages/curriculum/curriculumDashboard/CurriculumDashboard.jsx","pages/curriculum/curriculumDashboard/CurriculumDashboardViewMap.jsx","pages/curriculum/curriculumStages/components/ActivitiesTable.jsx","pages/curriculum/curriculumStages/components/ActivitiesTableToolbar.jsx","pages/curriculum/curriculumStages/components/StageHeader.jsx","pages/curriculum/curriculumStages/components/StageTitleBar.jsx","pages/curriculum/curriculumStages/components/StageTitle.jsx","pages/curriculum/curriculumStages/curriculumStageFunctions/components/ActivitiesFormPart.jsx","pages/curriculum/curriculumStages/curriculumStageFunctions/components/FunctionFormPart.jsx","pages/curriculum/curriculumStages/curriculumStageFunctions/components/AddFunctionDialog.jsx","pages/curriculum/curriculumStages/curriculumStageFunctions/components/AddOrEditActivityModal.jsx","pages/curriculum/curriculumStages/useCurriculum.js","pages/curriculum/curriculumStages/curriculumStageFunctions/components/EditFunctionDialog.jsx","pages/curriculum/curriculumStages/curriculumStageFunctions/CurriculumFunctions.jsx","pages/curriculum/curriculumStages/useFunctions.js","pages/curriculum/curriculumStages/useLearningGoals.js","pages/curriculum/curriculumStages/curriculumStageLearningGoals/components/ActivitiesFormPart.jsx","pages/curriculum/curriculumStages/curriculumStageLearningGoals/components/AddOrEditActivityModal.jsx","pages/curriculum/curriculumStages/curriculumStageLearningGoals/components/LearningGoalFormPart.jsx","pages/curriculum/curriculumStages/curriculumStageLearningGoals/components/AddLearningGoalModal.jsx","pages/curriculum/curriculumStages/curriculumStageLearningGoals/components/EditLearningGoalDialog.jsx","pages/curriculum/curriculumStages/curriculumStageLearningGoals/CurriculumLearningGoals.jsx","pages/curriculum/types.js","pages/curriculum/curriculumStages/useEvaluations.js","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/Activities.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/useAccordion.js","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/EvaluationActivities.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/EvaluationHeader.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/PlannedActivities.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/AddActivityDialog.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/EditReflectionDialog.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/Reflections.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/EvaluationReflections.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/components/EvaluationCard.jsx","pages/curriculum/curriculumStages/curriculumStageEvaluations/CurriculumEvaluations.jsx","pages/curriculum/curriculumStages/curriculumStagesLayout.jsx","pages/curriculum/curriculumStages/CurriculumStagesViewMap.jsx","pages/login/Logout.jsx","pages/login/GoToAdmin.jsx","pages/login/SwitchBack.jsx","pages/login/LogoutViewMap.jsx","pages/teachersOverview/components/TeacherSearch.jsx","pages/teachersOverview/components/TeacherCard.jsx","pages/teachersOverview/TeachersOverview.jsx","pages/teachersOverview/TeachersOverviewViewMap.jsx","pages/teachersOverview/components/CourseList.jsx","pages/teachersOverview/TeacherDetail.jsx","pages/teachersOverview/TeacherDetailViewMap.jsx","pages/course/CourseOverviewViewMap.jsx","pages/course/CourseIntroductionViewMap.jsx","pages/search/components/Grid/CourseTable/elements/CoursePackage.jsx","pages/search/components/Grid/CourseTable/CourseTableRow.jsx","pages/search/components/Grid/CourseTable/CourseList.jsx","pages/search/components/Grid/CourseTable/NoResults/assets/icons/AISearch.svg","pages/search/components/Grid/CourseTable/NoResults/NoResultsMessage.jsx","pages/search/components/Grid/CourseTable/elements/AccreditationNotice.jsx","pages/search/components/Grid/CourseTable/CourseTable.jsx","pages/search/SearchOverview.jsx","pages/search/SearchOverviewViewMap.jsx","pages/specialAccess/SpecialAccessViewMap.jsx","pages/specialAccess/specialAccessIntroductionViewMap.jsx","pages/mainLayout/footer/NewUserTermsAss.jsx","pages/assistentManagment/AssistantManagementView/createURLParams.jsx","pages/assistentManagment/AssistantManagementView/InviteUserDialog.jsx","pages/assistentManagment/AssistantManagementView/ResendInvitationButton.jsx","pages/assistentManagment/AssistantManagementView/RevokeButton.jsx","pages/assistentManagment/AssistantManagementView/ListItem.jsx","pages/assistentManagment/AssistantManagementView/List.jsx","pages/assistentManagment/AssistantManagementView/SearchBar.jsx","pages/assistentManagment/AssistantManagementView/StatPanel.jsx","pages/assistentManagment/AssistantManagementView/StatsPanel.jsx","pages/assistentManagment/AssistantManagementView/AssistantManagementView.jsx","pages/assistentManagment/AssistantManagementView/useAssistantManager.jsx","pages/assistentManagment/assitantManagementViewMap.jsx","providers/ViewMap.jsx","App.jsx","index.js","pages/course/components/CourseOverview/Card/CourseGridCard.jsx","state/ContextStore.js","pages/course/components/CourseOverview/Card/elements/CourseSymbols.jsx","components/form/RHF/Textfield/MyTextField.jsx","components/form/RHF/Checkbox/MyCheckbox.jsx","components/form/RHF/Radio/MyRadio.jsx","components/form/RHF/Radio/MyRadioGroup.jsx","components/form/RHF/FileUpload/FileUpload.jsx","components/common/Logo.jsx","components/common/LoadingPage.jsx","pages/course/components/CourseOverview/Card/elements/CourseStatus.jsx","components/icons/CertificateTab.jsx","hooks/useCustomEwapi.js","hooks/useJsonApi.js","components/common/Carousel.jsx","state/api/LmsApi.js","pages/course/components/CourseOverview/Card/elements/PodcastIcon.jsx","pages/course/components/CourseOverview/Card/elements/CourseReactions.jsx","pages/course/components/CourseOverview/Card/elements/HideCourse.jsx","pages/course/components/CourseOverview/Card/elements/CourseCategories.jsx","pages/course/components/CourseOverview/Card/elements/CourseLtiButton.jsx","pages/course/components/CourseOverview/Card/elements/CourseAuthors.jsx","pages/course/components/CourseIntroduction/CoursePointsAlert.jsx","pages/course/components/Common/CalculateProgress.jsx","components/common/List.jsx","pages/course/components/CourseOverview/TopLinks.jsx","helpers/ComponentProps.jsx","hooks/useDebounce.js","hooks/useStore.js","components/widgets/Video.jsx","components/MaintenanceModal.jsx","components/common/SecondaryLogo.jsx","pages/mainLayout/leftSideBar/PackageList.jsx","pages/mainLayout/leftSideBar/MyCompany.jsx","pages/mainLayout/leftSideBar/SpecialAccess.jsx","pages/mainLayout/leftSideBar/LeftSideDrawer.jsx","pages/mainLayout/header/components/TeacherHeadline.jsx","pages/mainLayout/header/components/CourseIntroductionHeadline.jsx","pages/mainLayout/header/components/HeaderTitle.jsx","pages/mainLayout/header/context/useHeader.jsx","pages/mainLayout/header/context/HeaderContext.jsx","pages/mainLayout/header/components/HeaderComponents.styles.jsx","pages/mainLayout/header/components/AccountButton.jsx","pages/mainLayout/header/components/AssistantButton.jsx","pages/mainLayout/header/components/CourseOverviewButton.jsx","pages/mainLayout/header/components/Searching.jsx","pages/mainLayout/header/components/CourseSearch.jsx","pages/mainLayout/header/components/LmsButton.jsx","pages/mainLayout/header/components/MenuItemAccount.jsx","pages/mainLayout/header/components/MenuItemAdminPanel.jsx","pages/mainLayout/header/components/MenuItemBackend.jsx","helpers/xml.helper.js","pages/mainLayout/header/components/MenuItemXmlBrochure.jsx","pages/mainLayout/header/components/MenuItemXmlPrint.jsx","helpers/pdfOverview.helper.jsx","pages/mainLayout/header/components/MenuItemCreatePdf.jsx","pages/mainLayout/header/components/MenuItemEditCourse.jsx","pages/mainLayout/header/components/MenuItemEwiseUser.jsx","pages/mainLayout/header/components/MenuItemLogout.jsx","pages/mainLayout/header/components/MainMenu.jsx","pages/mainLayout/header/components/Notifications.jsx","pages/mainLayout/header/components/NotificationsItem.jsx","pages/mainLayout/header/components/MobileMenuButton.jsx","pages/mainLayout/header/components/QuickLinksMenu.jsx","pages/mainLayout/header/components/ProductMenuItems.jsx","pages/mainLayout/header/components/SelectProductButton.jsx","pages/mainLayout/header/components/SpecialAccessButton.jsx","pages/mainLayout/header/components/TotalPointsChip.jsx","pages/mainLayout/header/components/TotalCompletedCourses.jsx","pages/mainLayout/header/components/TotalSubPoints.jsx","pages/mainLayout/header/CourseHeader.jsx","pages/mainLayout/header/CourseHeadline.jsx","pages/mainLayout/header/Header.jsx","components/common/AccreditationPartners.jsx","pages/mainLayout/footer/TermsConditions.jsx","pages/mainLayout/footer/FaqLink.jsx","pages/mainLayout/footer/ComplaintsLink.jsx","pages/mainLayout/footer/Footer.jsx","pages/mainLayout/MainLayout.jsx","components/icons/Quiz.jsx","components/common/Slider.jsx","pages/misc/ErrorPage.jsx","components/common/SaveButton.jsx","components/common/DeleteButton.jsx","components/common/Accordion.jsx","components/common/Lazy.jsx","components/common/LinearProgressBar.jsx","components/common/ToggleColorMode.jsx","components/common/AlertBox.jsx","components/common/Load.jsx","components/common/Loading.jsx","components/common/TabComponent.jsx","components/common/toast/Toast.jsx","components/common/toast/ToastContainer.jsx","components/EnhancedTooltip.jsx","helpers/getObjectPropValue.js","components/common/table/CustomTableCell.jsx","components/common/table/ActionTableCell.jsx","components/DeleteDialogBox.jsx","components/CSVExport.jsx","components/common/table/CustomTable.jsx","helpers/tableDataExport.helper.jsx","hooks/useAPI.js","pages/lms/utils.js","pages/lms/components/DateRange.jsx","pages/lms/components/DropDown.jsx","pages/lms/components/LmsToolbar.jsx","components/common/ScrollUpButton.jsx","pages/play/questions/PollWidget/PollStats.jsx","components/form/PageTitle.jsx","components/form/Form.jsx","components/icons/PodcastsIcon.jsx","pages/course/components/CourseOverview/Card/elements/CourseImage.jsx","pages/course/components/CourseOverview/Card/elements/CourseTitle.jsx","pages/course/components/CourseOverview/Card/elements/CoursePoints.jsx","pages/course/components/CourseOverview/Grid/CourseGrid.jsx","pages/course/components/CourseOverview/Card/CourseGridCardListMin.jsx","pages/course/components/CourseOverview/Grid/CourseGridListMin.jsx","pages/course/components/CourseOverview/CourseTabs.jsx","pages/course/components/CourseOverview/Card/elements/NoCourses.jsx","pages/course/components/CourseOverview/Grid/CourseTable/CourseTableRow.jsx","pages/course/components/CourseOverview/CourseFavorites.jsx","pages/course/components/CourseOverview/CourseStarted.jsx","pages/course/components/CourseOverview/RightSideBar/CourseFilters.jsx","pages/course/components/CourseOverview/RightSideBar/FilterContainer.jsx","pages/course/components/CourseOverview/CourseView.jsx","pages/course/components/CourseOverview/Grid/GridCardSwipe.jsx","helpers/profBanners.helper.js","pages/course/components/CourseOverview/Banner.jsx","pages/course/components/CourseOverview/Card/elements/ViewAllCertificates.jsx","pages/course/components/CourseOverview/CourseFinished.jsx","pages/course/components/CourseOverview/Intro/CourseOverviewIntro.jsx","pages/course/components/CourseOverview/Intro/CourseOverviewIntroAccr.jsx","pages/course/useOnboarding.js","pages/course/components/CourseOverview/Grid/CourseTable/CourseList.jsx","pages/course/components/CourseOverview/Grid/CourseTable/CourseTable.jsx","pages/course/components/CourseOverview/TrialCoursesBaseProdIntroText.jsx","pages/course/components/CourseOverview/TrialCourses.jsx","pages/course/CourseOverview.jsx","pages/mainLayout/footer/NewUserTerms.jsx","pages/course/components/CourseIntroduction/CourseIntroductionAuthors.jsx","pages/course/components/CourseIntroduction/CourseIntroductionHeader.jsx","components/icons/Information.jsx","components/icons/AuthorIcon.jsx","components/icons/goals.jsx","pages/course/components/CourseIntroduction/RelatedCourses.jsx","pages/course/components/CourseIntroduction/NonTrialCourseAlert.jsx","pages/course/components/CourseIntroduction/CourseAccrEndDate.jsx","pages/course/components/CourseIntroduction/CourseIntroductionTabs.jsx","pages/course/components/CourseIntroduction/mobile/MobileCourseIntroductionTabs.jsx","pages/course/components/CourseIntroduction/CourseExpiredSection.jsx","pages/course/components/CourseIntroduction/SpecialAccessSection.jsx","pages/course/components/CourseIntroduction/DownloadCertificateSection.jsx","pages/course/components/CourseIntroduction/CourseLessonSection.jsx","pages/course/components/CourseIntroduction/CourseButton.jsx","pages/course/components/CourseIntroduction/TrialCourseButton.jsx","pages/course/components/CourseIntroduction/mobile/MobileTopbarCard.jsx","pages/course/components/CourseIntroduction/mobile/MobileTopbar.jsx","pages/course/components/CourseIntroduction/mobile/MobileCourseIntroductionHeader.jsx","pages/course/components/CourseIntroduction/SidebarCard.jsx","pages/course/components/CourseIntroduction/SideBar.jsx","pages/course/CourseIntroduction.jsx","theme/CmeTheme.js","theme/PeTheme.js","theme/PoTheme.js","theme/index.jsx","providers/CustomThemeProvider.jsx","pages/course/components/CourseOverview/Grid/CourseTable/CircularProgressWithLabel.jsx","pages/course/components/CourseOverview/Grid/CourseTable/utils.js","pages/course/components/CourseOverview/Grid/CourseTable/Progress.jsx","pages/course/components/CourseOverview/Grid/CourseTable/FavoriteButton.jsx","pages/course/components/CourseOverview/Grid/CourseTable/useFavourites.js","components/form/RHF/Editor/Editor.jsx","theme/EwiseTheme.js","components/form/SubTitle.jsx","providers/ModalProvider.jsx","pages/lms/components/LmsTable.jsx","pages/lms/api/index.js","components/form/RHF/Select/MySelect.jsx","helpers/Helpers.jsx","helpers/rootStoreHelper.js"],"names":["breakpoints","initialState","window","matchMedia","matches","useBreakpoint","breakpoint","setBreakPoint","useState","useEffect","handleResize","addEventListener","removeEventListener","useCssBreakpoint","useCustomTheme","useContext","CustomThemeContext","useEventListener","eventName","handler","element","arguments","length","undefined","savedHandler","useRef","current","eventListener","event","useLocalStorage","key","defaultValue","serialize","JSON","stringify","deserialize","parse","state","setState","valueInLocalStorage","localStorage","getItem","error","removeItem","prevKeyRef","prevKey","setItem","useModal","modal","setModal","modalContent","setModalContent","handleModal","content","useScrollPosition","_elementRef$current","_elementRef$current2","elementRef","scrollPosition","setScrollPosition","scrollTop","scrollY","updatePosition","_ref","currentTarget","lastKnownScrollPosition","ticking","requestAnimationFrame","listenerCallbacks","WeakMap","observer","handleIntersections","entries","forEach","entry","has","target","cb","get","isIntersecting","intersectionRatio","unobserve","delete","useIntersection","elem","callback","IntersectionObserver","rootMargin","threshold","set","observe","Latinise","urlify","str","newStr","replace","a","latin_map","latinize","removeNonWord","handleApiError","_error$response","_error$response$data","_error$response$statu","_error$response2","_error$response$statu2","_error$response3","response","data","errors","status","statusText","message","createJsonApi","endpoint","params","globalParams","getAll","authedClient","concat","getSingle","id","create","props","_props$attributes","type","attributes","relationships","post","update","patch","this","stripDates","getCleanedData","attach","parentData","relationName","relationType","relationId","attachRelation","relations","Object","hasOwn","relationsData","detach","relationIds","detachRelation","ids","Array","isArray","relation","relationData","map","d","includes","filter","keys","cleanedRelationship","created","changed","createCurriculumApi","curriculumApi","include","searchParams","URLSearchParams","toString","curriculumFunctionApi","curriculumFunctionActivityApi","curriculumLearningGoalApi","curriculumLearningGoalActivityApi","curriculumLearningGoalEvaluationApi","curriculumFunctionExamplesApi","curriculumLearningGoalExamplesApi","curriculumLearningGoalActivityExamplesApi","_DOMTokenList","dpSupport","defineGetter","object","name","fn","configurable","defineProperty","__defineGetter__","e","el","prop","that","tokens","tokenMap","maxLength","addIndexGetter","i","preop","reindex","args","rSpace","test","SyntaxError","code","baseVal","split","toLocaleString","join","item","idx","contains","token","add","apply","l","push","remove","ignore","t","toggle","force","Call","F","V","argumentsList","IsCallable","TypeError","prototype","call","Get","O","P","argument","GetV","v","p","ToObject","Type","x","Symbol","ToPrimitive","input","PreferredType","hint","String","Number","exoticToPrim","toPrimitive","func","GetMethod","result","methodNames","method","OrdinaryToPrimitive","ToString","_mutation","isNode","Node","nodeName","nodeType","nodes","document","createTextNode","fragment","createDocumentFragment","appendChild","DocumentFragment","prepend","insertBefore","firstChild","global","DOMTokenList","createElementNS","classList","createElement","constructor","native","Document","after","Element","parentNode","slice","viableNextSibling","nextSibling","indexOf","Text","append","before","viablePreviousSibling","previousSibling","addProp","o","attr","tokenList","THIS","gibberishProperty","visage","mirror","reflections","childNodes","_R","HTMLElement","HTMLLinkElement","HTMLAnchorElement","HTMLAreaElement","webkitMatchesSelector","oMatchesSelector","msMatchesSelector","mozMatchesSelector","selector","elements","ownerDocument","querySelectorAll","index","closest","node","SVGElement","parentElement","removeChild","replaceWith","replaceChild","toggleAttribute","getAttribute","removeAttribute","setAttribute","NodeList","newDesc","value","writable","enumerable","CreateMethodProperty","count","S","RequireObjectCoercible","n","number","isNaN","Infinity","Math","floor","abs","ToInteger","RangeError","self","types","bool","string","array","date","mixed","default","required","defined","notNull","oneOf","notOneOf","notType","getTypeTranslation","min","max","email","url","uuid","trim","lowercase","uppercase","lessThan","moreThan","positive","negative","integer","boolean","isValue","noUnknown","options","debug","fallbackLng","ns","resources","en","translation","translationEN","widget","widgetEN","askQuestion","askQuestionEN","evaluation","evaluationEN","ewiseProductSelection","ewiseProductSelectionEn","editCourseForm","editCourseFormEN","adminCourses","AdminCoursesEN","onboarding","onboardingEN","curriculum","curriculumEN","vtb","vtbEN","datagrid","datagridEN","colophon","de","translationDE","nl","translationNL","widgetNL","courseCopy","courseCopyNL","askQuestionNL","evaluationNL","ewiseProductSelectionNL","editCourseFormNL","AdminCoursesNL","onboardingNL","curriculumNL","vtbNL","datagridNL","keySeparator","nsSeparator","interpolation","escapeValue","format","toUpperCase","Date","dayjs","react","useSuspense","bindI18n","bindStore","nsMode","i18n","use","initReactI18next","init","locales","getCurrentLocale","languages","find","lng","Yup","i18next","authorizationApi","axios","timeout","resetLocalState","sessionStorage","LOCALSTORAGE_KEY_OAUTH_TOKEN","currentTokenRefreshCycle","OAuth2","redirectUrl","clientId","clientSecret","authorizeEndpoint","tokenEndpoint","authorizationDomain","authorizationCode","tokenInformation","initializeOauthSession","hasPersistedToken","getTokenFromPersistentStorage","hasAuthKillSwitch","getKillSwitchFromQuery","hasAuthorizeValues","getAuthorizeValuesFromQuery","hasImpersonationValues","getImpersonationValuesFromQuery","tokenRequest","grant_type","redirect_uri","client_id","code_verifier","Sentry","location","href","saveTokenToPersistentStorage","history","replaceState","console","catch","err","isImpersonation","pushState","killLocalSession","redirectToExternalProvider","code_verfier","codeVerifier","code_challenge","codeChallenge","pkce","authorizationUrl","URL","getCurrentRoutingState","Promise","resolve","setTimeout","killSession","currentState","pathname","getToken","accessTokenIsExpired","refreshToken","currentTime","getTime","tokenExpireTime","refreshGrantIsAvailable","refresh_token","refreshExpireTime","_refreshTokenInternal","Error","async","queryString","search","setTime","expires_in","jsonFormattedToken","AUTH_CANARY_ENDPOINT","store","createAuthenticatedClient","OAuthHandler","AuthenticatedClient","baseURL","process","headers","subRequests","AuthToken","requests","req","Authorization","access_token","Accept","reject","then","body","title","interceptors","request","config","paramsSerializer","qs","arrayFormat","encode","setStoreValue","originalRequest","oauthInvalidEvent","Event","dispatchEvent","_error$response3$data","detail","BackgroundColor","DefaultMarginMid","OauthContext","React","createContext","AuthedClientContext","OauthProvider","children","LoaderComponent","isAuthenticated","setIsAuthenticated","currentTheme","getLabelNameFromDomain","setTheme","setCustomLogo","convertThemeIDToEnvName","themeID","replaceAll","oauthClient","convertAmplifyRedirectUrl","oauthClientListener","authenticatedClient","clientInstance","is_branded","isBranded","brand_logo","brandLogo","brand_color_main","brandColorMain","brand_color_secondary","brandColorSecondary","customTheme","primaryColor","secondaryColor","createTheme","palette","primary","main","secondary","secondaryOrange","background","primaryBlue","tabPrimaryBlue","favoriteRed","typography","h1","fontSize","fontWeight","h2","h3","h4","h5","h6","subtitle1","subtitle2","button","caption","overline","components","MuiToolbar","styleOverrides","root","margin","width","MuiAvatarGroup","justifyContent","marginTop","marginBottom","MuiAvatar","color","MuiGrid","MuiDivider","MuiCard","boxShadow","MuiSwitch","MuiTab","backgroundColor","MuiCardHeader","MuiListItemButton","MuiListItem","MuiTypography","custom","courseIntroductionHeader","imageGradient","buttonBackgroundColor","createCustomTheme","_jsxs","_Fragment","_jsx","Provider","isLoading","msg","TextField","model","maybeNull","processed","IsoDate","reference","identifier","toISOString","Body","maybe","summary","views","cleanValue","DateRange","uri","isExternal","currentVal","end_value","Links","related","prev","next","SpecialAccess","drupal_internal__tid","RelSpecialAccess","Profession","links","field_ewise_labels","field_categories_parent_term","meta","drupal_internal__target_id","field_categories2_parent_term","RelProfession","RelProfessions","File","drupal_internal__fid","filemime","filename","filesize","RelFile","RelCatParent","Category","langcode","symbol","parent","RelCategory","RelCategories","categoryrefs","afterAttach","category","categories","UserRole","drupal_internal__id","label","is_admin","permissions","RelUserRole","LessonContent","documentTitle","pages","widgets","toc","level","pagenr","printversion","actions","setTitle","RelLessonContent","RelLessonContentWidgets","RelLessonContentSimple","LessonContentEdit","tagdoc","lesson_content_widgets","OpenQuestion","RadioQuestion","correct","feedback","CheckQuestion","optional","VideoWidget","HtmlWidget","htmlData","NumericalQuestion","feedbackCorrect","feedbackLess","feedbackMore","valueEnd","sliderMin","sliderMax","sliderStep","unit","SortQuestion","startposition","order","_matches","answer","nr","MatchQuestion","WordCloud","numberOfFields","PollWidget","PollWidgetItem","nid","widgetCode","poll","internal_title","profession","totalcount","user_has_answered","delta","widgetUpdate","getParent","PollWidgetList","getPollWidget","w","findIndex","add2","destroy","pollVote","flow","updatedWidget","lmsApi","postPollAnswer","pollCancelVote","toJS","RelPollWidgetItem","WordCloudItem","wordcloud","input_required","show_fields","words","word","formatWords","WordCloudList","getWordCloud","submitAnswers","postWordCloudAnswer","RelWordCloudItem","widgetType","questionOption","union","dispatcher","QuestionWidget","drupal_internal__nid","weight","widget_code","widget_type","widget_data","widget_link","widget_link_uuid","question","feedbackFalse","lesson_content_link","volatile","component","isQuestion","match","setComponent","preProcessSnapshot","snapshot","newSnapshot","cloneDeep","LessonEdit","lesson_content","currentOdt","getSnapshot","uploadEndPoint","newEntity","existingEntity","entity","Author","identifierNumber","body_summary","body_value","affiliation","first_name","last_name","initials","work_position","titles","sex","photo_id","photo_uri","disclosure","fullName","firstName","lastName","Boolean","img","bio","rawHTML","Authors","authorList","searchAuthorName","list","filteredListByAuthorName","regex","RegExp","author","sortedByFullName","sort","b","getAuthorByUuid","getAuthorById","searchByName","tid","description","categories_parent_term","categories2_parent_term","ewise_labels","categories2","Lesson","max_attempts","minimum_score","minimum_score_2nd_try","free_flow","lesson_type","Course","course_accreditation","course_delta","course_expected","course_extra_points","course_goals","course_id","course_information","course_points","course_preview_video","course_profession","course_skip_evaluation","course_status","course_title","course_uuid","coursephoto_alt","coursephoto_url","headerphoto_alt","headerphoto_url","lc_course_header_photo","lc_coursephoto","lc_extra_label","lc_goals","lc_information","lc_podcast_html","lc_podcast_title","lc_preview_video","lesson_container_id","lesson_container_uuid","valid_period_end","valid_period","lc_author_id","safeReference","lc_reviewer_id","course_extra_points_desc","course_category","late","course_category2","lessons","tab_order","package_title","package_id","package_accr","isTrialCourse","categoryLabel","_self$course_category","categoryLabelArray","_self$course_category2","points","_window$store$routerS","_getParent","_getParent2","_getParent2$baseProdu","routerState","routeName","selectedPackageId","routerStore","getCurrentRoute","accreditation","baseProduct","packages","packag","accr_unit","accr_unit_plural","accr_unit_short","extra_points_unit","accrUnit","imageUrl","Courses","courses","authorId","competencies","hasPodcast","statuses","isExpiring","sortedPackage","onlyTeachers","authors","nonAuthorsInAdvisoryBoard","advisoryBoardMembers","advisory_board","advId","parsedCourses","isAuthor","some","course","courseList","_self$filter","_self$filter$competen","_self$filter2","_self$filter2$statuse","_self$filter3","_self$filter4","_self$filter5","_self$filter5$compete","_self$filter7","_self$filter7$statuse","_self$filter9","_self$filter10","courseListfilteredByCategories","coursesIdsSet","Set","found","c","_self$filter6","_self$filter8","exist","isPodcast","expirationDate","setHours","isCourseExpiring","_self$filter11","_self$filter12","_self$filter13","_self$filter13$catego","currentList","getAuthorCourseList","_self$filter14","cleanFilters","_self$filter15","_self$filter15$compet","_self$filter16","_self$filter17","_self$filter17$status","_self$filter18","_self$filter19","_self$filter20","mapCategories","values","mapCompetencies","mapStatuses","countPodcastes","countExpiringCourses","isFiltering","_self$filter21","_self$filter22","_self$filter22$catego","_self$filter23","_self$filter23$compet","_self$filter24","_self$filter25","_self$filter25$status","_self$filter26","isSpecialAccessView","coursesCount","coursesByCategoryId","_course$course_catego","isCourseExpired","_getParent3","getCourse","findCourseByNid","endDate","hideExpiredLabel","_getParent4","_getParent5","getFullYear","endDateArray","_getParent6","isAccreditated","_getParent7","getCoursePackage","_getParent8","coursesByCategory","existingCategory","sortedCategories","coursesByAccreditation","accrCategories","accr","nonaccr","addNewCourse","filterByAuthor","resetFilter","filterByCategories","categoryId","filterByStatuses","filterByCompetencies","competence","filterByPodcasts","filterByExpiringCourses","_self$filter27","_self$filter27$status","_self$filter28","_self$filter29","reduce","acc","competenceId","CourseResult","completed","certificate","has_evaluation","CourseResults","courseResults","getFinishedCourses","getStartedCourses","getShownCourses","courseIds","_course$course_id","isCourseStarted","_course$course_id2","isCourseFinished","_course$course_id3","findCourseResultByNid","courseResult","findCourseResultByCourseNid","_courseResult$course_","setHiddenCourses","hiddenCourses","setShowHidden","showHidden","updateCourseResultbyNid","fetchCourseResultsByCourseId","course_results","lesson_results","updatedCourseResult","updatedLessonResult","updateLessonResults","User","uid","mail","preferred_langcode","user_picture","display_name","roles","field_accepted_gdpr","hasRole","role","hasEditorRights","updatePicture","picture","LessonContainer","user_id","score","questions_answered","sequence_no","page_id_max","questions","questionId","last_correct","last_response","last_response_timestamp","first_response","first_response_timestamp","tries","lesson","course_result","LessonResult","snapshotProcessor","preProcessor","sn","LessonResults","lessonResults","getLessonPageIdMax","lessonId","findLessonByCourseNid","getFailedCourses","lessonR","isLessonFailed","failedCourse","isLessonSuccess","successCourse","updatedLessonRes","lessonResult","log","logger","setDefaultLevel","StoreFetch","patchpostData","postData","patchData","applySnapshot","convertSnapshot","lesson_result","packagecourses","patchpost","favorite_courses","favorites","target_id","favoriteIds","liked_courses","liked","likes","likedIds","hidden_courses","hidden","hiddenIds","profile","errorShown","deleteData","deletePost","fetchData","selectedProductId","productID","packageID","_fetched$data","_fetched$data2","_fetched$data2$result","_fetched$data3","_fetched$data3$user","_fetched$data4","_fetched$data4$produc","_fetched$data5","_fetched$data5$basepr","ewapi","fetched","fetchUserData","hasSubscriptions","base_product_id","product_id","products_in_subscription","subscriptions","setEwiseSubscriptions","product","setEwiseProduct","setLanguage","changeLanguageMeta","user","updateStore","setFavorites","setLikes","setHidden","setCourseResults","setLikedIds","setFavoritesIds","isEwiseUser","setSelectedProduct","baseproduct","specialAccessCourseIds","login","hasSpecialAccess","_specialAccessResult$","_specialAccessResult$2","specialAccessResult","fetchSpecialAccessCourses","free_product","baseproduct_full","trialCourses","baseProductId","basePackageId","nonTrialCourses","setTrialCourses","updateStoreNonTrialCourses","modelErrors","warn","fetchUser","_fetched$data6","_fetched$data7","_fetched$data8","included","_fetched$data$data$0$","professions","_fetched$data$data$0$2","userProfessions","bp","success","updateStoreSpecialAccess","fetchSearchData","selectedSearchParam","selectedBaseProductId","selectedSearchAttempt","searchParam","searchAttempt","parseInt","_fetched$data9","_meta$total","_result$suggested_par","_result$attempt","_result$random","fetchSearchResults","searchCoursesFound","total","searchSuggestedParam","suggested_param","searchNextAttempt","attempt","searchIsRandom","random","is_ewise","updateSearchResults","_fetched$meta","specialAccess","validUser","localeCompare","products","totalCompletedCourses","user_courses_finished","showBanner","show_banner","_fetched$data10","_fetched$data10$cours","reviewers","userLanguage","language","changeLanguage","info","_fetched$data11","_fetched$data11$favor","_fetched$data12","_fetched$data12$likes","_fetched$data12$likes2","_fetched$data13","_fetched$data13$hidde","_fetched$data13$hidde2","_fetched$data14","_fetched$data15","_fetched$data15$likes","_fetched$data15$likes2","_fetched$data16","_fetched$data17","_fetched$data17$favor","_fetched$data17$favor2","started","startedIds","filteredLessonResults","setCourseResultsSpecialAccess","curDate","subEndValue","setFullYear","toJSON","base_product_title","maximum_points","fetchCourses","courseContainerId","firstPackageId","on","unique_name","firstPackage","pkg","course_container","clickedTabs","fetchCourseContainerData","mergeIncludes","startedCourse","fetchUserCourseResults","fetchCourseFavorites","startedCoursesLoaded","responseCourseResults","fetchCourseResults","certificates","fetchBanner","productId","fetchBanners","banners","bannersData","backgroundImageID","background_image","backgroundImage","fetchVtbOverview","query","fetchedVtb","vtbevents","eventsData","vtblocations","includedEntity","vtbcategories","getLessonWidgets","lessonEditState","getLessonEdit","objLessonEdit","lessonEdit","postWidget","questionWidget","newLessonContentValue","createWidget","cleanResponse","cleanKey","validateFetchedObjects","Banner","branch","button_link","button_title","button_color","campaign_title","chip","chip_color","field_custom_css","field_expiring_date","field_schedule_date","field_title","order_weight","title_color","AccreditationOrganisation","RelAccreditationOrganisations","accreditationrefs","RelAccreditationOrganisation","AccreditationLink","accreditation_code","accreditation_organisation","RelAccreditationLinks","newAccreditationLink","accreditation_points","end","field_photo","RelAuthors","authorrefs","rotating_answers","RelLesson","RelLessons1","drupalBaseUrl","RelLessons","RelDependentCourse","drupal_internal__vid","field_extra_label","field_keywords","field_preview_video","field_goals","field_information","field_podcast_html","podcast_title","field_sharing_info","dependent_courses","field_authors","field_course_header_photo","field_coursephoto","field_reviewers","field_course_image_extern","patchPicture","file","field","postImage","RelLessonContainer","Included","RelCourses","information","goals","preview_video","expected","online","field_points","field_extra_points","field_extra_points_desc","field_accreditation_code","field_valid_period","field_skip_evaluation","allow_dry_run","accreditation_links","lesson_container","special_access","isFavorite","favoriteCourses","newCourse","show_in_public","special_acesss","RelCourse","courserefs","getType","resolveIdentifier","CourseContainer","category2","professionParentId","professionParentId2","RelCourseContainer","CourseEdit","lesson_contents","organisations","courseContainer","currentCourse","toasts","frozen","isCreated","jsonApi","v_state","duplicate","link","isOpen","setNewCourse","isFetching","retrieved","editCourse","toast","open","modalLesson","editTab","newCourseId","dialogLesson","dialogMenuList","packageMenuList","specialAccessMenu","setCopyCourse","selectedContainer","toggleDialogEditWidget","setEditWidget","defaultSearchData","drawerOpen","currentFilename","currentLesson","currentLessonWidgets","currentPackage","tableTotal","lessonWidgets","dependentCourse","showSidebarDashboard","showSidebarEdit","startLmsApiClient","lessonContentWidgets","_self$currentLesson","newAccrreditation","action","start","organisation","isNewRecord","courseId","courseFields","courseEditDataFields","getContainerIdFromPackageNid","packageNid","package","category2Id","accreditations","currentLessonByNid","getAccrPoint","getAccrUnit","currentLessonContentId","canPlayLesson","currentLessonContainer","newLessonContent","currentLessonContent","_lesson$attributes","_lesson$relationships","_lesson$relationships2","_lesson$relationships3","lessonContentId","afterCreate","getEnv","generateToastId","crypto","msCrypto","Uint32Array","getRandomValues","setToasts","toastMsg","variant","timeOut","deleteToast","filtered","setEditTab","tab","createNewLessonContainer","fetchEwapiCourses","_package","fetchCourseContainer","_fetched$data$0$relat","_fetched$included","_fetched$included2","fetchIt","professionId","fetchCourseEditData","mergeIncludesCourses","patchCourseData","requestId","lessonContainer","patchCourse","saveNewCourse","newLessonContainer","newLC","savedCourse","LC","postCourse","subQuery","_createSubReqItem","createCourse","fetchCourseEdit","createSubQuery","courseEditState","getCourseEdit","objCourseEdit","convertFetchedToMobxObj","updateCourseEditTree","gotoErrorPage","statuscode","updateCourse","getNewODT","_tagdoc$data","deleteLessonFromLessonContainer","lessonIndex","splice","existingContainerIndex","patchpostLesson","_tagdoc$data2","selectedLessonContent","newFileUpload","fileName","unixTimeStamp","unix","lessonAction","lessonWFLC","lcntrWFLesson","lessonContentAction","_fetched$lessonConten","subRequest","merge2Includes","lessonContent","updateODT","postODT","updatedLC","updatedLessonContent","updatedOdt","deleteCourse","patchPostWidget","isNewWidget","strWidgetData","tableData","responseWidget","now","deleteWidget","toastSucces","indexWidget","resLessonContent","toastError","deleteDraftCourse","uuidCourse","getIndexofCourseToDelete","unlinkCourse","courseUuid","course_container_uuid","courseContainerUuid","fetchedCourseContainer","newEntities","overwrite","getAccreditationPoints","copyCourse","isReUsedCoursed","obj","createQueryProps","fields","queryProp","createSubReqItem","waitfor","waitFor","_fetched$course","_fetched$course2","_fetched$course3","_fetched$course4","_fetched$course5","lc","getCategoriesByContainerNid","fieldCategory","curCC","catId","queryCategory","advGetCategoriesByContainerNid","containerNid","advGetCategoryforCurrentCourseContainer","advCreateCopyCourse","advDuplicateLessonContent","lesContentNid","res","fetch","ok","json","advCreateCopyLessson","curLesson","_newLesson$relationsh","_newLesson$relationsh2","_newLesson$relationsh3","newLesson","hasLessonContent","clonedLessonContentId","clone_uuid","advCreateCopyExternalCourse","settings","advCreateCopyLessonContainer","curLessonContainer","curLC","_curLessonContainer$a","_curLessonContainer$a2","_curLessonContainer$a3","_curLessonContainer$a4","_curLessonContainer$a5","advUpdateCourseContainer","newQuery","reuseCourseInContainer","curCourse","newCopyCourse","duplicateCourseInContainer","toastDefault","newLessonArray","lesson0","lesson1","newCopyLC","updateCourseContainer","linkExternalCourseInContainer","copyExternalCourseInContainer","categoryUuid","ccProfession","duplicateExternalCourseInContainer","ccQuery","newFilter","clonedCourse","setCurrentPackage","setDialogLesson","convertJsonCourseToEwapiCourse","_prof$data","_prof$data$id","_prof$data$id$attribu","prof","isProxy","profNid","lcNid","lcId","patchPostPolWordQuestion","widgetData","respWidgetData","patchPostData","widgetId","widgetNid","questionData","target_type","AuthorEdit","photos","setNext","CourseCopy","fetchedCourse","selected","rollBack","rollBackArray","currentProfessionId","packageProfession","queryParams","emptySubQuery","relData","getHours","getMinutes","getCourseContainer","newCourseContainer","getCreateRequest","actionId","question_widgets","getProfession","getStoreUpdateItems","fetchCourse","courseUUId","createReq","groupCourse","groupCourseByType","groupCourseLessons","groupLessonsByItems","createSubRequest","validateFetchedToArray","fetchCourse2Lessons","fetchCompleteCourse","testCourse","rollbackCourse","rollBackQuery","doRollBack","lessonsArray","subReq","totLessonSubRequest","lessonContainerReldata","lessonContainerWaitFor","reqWidgets","createReq_CourseWidgets","reqContent","createReq_LessonContent","reqLesson","createReq_Lesson","reqLessonContainer","createReq_LessonContainer","reqCourse","createReq_Course","reqCourseContainer","createReq_CourseContainer","items","reqId","time","newSubQuery","subWaitFor","relationshipData","_rel","createMultiDependencySubQuery2","deleteKeys","processData","dal","lessontext","createSubRequestItem","newData","del","_createDeleteSubRequestItem","_groupLessons_LessonContent","q","_groupLessons_QuestionWidgets","_getSubRequest_Uri","_getSubRequest_WaitFor","_req$body","_obj$attributes","_obj$attributes$item","hasOwnProperty","_obj$relationships","_obj$relationships$it","Likes","isCourseLiked","Hidden","Product","trial_detail_text","trial_overview_text","Profile","drupal_internal__uid","timezone","field_display_name","field_first_name","access","field_no_registration_numbers","field_bignr","field_birthdate","field_company_name","field_gender","field_initials","field_kabiznr","field_kngfnr","field_krmnr","field_last_name","field_rbnr","field_receive_email_notification","zoho_id","field_accountants_type","field_fysio_deelregister","field_rechtsgebieden","field_nirv_number","field_slpo_id","field_function","field_somn_member","field_vvn_nr","field_nova_number","Accreditation","short_name","accr_subtext","accr_registers","logo","accr_logo","Package","tab_label","accredited","microlearning","Packages","Favorites","isCourseFavorite","BaseProduct","Subscription","product_title","available_points","Subscriptions","earnedPoints","bsProductNid","subscription","totalPoints","totalSubscriptionPoints","getLabel","maxPoints","productNid","availablePoints","enoughPoints","courseNid","_course$course_points","coursePoints","maxPointsReached","top","_getParent$baseProduc","_getParent$baseProduc2","_accreditation$accred","updateSubscription","fetchSubscriptions","chartModel","month","monthdisplay","students","profesionsModel","open_courses","students_with_finished_course","students_with_open_course","productsModel","dashboardModel","chart","organisationIds","chartData","professionsData","productsData","parentOrgId","fetchLmsProfessions","_getParent$lmsAccess","_getParent$lmsAccess$","lmsAccess","fetchLMSProfessions","fetchLmsProducts","_getParent$lmsAccess2","_getParent$lmsAccess3","fetchLMSProducts","fetchLmsChart","_getParent$lmsAccess4","_getParent$lmsAccess5","fetchLMSChart","LmsDashboard","CURRICULUM_STAGE","functions","learningGoals","CURRICULUM_STEP","CURRICULUM_STAGE_BY_STEP","CURRICULUM_TYPE","initialData","SORT_DIR","yearSorterDesc","sortDir","year","yearSorter","CurriculumStore","isLoadingCurriculum","curriculumState","enumeration","curriculums","curriculumFunctions","curriculumFunctionActivities","curriculumLearningGoals","curriculumLearningGoalActivities","curriculumEvaluations","curriculumEvaluationCourses","curriculumFunctionExamples","curriculumLearningGoalExamples","curriculumLearningGoalActivityExamples","curriculumAvailableCourseResults","startLoadCurriculum","stopLoadCurriculum","initCurriculumState","refreshCurrentCurriculum","fetchCurriculum","fetchCurriculums","_result$portfolios","portfolios","_result$included","_result$included2","_result$included3","_result$included4","_result$included5","_result$included6","_self$curriculum","_self$curriculum$data","_self$curriculum$data2","fetchAvailableCourseResultForCurriculum","createCurriculum","is_finished","percentage_completed","is_deleted","current_step","updateCurriculum","unarchiveCurriculum","deleteCurriculum","_self$curriculums","finalizeCurriculum","updateCurriculumStep","step","maybeUpdateCurriculumPercentage","percentage","maybeResetStepAndPercentage","_curriculum$relations","_curriculum$relations2","_curriculum$relations3","_curriculum$relations4","_curriculum$relations5","_curriculum$relations6","_curriculum$relations7","_curriculum$relations8","numFunctions","numLearningGoals","learning_goals","currentStep","percentageCompleted","attachCurriculumFunctionToCurriculum","functionId","attachCurriculumLearningGoalToCurriculum","fetchCurriculumFunctionExamples","createCurriculumFunctionWithActivity","createCurriculumFunction","functionName","activity","createCurriculumFunctionActivity","activityName","expected_result","activityResult","sleep","updateCurriculumFunction","fnData","attachCurriculumFunctionActivityToCurriculumFunction","updateCurriculumFunctionActivity","deleteCurriculumFunction","updatedCurriculum","stack","activities","all","deleteCurriculumFunctionActivities","fnUpdated","functionData","functionActivityId","fetchCurriculumLearningGoalExamples","fetchCurriculumLearningGoalActivityExamples","createCurriculumLearningGoalWithActivity","goal","createCurriculumLearningGoal","learningGoalName","createCurriculumLearningGoalActivity","explanation","activityExplanation","updateCurriculumLearningGoal","deleteCurriculumLearningGoal","_goal$relationships","_goal$relationships$a","_goal$relationships$a2","_goal$relationships2","_goal$relationships2$","_goal$relationships2$2","activityIds","goalWithoutActivities","deleteCurriculumLearningGoalActivities","evaluationIds","evaluations","goalWithoutEvaluations","deleteCurriculumEvaluations","goalWithActivity","attachCurriculumLearningGoalActivityToLearningGoal","updateCurriculumLearningGoalActivity","activityId","attachCurriculumEvaluationToLearningGoal","evaluationId","createOrUpdateCurriculumEvaluation","updateCurriculumEvaluation","createCurriculumEvaluation","_data$relationships","fromEntries","_relationship$data","_relationship$data$me","relationship","_item$meta","arity","attachCurriculumCourseResultToEvaluation","completedDate","condition","path","operator","RouterStateModel","FirstStore","maintenance","errorPage","lessonPlay","browserHistory","lessonState","Map","authorEdit","courseEdit","assistantManagement","maxRetries","authorEditState","prevTab","dialog","resetToken","selectedNid","minDrawer","toastStates","courseDetails","openDrawer","ewiseProducts","loadingCourses","isToastvisible","isfilterVisible","courseHeaderTabs","assistantNavbar","courseoverview","userName","scope","prefBaseProduct","lmsStudentDetail","lmsRecordsPerPage","passwordForced","noSidebar","searchBaseParam","searchingCourses","showDependingPopup","dependingCourse","bannerProducts","defaultCourseGridImage","avatarUrl","_self$user","profilePicture","getCourses","courseTitle","oauth","selectedPackageTitle","_self$packages","findPackage","selectedPackage","isMicrolearning","_self$selectedPackage","hostname","host","isAdministrator","hideAnswersForLessons","canSeeAnswers","isMarketing","canPrintCourseOverview","canCreateXml","hasPreferredBaseproduct","preferredBaseproduct","canPrintCourse","canEditCourse","canAddAnswerPdfToCourse","canGotoAdminPanel","ewiseUserUuid","showMenuMyCompany","showMenuItemLms","showMenuAssistant","showMenuVTB","showMenuPortfolio","_self$baseProduct","_self$baseProduct$tit","toLowerCase","showBtnSubscribe","isDemoProduct","_self$baseProduct2","showNotificationsIcon","showCourseAccrEndDate","setLoginBydDecodeJWT","routes","RouterStore","createRouterState","createBrowserHistory","basename","HistoryAdapter","observeRouterStateChanges","intitialRouteName","setRouterState","reaction","setRouteIsEqual","changeMetaRoute","trackGaPageViews","setOverviewType","getOverviewType","onSnapshot","routeIsEqual","hydrate","addToBrowserHistory","_isEmpty","previous","base64","jsonPayload","decodeURIComponent","atob","charCodeAt","payload","getPrefProduct","preferred_base_product","sub_uuid","profile_picture","has_special_access","gdpr","accepted_gdpr","isVtbTeacher","is_vtb_teacher","dlxGate","is_lti_deeplinking","X4gJ2Kq","lti_user","setScrollingPosition","y","setLessonPlay","setLessonState","setResetToken","setNavbar","toggleDrawer","setMinDrawer","setGdpr","getGdprAss","setGdprAss","overviewType","setPrefProduct","setLtiSession","getLtiSession","isLtiSession","setEwiseBannerProducts","prefSessionBaseProduct","getEvaluation","setEvaluation","courseResultUuid","getPasswordForced","setPasswordForced","setResetPasswordForced","clearEvaluation","setLmsRecordsPerPage","records","getLmsRecordsPerPage","getFeedback1","showFeedback1","_self$lessonPlay","_self$lessonPlay$less","setSearchParam","searchparam","setSearchBaseProductParam","setSearchSuggestedParam","suggestedparam","getLesson","fetchLessonPlay","setWidgetDialogOpen","goTo","addIncludes","packageId","setSelectedPackage","setLessonDependsOnCourse","resetDependinCourse","logout","removeSaved","password","remember","resetState","invalidProducts","invalidPackages","changeUser","newusername","newPassword","username","hasActiveSubscription","productName","_self$subscriptions","productNameLowerCase","sub","ms","r","resetErrorState","hideToast","pop","showToast","marketingMessagesForCategory","position","marketing_messages","filteredMarketingMessages","marketingMessage","isRelatedToCategoryName","marketingMessagesForCourseNid","isRelatedToCourseNid","setCourseEdit","getNewCourseEdit","courseUUID","setTotalCoursesCompleted","showFilter","setFilter","hideFilter","coursesLoaded","tabClicked","setPrevTab","clearTabClicked","isSearching","fetchFaqByLabel","faq","postNewAuthor","newValues","patchPerson","respFileObj","newAvatar","hasAvatar","currentAvatar","uploadImg","respAuthorObj","fetchLmsAccess","fetchLMSAccess","lmsAccessData","fetchStudentDetail","startdate","enddate","fetchLMSStudent","clearStudentDetail","fetchCourseDetail","fetchLMSCourse","lmsCourseDetail","clearCourseDetail","clearSearchParam","isTrialProduct","_self$product","getTrialCourses","trialCourseIds","_self$trialCourses","RootStore","compose","named","GTMProvider","containerId","script","innerHTML","noscript","iframe","src","height","style","head","propTypes","PropTypes","isRequired","SessionPing","useStore","router","useRouterStore","doSessionPing","debounce","authDomain","credentials","WithStoreProvided","viewMap","makeInspectable","routerStoreHasLoaded","setRouterStoreHasLoaded","_store","StoreProvider","setGtmId","ModalProvider","Toast","RouterContext","RouterView","ProtectedRoutesMiddleware","protectedRoutes","routeFound","routeregex","currLocation","exec","getEwapi","fromState","toState","isInitial","newPackageId","newProductId","_response$data","getEwapiForEditors","_store$login","_response$data2","specialAccessGetPackages","isInit","isSpecialAccessRouteName","_response$data3","getSpecialAccessCourses","createEditStore","getProfile","checkUserSignedIn","prefProductId","checkSubscription","requiredSubscriptions","homeRoute","pattern","ThemeBrandTitle","beforeEnter","defCourseIntroductionRoute","altPatterns","sa","def","courseuuid","_currentCourse$lesson","_store$lesson_results","pageNo","onEnter","CourseIntroductionRoute","courseOverviewRoute","_toState$queryParams","_toState$queryParams2","_toState$params","selPackageId","fromPackageId","toPackageId","defCourseOverviewRoute","teacherDetailRoute","teachersOverviewRoute","_store$authors","authorName","isLessonPlay","canEdit","Tooltip","arrow","Button","className","onClick","toggleWidgetMenu","startIcon","EditIcon","useStyles","makeStyles","theme","display","flexDirection","alignItems","widgetForm","formControl","spacing","group","notActive","textAlign","paddingTop","lineHeight","useWidget","_store$lessonPlay","_store$lessonPlay$les","_store$lessonPlay2","_store$lessonPlay2$le","_widget$attributes","isDisabled","classes","pageIdMax","isPageMax","showFeedback2","widgetWeight","detectFeedback","allowedTries","mappedNotCompleted","mapPageWidgets2QwAnswers","pw","isCompleted","firstItem","mayNotAnswerQuestion","qwId","getLessonResultQuestion","questionResultClass","cmeVariable","_cmeVariable$children","_cmeVariable$children2","_isSpan$children$","isSpan","from","child","_child$classList","inProgress","PlayWidget","localProps","_widget$attributes2","_widget$attributes2$o","validateAnswer","showFeedback","buttonLabel","onSubmit","preventDefault","saveAnswer","_widget$attributes3","toastAnswerText","vertical","horizontal","disabled","ref","FormControl","FormLabel","sx","helpText","FormHelperText","dangerouslySetInnerHTML","__html","padding","textTransform","answerDisabled","seededShuffle","seed","shuffledArray","j","seededRandom","_question$last_respon","useTranslation","widgetAttributeQuestion","rotatingAnswers","setValue","shuffledOptions","showCorrectFeedback","option","_index","EditWidgetButton","isSaving","LinearProgress","left","touched","optionItem","respAnswer","chosenOption","RadioGroup","onChange","radioOptions","checked","FormControlLabel","control","Radio","textDecoration","paddingBottom","bg","false","true","_window$store","isValidated","setIsValidated","dontShowBg","widgetAttr","setValues","originalOptions","originalOption","apiIndex","lastResponseResult","fill","parsedOptions","lastChecked","showGlobalFeedback","Box","fontStyle","showSpecificFeedback","specificFeedback","html","correctFeedback","userIsIncorrectAnswers","userIsCorrect","responseValues","FormGroup","checkOptions","isChecked","showColor","getColor","setColor","Checkbox","originalValuesCopy","listIndex","handleChange","handleInput","inputValue","setInputValue","Input","rows","multiline","inputProps","_widgetAttr$options","_isRepeatReflection$","lastResponse","isReflect","nowTime","reflectionList","isRepeatReflection","_widgetAttr$widget_co","checkTime","timestamp1","timestamp2","isTimeDifferenceMoreThan30Seconds","Open","wrong","handleTouched","ComponentProps","randomItems","Typography","DragDropContext","onDragEnd","destination","source","reorder","startIndex","endIndex","removed","newOrder","isCorrectAnswer","Droppable","droppableId","isDropDisabled","providedDroppable","innerRef","droppableProps","Draggable","draggableId","isDragDisabled","providedDraggable","draggableProps","dragHandleProps","Paper","pprFMb","Grid","container","md","placeholder","shuffle","temporaryValue","randomIndex","currentIndex","correctAnswerByValue","correctAnswerArray","s","isCorrect","isEqual","sortItemsCorrect","correctSort","Sort","canTryAgain","tryAgain","showCorrectAnswer","ListItem","_ref3","provided","listItems","minHeight","_ref2","_state$bench","_state$bench2","dropLists","_items","bench","getDropLists","newState","move","srcListClone","destListClone","movedElement","maxHeight","overflow","pb","pr","Dropzone","convertToCorrectMatchAnswer","correctAnswer","itemsAsCorrectMatchObject","defaultItems","isShuffle","defaultState","dragItems","DATA","flat","convertDefaultItems","questionLastResponse","newResponse","includeCorrectWrongOrderToLastResponse","matchItems","isAnswerCorrect","checkCorrect","_answer$current","_answer$current2","_answer$current2$benc","_answer$current2$benc2","_answer$current3","_answer$current4","_answer$current4$benc","_answer$current4$benc2","correctMatch","Match","showCorrectMatch","reactPlayerWrapper","reactPlayer","noPlayWrapper","transform","memo","allowedRetries","playerRef","videoUrl","Video","animation","Html","propOptions","setOptions","InputLabelProps","shrink","marks","decideUnitPos","sliderProps","valueLabelDisplay","SwapHoriz","xs","Slider","valueLabelFormat","formatWith","handleSliderChange","newValue","InputProps","isCurrency","startAdornment","InputAdornment","endAdornment","val","handleInputChange","isRangeQuestion","isInRange","inRange","isExact","answerIsCorrect","getOptionsFeedback","respAnswerFb","explanationTitle","explanationAnswer","Explanation","Numerical","PollVote","disable","mt","_store$lessonPlay$get","_store$lessonPlay3","fetchPollWidget","userHasAnswered","PollStats","handleClick","handleCancelVote","pollWidgetList","inputValues","setInputValues","fetchWordCloud","checkIfDuplicateExists","arr","size","text","colors","enableTooltip","deterministic","fontFamily","fontSizes","rotations","rotationAngles","scale","spiral","transitionDuration","gap","ReactWordcloud","wordCloudList","noValidate","pt","_","handleOnChange","newInput","borderRadius","getLogger","Check","HTML","Poll","Wordcloud","buildLessonPages","countQuestions","questionsAnswered","widgetCodes","page","apiHostname","filesHostname","parsedPage","doc","parser","parseFromString","classname","elClass","wrapper","htmlToDom","wrap","charAt","vraagkop","nextElementSibling","getTillcmeVariable","reverse","insertAdjacentElement","section","buttonClassList","courseListElement","querySelector","firstElementChild","innerText","cellSelector","parentTd","cls","tdSelector","tdElements","evaluate","XPathResult","ORDERED_NODE_SNAPSHOT_TYPE","cellClassMap","snapshotLength","tdElement","snapshotItem","spans","regexMatch","span","tag","classLabels","classText","classLabel","cell","updatedClassLabel","getElementById","parsePage","_lessonPlay$lesson","_lessonPlay$lesson2","_widget","showMissingWidget","questionResult","maxAttempts","active","feedback1","feedback2","PATH","DOMParser","ewPage","collapse","buttonSpan","scrollHeight","showFootnote","footnotelink","footnotebody","pageYOffset","offsetWidth","drawerWidth","getBoundingClientRect","resumebarHeight","newStyle","visibility","assign","hideFootnote","_start$nextElementSib","_start$nextElementSib2","_start$nextElementSib3","_start$nextElementSib4","_start$nextElementSib5","accEls","template","createSaveFunctionsMap","cmi5Client","interactionChoice","interactionSequencing","withoutChoices","interactionLongFillIn","interactionNumeric","interactionOther","interaction","testId","answers","correctAnswers","_choices","createCMI5VariablesGenerator","_widgetTransforms$wid","_widgetTransforms$wid2","_widgetTransforms$wid3","_widgetTransforms$wid4","_widgetTransforms$wid5","answerIds","widgetTransforms","correctAnswerIds","choices","exact","is_lti","max_question_retries","selections","saveSorted","resetfilterModel","removeSelection","multipleFilter","filters","results","filterCategory","filterAuthor","filterCompetence","filterBy","filterName","filteredData","coursesByAuthor","coursesByCompetence","coursesByStatus","totalCourses","_course$relationships","RelPackages","packagerefs","packageref","packageClicked","coursesByPackage","ewiselabels","addPackageRef","packageRef","setArray","RelBaseProduct","maximum_subscriptions","base_product","RelProduct","RelProducts","productrefs","productref","course_favorites","field_lms_groups","settingSource","updateCourseFavoritesState","setApiErrorState","stateName","errPage","persistCourseFavorites","courseFavorites","APIPersistCourseFavorites","_self$error","setLocalCourseFavorites","toggleFavoriteCourse","courseFavoritesArray","isCurrentlyFavorited","setSettingsSource","RelUser","Contract","promote","default_langcode","contract","customer","RelContract","subscription_status","guid","student","RelSubscription","is_accredited","LessonPlay","allQuestionWidgets","movement","direction","right","center","prevPage","selectedToc","pageList","isNextPageEnabled","isTocScroll","reload","isOpenWm","widgetMenuItem","jsonWidgets","allQuestionsAnswered","totalPages","highestSelectableToc","freeFlow","lastEnabled","canPageBeCompleted","reverseToc","wasNeighbourPage","isPageEnabled","isPageCompleted","_self$lesson_result$a","getValidPage","canFinishLesson","showResumeBar","waitIncreasePageNo","widgetsOnPageMax","isLti","_self$store","_self$store$lessonPla","_self$store$lessonPla2","_self$store2","_self$store2$lessonPl","_self$store2$lessonPl2","isChildPage","parentPageNo","childPageNo","foundParent","nestedToc","childPage","details","tocList","chapter","lr","answeredQuestions","widgetsOnPageMaxWithRelatedWidgetType","getFirstQuestionFromPageWidgets","firstQuestions","getQuestionWidgetRetries","_self$store3","_self$store3$lessonPl","_self$store3$lessonPl2","_self$store4","_self$store4$lessonPl","_self$store4$lessonPl2","showNoFeedBackForOneAnswer","showVisualFeedbackForOneAnswer","getQuestionWidgetProperties","lpQw","qwValues","foundWidget","qwRetries","qwWidgetCode","qwType","getLessonResultQuestionProperties","pageWidget","lrQuestion","lrValues","lrFoundWidget","lrId","lrTries","lrRetries","lrCorrect","lrLast_correct","pageWidgetQuestionProperties","pageWidgetAnsweredProperties","lessonplay","_lessonplay$pollWidge","_lessonplay$wordCloud","createPollWidgetList","pollWidget","newWidget","updatePollWidget2","_poll$pollData","_poll$pollData2","_poll$pollData3","widgetLinkId","pollData","newPollWidget","createPollWidget","newQuestionWidget","createQuestionWidget","resQuestionWidget","resQuestionWidgetRelPollNid","newQuestionWidgetId","createLessonContent","fetchedPollWidget","_lessonPlay$question_","existingWidgetIndex","qw","_poll$pollData4","_poll$pollData5","_poll$pollData6","_resQuestionWidget$re","_resQuestionWidget$re2","_resQuestionWidget$re3","updateQuestionWidget","resQuestionWidgetNid","existingPollIndex","editPollWidget","poll_options","patchQuestionWidget","questionWidgetId","hasRelatedPoll","_control$_formValues$","relPoll","pollLink","_formValues","relatedPoll","getDefaultValueLinkedPoll","_control$_formValues$2","iniValue","internalTitle","isLinkedPoll","createWordCloudWidget","wordCloudWidget","wordCloud","updateWordcloudWidget","_values$wordcloudData","_values$wordcloudData2","_values$wordcloudData3","wordcloudData","newWordcloudWidget","createWordcloudWidget","fetchedWordcloudWidget","_values$wordcloudData4","_values$wordcloudData5","_values$wordcloudData6","existingWordCloudWidgetIndex","existingQuestionWidgetIndex","addWordCloudWidget","_values$relationships","_values$relationships2","patchWidget","wordCloudWidgetDataEdit","existingWordCloudIndex","_wordCloudWidget","_wordCloudWidget2","_wordCloudWidget3","_wordCloudWidget4","_wordCloudWidget5","newWordCloudWidget","questionWidgetData","lessonTitle","lessonContentData","createWordCloudQuestionWidget","questionwidget","inputRequired","wordCloudWidgetData","getDefaultValueLinkedWordCloud","_lessonPlay$wordCloud","shuffleQuestionWidget","checkPagesCompleted","groupMap","shuffledQuestionWidgetsArray","setNewArray","updateWidget","setIsSaving","createCmi5Client","resp","lms_id","registration_id","session_id","agent","previousValue","currentValue","loaded","cmi5","Cmi5","initialize","getUpdatedFormData","uppercaseWidgetType","letter","_self$pollWidgetList","_self$pollWidgetList$","relPollOptions","setContent","differentCourse","belowCurrentPage","resetLessonToPage","setPageIdMax","setSelectedToc","reverseTocItem","setTocScrollInProgress","getNeighbourLocation","currentLocation","setLocation","setMoveNewPage","newPageNo","locationOnPage","isPageNotSaved","isFullFreeflowPageCompleted","savePageStatus","setPageMovement","_widget$attributes3$w","_widget$attributes4","_widget$attributes4$w","timeStamp","savePageNo","findSameWidget","setReflectionList","finishLesson","postFinish","finishCourse","_response$data$meta","finishCourseResult","retrieveEvaluation","cuuid","fetchEvaluationByUser","saveCmi5Answer","onStartCourse","onStartLesson","onStartPage","pageId","onAnswerQuestion","saveFunction","variables","variablesGenerator","onNextPage","onFinishLesson","onNextLesson","onFinishCourse","onLeaveLesson","onLeaveCourse","again","resetLessonResult","setTest","resetToPage","lessonData","postAskQuestion","userQuestion","city","houseNumber","mobilePhone","street","zipcode","housenumber","mobile_phone","about_course","saving","getLessonPlay","isFailed","isCourseFailed","_play$lesson_content","_play$lesson_content$","play","restartLessonPlay","errorCode","specialAccessRoute","SpecialAccessCourseIntroductionRoute","_store$login2","ewiseUserHasPrefBaseproduct","_store$courseResults","_store$courseResults2","specialAccessLessonPlayRoute","adminDashboardViewRoute","onlineCoursesViewRoute","offlineCoursesViewRoute","editCourseViewRoute","_store$courseEdit","_store$courseEdit$spe","responds","menu","getSpecialAccessMenu","logError","showToastRouteError","setTab","isFromStateRouteLessonPlay","hasQueryParamsTab","selectedTab","defEditCourseViewRoute","menuItem","fetchAdminMenu","course_container_id","adminCourseLessonPlayRoute","_store$courses","ewapiCourse","viewCoursesRoute","isSaved","prefDashboard","routerParams","courseSearchBarViewRoute","subscriptionsRoute","settingsRoute","prepareCourseView","profileRoute","certificateRoute","getCertificates","BrandTitle","loginRoute","switchBackRoute","lessonPlayRoutes","newEwapiCourse","reloadAdminLesson","defLessonPlayRoutes","_window$store$lesson_","_window$store2","_window$store2$params","_lastLesson$","_lastLesson$2","_lastLesson$3","lastLesson","lastLessonPage","goToPage","evaluationLesRoute","termsLesRoute","feedbackLesRoute","assistantManagementRoute","lmsBeforeEnter","org_id","isEwiseLabel","isValid","parseISO","currentDate","currentYear","startDate","getMonth","setQueryParams","lmsDashboardRoute","_store$LmsDashboard$f","_store$LmsDashboard","lmsStudentsRoute","lmsStudentDetailRoute","onExit","lmsCoursesRoute","lmsCourseDetailRoute","lmsOrganisationsRoute","errorPageRoute","notFoundPageRoute","vtbRoute","attendanceSheetVtbRoute","curriculumDashboardRoute","isArchive","offset","limit","curriculumStagesRoute","_store$curriculum","_store$curriculum$dat","_store$curriculum2","_store$curriculum2$da","_store$curriculum2$da2","faqRoute","faq2Route","faq3Route","articleRoute","colophonRoute","searchOverviewRoute","convertUrlEncodedString","getEwapiSearch","oldSearchParam","oldBaseProductId","oldSearchAttempt","hasParamChanged","hasBaseProductIdChanged","hasSearchAttemptChanged","defEditCourse","viewCourses","dashboard","onlineCourses","offlineCourses","courseSearchBar","adminCourseLessonPlay","terms","faq2","faq3","article","useEwapi","setResponse","setError","loading","setLoading","Store","isAdmin","urlCourses","urlSelectProduct","doFetch","cssCheckIcon","SelectProduct","expanded","setExpanded","save","setSave","setProduct","field_preferred_product","getPatchUser","Products","profs","currentProduct","curProduct","bpId","check","CheckIcon","getCurrentProduct","Accordion","defaultExpanded","panel","isExpanded","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","labelPlacement","selectProductViewMap","selectProduct","MainLayout","subtitle","SubscribeTab","SvgIcon","viewBox","AccountSidebar","mobileBreakpoint","orientationChange","tabItems","PersonIcon","nestedTable","CertificateTab","tabSettings","SettingsIcon","TabComponent","orientation","indicatorColor","tabs","sm","lg","xl","border","getLastEightYears","years","Certificates","_certificates$meta","_certificates$meta2","_certificates$data","_certificates$meta3","_certificates$meta4","setCertificates","certificatesLoading","setCertificatesLoading","selectedYear","setSelectedYear","setPage","startTimestamp","endTimestamp","completedDateEnd","possibleFilterYears","day","CircularProgress","fullWidth","InputLabel","Select","labelId","MenuItem","accreditation_unit_singular","accreditation_unit_plural","toLocaleDateString","defPoints","parseFloat","toFixed","getPoints","translatePoints","splitPoints","duration","GetTimeLabel","Card","CardContent","Divider","LoadingButton","prevLoading","newLoading","downloadCertificate","handleDownload","endIcon","DownloadIcon","loadingPosition","Pagination","ceil","CertificatesViewMap","Accountv2","MyDatePicker","forwardRef","textFieldProps","otherProps","Controller","shouldUnregister","render","LocalizationProvider","dateAdapter","AdapterDateFns","DesktopDatePicker","inputFormat","renderInput","helperText","DateIcon","fillRule","clipRule","stroke","strokeWidth","strokeLinecap","strokeLinejoin","ImageUploader","onChangeProp","editMode","files","setFiles","htmlFor","Avatar","alt","accept","reader","FileReader","dataReader","fileDetails","readAsDataURL","readAsBinaryString","onloadend","Autocomplete","multiple","freeSolo","renderTags","getTagProps","Chip","rest","MySelect","MyCheckbox","MyAutocomplete","MyTextField","optionsObj","excludeEmptyString","initialValue","matchOptions","validate","FormProfileValidation","initialValues","shape","nullable","originalValue","_parts$","_parts$2","_parts$3","parts","monthIndex","hours","minutes","seconds","changedValueMatches","transformNullable","conditionalFields","Advocaat","Accountant","Fiscalist","Notaris","Huisarts","Apotheker","Tandarts","Fysiotherapeut","Mondhygiënist","Apothekersassistent","Wijkverpleegkundige","Default","AccreditationFieldsMsg","_conditionalFields$pr","msgArray","_store$profile","_store$profile2","_store$profile2$attri","alertMsg","setAlertMsg","setChecked","profileLoading","setProfileLoading","userPicture","photo","gender","validationSchema","formProfileValidation","zohoId","initialsCheck","currentProfession","noRegistrationLabel","hasConditionalFields","extraFields","addUserFields","brandTitle","uw","u","U","scrollTo","renderProfileFields","trigger","fieldName","_conditionalFields$pr2","fieldDetails","profField","errorField","ProfileFields","autoFocus","leading","trailing","opacity","cursor","bottom","Alert","severity","AlertTitle","Form","dirtyFields","getdirtyValues","_store$user","dirty","Badge","overlap","anchorOrigin","badgeContent","avatar","Mail","OpenPickerIcon","Calendar","passwordResetValidation","current_password","new_password","repeat_password","ProfileExtras","forced","setOpen","showCurrent","setShowCurrent","showNew","setShowNew","showConfirm","setShowConfirm","useTheme","fullScreen","useMediaQuery","down","handleStrength","strength","strong","medium","Dialog","DialogTitle","_response$data$errors","_response$data2$error","_response$data2$error2","ResetPassword","_response$data3$error","_errors$current_passw","_errors$repeat_passwo","reset","watch","IconButton","edge","VisibilityOff","Visibility","Stack","DialogActions","ResetOnboarding","_response$data$attrib","userUUID","useAPI","setOnboarding","field_skip_tour","showResetOnboarding","setShowResetOnboarding","ProfileContainer","setForced","ProfileViewMap","Settings","ToggleColorMode","SettingsViewMap","SubscriptionViewMap","toolbar","overflowHidden","grow","flexGrow","logoWrapper","marginLeft","logoBackground","outline","zIndex","Header","AppBar","Toolbar","noWrap","Logo","maxWidth","flex","formEvaluationValidation","evaluation_question_1","evaluation_question_1b","when","is","otherwise","evaluation_question_2","evaluation_question_2b","evaluation_question_3","evaluation_question_4","evaluation_remarks_1","evaluation_remarks_2","evaluation_question_slpo_1","evaluation_question_slpo_2","evaluation_question_slpo_3","evaluation_question_slpo_4","rating","numberRating","hoursSelect","formContainer","radioGroup","EvaluationForm","_lessonPlay$lesson_re","_lessonPlay$lesson_re2","_lessonPlay$lesson_re3","_lessonPlay$lesson_re4","courseResultsId","useCallback","courseResultEvalBck","isSchoolleiders","beoordeel","geeft","heeft","Heeft","heeftHebt","vind","paddinBotttom","professionUuid","course_result_uuid","_errors$evaluation_qu","_errors$evaluation_qu2","_errors$evaluation_qu3","_errors$evaluation_qu4","_errors$evaluation_qu5","_errors$evaluation_qu6","_errors$evaluation_qu7","_errors$evaluation_qu8","_errors$evaluation_qu9","_errors$evaluation_qu10","_errors$evaluation_re","_errors$evaluation_re2","MyRadioGroup","minRows","EvaluationViewMap","Lazy","noLayout","download","handleClose","noRegistrationNumbers","setNoRegistrationNumbers","isSubmitting","setIsSubmitting","userFields","showEwiseTitle","scroll","borderColor","WebkitTextFillColor","isDirty","_errors$field_last_na","_errors$field_first_n","_errors$field_last_na2","_errors$field_birthda","DialogContent","DialogContentText","columnSpacing","LastStep","_store$lessonPlay$les2","_store$selectedPackag","_store$selectedPackag2","setLink","setDisabled","kunt","answersPdf","setAnswersPdf","isAccredited","isNotariaatPackage","hasRbNumberField","showPopup","setShowPopup","_store$lessonPlay3$le","date1","date2","differenceInMinutes","openLtiForm","setOpenLtiForm","loadCompleted","_completedCourse$data","_completedCourse$data2","completedCourse","getAnswerPdf","answers_pdf","fetchCertificate","showLtiForm","LtiUserForm","handleCloseLtiForm","CardActions","ArrowBackIcon","CoursePointsAlert","btnBackCaption","TermsViewMap","ScorePage","_lesson_result$attrib","_store$lessonPlay3$le2","_store$lessonPlay4","_store$lessonPlay4$co","_store$lessonPlay5","_store$lessonPlay5$le","_store$lessonPlay5$le2","_store$lessonPlay6","_store$lessonPlay6$le","_store$lessonPlay6$le2","courseFeeback","fail","isCourseCompletedInLessThan30Minutes","lessonLength","sequenceNo","cantDoAnotherAttempt","ww","minimumScore","handleSucces","marginRight","nextLessonId","FeedbackViewMap","labelLogo","customLogo","transition","subMenu","setColorMenuIcon","isSelected","isCurrentRoute","isActive","mainMenu","pId","subMenuName","sxPackageList","light","urlEwapi","MenuList","defaultSubMenus","class","icon","AdminPanelSettingsIcon","CloudOffIcon","marketingSubMenus","subMenus","LoadingContent","menuListItems","filteredPackageData","preferred_package","showList","placement","dialogmenulist","PlaylistAddIcon","List","dense","borderBottom","ListItemButton","ListItemIcon","substring","ListItemText","sxListItemText","ExpandLess","ExpandMore","Collapse","in","unmountOnExit","disablePadding","_subMenu","handleMenuSelect","whiteSpace","ToolbarAccount","anchorEl","setAnchorEl","iconButton","Popover","onClose","transformOrigin","slotProps","paper","paperDrops","Link","isStaging","rel","elevation","bgcolor","close","toastType","bgColor","ClickAwayListener","onClickAway","minWidth","CloseIcon","ToastContainer","Transition","Slide","PackageListDialog","descriptionElementRef","descriptionElement","focus","packageMenu","TransitionComponent","keepMounted","dividers","tabIndex","sxMenuItem","profession_name","_store$courseEdit2","_store$courseEdit2$cu","_store$courseEdit3","_store$courseEdit3$cu","_store$courseEdit3$cu2","packageTabTitle","isEdit","pageTitle","breadCrumbTitle","headerTitle","adminLeftmenu","Drawer","sxLogoContainer","cssMain","DrawerHeader","cssHeaderBar","cssToolBarLeft","ChevronLeftIcon","ChevronRightIcon","cssBreadCrumbs","cssHeaderTitle","cssToolBarTools","sxLanguageBox","sxFlags","flagsPath","openedMixin","transitions","easing","sharp","enteringScreen","overflowX","closedMixin","leavingScreen","up","styled","mixins","MuiAppBar","shouldForwardProp","drawer","MuiDrawer","_ref4","flexShrink","boxSizing","NotFound","PRIMARY_MAIN","xmlns","x1","x2","y1","y2","gradientUnits","stopColor","fillOpacity","xlinkHref","convertIsoDate2Date","isoDate","convertEpochTimestamp","epochTime","getLessonContent","getTotalWidgets","isOdtFile","_lessonContent$relati","_lessonContent$relati2","_lessonContent","lessonTableQuestionWidgets","grouping","searchFieldVariant","pageSize","emptyRowsWhenPaging","showTitle","header","detailPanelType","pageSizeOptions","cellStyle","defaultSort","feedbackTableOptions","debounceInterval","filtering","paginationType","selection","maxColumnSort","rowStyle","align","Backdrop","tl","dateDiff","tillDate","utc1","UTC","getDate","utc2","convertDate","mapData2TableData","course_nid","course_categories","course_categories_total","course_categories2","course_competences","course_online","course_validFrom","course_validEnd","course_validDiff","course_container_title","course_container_total","course_reUsed","lesson_container_profession","course_course_status","special_access_short","filterStatus","addTooltipsToData","rowData","column","tooltip","sxEllipse","addLabelsToTitle","courseStartDate","labelUpComing","labelDraft","textOverflow","DataColumns","lookup","renderMap","addRenderFunctionsToColumns","_linkCourse$link","linkCourse","setLinkCourse","ToastLinkedCourses","unlinkDialog","btnDelete","btnCancel","linkedCourses","onDelete","handleOpenDialogLinkedCourse","course_container_nid","sxLinkedCourses","Popper","sxPopper","gutterBottom","handleCloseDialog","indexCourse","indexCourseContainer","handleDeleteLinked","LoaderWithBackdrop","SectionTitle","MaterialTable","onRowClick","handleClickRowCourse","columns","InfoCardFavo","setPrefDashboard","saved","isPrefDashboard","sxPrefDashboard","StarIcon","sxInfoCard","sxInfoCardPointer","sxInfoCardFavo","sxGridItem","sxInfoCardText","draftCourses","expectedCourses","newCourses","updateCourses","redirectCoursesClick","paddingLeft","InfoCardText","days","setDays","endingCoursesInDays","sxListText","sxBtn","sxAvatar","inputMode","newDays","rowGap","paddingRight","handleClickCourse","uniqueCourses","_deleteCourse$link","anchorPopper","setAnchorPopper","setDeleteCourse","ToastDraftCourses","tableColumns","course_created","lesson_container_changed","handleOpenDialogDeleteCourse","noCourses","sxBoxContainer","thirdSortClick","handleNewCourseModal","sxNewCourseBtn","AddCircleIcon","MyAutocompleteTaxonomy","fRef","objOptions","setIsSearching","cat1","endsWith","cat2","parentId","output","fieldState","autoComplete","isOptionEqualToValue","getOptionLabel","filterSelectedOptions","tagValue","correctTag","inputRef","newCourseValidation","field_course_category","sxGrid","defaultValues","setSaving","_values$attributes$fi","_values$attributes$fi2","_values$attributes$fi3","_values$attributes$fi4","_store$courseEdit$cur","courseCategory","_errors$attributes","_errors$attributes2","_errors$attributes$ti","_errors$field_course_","UndoIcon","columnGap","disableElevation","ClearIcon","ArchiveIcon","radioGroupRef","TransitionProps","onEntering","handleEntering","NewCourseForm","rightHover","storageKey","showSidebar","sxToggleBtn","KeyboardDoubleArrowRightIcon","KeyboardDoubleArrowLeftIcon","Dashboard","ewapiCourseList","setDisplay","_response$data$result","sxBoxMain","InfoCards","BtnShowSidebar","sxJustifyContent","BtnNewCourse","MyDraftCourses","DashboardTable","sxBoxEnding","ListEndingCourses","NewCourseDialog","adminDashboardViewMap","adminDashboardCourses","AdminCourseLayout","noPaper","AdvancedSelectLabel","menuList","setLabelFilter","setLabel","uniqueLabels","labelFullName","po","pe","ewise","cme","m","ListSubheader","copyValues","ccId","subMenuId","subMenuItem","handleCopyActions","profId","setSearch","prefPackage","setPrefPackage","setFiltered","labelFilter","txtNoSelAction","btnMain","btnAll","filterPlaceholder","sxBtnGroup","curPackageIsMicroLearning","otherContainers","profession_id","ToggleButtonGroup","exclusive","handlePrefPackages","ToggleButton","OutlinedInput","SearchIcon","handleClickOpen","fromContainerNid","listType","isPublished","isOnline","courseCount","_course$course_contai","linked","courseContainers","evt","selectedRow","actionsColumnIndex","columnsButton","localization","searchPlaceholder","MTableToolbar","defaultActionMenu","LinkIcon","ContentCopyIcon","AutoAwesomeMotionIcon","marketingActionMenu","actionMenu","sxLiActive","catOptions","catOptionsObj","cat","txtNoSelectedCourse","txtNoCategoryMandatory","categoryValue","disablePortal","CopyCourseContext","sxMenuContainer","sxBoxTitle","alignSelf","sxAppBar","sxDialogtitle","ml","sxMainContent","sxGridContainer","sxAvatar1","sxAvatar2","sxAvatar3","toggleAdvancedScreen","defaultCopyAction","profession_uuid","defaultCopyValues","copyAction","setCopyAction","course_container_profession","profIdCourseContainer","actionType","dialogTitle","selActionTitle","selPackageTitle","selCourseTitle","noCourse","borderRight","AdvancedCourseActions","AdvancedCourseMenuList","AdvancedCourseTables","AdvancedCourseCategories","toggleCopyDialog","formats","setFormats","sxDialog","iconBtn","toggleBtnGroup2","handleFormat","newFormats","dialogActions","dialogActionsBox","SaveIcon","grey","toggleBtnGroup","flexBasis","clickHandler","sxFilters","Switch","columnDef","onFilterChanged","selectedVal","setSelectedVal","defaultFilter","displayEmpty","OpenNewEditWindow","sxCourseNid","pathName","origin","openNewEditWindow","Shortcut","initialTableData","initialTableColumns","tableRef","showBackDrop","setShowBackDrop","openAdvancedScreen","setOpenAdvancedScreen","openCopyDialog","setOpenCopyDialog","setTableColumns","defaultOptions","numberOfPagesAround","searchFieldStyle","showGroupingCount","doubleHorizontalScroll","togggleAdvancedScreen","togggleCopyDialog","optionKey","dataManager","onFilterChange","useMemo","ContentCopy","DeleteIcon","isFreeAction","AutoFixHigh","selectStatus","selectExpected","renderedTableColumns","filterComponent","TableSelectFilter","sxAdminEwpaiTables","handleEditCourse","stopPropagation","isLinked","headerStyle","Container","TableFilterItems","Groupbar","MTableGroupbar","onColumnDragged","sourceIndex","destinationIndex","newColumns","onChangeColumnHidden","columnChange","col","AdvancedCourseScreen","CopyCourseDialog","table","warning","OnlineCourses","isLocalStorageColumns","initialColumns","EwapiTable","OnlineCoursesViewMap","adminOnlineCourses","OfflineCourses","OfflineCoursesViewMap","adminOfflineCourses","MyMultiSelect","configTextfield","UploadButton","uploading","setUploading","pdfTitle","setPdfTitle","_data$data","_data$data$result","_data$data2","_data$data2$result","_response$data$data","_response$data$data$r","deleteUrl","handleDeletePdf","_response$data2$data","_response$data2$data$","upload","uploadUrl","_response$data3$data","_response$data3$data$","_errors$course","_errors$course$attrib","_errors$course$attrib2","_store$courseEdit$acc","_store$courseEdit$acc2","_errors$course2","_errors$course2$attri","_errors$course3","_errors$course3$attri","_errors$course3$attri2","_store$courseEdit2$ac","_store$courseEdit2$ac2","_store$courseEdit3$ac","_store$courseEdit3$ac2","_store$params","_errors$course4","_errors$course4$attri","_errors$course4$attri2","_errors$course4$attri3","_errors$course5","_errors$course5$attri","_errors$course5$attri2","_errors$course5$attri3","_errors$course6","_errors$course6$attri","_errors$course7","_errors$course7$attri","_errors$course7$attri2","_errors$course8","_errors$course8$relat","_errors$course9","_errors$course9$relat","_errors$course9$relat2","restProps","clearErrors","sxNoPM","watchStartDate","useWatch","watchEndDate","watchStatus","watchOnline","areDatesSet","is1daySet","setRequired","rowSpacing","MyNumberfield","field_accr_unit_plural","limitTags","convertBlobString2File","blobString","Uint8Array","Blob","image","Image","createObjectURL","resetField","buttonName","watchImg","isSetImgWH","onPaste","clipboardData","imageFile","getAsFile","processImage","reader1","shouldDirty","setImageSize","headerPhoto","coursePhoto","imageExtern","getSize","pointerEvents","CloudUploadIcon","newFiles","onload","mediaLibraryImage","ref2","textShadow","isImgExtRequired","setIsImgExtRequired","isImgIntRequired","setIsImgIntRequired","watchImgInt","watchImgExt","imgSize","sxTabImages","OpenInNewIcon","getValue","watchVimeo","stringHasNumbers","matchNumbersInString","vimeoUrl","setUrl","isErrorPlayer","setErrorPlayer","searchTerm","setSearchTerm","urlVideo","setUrlVideo","debouncedSearchTerm","useDebounce","ReactPlayer","playing","volume","onError","onReady","multiSelect","includeNid","searchMsg","newOptionsData","getOptionKey","loadingText","indexedDB","_errors$course2$attri2","_errors$lessonContain","_errors$lessonContain2","_errors$lessonContain3","_errors$lessonContain4","_errors$lessonContain5","_errors$lessonContain6","_errors$lessonContain7","_errors$lessonContain8","getValues","showPodcast","setShowPodcast","watchPodcast","isValidPodcast","Editor","form","handleShowPodcast","AutocompleteTags2","VideoPlayer","getFieldState","useIsComponentMounted","isComponentMounted","PlayCircleIcon","Menu","MenuListProps","_deleteLesson$attribu","deleteLesson","setDeleteLesson","isExpected","hasMoreThanOneLesson","disableLessonDelete","tableUpdate","handleGotoPlay","pageNr","labels","lessonType","firstAnswerNofeedback","firstAnswerVisualfeedback","minimumScore2ndTry","OdtUploaded","TableContainer","sxTable","Table","TableHead","TableRow","TableCell","TableBody","colSpan","row","DescriptionIcon","BlockIcon","MenuShowInPlayer","gotoPlay","LessonTabStudents","usersCount","setUsersCount","columnFilters","setColumnFilters","exportFileName","filterSelectOptions","readableBoolean","readableDate","timestamp","tableSingleFilter","SingleValueFilter","tableOptions","defaultOrderByCollection","orderBy","orderByField","orderDirection","sortOrder","draggable","exportMenu","exportFunc","cols","downloadExcel","sheet","tablePayload","sorting","start_date","customExport","can_finish","is_trial","sxTableCourseUsersInprogress","orderByCollection","totalCount","totalRecords","getData","emptyDataSourceMessage","newFilters","compareOption","compareValue","TableTotal","propsDetail","mb","detailPanelItems","preTitle","mapFields","CourseTabFeedback","tableColumnsDefault","relationPath","tableColumnsEnd","specialOp","sxTableFeedback","querySearch","buildQuerySearch","queryFilters","BuildQueryFilters","filterItems","currentUser","buildSpecialFilter","valueArray","op","convertFilterValue","paging","filterStart","q1b","q2b","r1","r2","hasComments","_event","_rowData","togglePanel","detailPanel","FeedbackTableDetail","lessonTypes","noFeedback","visualFeedback","sxCustomQuickEditor","widgetButtons","available","ToastWidgetSubmit","keyPrefix","numericalProps","defaultVideoQuestionWidgetData","defaultHtmlQuestionWidgetData","defaultRadioQuestionWidgetData","defaultMatchQuestionWidgetData","defaultSortQuestionWidgetData","defaultOpenQuestionWidgetData","defaultNumericalQuestionWidgetData","PollSchema","WordcloudSchema","RadioSchema","newPollQuestion","newWordCloudQuestion","openWidgetDialog","clonedRowData","_clonedRowData$attrib","detailPanelTitle","detailPanelSubText","buttons","sxDetailPanel","btn","alignItens","DialogWidgetsTabelNoOdt","sxFlexColumn","DoNotDisturbAltIcon","_response$data3$relat","_response$data3$relat2","_response$data3$relat3","showLessonItems","fetchUrl","useJsonApi","buttonsInLesson","setButtons","_response$data$attrib2","_response$included","_file$","_file$$attributes","_file$2","_file$2$attributes","_file$2$attributes$ur","_response$data2$attri","_response$data2$attri2","setFile","fileUri","lessonButtons","getPlaceHoldersFromLesson","openEditWidgetDialog","copy","LoadingLinearProgress","DialogWidgetsTableNoOdt","restButtons","restButtonsInLesson","widgetsCodes","uniqId","randomUUID","tableTitle","customStyling","idSynonym","ArrowCircleUpIcon","dividerIconSize","checkedIcon","ArrowCircleDownIcon","sxMtContainer","DialogWidgetsTableDetailPanel","sxToolbarContainer","pading","pre","LessonEditForm","_store$courseEdit4","displayFormFieldContainer","odtFileName","setOdtFileName","fileNameOdt","LessonToast","LessonFormLabels","selectedLesson","getSelectedLesson","getSelectedLessonContent","_selectedLesson$relat","_selectedLesson$relat2","_selectedLesson$relat3","defaultLessonContent","isLessonContentId","isLessonContent","getSelectedLessonInitialFormValues","lessonDefaultValues","setAttributes","_values$attributes","_errors$attributes3","_errors$attributes4","_errors$attributes5","sxDialogContent","sxFormFieldContainer","labelplacement","OneAnswerGroup","sxBoxFileUpload","FileUpload","CloudDownloadIcon","DialogWidgetsTable","sxLoader","sxLessonDialog","_previewValues$lesson","_previewValues$lesson2","_previewValues$lesson3","_previewValues$lesson4","previewValues","CourseSubHeaders","hasVimeoId","sxVideoWrapper","controls","_previewValues$lesson5","_previewValues$lesson6","Skeleton","sxPreviewGradient","_previewValues$course","_previewValues$course2","wordWrap","_getLesson$attributes","_previewValues$course3","_previewValues$course4","_store$courseEdit4$ac","_store$courseEdit4$ac2","minScore","mainPoints","xtraPoints","isExtraPoints","certificationPoints","attrPrimaryText","primaryTypographyProps","Quiz","authorUrl","sxAuthorTitle","CourseAuthor","handleClickDialog","previewDialog","CourseImageHeader","CourseInformation","CoursePodcast","CourseVideo","CourseGoals","CourseAuthors","CourseImage","CourseDetails","optionType","useFieldArray","indexCorrectAnswer","checkedOption","setCheckedOption","watchOptions","AddIcon","_watchOptions$index","optionIndex","shouldTouch","sxFlexColumnGap","HighlightOffIcon","_store$courseEdit$set","isPollWordcloud","preFix","setWidgetData","FormDefaultWidgetsAttributes","FormWidgetOptions","FormActionBar","FormVideoWidget","FormOpenQuestion","FormHtmlWidget","FormSortQuestion","FormSortOptions","optionsIndex","startPosition","listStyleType","FormMatchMatches","_widgetData","_errors$attributes2$t","FormMatchOptions","FormNumericalQuestion","selItems","txtProps","placeHolder","numProps","sxSelect","_response$data$course","endPoint","useCustomEwapi","isPackageMenuList","proffesion","professionName","showColumnSortOrder","_errors$poll","_errors$poll$attribut","_errors$poll2","_errors$poll2$attribu","_errors$poll$attribut2","_errors$poll3","_errors$poll3$attribu","_errors$poll3$attribu2","_errors$poll4","_errors$poll4$attribu","_errors$poll4$attribu2","_errors$poll$attribut3","_errors$poll$attribut4","_errors$poll$attribut5","_getValues","_getValues$poll","_getValues$poll$attri","edit","setEdit","sxNewPoll","sxOptionContainer","_getValues2","_getValues2$poll","_getValues2$poll$attr","_getValues3","_getValues3$poll","_getValues3$poll$attr","pollOptions","SearchPollWordcloudWidgets","_defaultPollData$attr4","_defaultPollData$attr5","formValues","errorSearchTxt","_typeNode","defaultPollData","_defaultPollData","_defaultPollData$attr","_defaultPollData$attr2","_defaultPollData$attr3","proffession","pollWidgetData","setPollWidgetData","searchResult","_item$attributes","_item$attributes$body","_item$relationships","_item$relationships$p","_item$relationships$p2","_item$relationships$p3","setNewWidgetValue","widgetLinkData","renderOption","_errors$poll4$attribu3","watchQuestion","alignContent","FormPollWidget","loadingData","setLoadingData","tabItem","setTabItem","defaultFormData","setDefaultFormData","iniPollQuestion","isNewQuestion","newFormPollQuestion","_iniPollQuestion$rela","_iniPollQuestion$rela2","_iniPollQuestion$rela3","pollWidgetId","_getCourseContainerProfession","tabListItems","_newWidget$poll","_newWidget$poll$relat","_newWidget$poll$relat2","_newWidget$poll$relat3","_errors$question","_errors$question$attr","_errors$question2","_errors$question2$att","_errors$question$attr2","_getValues2$question","_getValues2$question$","_getValues2$question$2","_getValues2$question$3","_getValues4","_getValues4$poll","_getValues4$poll$attr","_getValues5","_getValues5$poll","_getValues$poll2","_getValues$poll2$attr","_getValues$poll3","_getValues$poll3$attr","_getValues$poll4","_getValues$poll4$attr","_getValues$poll5","_getValues$poll5$attr","FormPollWidgetNew","borderTop","ArrowCircleRightIcon","TabContext","sxTabContext","sxTabContextBox","TabList","Tab","TabPanel","FormPollWidgetShow","FormPollWidgetEdit","pollWidgetOptions","FormPollWidgetPreview","WidgetInCourses","setTableData","blacklists2","blacklists","selectBlackList","sxBlackListTable","_resp$data","_resp$data$errors","fetchEwapiData","encodeURIComponent","_resp$data2","_resp$data2$errors$","tableDataCopy","updateBlackList","blacklist","RemoveIcon","sxStartIcon","_getValues2$wordcloud","_errors$wordcloud","_errors$wordcloud$att","_errors$wordcloud2","_errors$wordcloud2$at","_errors$wordcloud$att2","wordCloudWidgetId","sxCreateNewWordcloud","_getValues$wordcloud","_getValues$wordcloud$","_getValues2$wordcloud2","_getValues3$wordcloud","_getValues3$wordcloud2","_getValues4$wordcloud","_getValues4$wordcloud2","showFields","sxQuestionWidgetFields","FormWordCloudWidget","iniWordcloudQuestion","newFormWordCloudQuestion","_iniWordcloudQuestion","_iniWordcloudQuestion2","_iniWordcloudQuestion3","wordcloudWidgetId","_newWidget$wordcloud","_newWidget$wordcloud$","_newWidget$wordcloud$2","_newWidget$wordcloud$3","_getValues$wordcloud2","_getValues$wordcloud3","_getValues$wordcloud4","_getValues$wordcloud5","_getValues$wordcloud6","_getValues$wordcloud7","_getValues$wordcloud8","_getValues$wordcloud9","_getValues$wordcloud10","_getValues$wordcloud11","_getValues$wordcloud12","_getValues$wordcloud13","FormWordCloudWidgetNew","FormWordCloudWidgetShow","FormWordCloudWidgetEdit","FormWordCloudWidgetPreview","WordCloudBlackList","EditWidgetDialog","editWidget","editWidgetAction","formType","FormRadioQuestion","FormMatchQuestion","editDialog","BtnLinkedCourse","_store$routerStore","_store$routerStore$ro","_store$routerStore$ro2","btnLink","btnTooltip","btnTitle","dialogMesssage","dialogBtnCancel","dialogBtnDelete","handleDelete","indexCurrentCourse","previousOpen","LinkOffIcon","Grow","VisibilityIcon","_store$courseEdit$cur2","_store$courseEdit2$co","_store$courseEdit2$co2","_store$courseEdit2$co3","_store$courseEdit2$co4","_store$courseEdit2$co5","targetGroup","createCsvFile","csv","createCsvData","_course$attributes","_lessonContainer$attr","_course$attributes2","_lessonContainer$rela","_lessonContainer$rela2","_course$relationships2","_lessonContainer$attr2","_lessonContainer$attr3","_lessonContainer$rela3","_course$relationships3","_course$relationships4","_course$attributes3","_course$attributes4","_course$attributes4$f","_course$attributes4$f2","csvData","courseid","coursename","extralabel","targetgroup","registers","reg","courseonline","dateoffline","functiongroup","educationtype","csvBlob","click","revokeObjectURL","BtnReUsedCourse","_courseEdit$currentCo","_lessonContainer$rela4","_lessonContainer$rela5","reUsedText","lessonContainerProfName","sxAlertReUsed","overRideEdit","handleOverRideEdit","BtnCopyToCourse","toCourseUrl","isFirefox","navigator","userAgent","clipboard","writeText","copyToClipboard","ContentPasteIcon","StyledMenu","alpha","selectedOpacity","applyStyles","isEwise","KeyboardArrowDownIcon","disableRipple","BtnCopyToCourseLink","my","BtnPreviewIntroduction","BtnDownloadAsCsv","EditCourse","setOverRideEdit","setPreviewValues","_lesson_container$dat","_lesson_container$dat2","_lesson_container$dat3","_lesson_container$dat4","_lesson_container$dat5","_lesson_container$dat6","_lesson_container$dat7","_lesson_container$dat8","_lesson_container$dat9","_lesson_container$dat10","_lesson_container$dat11","_lesson_container$dat12","_lesson_container$dat13","_lesson_container$dat14","_lesson_container$dat15","_lesson_container$dat16","_lesson_container$dat17","_lesson_container$dat18","_lesson_container$dat19","_lesson_container$dat20","_lesson_container$dat21","_lesson_container$dat22","_lesson_container$dat23","_lesson_container$dat24","_lesson_container$dat25","_lesson_container$dat26","_lesson_container$dat27","_lesson_container$dat28","_lesson_container$dat29","_lesson_container$dat30","_lesson_container$dat31","_lesson_container$dat32","_lesson_container$dat33","_lesson_container$dat34","_lesson_container$dat35","_lesson_container$dat36","_lesson_container$dat37","_lesson_container$dat38","_lesson_container$dat39","_lesson_container$dat40","_lesson_container$dat41","_lesson_container$dat42","_lesson_container$dat43","courseType","EditCourseDefaultValues","changeTab","passedValues","isReUsed","isCourse","startsWith","picturePatch","isObject","sxBoxEditCourse","TxtReUsed","_values$course$attrib","_values$course$attrib2","editCourseModel","EditCourseSchema","flexFlow","sxBoxInfo","CheckEnableEdit","BtnDropdownOptions","FrmIntro","FrmImages","FrmLessons","FrmSharing","FrmStudents","FrmFeedback","FrmCourse","sxFormActionBar","IntroductionPreviewDialog","LessonScreen","EditCourseViewMap","ViewCourses","sxDraftView","sxDraftViewTitle","sxBoxContent","mixBlendMode","ViewCourseViewMap","adminViewCourses","CourseSearchBar","CourseSearchBarViewMap","ErrorPageViewMap","ErrorPage","NotFoundPageViewMap","notFound","SearchBar","Faq","setLoaded","groupByCategory","CardHeader","field_faq_categorie","AccordionComponent","FaqViewMap","Questions","Faq2","Faq2ViewMap","Faq3","Faq3ViewMap","Answer","clicked","setClicked","Breadcrumbs","underline","ArticleViewMap","Article","ColophonOverview","_selectedPackage$","_data$advisoryBoard","pack","labelTitle","marketingUrl","getMarketingSiteUrl","marketingShortUrl","colophonEmail","colophonEmailFull","setData","parsedAuthors","advisoryBoard","advisoryBoardAuthorId","TopLinks","colophonViewMap","colophonOverview","footer","NavBar","RouterLink","activeClassName","ExploreOutlinedIcon","WebStoriesIcon","GridViewSharpIcon","ShortCuts","shortcuts","route","shortcut","AssistantsNavBar","ArticleIcon","BORDER_COLOR","BORDER","HEADING_COLOR","LmsDownloadButton","LmsDownloadManualBtns","isLms","getLearnDomainUrl","globalTheme","LmsTheme","responsiveFontSizes","gray","green","shadows","MuiTextField","paddingBlock","MuiSelect","variants","paddingInline","MuiAutocomplete","MuiTable","borderCollapse","borderSpacing","MuiTableHead","MuiTableBody","borderLeft","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","MuiTableFooter","MuiPaper","MuiList","MuiButton","ThemeProvider","flexWrap","tabsRoutes","isMobile","Tabs","TabIndicatorProps","scrollButtons","allowScrollButtonsMobile","LmsToolbar","orgType","profType","dateType","mapRouteNameToTitle","LmsDashboardOverview","LmsDashboardProducts","TabsLayout","lazy","LmsDashboardProfessions","LmsDashboardViewMap","LmsLayout","LmsDashboardLayout","LmsStudentsLayout","LmsStudents","LmsStudentsOpen","LmsStudentsCompleted","LmsStudentsByStatus","LmsStudentsViewMap","LmsStudentDetail","LmsStudentDetailViewMap","LmsCoursesLayout","LmsCourses","LmsCoursesCompleted","LmsCoursesOpenList","LmsCoursesByStatus","lmsCoursesViewMap","LmsOrganisations","LmsTable","getLmsOrganisations","LmsOrganisationsViewMap","LmsCourseDetail","LmsCourseDetailViewMap","getStudents","signupsResponse","eventUuid","signups","signup","user_internal__id","present","signupId","EventButton","_props$date","_props$selectedEvent","_props$selectedEvent2","_props$selectedEvent3","aDate","formattedDate","selectedEvent","getContrastText","attendees","address","AttendanceSheetLayout","setStudents","events","setEvents","setSelectedEvent","ongoingBulkUpdate","setOngoingBulkUpdate","ongoingUpdates","currentEvents","overviewResponse","formattedEvents","_overviewResponse$dat","_overviewResponse$dat2","_location$street","_location$house_numbe","_location$zipcode","_location$name","includedItem","event_type","dateIsToday","isToday","dateIsInTheFuture","isFuture","dateIsInThePast","isPast","totalSeats","seats","seatsLeft","available_seats","locationId","house_number","getEvents","_currentEvents$filter","todayEvent","eventItem","studentsOfEvent","handleSetPresent","isPresent","updatedStudents","notPresentStudents","todayEvents","AttendanceSheetViewMap","attendanceSheet","CertificateIcon","cx","cy","InformationIcon","FilterBar","onOnlyShowAvailableChange","onlyShowAvailableChange","onYearChange","startYear","getYearsFromStartToCurrent","yearOption","useVtbOverview","setIsLoading","_signupResponse$data","_signupResponse$data$","_signupResponse$data$2","_signupResponse$data2","_signupResponse$data3","_signupResponse$data4","parsedData","eventTypes","eventType","locations","_location$relationshi","_location$relationshi2","availableSeats","canRegisterMaxDate","subDays","noSeatsAvailable","isEnrollmentClosed","parseData","signupResponse","eventSignupIds","event_uuid","refetch","EventTypeTitleHead","onInfoClick","event_description_node_id","DialogBox","submitButtonText","cancelButtonText","onAction","mailNotification","setMailNotification","mailNotificationText","formatDate","RegisterEventDialogBox","_selectedData$vtbEven2","selectedData","toastSuccessText","isUserAttending","translationKey","toastTextSuccess","toastTextFailure","useEwaApiPost","translations","eventDate","vtbEvent","handleAction","_selectedData$vtbEven","eventDrupalId","wants_confirmation","LocationContent","_location$attributes$","aspectRatio","objectFit","parking_info","contrastText","LocationButtonBase","Icon","LocationButtonMobile","VtbTooltip","CustomTooltip","popper","tooltipClasses","marginInline","pxToRem","onOpen","disableFocusListener","disableHoverListener","Children","isValidElement","cloneElement","onTouchEnd","LocationButtonDesktop","LocationButton","isUserAttendingEventType","EventTypeColumn","vtbEvents","onEventClick","getTitleContent","LocationRow","eventsOfSameEventType","allEvents","eventTypeId","getOtherEventsOfSameEventType","userPresentInOneOfTheEvents","eventOfSameEventType","isUserAttendingEventOfOtherEventType","parsedEvent","EventTypeDescriptionDialog","parsedHtml","_attribs$class","attribs","_children$find","textChildren","domToReact","listItemChildren","listItemChild","MidContentSection","showOnlyAvailable","setSelectedData","descriptionDialogId","setDescriptionDialogId","descriptionData","useEventTypeDescriptions","transformedData","filteredEvents","locationIds","eventTypeIds","filteredLocations","filteredEventTypes","BottomDescription","Trans","i18nKey","VTBLayout","setShowOnlyAvailable","setYear","VtbViewMap","LoadingPage","tooltipText","shadow","inverted","square","lightGreen","sizes","small","large","buttonStyles","ButtonBase","CustomDialog","visible","reason","placeItems","btnLabel","isVisible","onCancel","onConfirm","useDisclaimer","hasReadDisclaimer","setHasReadDisclaimer","DisclaimerDialog","onCloseCallback","joinArrays","DialogBase","DialogTitleBase","useCurriculumStyles","mySelect","borderWidth","SelectBox","onSubmitCallback","Styles","allowedYears","unshift","allowedValues","_result$data","_errors$year","canEditCurriculum","evaluationIsComplete","_evaluation$relations","_evaluation$relations2","_evaluation$relations3","_evaluation$attribute","_evaluation$attribute2","_evaluation$attribute3","_evaluation$attribute4","_evaluation$attribute5","_evaluation$attribute6","CurriculumTable","noOfPages","itemsPerPage","handlePageChange","refreshCallback","actionButtonProps","download_url","handleRowClick","_CURRICULUM_STAGE_BY_","isDeleted","isFinished","stageToGoTo","stageId","gridTemplateColumns","px","mr","round","isV3Portfolio","plannedActivities","archive","unarchive","RestoreIcon","newPage","FilterButton","calculatePagination","CurriculumDashboard","_store$curriculums$po","isAddModalOpen","setIsAddModalOpen","isDisclaimerDialogOpen","setIsDisclaimerDialogOpen","_store$error","tableItems","totals","learning_goal_activities","learning_goal_evaluations","is_v3_portfolio","setRouteFilter","ButtonGroup","handleAddClick","QuestionMarkIcon","AddNewCurriculumDialog","CurriculumDashboardViewMap","curriculumDashboard","CurriculumLayout","ActivitiesActions","onEdit","ActivitiesTable","translationGroup","showActions","onEditCallback","onDeleteCallback","selectedForDelete","setSelectedForDelete","isDeleteModalVisible","setIsDeleteModalVisible","CustomTable","tableSx","rowsPerPage","tableName","selectedButtons","tableHeadData","handleMultiDelete","checkboxes","moreInfoBtn","actionProps","DeleteActivityConfirmationModal","onConfirmDelete","defaultProps","ActivitiesTableToolbar","onAddCallback","addActivityBtnLabel","addActivityBtnTooltip","editBtnLabel","editBtnTooltip","StageHeader","StageTitleBar","StageTitle","_errors$activityName","_errors$activityResul","_store$curriculumFunc","_store$curriculumFunc2","_errors$nameDropDown","_errors$nameString","functionExamples","nameDropDown","nameString","submitRef","FunctionFormPart","ActivitiesFormPart","AddOrEditActivityModal","_activity$attributes","_activity$attributes2","defaultProp","useCurriculum","_fn$attributes","CurriculumFunctions","functionsWithActivities","functionActivities","useFunctions","_fn$relationships","_fn$relationships$act","activeFunction","setActiveFunction","activeActivity","setActiveActivity","isAddFunctionModalOpen","setIsAddFunctionModalOpen","isEditFunctionModalOpen","setIsEditFunctionModalOpen","isAddOrEditModalVisible","setIsAddOrEditModalVisible","isConfirmDeleteModalVisible","setIsConfirmDeleteModalVisible","activityColumns","numeric","disableSorting","onAddFunction","onAddActivity","onEditFunction","onDeleteFunction","onEditActivity","onDeleteActivities","AddFunctionDialog","onCloseAddFunctionDialog","EditFunctionDialog","onCloseEditFunctionDialog","onSubmitEditFunctionDialog","onCloseAddOrEditActivityModal","onSubmitAddOrEditActivityModal","ConfirmationModal","useLearningGoals","_store$curriculumLear","_store$curriculumLear2","_store$curriculumEval","learningGoalActivities","learningGoalEvaluations","learningGoalsWithActivities","_errors$activityDropD","_errors$activityExpla","learningGoalActivityExamples","textWrap","activityDropDown","learningGoal","_errors$learningGoalN","isLearningGoalExamplesOpen","setIsLearningGoalExamplesOpen","learningGoalExamples","pl","LearningGoalFormPart","_goal$attributes","CurriculumLearningGoals","activeLearningGoal","setActiveLearningGoal","isAddLearningGoalModalOpen","setIsAddLearningGoalModalOpen","isEditLearningGoalModalOpen","setIsEditLearningGoalModalOpen","isAddOrEditActivityModalVisible","setIsAddOrEditActivityModalVisible","onAddGoal","onEditGoal","onDeleteGoal","AddLearningGoalModal","onCloseAddLearningGoalDialog","onSubmitAddLearningGoalDialog","EditLearningGoalDialog","onCloseEditLearningGoalDialog","onSubmitEditLearningGoalDialog","InitialValues","Evaluation","transfer","arrayOf","LearningGoalActivity","LearningGoal","FunctionActivity","JobFunction","useEvaluations","_store$curriculumEval2","evaluationCourses","canFinalize","_goal$relationships$e","evaluationsWithCourses","hasActivities","relatedCoursesIds","relatedCourseResults","paragraph","removeCourse","deleteActivity","useAccordion","hasState","toggleState","onAddActivityCallback","panelId","lighten","Activities","borderBottomWidth","marginBlock","NeedsWorkIcon","inputCount","setInputCount","coursesForSelect","customActivityText","_errors$courseId","_errors$customActivit","_errors$customActivit2","FormHelperTextProps","validateFieldValue","fieldObj","_error$errors","reflectionText1","reflectionText2","onEditReflectionCallback","hasReflection","hasEvaluation","Reflections","_goal$evaluations$","isAddActivityDialogVisible","setIsAddActivityDialogVisible","isEditReflectionDialogVisible","setIsEditReflectionDialogVisible","EvaluationHeader","PlannedActivities","EvaluationActivities","EvaluationReflections","onEditReflection","AddActivityDialog","EditReflectionDialog","CurriculumEvaluations","EvaluationCard","StageButton","stage","handleOnClick","bottomText","btnId","CurriculumStagesLayout","updateXarrow","useXarrow","layoutRef","isConfirmFinalizeDialogOpen","setIsConfirmFinalizeDialogOpen","isSmallScreen","stages","currentStage","setCurrentStage","isPreviousButtonDisabled","canGoToStep2","canGoToStep3","isNextButtonDisabled","shouldShowFinalizeButton","isFinalizeButtonDisabled","goToStage","downloadUrl","goBack","osx","Xwrapper","Xarrow","curveness","_cpy1Offset","_cpx1Offset","_cpy2Offset","_cpx2Offset","dashness","headShape","headSize","lineColor","headColor","tailColor","showTail","tailShape","tailSize","lab","CurriculumActivities","CurriculumGoals","CurriculumEvaluation","prevStep","nextStep","onFinalizeBtnClick","CurriculumStagesViewMap","curriculumStages","Logout","GoToAdmin","SwitchBack","LogoutViewMap","switchback","gotoadmin","searchInput","FormData","TeacherCard","teacherId","CardMedia","TeachersOverview","_store$courses2","_store$courses3","searchText","setSearchText","displayTeachers","teacher","TeacherSearch","SchoolIcon","teachersOverviewViewMap","teachersOverview","propsBasicCard","getCourseCardProps","CourseGridCard","uniqueId","TeacherDetail","showMore","setShowMore","clamp","setClamp","clientHeight","teacherCourseList","KeyboardDoubleArrowDownIcon","KeyboardDoubleArrowUpIcon","CourseList","teacherDetailViewMap","teacherDetail","courseOverviewViewMap","courseOverview","CourseOverview","CourseIntroductionViewMap","courseIntroduction","CourseIntroduction","CoursePackage","packageLabel","_splitPoints$","_propsBasicCard$cours","hideCourse","isMinutes","courseImage","gotoCourse","backgroundSize","backgroundPosition","Progress","CourseStatus","IsLtiDeeplinker","CourseLtiButton","hideBg","podcast","PodcastIcon","extraLabel","CourseCategories","CourseSymbols","badges","justifySelf","GetSearchTimeLabel","FavoriteButton","HideCourse","_defs","_g","Fragment","CourseTableRow","_extends","bind","SvgAiSearch","svgRef","titleId","ForwardRef","NoResultsMessage","searchAttemptNr","sxAISearchIcon","renderMessage","AISearchIcon","convertUrlDecodedString","handleSubmit","_store$baseProduct","AccreditationNotice","CourseTable","SearchOverview","SearchCourseViewAll","Spinner","searchOverviewViewMap","searchOverview","SpecialAccessViewMap","specialAccessIntroductionViewMap","specialAccessCourseIntroduction","material","createURLParams","pair","InviteUserDialog","contractId","onSuccess","formState","useForm","resolver","yupResolver","contract_id","_errors$email$message","_errors$email","_errors$first_name$me","_errors$first_name","_errors$last_name$mes","_errors$last_name","ResendInvitationButton","RevokeButton","subscriptionId","deleteType","openDialog","setOpenDialog","popupTitle","popupMsg","popupBtn","successMsg","_assistant$first_name","_assistant$invitation","_assistant$last_name","_assistant$invitation2","_assistant$mail","_assistant$invitation3","assistant","assistantFullName","invitationdata","opencourses","sxTheme","assistant_container_nid","subscription_nid","filteredAssistants","noResultPanel","_assistant$user_uuid","user_uuid","placeholderText","CancelRoundedIcon","StatPanel","statNumber","StatsPanel","_data$assistant_manag","_data$assistant_manag2","CardMembershipIcon","assistant_manager","AssistantManagementView","_data$result$offset","_data$result","_data$result$total","_data$result2","_data$result$limit","_data$result3","_data$assistant_manag3","_data$assistant_manag4","_data$assistant_manag5","_data$assistant_manag6","hasError","refreshData","useAssistantManager","setHasError","statusFilter","setStatusFilter","inviteUserDialogOpen","setInviteUserDialogOpen","openGdprAss","setOpenGdprAss","canInvite","subscriptions_used","onStatusFilterChange","assistants","NewUserTermsAss","oncloseGdprAss","assistantManagementViewMap","SpecialAccessIntroductionViewMap","defCourseOverview","defCourseIntroduction","DashboardViewMap","SelectProductViewMap","defLessonPlay","specialAccessLessonPlay","App","CustomThemeProvider","I18nextProvider","dsn","integrations","tracePropagationTargets","HttpClientIntegration","failedRequestStatusCodes","tracesSampleRate","replaysSessionSampleRate","replaysOnErrorSampleRate","ThemeMeta","smoothscroll","polyfill","isIE11","require","ReactDOM","_store$product","categoriesArray","setVisible","nonTrialCourse","imgRef","_lessons$","_lessons$0$nid","gotoSpecialAccessCourse","goToCourse","noStatus","CourseReactions","CourseTitle","CoursePoints","npoBadges","badge","goBadges","veBadges","_badge$symbol","aBadges","restBadges","_badge$symbol2","sortedBadges","sxBadgeSize","getFirstLetter","getBadgeTitle","_badge$symbol3","_badge$name","configCheckbox","MyRadio","indexCorrectOption","setFilename","showLabelLogo","NoRedirectToHome","GoHome","Expected","Expire","Update","New","Expiring","CarouselItem","Carousel","arrows","activeIndex","setActiveIndex","updateIndex","newIndex","handlers","useSwipeable","onSwipedLeft","onSwipedRight","ArrowBackIosNewIcon","ArrowForwardIosIcon","question_widget","dataObj","serialized","_buildCourseContainerIncludes","attemptNr","search_param","defaults","userid","merged","deepmerge","expression","courseResultID","postFile","_headersUpload","Buffer","_convertNewQuestionWidgetData","createLesson","_e$response","_e$response$data","_e$response2","_e$response2$data","depCourseId","fetchAuthors","what","fetchAllProfessions","field_favorite_courses","field_liked_courses","askquestion","omitBy","isNil","fetchStudent","_sx$width","_sx$height","PodcastsIcon","isSave","setIsSave","storeFavourite","handleFavorite","removedFavorite","remodelData","toggleFavorites","CalculateProgress","FavoriteIcon","hideCourses","handleHide","VisibilityOffIcon","trialCoursesView","showCategories","restCategories","launchUrl","LtiLaunchUrl","handleCopyCourseId","courseParam","showAuthors","restAuthors","handleConfirm","showMessage","isInHeader","showProgress","showProgressHeader","progressHeader","LinearProgressWithLabel","thickness","LessonProgress","progressArray","LessonArrayProgress","lessonProgressArray","lessonProgress","courseProgress","ListComponent","expand","showMenuItem","nestedTabs","ArrowRightIcon","_theme$palette","_theme$palette$primar","_theme$palette2","_theme$palette2$prima","_theme$palette3","_theme$palette3$prima","_theme$palette4","_theme$palette4$prima","isGreen","buttonTemp","red","alignRight","alignLeft","alignCenter","tabBar","tabSelected","tabsIndicator","section1200","paperFlat","paperFlatPadding","paperFMb","paperNoPadding","paperFlatSmoke","paperBoxSmoke","paperCategories","paperLegenda","formTitle","subTitle","gridTitle","bordered","formDivider","textField","multipleSelect","div20","float","div80","fabAdd","fabAddSm","fabAddLesson","actionBar","actionBarModal","dialogActionBar50","textarea","checkbox","checkBox","radio","editor","select","div","frm","frmDivider","frmCtrl","hlpTxt","ppr","pprBoxed","pprFlat","pprFlatSmoke","pprBoxSmoke","txtRight","txtLeft","txtCenter","delay","debouncedValue","setDebouncedValue","clearTimeout","embedVideo","canPlay","allow","allowFullScreen","NoPlay","MaintenanceModal","styles","Modal","SecondaryLogo","ListItems","menuLinks","selectedPackageLabel","_selectedPackageLabel","MyCompany","showVTBTeacher","showVTB","GroupIcon","BarChartIcon","CalendarMonthRoundedIcon","HowToRegRoundedIcon","TextSnippetIcon","tabTitle","blink","keyframes","_templateObject","_taggedTemplateLiteral","LeftSideDrawer","isManualMinimized","setIsManualMinimized","isNarrow","boxClassName","toggleMinDrawer","MenuIcon","PackageList","BadgeIcon","NewReleasesIcon","SubscribeLink","subscribeUrl","ModalProps","_store$params2","defineToolip","goBackRoute","defineRoute","_store$params3","defineTooltip","HeaderTitle","_selectedPackageLabel2","_store$curriculum$dat2","_store$searchCoursesF","isScrolling","courseIntroductionTitleText","courseIntroductionTitle","TeacherHeadline","CourseIntroductionHeadline","CapitalizeFirstLetter","specialAccessCourseOverviewTitle","_store$courses$course","defaultHeader","HeaderContext","HeaderContextProvider","isSidebarVisible","useHeader","_store$subscriptions","_store$subscriptions2","_store$subscriptions3","_store$subscriptions4","_store$subscriptions5","shouldShowSidebar","isXs","anchorProducts","setAnchorProducts","anchorAccount","setAnchorAccount","anchorQuickLinks","setAnchorQuickLinks","anchorNotification","setAnchorNotification","isMenuProductsOpen","isMenuAccountOpen","isMenuQuickLinksOpen","uniqueProductTitles","productNameDef","showProductMenu","handleMenuClose","handleCloseNotification","handleMenuProductsOpen","handlePopoverClose","menuOpenTimeout","persist","elTarget","elChild","relatedTarget","handleMenuAccountOpen","handleGoToSpecialAccessOverview","handleGoToCourseOverview","handleMenuSelectProduct","handleChangeProduct","handleNotification","handleGoToAssistant","handleGoToLMS","handleMenuQuickLinksOpen","useHeaderContext","context","letterSpacing","IconButtonBase","AccountButton","Styled","AssistantButton","CourseOverviewButton","Searching","searchResults","goBackToSearchResults","Search","SearchIconWrapper","StyledInputBase","InputBase","StyledButton","MobileSearchButton","MobileSearchDialog","_ref5","CourseSearch","_store$routerStore2","isSearchRoute","isSelectProductRoute","showPopupSearch","onKeyDown","LmsButton","MenuItemAdminPanel","CURRENT_STYLE","COLWIDTH","print","leaf","createXml","xmlOutput","_createXmlContent","_createFileAndDownload","curPackage","xmlAid","totCourses","_catCourses","_xmlCourse","xmlCat","_curPackage$accredita","weblecture","webLecture","extrapoints","_getExtraValues","accrUnitShort","_curPackage$accredita2","_curPackage$accredita3","xValue","xmlFile","layout","packageTitle","MenuItemXmlBrochure","MenuItemXmlPrint","accreditationPartners","_store$baseProduct$ti","currentDomain","selectedProduct","getReleaseDate","getAdvisoryBoard","board","member","auth","boardList","comp","getCoursesByCategory","getLogo","getDomain","createHTMLCourses","showSymbols","createLiCourse","courseExpected","courseAuthors","courseSYmbols","getCompetences","showSymbolsHtml","getLegendaItems","competences","createHtmlDoc","htmlOutput","labelImage","overviewTitle","labelDomain","releaseDate","MenuItemCreatePdf","createHtml","_store$profession","accrLogo","renderToString","legendaItems","htmlCourses","htmlAccr","htmlAdvBoard","htmlLegenda","htmlCourseOverview","htmlDocument","newTab","write","PrintIcon","MenuItemEwiseUser","MainMenu","BackdropProps","invisible","onMouseOut","disableScrollLock","MenuItemAccount","MenuItemBackend","MenuItemEditCourse","MenuItemLogout","Notifications","AccessTimeIcon","NotificationsItem","notificationRef","NotificationsIcon","modifiers","preventOverflow","enabled","boundariesElement","PaperProps","MobileMenuButton","MoreVertIcon","arrayChildren","toArray","ProductMenuItems","displayName","SelectProductButton","_store$products","_store$subscriptions$","_store$products2","SpecialAccessButton","TotalPointsChip","StarsIcon","TotalCompletedCourses","TotalSubPoints","_store$baseProduct2","userPoints","subPackage","toolTipText","CourseHeader","showPoints","showLmsButton","showAssistantButton","showSpecialAccess","showCourseOverview","showSelectProduct","QuickLinksComponent","QuickLinksMenu","isFreeProduct","showTotalCompletedCourses","showTotalSubPoints","isInMenu","_store$routerStore2$r","isIntroduction","CourseHeadline","AccreditationPartners","_store$baseProduct$pa","_selectedPackage$tab_","_store$baseProduct2$t","FaqLink","_response$included$","_response$included$$a","_response$included$$a2","currentLabel","getFaqUrl","mapLabelToComplainsUrl","ComplaintsLink","Footer","setPrivacyStatementUrl","setDataLeakUrl","TermsConditions","themeName","getThemeName","extraClassOpenDrawer","extraClassMinDrawer","extraClassNoSidebar","extraClassIsMobile","extraClassIsMicroLearning","ScrollUpButton","isPaused","setIsPaused","swipeState","interval","setInterval","clearInterval","onMouseEnter","onMouseLeave","SwipeableViews","onChangeIndex","enableMouseEvents","onMouseDown","screenX","indicatorChild","buttonIndex","FiberManualRecordIcon","buttonSuccess","fab","fabProgress","SaveButton","canSave","classNames","fabDelete","fabRed","common","white","DeleteButton","IconDelete","addIcon","clickAway","setExpand","handleClickAway","ArrowDropDownIcon","Suspended","Suspense","fallback","setThemeName","Fingerprint","card","cardError","cardInfo","ErrorBox","load","Load","selectionFollowsFocus","icons","CheckCircleIcon","InfoIcon","WarningIcon","ErrorIcon","Snackbar","autoHideDuration","ToastItem","EnhancedTooltip","getObjectPropValue","propName","CustomCell","py","acl","setAcl","DeleteDialog","numberOfRecords","deleteOpen","handleDeleteDialogClose","handleDeleteRecord","btnText","closeBtn","actionBtn","CSVExport","CSVLink","descendingComparator","valA","valB","getComparator","stableSort","comparator","stabilizedThis","EnhancedTableHead","onSelectAllClick","numSelected","rowCount","onRequestSort","createSortHandler","property","indeterminate","headCell","sortDirection","TableSortLabel","additionalButtons","Buttons","setPresent","rowSx","setOrder","setOrderBy","setSelected","_rowsPerPage","setRowsPerPage","setDeleteOpen","BorderLinearProgress","linearProgressClasses","colorPrimary","bar","emptyRows","firstColumnStyle","lastColumnStyle","cornerBorderStyles","hasCheckedItems","hasSelectionActionButton","newSelected","handleRequestSort","isItemSelected","CustomTableCell","selectedIndex","handleCheckBoxClick","completionDate","completedPercentage","getColumnContent","len","sliceText","ActionTableCell","TablePagination","rowsPerPageOptions","onPageChange","handleChangePage","onRowsPerPageChange","getExportDataFormatted","exportData","tableDef","originalData","_tableDef$props","getAllRemoteData","getExportData","formatted","formatNumbersWithComma","_tableDef$props2","_tableDef$props3","_tableDef$props3$opti","_tableDef$props3$opti2","promises","_tableDef$props4","newRow","colDef","getFieldValue","isAugustFirst","isSchoolYear","getYear","OPTIONS","schoolYear","handleRangeDate","to","range","setRange","fromDate","toDate","startOfYear","endOfYear","maxDate","minDate","setFromDate","_fromDate","setToDate","_toDate","setSchoolYear","rangeInputValue","shoolYear","getRangeInput","closePopover","readOnly","handClickResetDefault","bold","opt","lodashRange","adapterLocale","DatePicker","PopperProps","handleClickApply","DropDown","organisation_id","_store$lmsAccess","_store$lmsAccess2","urlQueries","handleChangeOrganisation","updatedParams","handleChangeProfession","scrolling","isScrolled","saveScrollPosition","scrolltop","behavior","KeyboardArrowUpIcon","setStyle","PageTitle","_errors$root","formProps","onBlur","register","serverError","rx","ry","CourseGrid","currentCourses","handleClearFilters","_store$courses4","categoryDescription","BasicCard","CourseGridListMin","_store$courses5","_store$courses7","courseOverviewImgSize","isFiltered","_store$courses6","BasicCardListMin","CourseTabs","_store$hidden","_store$courseResults3","changeCourseOverview","mode","courseTotal","favoriteTotal","finishedTotal","afterHide","startedTotal","tabDefaultItems","tabExtraItems","NoCourses","isNotSpecialAccessView","isNonTrialCourse","CourseFavorites","_store$favorites","_store$favorites$favo","favoriteData","isGridLayout","gridItemSm","gridItemMd","gridItemLg","gridItemXl","setColumns","CourseTableCell","CourseStarted","startedId","cr","lessonResultSorted","ls","startedCourses","RocketLaunchIcon","mapSortByLabels","Ending","_store$courses8","_store$courses9","_store$courses10","_store$courses11","_store$courses12","currentBreakpoint","desktopMode","searchAuthorInput","setSearchAuthorInput","ignorePunctuation","handleSearchAuthor","FilterContainer","CourseFilters","Filter","mobileMode","mobileFilterPopup","anchorFilter","setAnchorFilter","handleClickFilter","handleCloseFilter","shouldShowFilterInPopover","filterButonStyling","FilterListIcon","CourseView","_store$hiddenIds","_store$hiddenIds2","anchorRef","ListIcon","GridOnIcon","ListAlt","autoFocusItem","handleMenuItemClick","GridCardSwipe","Carusel","moreinfo","DefaultBanner","professionLower","_store$banners","_store$banners2","selProductId","fetchBannerData","getLinkAttributes","currentUrl","targetUrl","hash","banner","_banner$attributes","_banner$attributes2","_banner$attributes3","_banner$attributes4","_banner$attributes5","bannerImage","customCss","chipLabel","colorScheme","ContainerComponent","replaceSliderCssClass","minifyCss","sxMyCertificates","ViewAllCertificates","CourseFinished","finishedCourses","_a$course_title","pulse","CourseOverviewIntro","_selectedPackage$2","_selectedPackage$2$ta","selectedPackageBody","openPopup","setOpenPopup","handleClosePopup","AlertIcon","handleOpenPopup","CourseOverviewIntroAccr","selectedPackageAccr","cssMargin","useOnboarding","_store$login4","skipTour","_document$querySelect","_document$querySelect2","_document$querySelect3","_document$querySelect4","_document$querySelect5","_document$getElements","_theme$custom","_theme$custom$onboard","Storage","unitText","yourText","steps","intro","introJs","tooltipClass","nextLabel","prevLabel","showButtons","onbeforeexit","_store$login3","getElementsByClassName","TrialCoursesBaseProdIntroText","subscribeText","TrialCourses","courseViewStyling","CourseViewAll","isSwipable","_theme$custom$courseI","isStarted","CourseIntroductionAuthors","Information","AuthorIcon","RelatedCourses","relatedCourses","showArrows","NonTrialCourseAlert","subscriptionText","CourseAccrEndDate","formattedEndDate","CourseIntroductionTabs","_store$courses2$cours","_data$attributes","video","goToScroll","_e$currentTarget$href","scrollIntoView","block","previewVideo","categoryCourses","initialPosition","isUrlCorrect","VideoError","PlayCircleOutlineIcon","Goals","isSticky","_tab$current","sticky","ScrollSpy","li","authorDetail","MobileCourseIntroductionTabs","courseStatus","availableDate","showNotification","toLesson","setIsFetching","CourseButton","_store$baseProduct3","_store$lesson_results2","_store$lesson_results3","_lessons$2","handleButtonClick","playLesson","courseExpired","lastStartedCourse","_lessons$nid","maxAttemptsReached","retry","courseBtn","IconPlay","TrialCourseButton","TrialAlertDialog","blinkAnimation","extraPoints","extraPointsDescr","certTitle","timeLabel","AccessAlarmIcon","_store$specialAccessC","showSpecialAccessCTA","MobileTopbarCard","CourseExpiredSection","CourseLessonSection","DownloadCertificateSection","SpecialAccessSection","MobileTopbar","showAccreditation","statusBtn","SidebarCard","_selectedPackage$accr","openGdpr","setOpenGdpr","_introBanner","default_profession_banner","introductionBanner","_courseImage","isDrawerOpen","MobileIntroHead","MobileCourseIntroductionHeader","GetPoints","MobileIntroBody","DesktopIntroHead","CourseIntroductionHeader","DesktopIntroBody","Sidebar","NewUserTerms","oncloseGdpr","PrimaryColor","SecondaryColor","DefaultMargin","cmeTheme","dark","peTheme","poTheme","themeMap","ewiseTheme","getThemeByName","setGlobalTheme","merge","StyledEngineProvider","injectFirst","CssBaseline","CircularProgressWithLabel","circularProgressClasses","circle","DoneIcon","calculateProgressValue","progress","calculateCourseProgress","progressNumber","progressValue","useFavourites","showHtml","setShowHtml","modules","matchVisual","stackProps","sxFormControlLabel","ReactQuill","editorFrame","borderStyle","SubTitle","customStyle","defaultStyle","inlineStyle","ModalContext","useModalContext","createPortal","mapRouteNameToSearchParamName","delegated","setTableOptions","mounted","orgId","sum_points","course_name","getColumns","isLmsOrganisations","isLmsCourses","translateExportName","_tableRef$current","onQueryChange","verticalAlign","_tableRef$current2","_pageSize","exportButton","renderData","ExportPdf","ExportCsv","addRemoveColumns","showColumnsTitle","exportTitle","pagination","labelDisplayedRows","labelRows","labelRowsPerPage","firstTooltip","previousTooltip","nextTooltip","lastTooltip","_query$orderBy","isOrganisation","isStudent","amount","name_or_email","searchByNameOrEmail","order_by","order_direction","status_condition","completedcourses","count_courses_completed","customId","_student$organisation","orgName","subscription_date_end","valid_until","certificate_date","getLmsCourses","_query$orderBy2","getLmsCoursesCompleted","_query$orderBy3","getLmsCoursesOpen","getLmsStudents","getLmsStudentsOpen","getLmsStudentsCompleted","valueProp","MenuProps","triggerEvent","rawHTMLContent","modifyExternalLinksInHTML","html2","html3","hostnameToLabel","presentKeys","urlPart","domain","facebookLink","linkedinLink","modifiedUniqueName","htmlTag","_initialValues$value","courseExtraPointsDesc","_accreditation$","_accreditation$0$accr","_accreditation$5","_accreditation$5$accr","_accreditation$2","_accreditation$2$accr","_accreditation$3","_accreditation$3$accr","_accreditation$4","_accreditation$4$accr","_store$baseProduct2$p","short","currentDuration","minLabel","hourLabel","poPnt","_store$baseProduct3$p","_selectedPackage$tab_2","getPlayHeaderImage","definePackage","toLocaleLowerCase","isLeraren","isLerarenVO","failedLes","_lesson$pages","_lesson$pages2","completedPages","startedLessons","lessonArray","les","innerWidth","punt","punten","uur","uren","unlimited","minuten","translatedUnit","htmlContent","_window$store2$router","tempDiv","extraMeta","titleElement","_routerStore$options","_routerStore$options$","_routerStore$options$2","_routerStore$routerSt","_routerStore$routerSt4","_routerStore$routerSt5","_routerStore$routerSt13","_routerStore$getCurre","_routerStore$getCurre2","_routerStore$options2","_routerStore$options3","_currentPackage$","_currentPackage$2","_routerStore$routerSt2","_routerStore$routerSt3","_routerStore$routerSt6","_routerStore$routerSt7","_routerStore$routerSt8","_routerStore$routerSt9","_routerStore$routerSt10","_routerStore$routerSt11","_routerStore$routerSt12","_routerStore$routerSt14","_routerStore$routerSt15","_window$store3","_routerStore$routerSt16","_routerStore$routerSt17","textContent","replaceMetaRoute","translateMetaTitle","showAskQuestion","_window$store4","_window$store4$packag","_currentPackage$tab_l","_window$store6","_window$store5","currentPackageLabel","gtmId","dataLayer","pagePath","privacyUrl","marketingSiteURL","uniqueNamesObject","professionLabel","unFields","namesArray","isYouTubeUrl","isVimeoUrl","ltiUrl","css","oldClass","newClass","regEx","isEmbed","videoId","youtubeEmbedUrl","vimeoEmbedUrl","currencyList","chooseNumber","otherValue","professionPath","subdomain","encodedString","decodedString","Intl","NumberFormat"],"mappings":"4YAOA,MAAMA,EACA,4CADAA,EAEA,8CAFAA,EAGA,+CAHAA,EAIA,gDAJAA,EAKA,uBAGAC,EAAeA,IACfC,OAAOC,WAAWH,GAAgBI,QAC7B,KAELF,OAAOC,WAAWH,GAAgBI,QAC7B,KAELF,OAAOC,WAAWH,GAAgBI,QAC7B,KAELF,OAAOC,WAAWH,GAAgBI,QAC7B,MAELF,OAAOC,WAAWH,GAAgBI,QAC7B,MAkCIC,MA7BOA,KACpB,MAAOC,EAAYC,GAAiBC,mBAASP,GAyB7C,OAvBAQ,qBAAU,KACR,MAAMC,EAAeA,KACfR,OAAOC,WAAWH,GAAgBI,SACpCG,EAAc,MAEZL,OAAOC,WAAWH,GAAgBI,SACpCG,EAAc,MAEZL,OAAOC,WAAWH,GAAgBI,SACpCG,EAAc,MAEZL,OAAOC,WAAWH,GAAgBI,SACpCG,EAAc,MAEZL,OAAOC,WAAWH,GAAgBI,SACpCG,EAAc,KAChB,EAKF,OAHAG,IACAR,OAAOS,iBAAiB,SAAUD,GAE3B,IAAMR,OAAOU,oBAAoB,SAAUF,EAAa,GAC9D,IACIJ,CAAU,EChBJO,I,SCvCAC,MAFQA,IAAMC,qBAAWC,KCDzB,SAASC,EAAiBC,EAAWC,GAA4B,IAAnBC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGnB,OACrE,MAAMsB,EAAeC,mBAErBhB,qBAAU,KACRe,EAAaE,QAAUP,CAAO,GAC7B,CAACA,IAEJV,qBACE,KACE,IAAKW,IAAYA,EAAQT,iBAAkB,OAAO,KAClD,MAAMgB,EAAiBC,GAAUJ,EAAaE,QAAQE,GAEtD,OADAR,EAAQT,iBAAiBO,EAAWS,GAC7B,IAAMP,EAAQR,oBAAoBM,EAAWS,EAAc,GAEpE,CAACT,EAAWE,GAEhB,CCmBeS,MAnCf,SACEC,GAKC,IAJDC,EAAYV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IAGf,UAAEW,EAAYC,KAAKC,UAAS,YAAEC,EAAcF,KAAKG,OAAOf,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAE5D,MAAOgB,EAAOC,GAAY9B,oBAAS,KACjC,MAAM+B,EAAsBrC,OAAOsC,aAAaC,QAAQX,GACxD,GAAIS,EAGF,IACE,OAAOJ,EAAYI,EACrB,CAAE,MAAOG,GACPxC,OAAOsC,aAAaG,WAAWb,EACjC,CAEF,MAA+B,oBAAjBC,EAA8BA,IAAiBA,CAAY,IAGrEa,EAAanB,iBAAOK,GAW1B,OATArB,qBAAU,KACR,MAAMoC,EAAUD,EAAWlB,QACvBmB,IAAYf,GACd5B,OAAOsC,aAAaG,WAAWE,GAEjCD,EAAWlB,QAAUI,EACrB5B,OAAOsC,aAAaM,QAAQhB,EAAKE,EAAUK,GAAO,GACjD,CAACP,EAAKO,EAAOL,IAET,CAACK,EAAOC,EACjB,ECjCO,MAAMS,EAAWA,KACtB,MAAOC,EAAOC,GAAYzC,oBAAS,IAC5B0C,EAAcC,GAAmB3C,mBAAS,yBAWjD,MAAO,CAAEwC,QAAOI,YATI,WAAsB,IAArBC,EAAOhC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACtBgC,GACFJ,GAAS,GACTE,EAAgBE,IAEhBJ,GAAS,EAEb,EAE6BC,eAAc,ECc9BI,MA3BW,WAAuC,IAADC,EAAAC,EAAA,IAArCC,EAAUpC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAEK,QAASxB,QACjD,MAAOwD,EAAgBC,GAAqBnD,oBAAmB,OAAViD,QAAU,IAAVA,GAAmB,QAATF,EAAVE,EAAY/B,eAAO,IAAA6B,OAAT,EAAVA,EAAqBK,aAAuB,OAAVH,QAAU,IAAVA,GAAmB,QAATD,EAAVC,EAAY/B,eAAO,IAAA8B,OAAT,EAAVA,EAAqBK,UAAW,GAuBvH,OArBApD,qBAAU,KACR,IAAKgD,EAAW/B,QAAS,OAAO,KAChC,MAAMN,EAAUqC,EAAW/B,QACrBoC,EAAiBC,IAAgD,IAA7CC,eAAe,UAAEJ,EAAS,QAAEC,IAAWE,EAC/D,MACME,EADSL,GAAaC,GAAW,EAEvC,IAAIK,GAAU,EAETA,IACHhE,OAAOiE,uBAAsB,KAC3BR,EAAkBM,GAClBC,GAAU,CAAK,IAGjBA,GAAU,EACZ,EAGF,OADA9C,EAAQT,iBAAiB,SAAUmD,GAC5B,IAAM1C,EAAQR,oBAAoB,SAAUkD,EAAe,GACjE,CAACL,IAEGC,CACT,E,SCrBA,MAAMU,EAAoB,IAAIC,QAE9B,IAAIC,EAEJ,SAASC,EAAoBC,GAC3BA,EAAQC,SAASC,IACf,GAAIN,EAAkBO,IAAID,EAAME,QAAS,CACvC,MAAMC,EAAKT,EAAkBU,IAAIJ,EAAME,SAEnCF,EAAMK,gBAAkBL,EAAMM,kBAAoB,KACpDV,EAASW,UAAUP,EAAME,QACzBR,EAAkBc,OAAOR,EAAME,QAC/BC,IAEJ,IAEJ,CAYe,SAASM,EAAgBC,EAAMC,GAC5C5E,qBAAU,KACR,MAAMmE,EAASQ,EAAK1D,QAKpB,YAhBeH,IAAb+C,IACFA,EAAW,IAAIgB,qBAAqBf,EAAqB,CACvDgB,WAAY,QACZC,UAAW,UAUbpB,EAAkBqB,IAAIb,EAAQS,GAC9Bf,EAASoB,QAAQd,GAEV,KACLR,EAAkBc,OAAON,GACzBN,EAASW,UAAUL,EAAO,CAC3B,GAEA,GACL,C,mCC/CA,kCAYA,MAAMe,EAAS,CAAC,EA+zBT,SAASC,EAAOC,GACrB,IAAIC,EAASD,EAAIE,QAAQ,SAAS,KAElC,OADAD,EANF,SAAkBD,GAChB,OAAOA,EAAIE,QAAQ,sBAAsBC,GAAKL,EAASM,UAAUD,IAAIA,GACvE,CAIWE,CAASJ,GAr0BpB,SAAuBD,GACrB,OAAOA,EAAIE,QAAQ,2BAA4B,GACjD,CAo0BSI,CAAcL,EACvB,CAj0BAH,EAASM,UAAU,CAAC,OAAI,IACxB,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,KACJ,OAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,KACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,KACJ,OAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,KACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,OAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI,IACJ,SAAI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","file":"static/js/main.0e18c717.chunk.js","sourcesContent":["import { useEffect, useState } from 'react';\n\n/*\nIn summary, this code provides a utility for handling responsive breakpoints in a web application. \nIt defines media query strings for various breakpoints, determines the initial breakpoint, and updates the current breakpoint based on window size changes. \nThe useBreakpoint hook allows components to access the current breakpoint and respond to changes in screen size.\n*/\nconst breakpoints = {\n xs: '(min-width : 0px) and (max-width : 599px)',\n sm: '(min-width : 600px) and (max-width : 899px)',\n md: '(min-width : 900px) and (max-width : 1279px)',\n lg: '(min-width : 1280px) and (max-width : 1919px)',\n xl: '(min-width : 1920px)'\n};\n\nconst initialState = () => {\n if (window.matchMedia(breakpoints.xs).matches) {\n return 'xs';\n }\n if (window.matchMedia(breakpoints.sm).matches) {\n return 'sm';\n }\n if (window.matchMedia(breakpoints.md).matches) {\n return 'md';\n }\n if (window.matchMedia(breakpoints.lg).matches) {\n return 'lg';\n }\n if (window.matchMedia(breakpoints.xl).matches) {\n return 'xl';\n }\n return 'xl';\n};\n\nconst useBreakpoint = () => {\n const [breakpoint, setBreakPoint] = useState(initialState);\n\n useEffect(() => {\n const handleResize = () => {\n if (window.matchMedia(breakpoints.xs).matches) {\n setBreakPoint('xs');\n }\n if (window.matchMedia(breakpoints.sm).matches) {\n setBreakPoint('sm');\n }\n if (window.matchMedia(breakpoints.md).matches) {\n setBreakPoint('md');\n }\n if (window.matchMedia(breakpoints.lg).matches) {\n setBreakPoint('lg');\n }\n if (window.matchMedia(breakpoints.xl).matches) {\n setBreakPoint('xl');\n }\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n return breakpoint;\n};\n\nexport default useBreakpoint;\n","import { useEffect, useState } from 'react';\n// hook which uses css to determine the current breakpoint\nconst useCssBreakpoint = () => {\n const [breakpoint, setBreakPoint] = useState('');\n const [windowSize, setWindowSize] = useState({\n width: undefined,\n height: undefined\n });\n const handleResize = () => {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n };\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n handleResize();\n const ww = window.width;\n let bp = null;\n if (ww >= 1536) {\n bp = 'xl';\n }\n if (!bp && ww >= 1200) {\n bp = 'lg';\n }\n if (!bp && ww >= 900) {\n bp = 'md';\n }\n if (!bp && ww >= 600) {\n bp = 'sm';\n }\n if (!bp && ww < 600) {\n bp = 'xs';\n }\n setBreakPoint(bp);\n return () => window.removeEventListener('resize', handleResize);\n }, [windowSize.width]);\n return () => (bp, yes, no) => {\n if (bp === breakpoint) {\n return yes;\n }\n return no;\n };\n};\nexport default useCssBreakpoint;\n","import { useContext } from 'react';\nimport { CustomThemeContext } from 'providers/CustomThemeProvider';\n\nconst useCustomTheme = () => useContext(CustomThemeContext);\n\nexport default useCustomTheme;\n","import { useRef, useEffect } from 'react';\n\nexport default function useEventListener(eventName, handler, element = window) {\n const savedHandler = useRef();\n\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(\n () => {\n if (!element || !element.addEventListener) return null; // Make sure element supports addEventListener\n const eventListener = (event) => savedHandler.current(event);\n element.addEventListener(eventName, eventListener);\n return () => element.removeEventListener(eventName, eventListener);\n },\n [eventName, element] // Re-run if eventName or element changes\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\nfunction useLocalStorage(\n key,\n defaultValue = '',\n // the = {} fixes the error we would get from destructuring when no argument was passed\n // Check https://jacobparis.com/blog/destructure-arguments for a detailed explanation\n { serialize = JSON.stringify, deserialize = JSON.parse } = {}\n) {\n const [state, setState] = useState(() => {\n const valueInLocalStorage = window.localStorage.getItem(key);\n if (valueInLocalStorage) {\n // the try/catch is here in case the localStorage value was set before\n // we had the serialization in place (like we do in previous extra credits)\n try {\n return deserialize(valueInLocalStorage);\n } catch (error) {\n window.localStorage.removeItem(key);\n }\n }\n return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n });\n\n const prevKeyRef = useRef(key);\n\n useEffect(() => {\n const prevKey = prevKeyRef.current;\n if (prevKey !== key) {\n window.localStorage.removeItem(prevKey);\n }\n prevKeyRef.current = key;\n window.localStorage.setItem(key, serialize(state));\n }, [key, state, serialize]);\n\n return [state, setState];\n}\n\nexport default useLocalStorage;\n","import { useState } from 'react';\n\nexport const useModal = () => {\n const [modal, setModal] = useState(false);\n const [modalContent, setModalContent] = useState(\"I'm the Modal Content\");\n\n const handleModal = (content = false) => {\n if (content) {\n setModal(true);\n setModalContent(content);\n } else {\n setModal(false);\n }\n };\n\n return { modal, handleModal, modalContent };\n};\n","import { useEffect, useState } from 'react';\n\nconst useScrollPosition = (elementRef = { current: window }) => {\n const [scrollPosition, setScrollPosition] = useState(elementRef?.current?.scrollTop || elementRef?.current?.scrollY || 0);\n\n useEffect(() => {\n if (!elementRef.current) return null;\n const element = elementRef.current;\n const updatePosition = ({ currentTarget: { scrollTop, scrollY } }) => {\n const scroll = scrollTop || scrollY || 0;\n const lastKnownScrollPosition = scroll;\n let ticking = false;\n\n if (!ticking) {\n window.requestAnimationFrame(() => {\n setScrollPosition(lastKnownScrollPosition);\n ticking = false;\n });\n\n ticking = true;\n }\n };\n element.addEventListener('scroll', updatePosition);\n return () => element.removeEventListener('scroll', updatePosition);\n }, [elementRef]);\n\n return scrollPosition;\n};\n\nexport default useScrollPosition;\n","import { useEffect } from 'react';\n\n/*\nIn summary, the useIntersection hook encapsulates the setup and management of Intersection Observers for monitoring the visibility of DOM elements in the viewport. \nIt provides a clean way to handle intersection events and callbacks for those elements within a React component.\n*/\nconst listenerCallbacks = new WeakMap();\n\nlet observer;\n\nfunction handleIntersections(entries) {\n entries.forEach((entry) => {\n if (listenerCallbacks.has(entry.target)) {\n const cb = listenerCallbacks.get(entry.target);\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n observer.unobserve(entry.target);\n listenerCallbacks.delete(entry.target);\n cb();\n }\n }\n });\n}\n\nfunction getIntersectionObserver() {\n if (observer === undefined) {\n observer = new IntersectionObserver(handleIntersections, {\n rootMargin: '100px',\n threshold: '0.15'\n });\n }\n return observer;\n}\n\nexport default function useIntersection(elem, callback) {\n useEffect(() => {\n const target = elem.current;\n observer = getIntersectionObserver();\n listenerCallbacks.set(target, callback);\n observer.observe(target);\n\n return () => {\n listenerCallbacks.delete(target);\n observer.unobserve(target);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","/* eslint prettier/prettier: 0 */\nexport async function asyncForEach(array, callback) {\n for (let index = 0; index < array.length; index++) {\n // eslint-disable-next-line no-await-in-loop\n await callback(array[index], index, array);\n }\n}\n\nfunction removeNonWord(str){\n return str.replace(/[^0-9a-zA-Z\\xC0-\\xFF_-]/g, '');\n}\n\nconst Latinise={};\n\nLatinise.latin_map={\"Á\":\"A\",\n\"Ă\":\"A\",\n\"Ắ\":\"A\",\n\"Ặ\":\"A\",\n\"Ằ\":\"A\",\n\"Ẳ\":\"A\",\n\"Ẵ\":\"A\",\n\"Ǎ\":\"A\",\n\"Â\":\"A\",\n\"Ấ\":\"A\",\n\"Ậ\":\"A\",\n\"Ầ\":\"A\",\n\"Ẩ\":\"A\",\n\"Ẫ\":\"A\",\n\"Ä\":\"A\",\n\"Ǟ\":\"A\",\n\"Ȧ\":\"A\",\n\"Ǡ\":\"A\",\n\"Ạ\":\"A\",\n\"Ȁ\":\"A\",\n\"À\":\"A\",\n\"Ả\":\"A\",\n\"Ȃ\":\"A\",\n\"Ā\":\"A\",\n\"Ą\":\"A\",\n\"Å\":\"A\",\n\"Ǻ\":\"A\",\n\"Ḁ\":\"A\",\n\"Ⱥ\":\"A\",\n\"Ã\":\"A\",\n\"Ꜳ\":\"AA\",\n\"Æ\":\"AE\",\n\"Ǽ\":\"AE\",\n\"Ǣ\":\"AE\",\n\"Ꜵ\":\"AO\",\n\"Ꜷ\":\"AU\",\n\"Ꜹ\":\"AV\",\n\"Ꜻ\":\"AV\",\n\"Ꜽ\":\"AY\",\n\"Ḃ\":\"B\",\n\"Ḅ\":\"B\",\n\"Ɓ\":\"B\",\n\"Ḇ\":\"B\",\n\"Ƀ\":\"B\",\n\"Ƃ\":\"B\",\n\"Ć\":\"C\",\n\"Č\":\"C\",\n\"Ç\":\"C\",\n\"Ḉ\":\"C\",\n\"Ĉ\":\"C\",\n\"Ċ\":\"C\",\n\"Ƈ\":\"C\",\n\"Ȼ\":\"C\",\n\"Ď\":\"D\",\n\"Ḑ\":\"D\",\n\"Ḓ\":\"D\",\n\"Ḋ\":\"D\",\n\"Ḍ\":\"D\",\n\"Ɗ\":\"D\",\n\"Ḏ\":\"D\",\n\"Dz\":\"D\",\n\"Dž\":\"D\",\n\"Đ\":\"D\",\n\"Ƌ\":\"D\",\n\"DZ\":\"DZ\",\n\"DŽ\":\"DZ\",\n\"É\":\"E\",\n\"Ĕ\":\"E\",\n\"Ě\":\"E\",\n\"Ȩ\":\"E\",\n\"Ḝ\":\"E\",\n\"Ê\":\"E\",\n\"Ế\":\"E\",\n\"Ệ\":\"E\",\n\"Ề\":\"E\",\n\"Ể\":\"E\",\n\"Ễ\":\"E\",\n\"Ḙ\":\"E\",\n\"Ë\":\"E\",\n\"Ė\":\"E\",\n\"Ẹ\":\"E\",\n\"Ȅ\":\"E\",\n\"È\":\"E\",\n\"Ẻ\":\"E\",\n\"Ȇ\":\"E\",\n\"Ē\":\"E\",\n\"Ḗ\":\"E\",\n\"Ḕ\":\"E\",\n\"Ę\":\"E\",\n\"Ɇ\":\"E\",\n\"Ẽ\":\"E\",\n\"Ḛ\":\"E\",\n\"Ꝫ\":\"ET\",\n\"Ḟ\":\"F\",\n\"Ƒ\":\"F\",\n\"Ǵ\":\"G\",\n\"Ğ\":\"G\",\n\"Ǧ\":\"G\",\n\"Ģ\":\"G\",\n\"Ĝ\":\"G\",\n\"Ġ\":\"G\",\n\"Ɠ\":\"G\",\n\"Ḡ\":\"G\",\n\"Ǥ\":\"G\",\n\"Ḫ\":\"H\",\n\"Ȟ\":\"H\",\n\"Ḩ\":\"H\",\n\"Ĥ\":\"H\",\n\"Ⱨ\":\"H\",\n\"Ḧ\":\"H\",\n\"Ḣ\":\"H\",\n\"Ḥ\":\"H\",\n\"Ħ\":\"H\",\n\"Í\":\"I\",\n\"Ĭ\":\"I\",\n\"Ǐ\":\"I\",\n\"Î\":\"I\",\n\"Ï\":\"I\",\n\"Ḯ\":\"I\",\n\"İ\":\"I\",\n\"Ị\":\"I\",\n\"Ȉ\":\"I\",\n\"Ì\":\"I\",\n\"Ỉ\":\"I\",\n\"Ȋ\":\"I\",\n\"Ī\":\"I\",\n\"Į\":\"I\",\n\"Ɨ\":\"I\",\n\"Ĩ\":\"I\",\n\"Ḭ\":\"I\",\n\"Ꝺ\":\"D\",\n\"Ꝼ\":\"F\",\n\"Ᵹ\":\"G\",\n\"Ꞃ\":\"R\",\n\"Ꞅ\":\"S\",\n\"Ꞇ\":\"T\",\n\"Ꝭ\":\"IS\",\n\"Ĵ\":\"J\",\n\"Ɉ\":\"J\",\n\"Ḱ\":\"K\",\n\"Ǩ\":\"K\",\n\"Ķ\":\"K\",\n\"Ⱪ\":\"K\",\n\"Ꝃ\":\"K\",\n\"Ḳ\":\"K\",\n\"Ƙ\":\"K\",\n\"Ḵ\":\"K\",\n\"Ꝁ\":\"K\",\n\"Ꝅ\":\"K\",\n\"Ĺ\":\"L\",\n\"Ƚ\":\"L\",\n\"Ľ\":\"L\",\n\"Ļ\":\"L\",\n\"Ḽ\":\"L\",\n\"Ḷ\":\"L\",\n\"Ḹ\":\"L\",\n\"Ⱡ\":\"L\",\n\"Ꝉ\":\"L\",\n\"Ḻ\":\"L\",\n\"Ŀ\":\"L\",\n\"Ɫ\":\"L\",\n\"Lj\":\"L\",\n\"Ł\":\"L\",\n\"LJ\":\"LJ\",\n\"Ḿ\":\"M\",\n\"Ṁ\":\"M\",\n\"Ṃ\":\"M\",\n\"Ɱ\":\"M\",\n\"Ń\":\"N\",\n\"Ň\":\"N\",\n\"Ņ\":\"N\",\n\"Ṋ\":\"N\",\n\"Ṅ\":\"N\",\n\"Ṇ\":\"N\",\n\"Ǹ\":\"N\",\n\"Ɲ\":\"N\",\n\"Ṉ\":\"N\",\n\"Ƞ\":\"N\",\n\"Nj\":\"N\",\n\"Ñ\":\"N\",\n\"NJ\":\"NJ\",\n\"Ó\":\"O\",\n\"Ŏ\":\"O\",\n\"Ǒ\":\"O\",\n\"Ô\":\"O\",\n\"Ố\":\"O\",\n\"Ộ\":\"O\",\n\"Ồ\":\"O\",\n\"Ổ\":\"O\",\n\"Ỗ\":\"O\",\n\"Ö\":\"O\",\n\"Ȫ\":\"O\",\n\"Ȯ\":\"O\",\n\"Ȱ\":\"O\",\n\"Ọ\":\"O\",\n\"Ő\":\"O\",\n\"Ȍ\":\"O\",\n\"Ò\":\"O\",\n\"Ỏ\":\"O\",\n\"Ơ\":\"O\",\n\"Ớ\":\"O\",\n\"Ợ\":\"O\",\n\"Ờ\":\"O\",\n\"Ở\":\"O\",\n\"Ỡ\":\"O\",\n\"Ȏ\":\"O\",\n\"Ꝋ\":\"O\",\n\"Ꝍ\":\"O\",\n\"Ō\":\"O\",\n\"Ṓ\":\"O\",\n\"Ṑ\":\"O\",\n\"Ɵ\":\"O\",\n\"Ǫ\":\"O\",\n\"Ǭ\":\"O\",\n\"Ø\":\"O\",\n\"Ǿ\":\"O\",\n\"Õ\":\"O\",\n\"Ṍ\":\"O\",\n\"Ṏ\":\"O\",\n\"Ȭ\":\"O\",\n\"Ƣ\":\"OI\",\n\"Ꝏ\":\"OO\",\n\"Ɛ\":\"E\",\n\"Ɔ\":\"O\",\n\"Ȣ\":\"OU\",\n\"Ṕ\":\"P\",\n\"Ṗ\":\"P\",\n\"Ꝓ\":\"P\",\n\"Ƥ\":\"P\",\n\"Ꝕ\":\"P\",\n\"Ᵽ\":\"P\",\n\"Ꝑ\":\"P\",\n\"Ꝙ\":\"Q\",\n\"Ꝗ\":\"Q\",\n\"Ŕ\":\"R\",\n\"Ř\":\"R\",\n\"Ŗ\":\"R\",\n\"Ṙ\":\"R\",\n\"Ṛ\":\"R\",\n\"Ṝ\":\"R\",\n\"Ȑ\":\"R\",\n\"Ȓ\":\"R\",\n\"Ṟ\":\"R\",\n\"Ɍ\":\"R\",\n\"Ɽ\":\"R\",\n\"Ꜿ\":\"C\",\n\"Ǝ\":\"E\",\n\"Ś\":\"S\",\n\"Ṥ\":\"S\",\n\"Š\":\"S\",\n\"Ṧ\":\"S\",\n\"Ş\":\"S\",\n\"Ŝ\":\"S\",\n\"Ș\":\"S\",\n\"Ṡ\":\"S\",\n\"Ṣ\":\"S\",\n\"Ṩ\":\"S\",\n\"Ť\":\"T\",\n\"Ţ\":\"T\",\n\"Ṱ\":\"T\",\n\"Ț\":\"T\",\n\"Ⱦ\":\"T\",\n\"Ṫ\":\"T\",\n\"Ṭ\":\"T\",\n\"Ƭ\":\"T\",\n\"Ṯ\":\"T\",\n\"Ʈ\":\"T\",\n\"Ŧ\":\"T\",\n\"Ɐ\":\"A\",\n\"Ꞁ\":\"L\",\n\"Ɯ\":\"M\",\n\"Ʌ\":\"V\",\n\"Ꜩ\":\"TZ\",\n\"Ú\":\"U\",\n\"Ŭ\":\"U\",\n\"Ǔ\":\"U\",\n\"Û\":\"U\",\n\"Ṷ\":\"U\",\n\"Ü\":\"U\",\n\"Ǘ\":\"U\",\n\"Ǚ\":\"U\",\n\"Ǜ\":\"U\",\n\"Ǖ\":\"U\",\n\"Ṳ\":\"U\",\n\"Ụ\":\"U\",\n\"Ű\":\"U\",\n\"Ȕ\":\"U\",\n\"Ù\":\"U\",\n\"Ủ\":\"U\",\n\"Ư\":\"U\",\n\"Ứ\":\"U\",\n\"Ự\":\"U\",\n\"Ừ\":\"U\",\n\"Ử\":\"U\",\n\"Ữ\":\"U\",\n\"Ȗ\":\"U\",\n\"Ū\":\"U\",\n\"Ṻ\":\"U\",\n\"Ų\":\"U\",\n\"Ů\":\"U\",\n\"Ũ\":\"U\",\n\"Ṹ\":\"U\",\n\"Ṵ\":\"U\",\n\"Ꝟ\":\"V\",\n\"Ṿ\":\"V\",\n\"Ʋ\":\"V\",\n\"Ṽ\":\"V\",\n\"Ꝡ\":\"VY\",\n\"Ẃ\":\"W\",\n\"Ŵ\":\"W\",\n\"Ẅ\":\"W\",\n\"Ẇ\":\"W\",\n\"Ẉ\":\"W\",\n\"Ẁ\":\"W\",\n\"Ⱳ\":\"W\",\n\"Ẍ\":\"X\",\n\"Ẋ\":\"X\",\n\"Ý\":\"Y\",\n\"Ŷ\":\"Y\",\n\"Ÿ\":\"Y\",\n\"Ẏ\":\"Y\",\n\"Ỵ\":\"Y\",\n\"Ỳ\":\"Y\",\n\"Ƴ\":\"Y\",\n\"Ỷ\":\"Y\",\n\"Ỿ\":\"Y\",\n\"Ȳ\":\"Y\",\n\"Ɏ\":\"Y\",\n\"Ỹ\":\"Y\",\n\"Ź\":\"Z\",\n\"Ž\":\"Z\",\n\"Ẑ\":\"Z\",\n\"Ⱬ\":\"Z\",\n\"Ż\":\"Z\",\n\"Ẓ\":\"Z\",\n\"Ȥ\":\"Z\",\n\"Ẕ\":\"Z\",\n\"Ƶ\":\"Z\",\n\"IJ\":\"IJ\",\n\"Œ\":\"OE\",\n\"ᴀ\":\"A\",\n\"ᴁ\":\"AE\",\n\"ʙ\":\"B\",\n\"ᴃ\":\"B\",\n\"ᴄ\":\"C\",\n\"ᴅ\":\"D\",\n\"ᴇ\":\"E\",\n\"ꜰ\":\"F\",\n\"ɢ\":\"G\",\n\"ʛ\":\"G\",\n\"ʜ\":\"H\",\n\"ɪ\":\"I\",\n\"ʁ\":\"R\",\n\"ᴊ\":\"J\",\n\"ᴋ\":\"K\",\n\"ʟ\":\"L\",\n\"ᴌ\":\"L\",\n\"ᴍ\":\"M\",\n\"ɴ\":\"N\",\n\"ᴏ\":\"O\",\n\"ɶ\":\"OE\",\n\"ᴐ\":\"O\",\n\"ᴕ\":\"OU\",\n\"ᴘ\":\"P\",\n\"ʀ\":\"R\",\n\"ᴎ\":\"N\",\n\"ᴙ\":\"R\",\n\"ꜱ\":\"S\",\n\"ᴛ\":\"T\",\n\"ⱻ\":\"E\",\n\"ᴚ\":\"R\",\n\"ᴜ\":\"U\",\n\"ᴠ\":\"V\",\n\"ᴡ\":\"W\",\n\"ʏ\":\"Y\",\n\"ᴢ\":\"Z\",\n\"á\":\"a\",\n\"ă\":\"a\",\n\"ắ\":\"a\",\n\"ặ\":\"a\",\n\"ằ\":\"a\",\n\"ẳ\":\"a\",\n\"ẵ\":\"a\",\n\"ǎ\":\"a\",\n\"â\":\"a\",\n\"ấ\":\"a\",\n\"ậ\":\"a\",\n\"ầ\":\"a\",\n\"ẩ\":\"a\",\n\"ẫ\":\"a\",\n\"ä\":\"a\",\n\"ǟ\":\"a\",\n\"ȧ\":\"a\",\n\"ǡ\":\"a\",\n\"ạ\":\"a\",\n\"ȁ\":\"a\",\n\"à\":\"a\",\n\"ả\":\"a\",\n\"ȃ\":\"a\",\n\"ā\":\"a\",\n\"ą\":\"a\",\n\"ᶏ\":\"a\",\n\"ẚ\":\"a\",\n\"å\":\"a\",\n\"ǻ\":\"a\",\n\"ḁ\":\"a\",\n\"ⱥ\":\"a\",\n\"ã\":\"a\",\n\"ꜳ\":\"aa\",\n\"æ\":\"ae\",\n\"ǽ\":\"ae\",\n\"ǣ\":\"ae\",\n\"ꜵ\":\"ao\",\n\"ꜷ\":\"au\",\n\"ꜹ\":\"av\",\n\"ꜻ\":\"av\",\n\"ꜽ\":\"ay\",\n\"ḃ\":\"b\",\n\"ḅ\":\"b\",\n\"ɓ\":\"b\",\n\"ḇ\":\"b\",\n\"ᵬ\":\"b\",\n\"ᶀ\":\"b\",\n\"ƀ\":\"b\",\n\"ƃ\":\"b\",\n\"ɵ\":\"o\",\n\"ć\":\"c\",\n\"č\":\"c\",\n\"ç\":\"c\",\n\"ḉ\":\"c\",\n\"ĉ\":\"c\",\n\"ɕ\":\"c\",\n\"ċ\":\"c\",\n\"ƈ\":\"c\",\n\"ȼ\":\"c\",\n\"ď\":\"d\",\n\"ḑ\":\"d\",\n\"ḓ\":\"d\",\n\"ȡ\":\"d\",\n\"ḋ\":\"d\",\n\"ḍ\":\"d\",\n\"ɗ\":\"d\",\n\"ᶑ\":\"d\",\n\"ḏ\":\"d\",\n\"ᵭ\":\"d\",\n\"ᶁ\":\"d\",\n\"đ\":\"d\",\n\"ɖ\":\"d\",\n\"ƌ\":\"d\",\n\"ı\":\"i\",\n\"ȷ\":\"j\",\n\"ɟ\":\"j\",\n\"ʄ\":\"j\",\n\"dz\":\"dz\",\n\"dž\":\"dz\",\n\"é\":\"e\",\n\"ĕ\":\"e\",\n\"ě\":\"e\",\n\"ȩ\":\"e\",\n\"ḝ\":\"e\",\n\"ê\":\"e\",\n\"ế\":\"e\",\n\"ệ\":\"e\",\n\"ề\":\"e\",\n\"ể\":\"e\",\n\"ễ\":\"e\",\n\"ḙ\":\"e\",\n\"ë\":\"e\",\n\"ė\":\"e\",\n\"ẹ\":\"e\",\n\"ȅ\":\"e\",\n\"è\":\"e\",\n\"ẻ\":\"e\",\n\"ȇ\":\"e\",\n\"ē\":\"e\",\n\"ḗ\":\"e\",\n\"ḕ\":\"e\",\n\"ⱸ\":\"e\",\n\"ę\":\"e\",\n\"ᶒ\":\"e\",\n\"ɇ\":\"e\",\n\"ẽ\":\"e\",\n\"ḛ\":\"e\",\n\"ꝫ\":\"et\",\n\"ḟ\":\"f\",\n\"ƒ\":\"f\",\n\"ᵮ\":\"f\",\n\"ᶂ\":\"f\",\n\"ǵ\":\"g\",\n\"ğ\":\"g\",\n\"ǧ\":\"g\",\n\"ģ\":\"g\",\n\"ĝ\":\"g\",\n\"ġ\":\"g\",\n\"ɠ\":\"g\",\n\"ḡ\":\"g\",\n\"ᶃ\":\"g\",\n\"ǥ\":\"g\",\n\"ḫ\":\"h\",\n\"ȟ\":\"h\",\n\"ḩ\":\"h\",\n\"ĥ\":\"h\",\n\"ⱨ\":\"h\",\n\"ḧ\":\"h\",\n\"ḣ\":\"h\",\n\"ḥ\":\"h\",\n\"ɦ\":\"h\",\n\"ẖ\":\"h\",\n\"ħ\":\"h\",\n\"ƕ\":\"hv\",\n\"í\":\"i\",\n\"ĭ\":\"i\",\n\"ǐ\":\"i\",\n\"î\":\"i\",\n\"ï\":\"i\",\n\"ḯ\":\"i\",\n\"ị\":\"i\",\n\"ȉ\":\"i\",\n\"ì\":\"i\",\n\"ỉ\":\"i\",\n\"ȋ\":\"i\",\n\"ī\":\"i\",\n\"į\":\"i\",\n\"ᶖ\":\"i\",\n\"ɨ\":\"i\",\n\"ĩ\":\"i\",\n\"ḭ\":\"i\",\n\"ꝺ\":\"d\",\n\"ꝼ\":\"f\",\n\"ᵹ\":\"g\",\n\"ꞃ\":\"r\",\n\"ꞅ\":\"s\",\n\"ꞇ\":\"t\",\n\"ꝭ\":\"is\",\n\"ǰ\":\"j\",\n\"ĵ\":\"j\",\n\"ʝ\":\"j\",\n\"ɉ\":\"j\",\n\"ḱ\":\"k\",\n\"ǩ\":\"k\",\n\"ķ\":\"k\",\n\"ⱪ\":\"k\",\n\"ꝃ\":\"k\",\n\"ḳ\":\"k\",\n\"ƙ\":\"k\",\n\"ḵ\":\"k\",\n\"ᶄ\":\"k\",\n\"ꝁ\":\"k\",\n\"ꝅ\":\"k\",\n\"ĺ\":\"l\",\n\"ƚ\":\"l\",\n\"ɬ\":\"l\",\n\"ľ\":\"l\",\n\"ļ\":\"l\",\n\"ḽ\":\"l\",\n\"ȴ\":\"l\",\n\"ḷ\":\"l\",\n\"ḹ\":\"l\",\n\"ⱡ\":\"l\",\n\"ꝉ\":\"l\",\n\"ḻ\":\"l\",\n\"ŀ\":\"l\",\n\"ɫ\":\"l\",\n\"ᶅ\":\"l\",\n\"ɭ\":\"l\",\n\"ł\":\"l\",\n\"lj\":\"lj\",\n\"ſ\":\"s\",\n\"ẜ\":\"s\",\n\"ẛ\":\"s\",\n\"ẝ\":\"s\",\n\"ḿ\":\"m\",\n\"ṁ\":\"m\",\n\"ṃ\":\"m\",\n\"ɱ\":\"m\",\n\"ᵯ\":\"m\",\n\"ᶆ\":\"m\",\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\"nj\":\"nj\",\n\"ó\":\"o\",\n\"ŏ\":\"o\",\n\"ǒ\":\"o\",\n\"ô\":\"o\",\n\"ố\":\"o\",\n\"ộ\":\"o\",\n\"ồ\":\"o\",\n\"ổ\":\"o\",\n\"ỗ\":\"o\",\n\"ö\":\"o\",\n\"ȫ\":\"o\",\n\"ȯ\":\"o\",\n\"ȱ\":\"o\",\n\"ọ\":\"o\",\n\"ő\":\"o\",\n\"ȍ\":\"o\",\n\"ò\":\"o\",\n\"ỏ\":\"o\",\n\"ơ\":\"o\",\n\"ớ\":\"o\",\n\"ợ\":\"o\",\n\"ờ\":\"o\",\n\"ở\":\"o\",\n\"ỡ\":\"o\",\n\"ȏ\":\"o\",\n\"ꝋ\":\"o\",\n\"ꝍ\":\"o\",\n\"ⱺ\":\"o\",\n\"ō\":\"o\",\n\"ṓ\":\"o\",\n\"ṑ\":\"o\",\n\"ǫ\":\"o\",\n\"ǭ\":\"o\",\n\"ø\":\"o\",\n\"ǿ\":\"o\",\n\"õ\":\"o\",\n\"ṍ\":\"o\",\n\"ṏ\":\"o\",\n\"ȭ\":\"o\",\n\"ƣ\":\"oi\",\n\"ꝏ\":\"oo\",\n\"ɛ\":\"e\",\n\"ᶓ\":\"e\",\n\"ɔ\":\"o\",\n\"ᶗ\":\"o\",\n\"ȣ\":\"ou\",\n\"ṕ\":\"p\",\n\"ṗ\":\"p\",\n\"ꝓ\":\"p\",\n\"ƥ\":\"p\",\n\"ᵱ\":\"p\",\n\"ᶈ\":\"p\",\n\"ꝕ\":\"p\",\n\"ᵽ\":\"p\",\n\"ꝑ\":\"p\",\n\"ꝙ\":\"q\",\n\"ʠ\":\"q\",\n\"ɋ\":\"q\",\n\"ꝗ\":\"q\",\n\"ŕ\":\"r\",\n\"ř\":\"r\",\n\"ŗ\":\"r\",\n\"ṙ\":\"r\",\n\"ṛ\":\"r\",\n\"ṝ\":\"r\",\n\"ȑ\":\"r\",\n\"ɾ\":\"r\",\n\"ᵳ\":\"r\",\n\"ȓ\":\"r\",\n\"ṟ\":\"r\",\n\"ɼ\":\"r\",\n\"ᵲ\":\"r\",\n\"ᶉ\":\"r\",\n\"ɍ\":\"r\",\n\"ɽ\":\"r\",\n\"ↄ\":\"c\",\n\"ꜿ\":\"c\",\n\"ɘ\":\"e\",\n\"ɿ\":\"r\",\n\"ś\":\"s\",\n\"ṥ\":\"s\",\n\"š\":\"s\",\n\"ṧ\":\"s\",\n\"ş\":\"s\",\n\"ŝ\":\"s\",\n\"ș\":\"s\",\n\"ṡ\":\"s\",\n\"ṣ\":\"s\",\n\"ṩ\":\"s\",\n\"ʂ\":\"s\",\n\"ᵴ\":\"s\",\n\"ᶊ\":\"s\",\n\"ȿ\":\"s\",\n\"ɡ\":\"g\",\n\"ᴑ\":\"o\",\n\"ᴓ\":\"o\",\n\"ᴝ\":\"u\",\n\"ť\":\"t\",\n\"ţ\":\"t\",\n\"ṱ\":\"t\",\n\"ț\":\"t\",\n\"ȶ\":\"t\",\n\"ẗ\":\"t\",\n\"ⱦ\":\"t\",\n\"ṫ\":\"t\",\n\"ṭ\":\"t\",\n\"ƭ\":\"t\",\n\"ṯ\":\"t\",\n\"ᵵ\":\"t\",\n\"ƫ\":\"t\",\n\"ʈ\":\"t\",\n\"ŧ\":\"t\",\n\"ᵺ\":\"th\",\n\"ɐ\":\"a\",\n\"ᴂ\":\"ae\",\n\"ǝ\":\"e\",\n\"ᵷ\":\"g\",\n\"ɥ\":\"h\",\n\"ʮ\":\"h\",\n\"ʯ\":\"h\",\n\"ᴉ\":\"i\",\n\"ʞ\":\"k\",\n\"ꞁ\":\"l\",\n\"ɯ\":\"m\",\n\"ɰ\":\"m\",\n\"ᴔ\":\"oe\",\n\"ɹ\":\"r\",\n\"ɻ\":\"r\",\n\"ɺ\":\"r\",\n\"ⱹ\":\"r\",\n\"ʇ\":\"t\",\n\"ʌ\":\"v\",\n\"ʍ\":\"w\",\n\"ʎ\":\"y\",\n\"ꜩ\":\"tz\",\n\"ú\":\"u\",\n\"ŭ\":\"u\",\n\"ǔ\":\"u\",\n\"û\":\"u\",\n\"ṷ\":\"u\",\n\"ü\":\"u\",\n\"ǘ\":\"u\",\n\"ǚ\":\"u\",\n\"ǜ\":\"u\",\n\"ǖ\":\"u\",\n\"ṳ\":\"u\",\n\"ụ\":\"u\",\n\"ű\":\"u\",\n\"ȕ\":\"u\",\n\"ù\":\"u\",\n\"ủ\":\"u\",\n\"ư\":\"u\",\n\"ứ\":\"u\",\n\"ự\":\"u\",\n\"ừ\":\"u\",\n\"ử\":\"u\",\n\"ữ\":\"u\",\n\"ȗ\":\"u\",\n\"ū\":\"u\",\n\"ṻ\":\"u\",\n\"ų\":\"u\",\n\"ᶙ\":\"u\",\n\"ů\":\"u\",\n\"ũ\":\"u\",\n\"ṹ\":\"u\",\n\"ṵ\":\"u\",\n\"ᵫ\":\"ue\",\n\"ꝸ\":\"um\",\n\"ⱴ\":\"v\",\n\"ꝟ\":\"v\",\n\"ṿ\":\"v\",\n\"ʋ\":\"v\",\n\"ᶌ\":\"v\",\n\"ⱱ\":\"v\",\n\"ṽ\":\"v\",\n\"ꝡ\":\"vy\",\n\"ẃ\":\"w\",\n\"ŵ\":\"w\",\n\"ẅ\":\"w\",\n\"ẇ\":\"w\",\n\"ẉ\":\"w\",\n\"ẁ\":\"w\",\n\"ⱳ\":\"w\",\n\"ẘ\":\"w\",\n\"ẍ\":\"x\",\n\"ẋ\":\"x\",\n\"ᶍ\":\"x\",\n\"ý\":\"y\",\n\"ŷ\":\"y\",\n\"ÿ\":\"y\",\n\"ẏ\":\"y\",\n\"ỵ\":\"y\",\n\"ỳ\":\"y\",\n\"ƴ\":\"y\",\n\"ỷ\":\"y\",\n\"ỿ\":\"y\",\n\"ȳ\":\"y\",\n\"ẙ\":\"y\",\n\"ɏ\":\"y\",\n\"ỹ\":\"y\",\n\"ź\":\"z\",\n\"ž\":\"z\",\n\"ẑ\":\"z\",\n\"ʑ\":\"z\",\n\"ⱬ\":\"z\",\n\"ż\":\"z\",\n\"ẓ\":\"z\",\n\"ȥ\":\"z\",\n\"ẕ\":\"z\",\n\"ᵶ\":\"z\",\n\"ᶎ\":\"z\",\n\"ʐ\":\"z\",\n\"ƶ\":\"z\",\n\"ɀ\":\"z\",\n\"ff\":\"ff\",\n\"ffi\":\"ffi\",\n\"ffl\":\"ffl\",\n\"fi\":\"fi\",\n\"fl\":\"fl\",\n\"ij\":\"ij\",\n\"œ\":\"oe\",\n\"st\":\"st\",\n\"ₐ\":\"a\",\n\"ₑ\":\"e\",\n\"ᵢ\":\"i\",\n\"ⱼ\":\"j\",\n\"ₒ\":\"o\",\n\"ᵣ\":\"r\",\n\"ᵤ\":\"u\",\n\"ᵥ\":\"v\",\n\"ₓ\":\"x\"};\n\nfunction latinize(str){\n return str.replace(/[^A-Za-z0-9[\\] _]/g,(a)=> Latinise.latin_map[a]||a);\n}\n\nexport function urlify(str){\n let newStr = str.replace(/[\\s_]/g,\"-\");\n newStr = latinize(newStr);\n return removeNonWord(newStr);\n}","export const attachRelation = (parentData, relationName, relationType, relationId) => {\n const relationships = parentData?.relationships || {};\n const relations = Object.hasOwn(relationships, relationName) ? parentData?.relationships[relationName] : {};\n const relationsData = relations?.data || [];\n\n return {\n ...parentData,\n relationships: {\n ...relationships,\n [relationName]: {\n ...relations,\n data: [\n ...relationsData,\n {\n type: relationType,\n id: relationId\n }\n ]\n }\n }\n };\n};\n","import { attachRelation } from './helpers/attach-relation';\nimport { detachRelation } from './helpers/detach-relation';\n\nexport const handleApiError = (error) => {\n if (error?.response?.data?.errors) {\n return error.response.data;\n }\n\n return {\n status: error?.response?.status ?? 500,\n statusText: error?.response?.statusText ?? 'An unknown server error occurred',\n errors: [{ message: 'An unknown server error occurred' }]\n };\n};\n\nexport const createJsonApi = ({ endpoint, params: globalParams = {} }) => ({\n async getAll(params) {\n try {\n const result = await window.authedClient.get(`jsonapi/${endpoint}`, {\n params: {\n ...globalParams,\n ...params\n }\n });\n return result.data;\n } catch (error) {\n return handleApiError(error);\n }\n },\n\n async getSingle(id, params) {\n try {\n const result = await window.authedClient.get(`jsonapi/${endpoint}/${id}`, {\n params: {\n ...globalParams,\n ...params\n }\n });\n\n return result.data;\n } catch (error) {\n return handleApiError(error);\n }\n },\n\n async create(props) {\n const data = {\n type: endpoint,\n attributes: props.attributes ?? props,\n relationships: props.relationships\n };\n\n try {\n return await window.authedClient.post(`jsonapi/${endpoint}`, { data });\n } catch (error) {\n return handleApiError(error);\n }\n },\n\n async update(data) {\n try {\n const result = await window.authedClient.patch(`jsonapi/${endpoint}/${data.id}`, {\n data: this.stripDates(this.getCleanedData(data))\n });\n return result.data;\n } catch (error) {\n return handleApiError(error);\n }\n },\n\n async delete(id) {\n const data = {\n data: {\n type: endpoint,\n id\n }\n };\n\n try {\n return await window.authedClient.delete(`jsonapi/${endpoint}/${id}`, { data });\n } catch (error) {\n return handleApiError(error);\n }\n },\n\n /**\n * Attaches a child to a parent\n *\n * Example structure of a relationship:\n * \"relationships\": {\n * \"activities\": {\n * \"data\": [\n * {\n * \"type\": \"function_activity\",\n * \"id\": \"4852ae04-20f3-4945-8b1e-260df21f5713\",\n * \"meta\": {\n * \"drupal_internal__target_id\": 1\n * }\n * }\n * ],\n * \"links\": {\n * \"related\": {\n * \"href\": \"http://learn.aws-staging.pe-academy.nl/jsonapi/portfolio_function/8fd5848f-b2b2-4b50-8f14-6019047f0727/activities\"\n * },\n * \"self\": {\n * \"href\": \"http://learn.aws-staging.pe-academy.nl/jsonapi/portfolio_function/8fd5848f-b2b2-4b50-8f14-6019047f0727/relationships/activities\"\n * }\n * }\n * }\n * }\n *\n * @param {*} parentData The data node of the parent object (so without the included node, etc.)\n * @param {*} relationName The node name of the relation to bind (e.g. functions)\n * @param {*} relationType The data type of the relation to bind (e.g. portfolio_function)\n * @param {*} relationId The uid of the function_activity to bind\n * @returns\n */\n async attach(parentData, relationName, relationType, relationId) {\n const data = attachRelation(parentData, relationName, relationType, relationId);\n return this.update(data);\n },\n\n async detach(parentData, relationName, relationIds) {\n const data = detachRelation(parentData, relationName, relationIds);\n return this.update(data);\n },\n\n /**\n * Removes all missing relations from the data object\n *\n * @param {*} data The data node of the object to clean {attributes: {}, relationships: {}}\n * @returns\n */\n getCleanedData(data) {\n const relationships = {};\n\n if (!data.relationships) return data;\n\n Object.keys(data.relationships).forEach((key) => {\n if (['uid', 'override_file'].includes(key)) {\n relationships[key] = data.relationships[key];\n return;\n }\n\n const cleanedRelationship = {\n ...data.relationships[key],\n data: data.relationships[key].data.filter((d) => d.id !== 'missing')\n };\n relationships[key] = cleanedRelationship;\n });\n\n return {\n ...data,\n relationships\n };\n },\n\n stripDates(data) {\n return {\n ...data,\n attributes: {\n ...data.attributes,\n created: undefined,\n changed: undefined\n }\n };\n }\n});\n","export const detachRelation = (parentData, relationName, relationIds) => {\n const ids = Array.isArray(relationIds) ? relationIds : [relationIds];\n\n if (!parentData?.relationships) {\n return parentData;\n }\n\n if (!Object.hasOwn(parentData.relationships, relationName)) {\n return parentData;\n }\n\n const relation = parentData.relationships[relationName];\n const relationData = relation?.data || null;\n\n if (!relationData) {\n return parentData;\n }\n\n const hasRelation = relationData.map((d) => ids.includes(d.id));\n\n if (!hasRelation) {\n return parentData;\n }\n\n return {\n ...parentData,\n relationships: {\n ...parentData.relationships,\n [relationName]: {\n ...relation,\n data: relationData.filter((d) => !ids.includes(d.id))\n }\n }\n };\n};\n","import { createJsonApi, handleApiError } from 'state/api/JsonApi';\n\nexport const createCurriculumApi = () => {\n const curriculumApi = {\n ...createJsonApi({\n endpoint: 'portfolio',\n params: {\n include: `functions,functions.activities,learning_goals,learning_goals.activities,learning_goals.evaluations,learning_goals.evaluations.courses,override_file`\n }\n }),\n async getAll(params) {\n try {\n const searchParams = new URLSearchParams(params);\n const response = await window.authedClient.post(`ewapi/portfolios/0?${searchParams.toString()}`);\n return response.data.data;\n } catch (error) {\n return handleApiError(error);\n }\n }\n };\n\n const curriculumFunctionApi = createJsonApi({\n endpoint: 'portfolio_function',\n params: {\n include: `activities`\n }\n });\n\n const curriculumFunctionActivityApi = createJsonApi({\n endpoint: 'function_activity'\n });\n\n const curriculumLearningGoalApi = createJsonApi({\n endpoint: 'learning_goal',\n params: {\n include: `activities,evaluations`\n }\n });\n\n const curriculumLearningGoalActivityApi = createJsonApi({\n endpoint: 'learning_goal_activity'\n });\n\n const curriculumLearningGoalEvaluationApi = createJsonApi({\n endpoint: 'learning_goal_evaluation',\n params: {\n include: `courses`\n }\n });\n\n const curriculumFunctionExamplesApi = createJsonApi({\n endpoint: 'portfolio_function_examples'\n });\n\n const curriculumLearningGoalExamplesApi = createJsonApi({\n endpoint: 'portfolio_learning_goal_examples'\n });\n\n const curriculumLearningGoalActivityExamplesApi = createJsonApi({\n endpoint: 'portfolio_activity_examples'\n });\n\n return {\n curriculumApi,\n curriculumFunctionApi,\n curriculumFunctionActivityApi,\n curriculumLearningGoalApi,\n curriculumLearningGoalActivityApi,\n curriculumLearningGoalEvaluationApi,\n curriculumFunctionExamplesApi,\n curriculumLearningGoalExamplesApi,\n curriculumLearningGoalActivityExamplesApi\n };\n};\n","/* eslint-disable */\n/* Polyfill service v3.34.0\n URL: https://polyfill.io/v3/polyfill.js?features=Element%2CElement.prototype.toggleAttribute%2CElement.prototype.replaceWith%2CElement.prototype.remove%2CElement.prototype.prepend%2CElement.prototype.placeholder%2CElement.prototype.matches%2CElement.prototype.dataset%2CElement.prototype.closest%2CElement.prototype.cloneNode%2CElement.prototype.classList%2CElement.prototype.before%2CElement.prototype.append%2CElement.prototype.after%2CNodeList.prototype.forEach\n Element.prototype.toggleAttribute\n Element.prototype.replaceWith\n Element.prototype.remove\n Element.prototype.prepend\n Element.prototype.placeholder\n Element.prototype.matches\n Element.prototype.dataset\n Element.prototype.closest\n Element.prototype.cloneNode\n Element.prototype.classList\n Element.prototype.before\n Element.prototype.append\n Element.prototype.after\n NodeList.prototype.forEach\n*/\n(function(undefined) {\n var _DOMTokenList = (function() { // eslint-disable-line no-unused-vars\n var dpSupport = true;\n var defineGetter = function (object, name, fn, configurable) {\n if (Object.defineProperty)\n Object.defineProperty(object, name, {\n configurable: false === dpSupport ? true : !!configurable,\n get: fn\n });\n\n else object.__defineGetter__(name, fn);\n };\n\n /** Ensure the browser allows Object.defineProperty to be used on native JavaScript objects. */\n try {\n defineGetter({}, \"support\");\n }\n catch (e) {\n dpSupport = false;\n }\n\n\n var _DOMTokenList = function (el, prop) {\n var that = this;\n var tokens = [];\n var tokenMap = {};\n var length = 0;\n var maxLength = 0;\n var addIndexGetter = function (i) {\n defineGetter(that, i, function () {\n preop();\n return tokens[i];\n }, false);\n\n };\n var reindex = function () {\n\n /** Define getter functions for array-like access to the tokenList's contents. */\n if (length >= maxLength)\n for (; maxLength < length; ++maxLength) {\n addIndexGetter(maxLength);\n }\n };\n\n /** Helper function called at the start of each class method. Internal use only. */\n var preop = function () {\n var error;\n var i;\n var args = arguments;\n var rSpace = /\\s+/;\n\n /** Validate the token/s passed to an instance method, if any. */\n if (args.length)\n for (i = 0; i < args.length; ++i)\n if (rSpace.test(args[i])) {\n error = new SyntaxError('String \"' + args[i] + '\" ' + \"contains\" + ' an invalid character');\n error.code = 5;\n error.name = \"InvalidCharacterError\";\n throw error;\n }\n\n\n /** Split the new value apart by whitespace*/\n if (typeof el[prop] === \"object\") {\n tokens = (\"\" + el[prop].baseVal).replace(/^\\s+|\\s+$/g, \"\").split(rSpace);\n } else {\n tokens = (\"\" + el[prop]).replace(/^\\s+|\\s+$/g, \"\").split(rSpace);\n }\n\n /** Avoid treating blank strings as single-item token lists */\n if (\"\" === tokens[0]) tokens = [];\n\n /** Repopulate the internal token lists */\n tokenMap = {};\n for (i = 0; i < tokens.length; ++i)\n tokenMap[tokens[i]] = true;\n length = tokens.length;\n reindex();\n };\n\n /** Populate our internal token list if the targeted attribute of the subject element isn't empty. */\n preop();\n\n /** Return the number of tokens in the underlying string. Read-only. */\n defineGetter(that, \"length\", function () {\n preop();\n return length;\n });\n\n /** Override the default toString/toLocaleString methods to return a space-delimited list of tokens when typecast. */\n that.toLocaleString =\n that.toString = function () {\n preop();\n return tokens.join(\" \");\n };\n\n that.item = function (idx) {\n preop();\n return tokens[idx];\n };\n\n that.contains = function (token) {\n preop();\n return !!tokenMap[token];\n };\n\n that.add = function () {\n preop.apply(that, args = arguments);\n\n for (var args, token, i = 0, l = args.length; i < l; ++i) {\n token = args[i];\n if (!tokenMap[token]) {\n tokens.push(token);\n tokenMap[token] = true;\n }\n }\n\n /** Update the targeted attribute of the attached element if the token list's changed. */\n if (length !== tokens.length) {\n length = tokens.length >>> 0;\n if (typeof el[prop] === \"object\") {\n el[prop].baseVal = tokens.join(\" \");\n } else {\n el[prop] = tokens.join(\" \");\n }\n reindex();\n }\n };\n\n that.remove = function () {\n preop.apply(that, args = arguments);\n\n /** Build a hash of token names to compare against when recollecting our token list. */\n for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) {\n ignore[args[i]] = true;\n delete tokenMap[args[i]];\n }\n\n /** Run through our tokens list and reassign only those that aren't defined in the hash declared above. */\n for (i = 0; i < tokens.length; ++i)\n if (!ignore[tokens[i]]) t.push(tokens[i]);\n\n tokens = t;\n length = t.length >>> 0;\n\n /** Update the targeted attribute of the attached element. */\n if (typeof el[prop] === \"object\") {\n el[prop].baseVal = tokens.join(\" \");\n } else {\n el[prop] = tokens.join(\" \");\n }\n reindex();\n };\n\n that.toggle = function (token, force) {\n preop.apply(that, [token]);\n\n /** Token state's being forced. */\n if (undefined !== force) {\n if (force) {\n that.add(token);\n return true;\n } else {\n that.remove(token);\n return false;\n }\n }\n\n /** Token already exists in tokenList. Remove it, and return FALSE. */\n if (tokenMap[token]) {\n that.remove(token);\n return false;\n }\n\n /** Otherwise, add the token and return TRUE. */\n that.add(token);\n return true;\n };\n\n return that;\n };\n\n return _DOMTokenList;\n }());\n\n // _ESAbstract.Call\n /* global IsCallable */\n // 7.3.12. Call ( F, V [ , argumentsList ] )\n function Call(F, V /* [, argumentsList] */) { // eslint-disable-line no-unused-vars\n // 1. If argumentsList is not present, set argumentsList to a new empty List.\n var argumentsList = arguments.length > 2 ? arguments[2] : [];\n // 2. If IsCallable(F) is false, throw a TypeError exception.\n if (IsCallable(F) === false) {\n throw new TypeError(Object.prototype.toString.call(F) + 'is not a function.');\n }\n // 3. Return ? F.[[Call]](V, argumentsList).\n return F.apply(V, argumentsList);\n }\n\n // _ESAbstract.CreateMethodProperty\n // 7.3.5. CreateMethodProperty ( O, P, V )\n function CreateMethodProperty(O, P, V) { // eslint-disable-line no-unused-vars\n // 1. Assert: Type(O) is Object.\n // 2. Assert: IsPropertyKey(P) is true.\n // 3. Let newDesc be the PropertyDescriptor{[[Value]]: V, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.\n var newDesc = {\n value: V,\n writable: true,\n enumerable: false,\n configurable: true\n };\n // 4. Return ? O.[[DefineOwnProperty]](P, newDesc).\n Object.defineProperty(O, P, newDesc);\n }\n\n // _ESAbstract.Get\n // 7.3.1. Get ( O, P )\n function Get(O, P) { // eslint-disable-line no-unused-vars\n // 1. Assert: Type(O) is Object.\n // 2. Assert: IsPropertyKey(P) is true.\n // 3. Return ? O.[[Get]](P, O).\n return O[P];\n }\n\n // _ESAbstract.IsCallable\n // 7.2.3. IsCallable ( argument )\n function IsCallable(argument) { // eslint-disable-line no-unused-vars\n // 1. If Type(argument) is not Object, return false.\n // 2. If argument has a [[Call]] internal method, return true.\n // 3. Return false.\n\n // Polyfill.io - Only function objects have a [[Call]] internal method. This means we can simplify this function to check that the argument has a type of function.\n return typeof argument === 'function';\n }\n\n // _ESAbstract.RequireObjectCoercible\n // 7.2.1. RequireObjectCoercible ( argument )\n // The abstract operation ToObject converts argument to a value of type Object according to Table 12:\n // Table 12: ToObject Conversions\n /*\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n | Argument Type | Result |\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n | Undefined | Throw a TypeError exception. |\n | Null | Throw a TypeError exception. |\n | Boolean | Return argument. |\n | Number | Return argument. |\n | String | Return argument. |\n | Symbol | Return argument. |\n | Object | Return argument. |\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n */\n function RequireObjectCoercible(argument) { // eslint-disable-line no-unused-vars\n if (argument === null || argument === undefined) {\n throw TypeError();\n }\n return argument;\n }\n\n // _ESAbstract.ToInteger\n // 7.1.4. ToInteger ( argument )\n function ToInteger(argument) { // eslint-disable-line no-unused-vars\n // 1. Let number be ? ToNumber(argument).\n var number = Number(argument);\n // 2. If number is NaN, return +0.\n if (isNaN(number)) {\n return 0;\n }\n // 3. If number is +0, -0, +∞, or -∞, return number.\n if (1/number === Infinity || 1/number === -Infinity || number === Infinity || number === -Infinity) {\n return number;\n }\n // 4. Return the number value that is the same sign as number and whose magnitude is floor(abs(number)).\n return ((number < 0) ? -1 : 1) * Math.floor(Math.abs(number));\n }\n\n // _ESAbstract.ToObject\n // 7.1.13 ToObject ( argument )\n // The abstract operation ToObject converts argument to a value of type Object according to Table 12:\n // Table 12: ToObject Conversions\n /*\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n | Argument Type | Result |\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n | Undefined | Throw a TypeError exception. |\n | Null | Throw a TypeError exception. |\n | Boolean | Return a new Boolean object whose [[BooleanData]] internal slot is set to argument. See 19.3 for a description of Boolean objects. |\n | Number | Return a new Number object whose [[NumberData]] internal slot is set to argument. See 20.1 for a description of Number objects. |\n | String | Return a new String object whose [[StringData]] internal slot is set to argument. See 21.1 for a description of String objects. |\n | Symbol | Return a new Symbol object whose [[SymbolData]] internal slot is set to argument. See 19.4 for a description of Symbol objects. |\n | Object | Return argument. |\n |----------------------------------------------------------------------------------------------------------------------------------------------------|\n */\n function ToObject(argument) { // eslint-disable-line no-unused-vars\n if (argument === null || argument === undefined) {\n throw TypeError();\n }\n return Object(argument);\n }\n\n // _ESAbstract.GetV\n /* global ToObject */\n // 7.3.2 GetV (V, P)\n function GetV(v, p) { // eslint-disable-line no-unused-vars\n // 1. Assert: IsPropertyKey(P) is true.\n // 2. Let O be ? ToObject(V).\n var o = ToObject(v);\n // 3. Return ? O.[[Get]](P, V).\n return o[p];\n }\n\n // _ESAbstract.GetMethod\n /* global GetV, IsCallable */\n // 7.3.9. GetMethod ( V, P )\n function GetMethod(V, P) { // eslint-disable-line no-unused-vars\n // 1. Assert: IsPropertyKey(P) is true.\n // 2. Let func be ? GetV(V, P).\n var func = GetV(V, P);\n // 3. If func is either undefined or null, return undefined.\n if (func === null || func === undefined) {\n return undefined;\n }\n // 4. If IsCallable(func) is false, throw a TypeError exception.\n if (IsCallable(func) === false) {\n throw new TypeError('Method not callable: ' + P);\n }\n // 5. Return func.\n return func;\n }\n\n // _ESAbstract.Type\n // \"Type(x)\" is used as shorthand for \"the type of x\"...\n function Type(x) { // eslint-disable-line no-unused-vars\n switch (typeof x) {\n case 'undefined':\n return 'undefined';\n case 'boolean':\n return 'boolean';\n case 'number':\n return 'number';\n case 'string':\n return 'string';\n case 'symbol':\n return 'symbol';\n default:\n // typeof null is 'object'\n if (x === null) return 'null';\n // Polyfill.io - This is here because a Symbol polyfill will have a typeof `object`.\n if ('Symbol' in this && x instanceof this.Symbol) return 'symbol';\n return 'object';\n }\n }\n\n // _ESAbstract.OrdinaryToPrimitive\n /* global Get, IsCallable, Call, Type */\n // 7.1.1.1. OrdinaryToPrimitive ( O, hint )\n function OrdinaryToPrimitive(O, hint) { // eslint-disable-line no-unused-vars\n // 1. Assert: Type(O) is Object.\n // 2. Assert: Type(hint) is String and its value is either \"string\" or \"number\".\n // 3. If hint is \"string\", then\n if (hint === 'string') {\n // a. Let methodNames be « \"toString\", \"valueOf\" ».\n var methodNames = ['toString', 'valueOf'];\n // 4. Else,\n } else {\n // a. Let methodNames be « \"valueOf\", \"toString\" ».\n methodNames = ['valueOf', 'toString'];\n }\n // 5. For each name in methodNames in List order, do\n for (var i = 0; i < methodNames.length; ++i) {\n var name = methodNames[i];\n // a. Let method be ? Get(O, name).\n var method = Get(O, name);\n // b. If IsCallable(method) is true, then\n if (IsCallable(method)) {\n // i. Let result be ? Call(method, O).\n var result = Call(method, O);\n // ii. If Type(result) is not Object, return result.\n if (Type(result) !== 'object') {\n return result;\n }\n }\n }\n // 6. Throw a TypeError exception.\n throw new TypeError('Cannot convert to primitive.');\n }\n\n // _ESAbstract.ToPrimitive\n /* global Type, GetMethod, Call, OrdinaryToPrimitive */\n // 7.1.1. ToPrimitive ( input [ , PreferredType ] )\n function ToPrimitive(input /* [, PreferredType] */) { // eslint-disable-line no-unused-vars\n var PreferredType = arguments.length > 1 ? arguments[1] : undefined;\n // 1. Assert: input is an ECMAScript language value.\n // 2. If Type(input) is Object, then\n if (Type(input) === 'object') {\n // a. If PreferredType is not present, let hint be \"default\".\n if (arguments.length < 2) {\n var hint = 'default';\n // b. Else if PreferredType is hint String, let hint be \"string\".\n } else if (PreferredType === String) {\n hint = 'string';\n // c. Else PreferredType is hint Number, let hint be \"number\".\n } else if (PreferredType === Number) {\n hint = 'number';\n }\n // d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).\n var exoticToPrim = typeof this.Symbol === 'function' && typeof this.Symbol.toPrimitive === 'symbol' ? GetMethod(input, this.Symbol.toPrimitive) : undefined;\n // e. If exoticToPrim is not undefined, then\n if (exoticToPrim !== undefined) {\n // i. Let result be ? Call(exoticToPrim, input, « hint »).\n var result = Call(exoticToPrim, input, [hint]);\n // ii. If Type(result) is not Object, return result.\n if (Type(result) !== 'object') {\n return result;\n }\n // iii. Throw a TypeError exception.\n throw new TypeError('Cannot convert exotic object to primitive.');\n }\n // f. If hint is \"default\", set hint to \"number\".\n if (hint === 'default') {\n hint = 'number';\n }\n // g. Return ? OrdinaryToPrimitive(input, hint).\n return OrdinaryToPrimitive(input, hint);\n }\n // 3. Return input\n return input;\n }\n\n // _ESAbstract.ToString\n /* global Type, ToPrimitive */\n // 7.1.12. ToString ( argument )\n // The abstract operation ToString converts argument to a value of type String according to Table 11:\n // Table 11: ToString Conversions\n /*\n |---------------|--------------------------------------------------------|\n | Argument Type | Result |\n |---------------|--------------------------------------------------------|\n | Undefined | Return \"undefined\". |\n |---------------|--------------------------------------------------------|\n | Null\t | Return \"null\". |\n |---------------|--------------------------------------------------------|\n | Boolean | If argument is true, return \"true\". |\n | | If argument is false, return \"false\". |\n |---------------|--------------------------------------------------------|\n | Number | Return NumberToString(argument). |\n |---------------|--------------------------------------------------------|\n | String | Return argument. |\n |---------------|--------------------------------------------------------|\n | Symbol | Throw a TypeError exception. |\n |---------------|--------------------------------------------------------|\n | Object | Apply the following steps: |\n | | Let primValue be ? ToPrimitive(argument, hint String). |\n | | Return ? ToString(primValue). |\n |---------------|--------------------------------------------------------|\n */\n function ToString(argument) { // eslint-disable-line no-unused-vars\n switch(Type(argument)) {\n case 'symbol':\n throw new TypeError('Cannot convert a Symbol value to a string');\n break;\n case 'object':\n var primValue = ToPrimitive(argument, 'string');\n return ToString(primValue);\n default:\n return String(argument);\n }\n }\n\n // _mutation\n var _mutation = (function () { // eslint-disable-line no-unused-vars\n\n function isNode(object) {\n // DOM, Level2\n if (typeof Node === 'function') {\n return object instanceof Node;\n }\n // Older browsers, check if it looks like a Node instance)\n return object &&\n typeof object === \"object\" &&\n object.nodeName &&\n object.nodeType >= 1 &&\n object.nodeType <= 12;\n }\n\n // http://dom.spec.whatwg.org/#mutation-method-macro\n return function mutation(nodes) {\n if (nodes.length === 1) {\n return isNode(nodes[0]) ? nodes[0] : document.createTextNode(nodes[0] + '');\n }\n\n var fragment = document.createDocumentFragment();\n for (var i = 0; i < nodes.length; i++) {\n fragment.appendChild(isNode(nodes[i]) ? nodes[i] : document.createTextNode(nodes[i] + ''));\n\n }\n return fragment;\n };\n }());\n\n // DocumentFragment.prototype.prepend\n DocumentFragment.prototype.prepend = function prepend() {\n this.insertBefore(_mutation(arguments), this.firstChild);\n };\n\n // DOMTokenList\n (function (global) {\n var nativeImpl = \"DOMTokenList\" in global && global.DOMTokenList;\n\n if (\n !nativeImpl ||\n (\n !!document.createElementNS &&\n !!document.createElementNS('http://www.w3.org/2000/svg', 'svg') &&\n !(document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\").classList instanceof DOMTokenList)\n )\n ) {\n global.DOMTokenList = _DOMTokenList;\n }\n\n // Add second argument to native DOMTokenList.toggle() if necessary\n (function () {\n var e = document.createElement('span');\n if (!('classList' in e)) return;\n e.classList.toggle('x', false);\n if (!e.classList.contains('x')) return;\n e.classList.constructor.prototype.toggle = function toggle(token /*, force*/) {\n var force = arguments[1];\n if (force === undefined) {\n var add = !this.contains(token);\n this[add ? 'add' : 'remove'](token);\n return add;\n }\n force = !!force;\n this[force ? 'add' : 'remove'](token);\n return force;\n };\n }());\n\n // Add multiple arguments to native DOMTokenList.add() if necessary\n (function () {\n var e = document.createElement('span');\n if (!('classList' in e)) return;\n e.classList.add('a', 'b');\n if (e.classList.contains('b')) return;\n var native = e.classList.constructor.prototype.add;\n e.classList.constructor.prototype.add = function () {\n var args = arguments;\n var l = arguments.length;\n for (var i = 0; i < l; i++) {\n native.call(this, args[i]);\n }\n };\n }());\n\n // Add multiple arguments to native DOMTokenList.remove() if necessary\n (function () {\n var e = document.createElement('span');\n if (!('classList' in e)) return;\n e.classList.add('a');\n e.classList.add('b');\n e.classList.remove('a', 'b');\n if (!e.classList.contains('b')) return;\n var native = e.classList.constructor.prototype.remove;\n e.classList.constructor.prototype.remove = function () {\n var args = arguments;\n var l = arguments.length;\n for (var i = 0; i < l; i++) {\n native.call(this, args[i]);\n }\n };\n }());\n\n }(this));\n\n // Element.prototype.after\n Document.prototype.after = Element.prototype.after = function after() {\n if (this.parentNode) {\n var args = Array.prototype.slice.call(arguments),\n viableNextSibling = this.nextSibling,\n idx = viableNextSibling ? args.indexOf(viableNextSibling) : -1;\n\n while (idx !== -1) {\n viableNextSibling = viableNextSibling.nextSibling;\n if (!viableNextSibling) {\n break;\n }\n idx = args.indexOf(viableNextSibling);\n }\n\n this.parentNode.insertBefore(_mutation(arguments), viableNextSibling);\n }\n };\n\n // Not all UAs support the Text constructor. Polyfill on the Text constructor only where it exists\n // TODO: Add a polyfill for the Text constructor, and make it a dependency of this polyfill.\n if (\"Text\" in this) {\n Text.prototype.after = Element.prototype.after;\n }\n\n // Element.prototype.append\n Document.prototype.append = Element.prototype.append = function append() {\n this.appendChild(_mutation(arguments));\n };\n\n // Element.prototype.before\n Document.prototype.before = Element.prototype.before = function before() {\n if (this.parentNode) {\n var args = Array.prototype.slice.call(arguments),\n viablePreviousSibling = this.previousSibling,\n idx = viablePreviousSibling ? args.indexOf(viablePreviousSibling) : -1;\n\n while (idx !== -1) {\n viablePreviousSibling = viablePreviousSibling.previousSibling;\n if (!viablePreviousSibling) {\n break;\n }\n idx = args.indexOf(viablePreviousSibling);\n }\n\n this.parentNode.insertBefore(\n _mutation(arguments),\n viablePreviousSibling ? viablePreviousSibling.nextSibling : this.parentNode.firstChild\n );\n }\n };\n\n // Not all UAs support the Text constructor. Polyfill on the Text constructor only where it exists\n // TODO: Add a polyfill for the Text constructor, and make it a dependency of this polyfill.\n if (\"Text\" in this) {\n Text.prototype.before = Element.prototype.before;\n }\n\n // Element.prototype.classList\n /*\n Copyright (c) 2016, John Gardner\n\n Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n (function (global) {\n var dpSupport = true;\n var defineGetter = function (object, name, fn, configurable) {\n if (Object.defineProperty)\n Object.defineProperty(object, name, {\n configurable: false === dpSupport ? true : !!configurable,\n get: fn\n });\n\n else object.__defineGetter__(name, fn);\n };\n /** Ensure the browser allows Object.defineProperty to be used on native JavaScript objects. */\n try {\n defineGetter({}, \"support\");\n }\n catch (e) {\n dpSupport = false;\n }\n /** Polyfills a property with a DOMTokenList */\n var addProp = function (o, name, attr) {\n\n defineGetter(o.prototype, name, function () {\n var tokenList;\n\n var THIS = this,\n\n /** Prevent this from firing twice for some reason. What the hell, IE. */\n gibberishProperty = \"__defineGetter__\" + \"DEFINE_PROPERTY\" + name;\n if(THIS[gibberishProperty]) return tokenList;\n THIS[gibberishProperty] = true;\n\n /**\n * IE8 can't define properties on native JavaScript objects, so we'll use a dumb hack instead.\n *\n * What this is doing is creating a dummy element (\"reflection\") inside a detached phantom node (\"mirror\")\n * that serves as the target of Object.defineProperty instead. While we could simply use the subject HTML\n * element instead, this would conflict with element types which use indexed properties (such as forms and\n * select lists).\n */\n if (false === dpSupport) {\n\n var visage;\n var mirror = addProp.mirror || document.createElement(\"div\");\n var reflections = mirror.childNodes;\n var l = reflections.length;\n\n for (var i = 0; i < l; ++i)\n if (reflections[i]._R === THIS) {\n visage = reflections[i];\n break;\n }\n\n /** Couldn't find an element's reflection inside the mirror. Materialise one. */\n visage || (visage = mirror.appendChild(document.createElement(\"div\")));\n\n tokenList = DOMTokenList.call(visage, THIS, attr);\n } else tokenList = new DOMTokenList(THIS, attr);\n\n defineGetter(THIS, name, function () {\n return tokenList;\n });\n delete THIS[gibberishProperty];\n\n return tokenList;\n }, true);\n };\n\n addProp(global.Element, \"classList\", \"className\");\n addProp(global.HTMLElement, \"classList\", \"className\");\n addProp(global.HTMLLinkElement, \"relList\", \"rel\");\n addProp(global.HTMLAnchorElement, \"relList\", \"rel\");\n addProp(global.HTMLAreaElement, \"relList\", \"rel\");\n }(this));\n\n // Element.prototype.matches\n Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function matches(selector) {\n\n var element = this;\n var elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n var index = 0;\n\n while (elements[index] && elements[index] !== element) {\n ++index;\n }\n\n return !!elements[index];\n };\n\n // Element.prototype.closest\n Element.prototype.closest = function closest(selector) {\n var node = this;\n\n while (node) {\n if (node.matches(selector)) return node;\n else node = 'SVGElement' in window && node instanceof SVGElement ? node.parentNode : node.parentElement;\n }\n\n return null;\n };\n\n // Element.prototype.prepend\n Document.prototype.prepend = Element.prototype.prepend = function prepend() {\n this.insertBefore(_mutation(arguments), this.firstChild);\n };\n\n // Element.prototype.remove\n Document.prototype.remove = Element.prototype.remove = function remove() {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n\n // Not all UAs support the Text constructor. Polyfill on the Text constructor only where it exists\n // TODO: Add a polyfill for the Text constructor, and make it a dependency of this polyfill.\n if (\"Text\" in this) {\n Text.prototype.remove = Element.prototype.remove;\n }\n\n // Element.prototype.replaceWith\n Document.prototype.replaceWith = Element.prototype.replaceWith = function replaceWith() {\n if (this.parentNode) {\n this.parentNode.replaceChild(_mutation(arguments), this);\n }\n };\n\n // Not all UAs support the Text constructor. Polyfill on the Text constructor only where it exists\n // TODO: Add a polyfill for the Text constructor, and make it a dependency of this polyfill.\n if ('Text' in this) {\n Text.prototype.replaceWith = Element.prototype.replaceWith;\n }\n\n // Element.prototype.toggleAttribute\n Element.prototype.toggleAttribute = function toggleAttribute(name, force) {\n if (force !== undefined) {\n force = !!force;\n }\n if (this.getAttribute(name) !== null) {\n if (force) {\n return true;\n }\n this.removeAttribute(name);\n return false;\n } else {\n if (force === false) {\n return false;\n }\n this.setAttribute(name, '');\n return true;\n }\n };\n\n // NodeList.prototype.forEach\n NodeList.prototype.forEach = Array.prototype.forEach;\n // String.prototype.repeat\n /* global CreateMethodProperty, RequireObjectCoercible, ToInteger, ToString */\n // 21.1.3.15String.prototype.repeat ( count )\n CreateMethodProperty(String.prototype, 'repeat', function repeat(count) {\n 'use strict';\n // 1. Let O be ? RequireObjectCoercible(this value).\n var O = RequireObjectCoercible(this);\n // 2. Let S be ? ToString(O).\n var S = ToString(O);\n // 3. Let n be ? ToInteger(count).\n var n = ToInteger(count);\n // 4. If n < 0, throw a RangeError exception.\n if (n < 0) {\n throw new RangeError('Invalid count value');\n }\n // 5. If n is +∞, throw a RangeError exception.\n if (n === Infinity) {\n throw new RangeError('Invalid count value');\n }\n // 6. Let T be the String value that is made from n copies of S appended together. If n is 0, T is the empty String.\n var T = n === 0 ? '' : new Array(n + 1).join(S);\n // 7. Return T.\n return T;\n });\n })\n.call('object' === typeof window && window || 'object' === typeof window.self && window.self || 'object' === typeof global && global || {});","/* eslint-disable no-template-curly-in-string */\n\nconst types = {\n number: 'een numerieke waarde',\n bool: 'Ja / Nee',\n string: 'een alphanumerieke waarde',\n array: 'een lijst van waarden',\n object: 'een object',\n date: 'een geldige datum'\n};\n\nconst getTypeTranslation = (type) => types[type] || `een \"${type}\" type`;\n\n// Based on https://github.com/jquense/yup/blob/b940eef48eb7456622ae384d0ffa7363d4fbad25/src/locale.ts\nexport const mixed = {\n default: 'De waarde is ongeldig.',\n required: 'Dit is een vereist veld',\n defined: 'Dit veld moet worden gedefinieerd',\n notNull: 'Dit veld kan niet leeg zijn',\n oneOf: 'De waarde moet een van de volgende waarden zijn: ${values}',\n notOneOf: 'De waarde mag niet een van de volgende waarden zijn: ${values}',\n notType: ({ type }) => `De waarde moet ${getTypeTranslation(type)} zijn`\n};\n\nexport const string = {\n length: 'De waarde moet precies ${length} tekens zijn',\n min: 'De waarde moet op zijn minst ${min} tekens zijn',\n max: 'De waarde moet maximaal ${max} tekens zijn',\n matches: 'De waarde moet overeenkomen met: \"${regex}\"',\n email: 'De waarde moet een geldige e-mail zijn',\n url: 'De waarde moet een geldige URL zijn',\n uuid: 'De waarde moet een geldige uuid zijn',\n trim: 'De waarde mag geen begin- of eindspaties bevatten',\n lowercase: 'De waarde mag alleen bestaan uit kleine letters',\n uppercase: 'De waarde mag alleen bestaan uit hoofdletters'\n};\n\nexport const number = {\n min: 'De waarde moet groter dan of gelijk zijn aan ${min}',\n max: 'De waarde moet kleiner dan of gelijk zijn aan ${max}',\n lessThan: 'De waarde moet minder zijn dan ${less}',\n moreThan: 'De waarde moet groter zijn dan ${more}',\n positive: 'De waarde moet een positief getal zijn',\n negative: 'De waarde moet een negatief getal zijn',\n integer: 'De waarde moet een geheel getal zijn'\n};\n\nexport const date = {\n min: 'De datum moet later zijn dan ${min}',\n max: 'De datum moet eerder zijn dan ${max}'\n};\n\nexport const boolean = {\n isValue: 'De waarde veld moet ${value} zijn'\n};\n\nexport const object = {\n noUnknown: 'De waarde mag geen waarden bevatten die niet zijn opgegeven in het object'\n};\n\nexport const array = {\n min: 'De waarde moet ten minste ${min} items bevatten',\n max: 'De waarde mag niet meer dan ${max} items bevatten',\n length: 'De waarde moet ${length} items hebben'\n};\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport dayjs from 'dayjs';\n\n// validation translations\nimport * as Yup from 'yup';\nimport * as nl from './translations/nl/yup-validation.inline';\n\n// the translations\nimport translationEN from './translations/en/translation.json';\nimport translationDE from './translations/de/translation.json';\nimport translationNL from './translations/nl/translation.json';\nimport widgetNL from './translations/nl/widget.json';\nimport widgetEN from './translations/en/widget.json';\nimport courseCopyNL from './translations/nl/courseCopy.json';\nimport askQuestionEN from './translations/en/askQuestion.json';\nimport askQuestionNL from './translations/nl/askQuestion.json';\nimport evaluationEN from './translations/en/evaluation.json';\nimport evaluationNL from './translations/nl/evaluation.json';\nimport ewiseProductSelectionEn from './translations/en/ewiseProductSelection.json';\nimport ewiseProductSelectionNL from './translations/nl/ewiseProductSelection.json';\nimport editCourseFormNL from './translations/nl/editCourseForm.json';\nimport editCourseFormEN from './translations/en/editCourseForm.json';\nimport AdminCoursesNL from './translations/nl/adminCourses.json';\nimport AdminCoursesEN from './translations/en/adminCourses.json';\nimport onboardingNL from './translations/nl/onboarding.json';\nimport onboardingEN from './translations/en/onboarding.json';\nimport curriculumNL from './translations/nl/curriculum.json';\nimport curriculumEN from './translations/en/curriculum.json';\nimport vtbEN from './translations/en/vtb.json';\nimport vtbNL from './translations/nl/vtb.json';\nimport datagridEN from './translations/en/datagrid.json';\nimport datagridNL from './translations/nl/datagrid.json';\nimport colophonEN from './translations/en/colophon.json';\nimport colophonNL from './translations/nl/colophon.json';\n\n// the translations\nconst resources = {\n en: {\n translation: translationEN,\n widget: widgetEN,\n askQuestion: askQuestionEN,\n evaluation: evaluationEN,\n ewiseProductSelection: ewiseProductSelectionEn,\n editCourseForm: editCourseFormEN,\n adminCourses: AdminCoursesEN,\n onboarding: onboardingEN,\n curriculum: curriculumEN,\n vtb: vtbEN,\n datagrid: datagridEN,\n colophon: colophonEN\n },\n de: {\n translation: translationDE\n },\n nl: {\n translation: translationNL,\n widget: widgetNL,\n courseCopy: courseCopyNL,\n askQuestion: askQuestionNL,\n evaluation: evaluationNL,\n ewiseProductSelection: ewiseProductSelectionNL,\n editCourseForm: editCourseFormNL,\n adminCourses: AdminCoursesNL,\n onboarding: onboardingNL,\n curriculum: curriculumNL,\n vtb: vtbNL,\n datagrid: datagridNL,\n colophon: colophonNL\n }\n};\n\nconst options = {\n debug: false, // Set to true locally if you want to see the debug output\n fallbackLng: 'nl',\n ns: ['translation', 'widget', 'courseCopy', 'askQuestion', 'ewiseProductSelection', 'adminCourses'],\n resources,\n keySeparator: '.',\n nsSeparator: ':',\n interpolation: {\n escapeValue: false, // react already safes from xss\n format(value, format) {\n if (format === 'uppercase') return value.toUpperCase();\n if (value instanceof Date) return dayjs(value).format(format);\n return value;\n }\n },\n react: {\n useSuspense: false,\n bindI18n: 'languageChanged loaded',\n bindStore: 'added removed',\n nsMode: 'default'\n }\n};\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init(options);\n\nexport const locales = Object.keys(options.resources);\nexport function getCurrentLocale() {\n return i18n.languages.find((lng) => locales.indexOf(lng) !== -1);\n}\n\n// setup Yup translations\nif (getCurrentLocale() === 'nl') {\n Yup.setLocale(nl);\n}\n\nwindow.i18next = i18n;\nexport default i18n;\n","import axios from 'axios';\n\n/**\n * This api is made distinct from the main one for one sole reason.\n * The response behavior and defaults are different form the authenticated\n * parts\n *\n * @type {AxiosInstance}\n */\nconst authorizationApi = axios.create({\n timeout: 3000\n});\n\nexport default authorizationApi;\n","export const resetLocalState = () => {\n sessionStorage.removeItem('gdpr'); // Remove gdpr popup\n sessionStorage.removeItem('ltiSession');\n sessionStorage.removeItem('selectedProductId');\n sessionStorage.removeItem('selectedProduct');\n sessionStorage.removeItem('selectedPackageId');\n sessionStorage.removeItem('prefBaseProduct');\n sessionStorage.removeItem('InfoRequiredMsg');\n sessionStorage.removeItem('courseEvaluation');\n sessionStorage.removeItem('forcePasswordReset');\n localStorage.removeItem('code_verifier');\n};\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport pkce from 'pkce-codes';\nimport * as Sentry from '@sentry/react';\nimport authorizationApi from '../authorizationApi';\nimport { resetLocalState } from '../../../helpers/session.helper';\n\nconst LOCALSTORAGE_KEY_OAUTH_TOKEN = 'oauth_token';\n\nlet currentTokenRefreshCycle = null;\n\nexport class OAuth2 {\n authorizationCode;\n\n authorizationDomain;\n\n tokenEndpoint;\n\n authorizeEndpoint;\n\n tokenInformation;\n\n clientId;\n\n clientSecret;\n\n redirectUrl;\n\n constructor({ redirectUrl, clientId, clientSecret, authorizeEndpoint, tokenEndpoint, authorizationDomain }) {\n this.authorizationCode = null;\n this.authorizeEndpoint = authorizeEndpoint;\n this.tokenEndpoint = tokenEndpoint;\n this.tokenInformation = {};\n this.clientSecret = clientSecret;\n this.clientId = clientId;\n this.redirectUrl = redirectUrl;\n this.authorizationDomain = authorizationDomain;\n }\n\n async initializeOauthSession() {\n /**\n * Get the token from the localstorage/session\n */\n const hasPersistedToken = this.getTokenFromPersistentStorage();\n\n /**\n * Check if the kill-switch is given for the current route\n *\n * (E.G we are being lunched with a new user context).\n */\n const hasAuthKillSwitch = this.getKillSwitchFromQuery();\n\n /**\n * Check if authorization values\n * are present\n *\n * (E.G we are being directed back from the auth portal)\n */\n const hasAuthorizeValues = this.getAuthorizeValuesFromQuery();\n\n /**\n * Check if impersonation values\n * are present\n *\n * (E.G we are being directed back from the admin panel)\n */\n const hasImpersonationValues = this.getImpersonationValuesFromQuery();\n\n /**\n * Getting authorization credentials\n * from the auth portal takes precedence over all other forms\n * of authentication\n */\n if (hasAuthorizeValues) {\n const tokenRequest = authorizationApi.post(\n this.tokenEndpoint,\n new URLSearchParams({\n grant_type: 'authorization_code',\n code: this.authorizationCode,\n redirect_uri: this.redirectUrl,\n client_id: this.clientId,\n code_verifier: localStorage.getItem('code_verifier')\n })\n );\n try {\n const response = await tokenRequest;\n\n // Handle errors in the response\n if (response.error) {\n // Redirect on error and stop further execution\n Sentry.captureException(`Auth error: Something went wrong: ${response.error}`);\n window.location.href = this.authorizeEndpoint;\n return false;\n }\n\n // Save token information to persistent storage\n this.tokenInformation = response.data;\n this.saveTokenToPersistentStorage();\n\n // Update browser history if a state is present in the response\n if (response.state) {\n window.history.replaceState('', '', response.state);\n }\n\n // Request successful\n return true;\n } catch (error) {\n // Handle unexpected errors\n // Redirect on error and stop further execution\n Sentry.captureException(`Auth error: Something went wrong: ${error}`);\n window.location.href = this.authorizeEndpoint;\n console.error('Token request failed:', error);\n return false;\n }\n }\n\n /**\n * Getting authorization credentials\n * from the auth portal takes precedence over all other forms\n * of authentication\n */\n if (hasImpersonationValues) {\n const tokenRequest = authorizationApi.post(\n this.tokenEndpoint,\n new URLSearchParams({\n grant_type: 'authorization_code',\n code: this.authorizationCode,\n redirect_uri: this.redirectUrl,\n client_id: this.clientId,\n code_verifier: '--6t5HeyDNhPx8C9MYOEFWAgj9q9Ijhg7at-WtGGmrgIVB'\n })\n );\n\n const response = await tokenRequest.catch((err) => {\n console.error(err);\n });\n\n // If no data go back\n if (response.error) {\n window.location.href = this.redirectUrl;\n }\n\n this.tokenInformation = response.data;\n this.tokenInformation.isImpersonation = true;\n this.saveTokenToPersistentStorage();\n\n if (response.state) {\n window.history.pushState('', '', response.state);\n }\n\n return true;\n }\n\n if (hasAuthKillSwitch) {\n this.killLocalSession();\n this.redirectToExternalProvider();\n return false;\n }\n\n if (hasPersistedToken) {\n return true;\n }\n\n /**\n * Redirect to the oath provider\n * if we do not have a valid token\n * or way to generate it\n */\n if (!hasAuthorizeValues && !hasPersistedToken) {\n this.redirectToExternalProvider();\n }\n\n return false;\n }\n\n /**\n * Redirect the user to the external auth provider\n *\n * @param location\n * @returns {Promise}\n */\n async redirectToExternalProvider(location = null) {\n const { code_verfier: codeVerifier, code_challenge: codeChallenge } = await pkce();\n\n const codeChallengeMethod = 'S256';\n\n localStorage.setItem('code_verifier', codeVerifier);\n\n let url = `${this.authorizationDomain}${this.authorizeEndpoint}`;\n if (location !== null) {\n url = `${this.authorizationDomain}${location}`;\n }\n const authorizationUrl = new URL(url);\n authorizationUrl.searchParams.set('client_id', this.clientId);\n authorizationUrl.searchParams.set('code_challenge', codeChallenge);\n authorizationUrl.searchParams.set('code_challenge_method', codeChallengeMethod);\n authorizationUrl.searchParams.set('redirect_uri', this.redirectUrl);\n authorizationUrl.searchParams.set('response_type', 'code');\n authorizationUrl.searchParams.set('scope', 'authenticated');\n authorizationUrl.searchParams.set('state', this.getCurrentRoutingState());\n\n window.location.href = authorizationUrl;\n\n // Hacky, but it is a needed safeguard.\n // Sleeps execution for 3 seconds to make sure the browser has time\n // to navigate away\n await new Promise((resolve) => setTimeout(resolve, 3000));\n\n return null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n async killSession() {\n /**\n * Remove the now invalidated tokens from the\n * browser storage\n */\n localStorage.removeItem(LOCALSTORAGE_KEY_OAUTH_TOKEN);\n\n /**\n * Redirect to external provider so\n * login can commence again\n */\n this.redirectToExternalProvider('/oauth/logout');\n }\n\n // eslint-disable-next-line class-methods-use-this\n async killLocalSession() {\n /**\n * Remove the now invalidated tokens from the\n * browser storage\n */\n localStorage.removeItem(LOCALSTORAGE_KEY_OAUTH_TOKEN);\n resetLocalState();\n }\n\n /**\n * Get the current routing state. to persist it to the auth provider\n */\n // eslint-disable-next-line class-methods-use-this\n getCurrentRoutingState() {\n const currentState = window.location.pathname;\n\n /**\n * If you are entering through\n * the default route we don't send\n * the state\n */\n if (currentState === '/' || currentState === '/logout') {\n return '';\n }\n\n return currentState;\n }\n\n /**\n * Get the token for usage within the application\n */\n async getToken() {\n // Add a hack around the fact multi-window users\n // might get out of sync\n //\n // This effectively syncs the auth between windows\n // trough the localstorage\n this.getTokenFromPersistentStorage();\n\n if (this.accessTokenIsExpired()) {\n await this.refreshToken();\n }\n\n return this.tokenInformation;\n }\n\n /**\n * Check if the access token is expired\n *\n * @return {boolean}\n */\n accessTokenIsExpired() {\n const currentTime = new Date().getTime();\n\n return !!(this.tokenInformation.tokenExpireTime && currentTime >= this.tokenInformation.tokenExpireTime);\n }\n\n /**\n * Check if we have the correct\n * data to refresh our token\n * @return {boolean}\n */\n refreshGrantIsAvailable() {\n if (!this.tokenInformation.refresh_token) {\n return false;\n }\n const currentTime = new Date().getTime();\n\n if (!this.tokenInformation.refreshExpireTime) {\n return false;\n }\n\n if (currentTime >= this.tokenInformation.refreshExpireTime) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Attempt to refresh the token\n * @return {Promise}\n */\n async refreshToken() {\n if (currentTokenRefreshCycle === null) {\n if (!this.refreshGrantIsAvailable()) {\n await this.killSession();\n }\n\n currentTokenRefreshCycle = this._refreshTokenInternal();\n }\n\n const result = await currentTokenRefreshCycle;\n currentTokenRefreshCycle = null;\n return result;\n }\n\n async _refreshTokenInternal() {\n if (this.tokenInformation.refresh_token === null) {\n throw new Error('You are trying to refresh a non existing token');\n }\n\n const tokenRequest = authorizationApi.post(\n this.tokenEndpoint,\n new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: this.tokenInformation.refresh_token,\n client_id: this.clientId\n })\n );\n\n const response = await tokenRequest.catch(async () => {\n await this.killSession();\n throw new Error('The /token request has failed');\n });\n\n if (response.status >= 200 && response.status < 300) {\n const { isImpersonation } = this.tokenInformation;\n this.tokenInformation = response.data;\n this.tokenInformation.isImpersonation = isImpersonation;\n this.saveTokenToPersistentStorage();\n }\n\n if (response.status >= 400) {\n await this.killSession();\n throw new Error('The /token request has failed');\n }\n\n return true;\n }\n\n /**\n * Get the values generated in the first\n * step of the authorize flow.\n *\n * (So this is where we get back to after logging in to the backend)\n */\n getAuthorizeValuesFromQuery() {\n const queryString = new URLSearchParams(window.location.search);\n\n if (queryString.has('code')) {\n this.authorizationCode = queryString.get('code');\n return true;\n }\n\n return false;\n }\n\n /**\n * Check whether the auth kill-switch is set.\n */\n // eslint-disable-next-line class-methods-use-this\n getKillSwitchFromQuery() {\n const queryString = new URLSearchParams(window.location.search);\n\n if (queryString.has('refresh_auth')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the values generated in the first\n * step of the authorize flow.\n *\n * (So this is where we get back to after logging in to the backend)\n */\n getImpersonationValuesFromQuery() {\n const queryString = new URLSearchParams(window.location.search);\n\n if (queryString.has('impersonate')) {\n this.authorizationCode = queryString.get('impersonate');\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the token (if exists) from a persistent source\n * this is usefull when opening multiple tabs\n */\n getTokenFromPersistentStorage() {\n if (localStorage.getItem(LOCALSTORAGE_KEY_OAUTH_TOKEN)) {\n this.tokenInformation = JSON.parse(localStorage.getItem(LOCALSTORAGE_KEY_OAUTH_TOKEN));\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Save the token to persistent storage\n * (currently localstorage, might go to session soon)\n * so please don't rely on the underlying value location!!\n */\n saveTokenToPersistentStorage() {\n const tokenExpireTime = new Date();\n const refreshExpireTime = new Date();\n\n tokenExpireTime.setTime(tokenExpireTime.getTime() + this.tokenInformation.expires_in * 1000);\n refreshExpireTime.setTime(refreshExpireTime.getTime() + 1200000);\n\n this.tokenInformation.tokenExpireTime = tokenExpireTime.getTime();\n this.tokenInformation.refreshExpireTime = refreshExpireTime.getTime();\n const jsonFormattedToken = JSON.stringify(this.tokenInformation);\n localStorage.setItem(LOCALSTORAGE_KEY_OAUTH_TOKEN, jsonFormattedToken);\n }\n}\n","import axios from 'axios';\nimport qs from 'qs';\n\nconst AUTH_CANARY_ENDPOINT = '/oauth/userinfo';\n\nlet store;\nexport const injectStore = (_store) => {\n store = _store;\n};\n\nconst createAuthenticatedClient = (OAuthHandler) => {\n const AuthenticatedClient = axios.create({\n baseURL: process.env.REACT_APP_JSONAPI,\n // Making this timeout more aggro for now.\n // so slowness is noticed and not ignored\n timeout: 50000,\n headers: {}\n });\n\n AuthenticatedClient.subRequests = async (requests) => {\n const AuthToken = await OAuthHandler.getToken();\n\n requests.map((req) => {\n req.headers = {\n ...req.headers,\n Authorization: `Bearer ${AuthToken.access_token}`,\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/vnd.api+json',\n 'Cache-Control': 'no-cache'\n };\n return req.headers;\n });\n\n return new Promise((resolve, reject) => {\n AuthenticatedClient.post('subrequests?_format=json', requests, {\n headers: { 'Content-Type': 'application/json' }\n })\n .then((data) => {\n const response = {};\n Object.keys(data.data).forEach((key) => {\n response[key.replace(/#uri.*/, '')] = data.data[key].body && JSON.parse(data.data[key].body);\n });\n\n resolve(response);\n })\n .catch((e) => {\n let error;\n\n if (e?.response) {\n error = {\n name: e.response.data.error,\n message: e.response.data.message,\n status: e.response.status\n };\n } else if (e?.title) {\n error = { message: e.message, name: e.title, status: e.status };\n } else {\n error = { message: e?.message, name: e?.name, status: e?.status };\n }\n reject(error);\n });\n });\n };\n\n /**\n * Make sure all params are properly\n * serialized for every request\n *\n * @see https://axios-http.com/docs/urlencoded\n */\n AuthenticatedClient.interceptors.request.use((config) => {\n config.paramsSerializer = (params) =>\n // Qs is already included in the Axios package\n qs.stringify(params, {\n arrayFormat: 'brackets',\n encode: false\n });\n\n return config;\n });\n\n /**\n * Make sure the correct headers are set.\n * And that the request has active auth\n */\n AuthenticatedClient.interceptors.request.use(async (config) => {\n const AuthToken = await OAuthHandler.getToken();\n\n config.headers = {\n 'Content-Type': 'application/vnd.api+json',\n Authorization: `Bearer ${AuthToken.access_token}`,\n ...config.headers\n };\n\n return config;\n });\n\n /**\n * Handle 503 - Unavailable\n */\n AuthenticatedClient.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error?.response?.status === 503) {\n store.setStoreValue('maintenance', true);\n }\n return Promise.reject(error);\n }\n );\n\n /**\n * Make sure we properly handle 401 responses. and reset the auth\n * if for some reason the token has become invalid\n */\n AuthenticatedClient.interceptors.response.use(\n (response) => response,\n\n async (error) => {\n const originalRequest = error.config;\n\n if (!error?.response) {\n return Promise.reject(error);\n }\n\n if (error.response?.status !== 401) {\n return Promise.reject(error);\n }\n\n if (originalRequest.url === AUTH_CANARY_ENDPOINT) {\n return Promise.reject(error);\n }\n\n try {\n const userInfoResponse = await AuthenticatedClient.get(AUTH_CANARY_ENDPOINT);\n if (userInfoResponse.status === 401) {\n const oauthInvalidEvent = new Event('oauth_invalid');\n window.dispatchEvent(oauthInvalidEvent);\n return new Promise((resolve, reject) => setTimeout(reject, 3000));\n }\n } catch (e) {\n const oauthInvalidEvent = new Event('oauth_invalid');\n window.dispatchEvent(oauthInvalidEvent);\n return new Promise((resolve, reject) => setTimeout(reject, 3000));\n }\n\n // If the error is not related to auth, just forward it trough the stack\n return Promise.reject(error);\n }\n );\n\n /**\n * Add error formatting.\n *\n * This is kinda a mess, but we need to keep compatibility with a lot\n * of code that makes use of this format\n */\n AuthenticatedClient.interceptors.response.use(\n (response) => response,\n\n async (error) => {\n if (error.message && error.message.indexOf('timeout') !== -1) {\n error.message = 'Timeout';\n error.status = 408;\n } else if (error?.response?.data?.errors && error.response.data.errors.length) {\n const e = error.response.data.errors[0];\n error.message = e.detail;\n error.status = e.status;\n error.title = e.title;\n } else {\n error.message = error.response ? error.response.data.message : 'Unknown error.';\n error.status = error.response ? error.response.status : 500;\n }\n\n return Promise.reject(error);\n }\n );\n\n /**\n * Add timer for this request\n */\n AuthenticatedClient.interceptors.request.use(async (config) => config);\n\n /**\n * finish timer for this response\n */\n AuthenticatedClient.interceptors.response.use(\n async (response) => response,\n\n async (error) => Promise.reject(error)\n );\n\n return AuthenticatedClient;\n};\n\nexport default createAuthenticatedClient;\n","import { createTheme } from '@mui/material';\n\nconst PrimaryBlue = '#2B3674';\nconst BackgroundColor = 'rgba(119, 26, 81, 0.05);';\nconst RedColor = '#FF5B5B';\n\n/* Margins */\nconst DefaultMarginMin = '8px';\nconst DefaultMarginMid = '16px';\n\nexport const createCustomTheme = ({ primaryColor, secondaryColor }) =>\n createTheme({\n palette: {\n primary: {\n main: primaryColor\n },\n secondary: {\n main: secondaryColor\n },\n secondaryOrange: {\n main: secondaryColor\n },\n background: {\n main: BackgroundColor\n },\n primaryBlue: {\n main: PrimaryBlue\n },\n tabPrimaryBlue: {\n main: primaryColor\n },\n favoriteRed: {\n main: RedColor\n }\n },\n typography: {\n h1: {\n fontSize: '40px',\n fontWeight: '600'\n },\n h2: {\n fontSize: '38px',\n fontWeight: '600'\n },\n h3: {\n fontSize: '36px',\n fontWeight: '600'\n },\n h4: {\n fontSize: '34px',\n fontWeight: '600'\n },\n h5: {\n fontSize: '30px',\n fontWeight: '600'\n },\n h6: {\n fontSize: '38px',\n fontWeight: '600'\n },\n subtitle1: {\n fontSize: '26px'\n },\n subtitle2: {\n fontSize: '26px'\n },\n button: {\n fontSize: '14px'\n },\n caption: {\n fontSize: '12px'\n },\n overline: {\n fontSize: '12px'\n }\n },\n components: {\n MuiToolbar: {\n styleOverrides: {\n root: {\n margin: '0 auto',\n width: '100%'\n }\n }\n },\n MuiAvatarGroup: {\n styleOverrides: {\n root: {\n justifyContent: 'flex-end',\n marginTop: DefaultMarginMid,\n marginBottom: DefaultMarginMid\n }\n }\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n background: BackgroundColor,\n color: primaryColor\n }\n }\n },\n MuiGrid: {\n styleOverrides: {\n root: {\n marginTop: DefaultMarginMin,\n marginBottom: DefaultMarginMin\n }\n }\n },\n MuiDivider: {\n styleOverrides: {\n root: {\n marginTop: DefaultMarginMid,\n marginBottom: DefaultMarginMid\n }\n }\n },\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'rgb(0 0 0 / 15%) 1.95px 1.95px 2.6px'\n }\n }\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n '&.Mui-checked.MuiSwitch-track': {\n background: primaryColor\n },\n '& .MuiSwitch-track': {\n background: '#E0E5F2'\n }\n }\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: primaryColor\n }\n }\n }\n },\n MuiCardHeader: {\n styleOverrides: {\n root: {\n color: primaryColor\n }\n }\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: primaryColor\n }\n }\n }\n },\n MuiListItem: {\n MuiTypography: {\n styleOverrides: {\n root: {\n margin: '0px'\n }\n }\n }\n }\n },\n custom: {\n courseIntroductionHeader: {\n imageGradient: `linear-gradient(90deg, ${primaryColor} 0%, ${primaryColor} 38.54%, transparent 100%)`\n },\n onboarding: {\n buttonBackgroundColor: primaryColor\n }\n }\n });\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { OAuth2 } from '../state/api/helpers/oauth2';\nimport createAuthenticatedClient from '../state/api/AuthenticatedClient';\nimport { getLabelNameFromDomain, convertAmplifyRedirectUrl } from '../helpers/Helpers';\nimport { createCustomTheme } from '../theme/CustomTheme';\nimport { useCustomTheme } from '../hooks';\n\nexport const OauthContext = React.createContext({});\nexport const AuthedClientContext = React.createContext({});\n\n/**\n * The Oauth provider and context are responsible for decimating the\n * authentication for this app\n *\n * it is best thought of as a middleware wrapping\n * the entire application and only\n * allowing access with valid credentials\n *\n * @param props\n * @return {JSX.Element}\n * @constructor\n */\nconst OauthProvider = ({ children, LoaderComponent }) => {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const currentTheme = getLabelNameFromDomain();\n const { setTheme, setCustomLogo } = useCustomTheme();\n\n /**\n * Helper function to convert theme id\n * to environment variables\n *\n * @param themeID\n * @param key\n * @returns {`REACT_APP_OAUTH_${string}_${string}`}\n */\n const convertThemeIDToEnvName = (themeID, key) => `REACT_APP_OAUTH_${themeID.toUpperCase().replaceAll('-', '_')}_${key}`;\n\n const oauthClient = new OAuth2({\n redirectUrl:\n currentTheme === 'amplify'\n ? convertAmplifyRedirectUrl(process.env[convertThemeIDToEnvName(currentTheme, 'REDIRECT_URL')])\n : process.env[convertThemeIDToEnvName(currentTheme, 'REDIRECT_URL')],\n clientId: process.env[convertThemeIDToEnvName(currentTheme, 'CLIENT_ID')],\n clientSecret: process.env[convertThemeIDToEnvName(currentTheme, 'CLIENT_SECRET')],\n authorizeEndpoint: process.env.REACT_APP_OAUTH_PROVIDER_AUTHORIZE_ENDPOINT,\n tokenEndpoint:\n process.env[convertThemeIDToEnvName(currentTheme, 'PROVIDER_DOMAIN')] + process.env.REACT_APP_OAUTH_PROVIDER_TOKEN_ENDPOINT,\n authorizationDomain: process.env[convertThemeIDToEnvName(currentTheme, 'PROVIDER_DOMAIN')]\n });\n\n /**\n * Register the behaviour for catching\n * requests made with bad creds\n */\n useEffect(() => {\n const oauthClientListener = () => {\n oauthClient.killSession();\n };\n\n /**\n * This is the event the api fires\n * when it detects invalid creds\n *\n * using the window as an eventbus as a hackaround\n */\n window.addEventListener('oauth_invalid', oauthClientListener);\n\n return () => {\n window.removeEventListener('oauth_invalid', oauthClientListener);\n };\n }, []);\n\n /**\n * We halt the rendering stack\n * until we have valid credentials\n */\n useEffect(() => {\n const init = async () => {\n try {\n const result = await oauthClient.initializeOauthSession();\n\n if (!result) {\n return;\n }\n\n const authenticatedClient = createAuthenticatedClient(oauthClient);\n\n window.clientInstance = oauthClient;\n window.authedClient = authenticatedClient;\n\n setIsAuthenticated(true);\n\n try {\n const response = await authenticatedClient.get('ewapi/lms/branding');\n\n const { is_branded: isBranded, data } = response.data;\n\n if (!isBranded || !data) {\n return;\n }\n\n const { brand_logo: brandLogo, brand_color_main: brandColorMain, brand_color_secondary: brandColorSecondary } = data;\n\n if (brandLogo) {\n setCustomLogo(`${process.env.REACT_APP_JSONAPI}${brandLogo}`);\n }\n\n if (brandColorMain || brandColorSecondary) {\n const customTheme = createCustomTheme({ primaryColor: brandColorMain, secondaryColor: brandColorSecondary });\n\n setTheme(customTheme);\n }\n } catch (err) {\n console.error('Theme could not be loaded', err);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n init();\n }, []);\n\n return (\n <>\n {isAuthenticated && (\n \n {children}\n \n )}\n {!isAuthenticated && }\n \n );\n};\n\nOauthProvider.propTypes = {\n children: PropTypes.object.isRequired,\n LoaderComponent: PropTypes.any\n};\n\nexport default OauthProvider;\n","import { types as t } from 'mobx-state-tree';\n\nexport const TextField = t.model('TextField', {\n format: t.maybeNull(t.string),\n value: t.string,\n processed: t.string\n});\n\nexport const IsoDate = t.maybeNull(\n t.reference(t.Date, {\n get(identifier /* ISO 8601 string */ /* parent: any */) {\n return new Date(identifier);\n },\n set(value /* Date */) {\n return value.toISOString();\n }\n })\n);\n\n/**\n * The base model for Drupal's default Body field type\n */\nexport const Body = t\n .model('Body', {\n format: t.string,\n value: t.string,\n processed: t.maybe(t.string),\n summary: t.maybeNull(t.string)\n })\n .views((self) => ({\n get cleanValue() {\n const currentVal = self.value;\n return currentVal.replace(/(<([^>]+)>)/gi, ''); // sonarcloud flase positive on regex\n }\n }));\n\n/**\n * The base model for Drupal's Link field type\n * it provides custom logic for ensuring\n * The field is clean\n */\nexport const Link = t\n .model('Link', {\n options: t.array(t.string),\n title: t.string,\n uri: t.string\n })\n .views((self) => ({\n get cleanValue() {\n const currentVal = self.uri;\n\n /**\n * Currently we only clean the drupal added identifier\n * but this abstraction layer is nescesary for\n * the future\n */\n return currentVal.replaceAll(/internal:/gi, '');\n },\n get isExternal() {\n const currentVal = self.uri;\n\n /**\n * Currently we only clean the drupal added identifier\n * but this abstraction layer is nescesary for\n * the future\n */\n return currentVal.includes('http://') || currentVal.includes('https://');\n }\n }));\n\nexport const DateRange = t.model('DateRange', {\n value: t.string,\n end_value: t.string\n});\n\nexport const Links = t.model('Links', {\n self: t.model({ href: t.string }),\n related: t.maybe(t.model({ href: t.string })),\n prev: t.maybe(t.model({ href: t.string })),\n next: t.maybe(t.model({ href: t.string }))\n});\n\nexport const SpecialAccess = t.model('SpecialAccess', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__tid: t.number,\n name: t.string\n })\n});\n\nexport const RelSpecialAccess = t.model('RelSpecialAccess', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.reference(SpecialAccess)\n })\n )\n )\n});\n\nexport const Profession = t.model('Profession', {\n id: t.identifier,\n type: t.string,\n links: Links,\n attributes: t.model({\n drupal_internal__tid: t.number,\n name: t.string,\n field_ewise_labels: t.maybeNull(t.string)\n }),\n relationships: t.model({\n field_categories_parent_term: t.maybeNull(\n t.model({\n data: t.model({\n type: 'category',\n id: t.string,\n meta: t.model({\n drupal_internal__target_id: t.number\n })\n })\n })\n ),\n field_categories2_parent_term: t.maybeNull(\n t.model({\n data: t.model({\n type: 'category',\n id: t.string,\n meta: t.model({\n drupal_internal__target_id: t.number\n })\n })\n })\n )\n })\n});\n\nexport const RelProfession = t.model('RelProfession', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Profession),\n type: t.string\n })\n )\n});\n\nexport const RelProfessions = t.model('RelProfessions', {\n data: t.array(\n t.model({\n id: t.reference(Profession),\n type: t.string\n })\n )\n});\n\nexport const File = t.model('File', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__fid: t.number,\n filemime: t.string,\n filename: t.string,\n filesize: t.number,\n status: t.boolean,\n uri: t.model({\n url: t.string\n })\n })\n});\n\nexport const RelFile = t\n .model('RelFile', {\n data: t.maybeNull(\n t.model({\n id: t.reference(File),\n type: t.string\n })\n )\n })\n .views((self) => ({\n get url() {\n return self.data ? self.data.id.attributes.uri.url : '';\n }\n }));\n\nexport const RelCatParent = t.model('RelCatParent', {\n data: t.array(\n t.model({\n id: t.string,\n type: t.string\n })\n )\n});\n\nexport const Category = t.model('Category', {\n type: t.string,\n id: t.identifier,\n attributes: t.model({\n drupal_internal__tid: t.number,\n langcode: t.string,\n name: t.string,\n symbol: t.maybeNull(t.string)\n // description: t.maybeNull(TextField)\n }),\n relationships: t.model({\n parent: t.maybeNull(RelCatParent)\n })\n});\n\nexport const RelCategory = t.model('RelCategory', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Category),\n type: t.string\n })\n )\n});\n\nexport const RelCategories = t\n .model('RelCategories', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.reference(Category)\n })\n )\n )\n })\n .views((self) => {\n const categoryrefs = [];\n return {\n afterAttach() {\n self.data.map((category) => categoryrefs.push(category.id));\n },\n get categories() {\n return categoryrefs;\n }\n };\n });\n\nexport const Relation = t.model('Relation', {\n data: t.maybeNull(\n t.model({\n id: t.string,\n type: t.string\n })\n )\n});\n\nexport const UserRole = t.model('UserRole', {\n type: t.string,\n id: t.identifier,\n attributes: t.model({\n drupal_internal__id: t.string,\n label: t.string,\n is_admin: t.maybeNull(t.boolean),\n // status: t.boolean,\n permissions: t.array(t.string)\n // weight: t.number\n })\n});\n\nexport const RelUserRole = t.model('RelUserRole', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.reference(UserRole)\n })\n )\n )\n});\n","import { types as t } from 'mobx-state-tree';\nimport { RelFile } from './BaseModel';\n\n// TODO: Cleanup\nexport const LessonContent = t\n .model('LessonContent', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__id: t.number,\n // created: IsoDate,\n // changed: IsoDate,\n title: 'Empty',\n documentTitle: '',\n pages: t.array(t.string),\n widgets: t.array(t.array(t.string)),\n toc: t.array(\n t.model('Toc', {\n title: t.string,\n level: t.number,\n pagenr: t.number,\n id: t.string\n })\n )\n }),\n relationships: t.maybeNull(\n t.model({\n printversion: RelFile\n })\n )\n })\n .actions((self) => ({\n setTitle(title) {\n self.title = title;\n }\n }));\n\nexport const RelLessonContent = t.model('RelLessonContent', {\n data: t.maybeNull(\n t.model({\n id: t.reference(LessonContent),\n type: t.string\n })\n )\n});\n\nexport const RelLessonContentWidgets = t.model('RelLessonContentWidgets', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.identifier\n })\n )\n )\n});\n\nexport const RelLessonContentSimple = t.model('RelLessonContentSimple', {\n data: t.maybeNull(\n t.model({\n id: t.string,\n type: t.string\n })\n )\n});\n\nexport const LessonContentEdit = t.model('LessonContentEdit', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__id: t.number,\n title: t.string\n }),\n relationships: t.model({\n tagdoc: RelFile,\n lesson_content_widgets: t.maybeNull(RelLessonContentWidgets)\n })\n});\n","import { types as t } from 'mobx-state-tree';\n\nexport const OpenQuestion = t.model({\n type: t.maybe(t.string)\n});\n\nexport const RadioQuestion = t.array(\n t.model({\n correct: t.maybe(t.boolean, false),\n value: t.maybe(t.string),\n label: t.maybe(t.string),\n feedback: t.maybe(t.string)\n })\n);\n\nexport const CheckQuestion = t.array(\n t.model({\n correct: t.optional(t.boolean, false),\n value: t.maybe(t.string),\n label: t.maybe(t.string),\n feedback: t.maybe(t.string)\n })\n);\n\nexport const VideoWidget = t.model({\n url: t.maybe(t.string),\n value: t.maybe(t.string),\n feedback: t.maybe(t.string)\n});\n\nexport const HtmlWidget = t.model({\n htmlData: t.maybe(t.string),\n label: t.maybe(t.string),\n feedback: t.maybe(t.string)\n});\n\nexport const NumericalQuestion = t.model({\n // correct: t.maybe(t.string),\n // label: t.string,\n // feedback: t.string,\n feedbackCorrect: t.maybe(t.string),\n feedbackLess: t.maybe(t.string),\n feedbackMore: t.maybe(t.string),\n value: t.maybe(t.number),\n valueEnd: t.maybeNull(t.number),\n // slider: t.boolean,\n sliderMin: t.maybe(t.number),\n sliderMax: t.maybe(t.number),\n sliderStep: t.maybe(t.number),\n unit: t.maybe(t.string),\n type: t.maybe(t.string)\n});\n\nexport const SortQuestion = t.array(\n t.model({\n value: t.maybe(t.string),\n label: t.maybe(t.string),\n startposition: t.maybe(t.number),\n order: 'default'\n })\n);\n\nconst _matches = t.array(\n t.model({\n answer: t.maybe(t.string),\n nr: t.maybe(t.string),\n order: 'default'\n })\n);\n\nexport const MatchQuestion = t.array(\n t.model({\n label: t.maybe(t.string),\n nr: t.maybe(t.number),\n matches: t.optional(_matches, [])\n })\n);\n\nexport const WordCloud = t.array(\n t.model({\n numberOfFields: t.maybe(t.number),\n required: t.maybe(t.boolean)\n })\n);\n\nexport const PollWidget = t.array(\n t.model({\n label: t.maybe(t.string)\n })\n);\n","import { types as t, getParent, destroy, flow } from 'mobx-state-tree';\nimport { toJS } from 'mobx';\n\nexport const PollWidgetItem = t\n .model('PollWidgetItem', {\n nid: t.number,\n widgetCode: t.string,\n answer: t.maybeNull(t.string),\n poll: t.model({\n internal_title: t.string,\n body: t.string,\n profession: t.maybeNull(t.number),\n totalcount: t.number,\n user_has_answered: t.number,\n options: t.array(\n t.model({\n value: t.string,\n count: t.number,\n delta: t.number\n })\n )\n })\n })\n .actions((self) => ({\n update(widgetUpdate) {\n self.answer = widgetUpdate.answer;\n self.poll = widgetUpdate.poll;\n },\n remove() {\n getParent(self, 2).remove(self);\n }\n }));\n\nexport const PollWidgetList = t\n .model('PollWidgetList', {\n widgets: t.array(PollWidgetItem)\n })\n .views((self) => ({\n getPollWidget(widgetCode) {\n return self.widgets.find((w) => w.widgetCode === widgetCode);\n }\n }))\n .actions((self) => ({\n // ADD WIDGET\n add(widget) {\n if (!self.getPollWidget(widget.widgetCode)) {\n self.widgets.push(widget);\n } else {\n const index = self.widgets.findIndex((w) => w.widgetCode === widget.widgetCode);\n self.widgets[index] = widget;\n }\n return self.widgets;\n },\n add2(widget) {\n self.widgets.map((w) => (w.widgetCode === widget.widgetCode ? widget : w));\n return self.widgets;\n },\n remove(widget) {\n destroy(widget);\n },\n pollVote: flow(function* pollVote(widget, answer) {\n const updatedWidget = yield getParent(self, 1).lmsApi.postPollAnswer(widget.nid, answer);\n widget.update(updatedWidget);\n }),\n pollCancelVote(data) {\n const widget = toJS(data);\n\n data.update({ ...widget, poll: { ...widget.poll, user_has_answered: 0 } });\n }\n }));\n\nexport const RelPollWidgetItem = t.model('RelPollWidgetItem', {\n data: t.maybeNull(\n t.model({\n id: t.reference(PollWidgetItem),\n type: t.string\n })\n )\n});\n","import { types as t, destroy, getParent, flow } from 'mobx-state-tree';\n\nexport const WordCloudItem = t\n .model('WordCloudItem', {\n nid: t.number,\n widgetCode: t.string,\n answer: t.maybeNull(t.array(t.string)),\n wordcloud: t.model({\n body: t.string,\n input_required: t.number,\n internal_title: t.string,\n profession: t.maybeNull(t.number),\n show_fields: t.number,\n user_has_answered: t.number,\n words: t.maybe(\n t.array(\n t.model({\n count: t.number,\n word: t.string\n })\n )\n )\n })\n })\n .actions((self) => ({\n update(widgetUpdate) {\n self.answer = widgetUpdate.answer;\n self.wordcloud = widgetUpdate.wordcloud;\n },\n formatWords() {\n self.wordcloud.words.map((words) => {\n words.value = words.word;\n delete words.word;\n return words;\n });\n return self.wordcloud.words;\n }\n }));\n\nexport const WordCloudList = t\n .model('WordCloudList', {\n widgets: t.array(WordCloudItem)\n })\n .views((self) => ({\n getWordCloud(widgetCode) {\n return self.widgets.find((w) => w.widgetCode === widgetCode);\n }\n }))\n .actions((self) => ({\n add(widget) {\n if (!self.getWordCloud(widget.widgetCode)) {\n self.widgets.push(widget);\n } else {\n const index = self.widgets.findIndex((w) => w.widgetCode === widget.widgetCode);\n self.widgets[index] = widget;\n }\n return self.widgets;\n },\n remove(widgetCode) {\n const widget = self.widgets.find((w) => w.widgetCode === widgetCode);\n return destroy(widget);\n },\n submitAnswers: flow(function* pollVote(widget, answer) {\n const updatedWidget = yield getParent(self, 1).lmsApi.postWordCloudAnswer(widget.nid, answer);\n widget.update(updatedWidget);\n })\n }));\n\nexport const RelWordCloudItem = t.model('RelWordCloudItem', {\n data: t.maybeNull(\n t.model({\n id: t.string,\n type: t.string\n })\n )\n});\n","import { types as t } from 'mobx-state-tree';\nimport cloneDeep from 'lodash/cloneDeep';\n// import { IsoDate } from './BaseModel';\nimport { RelLessonContent } from './LessonContent';\n\nimport {\n RadioQuestion,\n CheckQuestion,\n OpenQuestion,\n VideoWidget,\n MatchQuestion,\n SortQuestion,\n HtmlWidget,\n NumericalQuestion,\n WordCloud,\n PollWidget\n} from './QuestionOption';\n\nimport { RelPollWidgetItem } from './PollWidget/PollWidget';\nimport { RelWordCloudItem } from './WordCloudWidget/WordCloud';\n\nlet widgetType;\n\nconst questionOption = t.union({\n dispatcher: () => {\n switch (widgetType) {\n case 'Radio Question':\n return RadioQuestion;\n case 'Check Question':\n return CheckQuestion;\n case 'Open Question':\n return OpenQuestion;\n case 'Sort Question':\n return SortQuestion;\n case 'Match Question':\n return MatchQuestion;\n case 'Numerical Question':\n return NumericalQuestion;\n case 'Video Widget':\n return VideoWidget;\n case 'HTML Widget':\n return HtmlWidget;\n case 'Wordcloud Widget':\n return WordCloud;\n case 'Poll widget':\n return PollWidget;\n default:\n throw new Error();\n }\n },\n RadioQuestion,\n CheckQuestion,\n OpenQuestion,\n VideoWidget,\n SortQuestion,\n MatchQuestion,\n HtmlWidget,\n NumericalQuestion,\n WordCloud,\n PollWidget\n});\n\nexport const QuestionWidget = t\n .model('QuestionWidget', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n status: t.maybe(t.boolean),\n drupal_internal__nid: t.maybe(t.number),\n title: t.string,\n weight: t.number,\n widget_code: t.string,\n widget_type: t.string,\n widget_data: t.maybeNull(t.string),\n widget_link: t.maybeNull(t.number),\n widget_link_uuid: t.maybeNull(t.string),\n // Deserialized fields\n question: t.maybeNull(t.string),\n feedback: t.maybeNull(t.string),\n feedbackCorrect: t.maybeNull(t.string),\n feedbackFalse: t.maybeNull(t.string),\n options: t.maybeNull(questionOption)\n }),\n relationships: t.maybeNull(\n t.model({\n lesson_content_link: t.maybeNull(RelLessonContent),\n widget_link: t.maybeNull(t.union(RelWordCloudItem, RelPollWidgetItem))\n })\n )\n })\n .volatile(() => ({\n component: {} // Caching instantiated component during lessonPlay\n }))\n\n .views((self) => ({\n get widgetType() {\n return self.attributes.widget_type.split(/\\s/)[0];\n },\n get isQuestion() {\n return self.attributes.widget_type.match(/Question$/i);\n }\n }))\n\n .actions((self) => ({\n setComponent(component) {\n self.component = component;\n }\n }))\n\n .preProcessSnapshot((snapshot) => {\n const newSnapshot = cloneDeep(snapshot);\n widgetType = newSnapshot.attributes.widget_type;\n try {\n const data = JSON.parse(newSnapshot.attributes.widget_data);\n newSnapshot.attributes = { ...newSnapshot.attributes, ...data };\n } catch (e) {\n console.error('Error parsing widget_data', e);\n }\n return newSnapshot;\n });\n","import { types as t, destroy, getSnapshot } from 'mobx-state-tree';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { QuestionWidget } from './QuestionWidget';\nimport { LessonContentEdit } from './LessonContent';\nimport { File } from './BaseModel';\n\nexport const LessonEdit = t\n .model('LessonEdit', {\n widgets: t.maybeNull(t.array(QuestionWidget)),\n lesson_content: t.maybeNull(LessonContentEdit),\n tagdoc: t.maybeNull(File)\n })\n .views((self) => ({\n get currentOdt() {\n return self.tagdoc ? cloneDeep(getSnapshot(self.tagdoc)) : false;\n },\n get uploadEndPoint() {\n return self.lesson_content ? { type: self.lesson_content.type, id: self.lesson_content.id } : false;\n }\n }))\n .actions((self) => ({\n update(newEntity, key = 'widgets') {\n if (self[key] && self[key].length >= 0) {\n const existingEntity = self[key].find((entity) => entity.id === newEntity.id);\n if (existingEntity) {\n destroy(existingEntity);\n self[key].push(newEntity);\n } else if (!existingEntity) {\n self[key].push(newEntity);\n }\n } else {\n self[key] = newEntity;\n }\n }\n }));\n","import { rawHTML } from 'helpers/Helpers';\nimport { types as t } from 'mobx-state-tree';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\nexport const Author = t\n .model('Author', {\n id: t.identifierNumber,\n uuid: t.string,\n title: t.string,\n body: t.maybeNull(t.string),\n body_summary: t.maybeNull(t.string),\n body_value: t.maybeNull(t.string),\n affiliation: t.maybeNull(t.string),\n first_name: t.maybeNull(t.string),\n last_name: t.maybeNull(t.string),\n initials: t.maybeNull(t.string),\n work_position: t.maybeNull(t.string),\n titles: t.maybeNull(t.string),\n sex: t.maybeNull(t.string),\n photo_id: t.maybeNull(t.number),\n photo_uri: t.maybeNull(t.string),\n disclosure: t.maybeNull(t.string)\n })\n .views((self) => ({\n get fullName() {\n const { titles, first_name: firstName, last_name: lastName, affiliation } = self;\n return [titles, firstName, lastName, affiliation]\n .filter(Boolean)\n .map((el) => el.trim())\n .join(' ');\n },\n get img() {\n return self.photo_uri && `${drupalBaseUrl}${self.photo_uri}`;\n },\n get bio() {\n return self.body_value && rawHTML(self.body_value);\n }\n }));\n\nexport const Authors = t\n .model('Authors', {\n authorList: t.array(Author),\n searchAuthorName: t.maybeNull(t.string)\n })\n .views((self) => ({\n get list() {\n return self.searchAuthorName ? self.filteredListByAuthorName : self.authorList;\n },\n get filteredListByAuthorName() {\n const regex = new RegExp(self.searchAuthorName, 'i');\n return self.authorList.filter((author) =>\n `${author.titles || ''} ${author.first_name || ''} ${author.last_name || ''} ${author.affiliation || ''}`.match(regex)\n );\n },\n get sortedByFullName() {\n return self.authorList.slice().sort((a, b) => (a.fullName > b.fullName ? 1 : -1));\n },\n getAuthorByUuid(uuid) {\n return self.authorList.find((author) => author.uuid === uuid);\n },\n getAuthorById(id) {\n return self.authorList.find((author) => author.id === id);\n }\n }))\n .actions((self) => ({\n searchByName(name) {\n self.searchAuthorName = name;\n }\n }));\n","import { types as t } from 'mobx-state-tree';\n\nexport const Category = t.model({\n tid: t.identifierNumber,\n name: t.string,\n description: t.maybeNull(t.string),\n weight: t.number,\n symbol: t.maybeNull(t.string)\n});\n\nexport const Profession = t.model('Profession', {\n tid: t.identifier,\n uuid: t.string,\n name: t.string,\n categories_parent_term: t.number,\n categories2_parent_term: t.number,\n ewise_labels: t.string,\n categories: t.array(Category),\n categories2: t.array(Category)\n});\n","/* eslint-disable camelcase */\nimport i18n from 'i18next';\nimport { toJS } from 'mobx';\nimport { getParent, types as t } from 'mobx-state-tree';\nimport { Author } from './Author';\nimport { Category } from './Profession';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\nexport const Lesson = t.model('Lesson', {\n nid: t.identifierNumber,\n uuid: t.string,\n max_attempts: t.maybeNull(t.number),\n minimum_score: t.maybeNull(t.number),\n minimum_score_2nd_try: t.maybeNull(t.number),\n delta: t.maybeNull(t.number),\n free_flow: t.maybeNull(t.string),\n lesson_type: t.maybeNull(t.string)\n});\n\nexport const Course = t\n .model('Course', {\n course_accreditation: t.maybeNull(t.string),\n course_delta: t.number,\n course_expected: t.number,\n course_extra_points: t.maybeNull(t.number),\n course_goals: t.maybeNull(t.string),\n course_id: t.maybeNull(t.identifierNumber),\n course_information: t.maybeNull(t.string),\n course_points: t.number,\n course_preview_video: t.maybeNull(t.string),\n course_profession: t.number,\n course_skip_evaluation: t.optional(t.number, 0),\n course_status: t.maybeNull(t.string),\n course_title: t.string,\n course_uuid: t.string,\n coursephoto_alt: t.maybeNull(t.string),\n coursephoto_url: t.maybeNull(t.string),\n headerphoto_alt: t.maybeNull(t.string),\n headerphoto_url: t.maybeNull(t.string),\n lc_course_header_photo: t.maybeNull(t.number),\n lc_coursephoto: t.maybeNull(t.number),\n lc_extra_label: t.maybeNull(t.string),\n lc_goals: t.maybeNull(t.string),\n lc_information: t.maybeNull(t.string),\n lc_podcast_html: t.maybeNull(t.string),\n lc_podcast_title: t.maybeNull(t.string),\n lc_preview_video: t.maybeNull(t.string),\n lesson_container_id: t.number,\n lesson_container_uuid: t.string,\n valid_period_end: t.maybeNull(t.string),\n valid_period: t.maybeNull(t.string),\n lc_author_id: t.maybeNull(t.array(t.safeReference(Author))), // array ref per autore\n lc_reviewer_id: t.maybeNull(t.array(t.safeReference(Author))), // array ref per autore\n // course_category: t.maybeNull(t.array(t.safeReference(Category))), // array ref per cat\n course_extra_points_desc: t.maybeNull(t.string),\n course_category: t.maybeNull(t.array(t.safeReference(t.late(() => Category)))),\n course_category2: t.maybeNull(t.array(t.safeReference(Category))), // array ref per cat\n lessons: t.maybeNull(t.array(Lesson)), // array ref per less\n tab_order: t.maybeNull(t.number), // For search\n package_title: t.maybeNull(t.string), // For search\n package_id: t.maybeNull(t.number), // For search\n package_accr: t.maybeNull(t.number), // For search\n isTrialCourse: t.maybeNull(t.boolean)\n })\n .views((self) => ({\n get categoryLabel() {\n return self.course_category?.map((category) => category.name).join(' ');\n },\n get categoryLabelArray() {\n return self.course_category?.map((category) => category.name);\n },\n get points() {\n // Special access points\n if (getParent(self, 3).routerState.routeName.includes('specialAccess')) {\n return `${self.course_points} ${i18n.t('course.accr.duration')}`;\n }\n // Accreditation points\n const isSearchRoute = window.store.routerStore?.getCurrentRoute().name === 'searchOverview';\n const selectedPackageId = isSearchRoute ? self.package_id : getParent(self, 3)?.selectedPackageId;\n const accreditation = getParent(self, 3)?.baseProduct?.packages.find((packag) => packag.nid === selectedPackageId);\n if (accreditation?.accreditation) {\n const { accr_unit, accr_unit_plural, accr_unit_short, extra_points_unit } = accreditation.accreditation;\n const accrUnit = self.course_points <= 1 ? accr_unit : accr_unit_plural;\n if (self.course_extra_points_desc) {\n return `${self.course_extra_points_desc}`;\n }\n if (self.course_extra_points) {\n return `${self.course_points} ${accr_unit_short || accrUnit} + ${self.course_extra_points} ${extra_points_unit}`;\n }\n return `${self.course_points} ${accr_unit_short || accrUnit || 'uren'}`;\n }\n return `${self.course_points} ${i18n.t('course.accr.duration')}`;\n },\n get imageUrl() {\n return self.coursephoto_url && `${drupalBaseUrl}${self.coursephoto_url}`;\n }\n }));\n\nexport const Courses = t\n .model('Courses', {\n courses: t.array(Course),\n filter: t.optional(\n t.model({\n authorId: t.maybeNull(t.number),\n categories: t.maybeNull(t.array(t.number)),\n competencies: t.maybeNull(t.array(t.number)),\n hasPodcast: t.maybeNull(t.boolean),\n statuses: t.maybeNull(t.array(t.string)),\n isExpiring: t.maybeNull(t.boolean)\n }),\n {\n authorId: null,\n categories: [],\n competencies: [],\n statuses: [],\n hasPodcast: false,\n isExpiring: false\n }\n )\n })\n .volatile(() => ({\n sortedPackage: []\n }))\n .views((self) => ({\n get onlyTeachers() {\n return getParent(self).authors.authorList.filter((author) => !self.nonAuthorsInAdvisoryBoard.includes(author.id));\n },\n get advisoryBoardMembers() {\n const advisoryBoardIds = getParent(self).profession.advisory_board;\n return advisoryBoardIds.map((advId) => getParent(self).authors.authorList.find((author) => author.id === advId));\n },\n get nonAuthorsInAdvisoryBoard() {\n const parsedCourses = JSON.parse(JSON.stringify(self.courses));\n const advisoryBoardIds = getParent(self).profession.advisory_board;\n const isNoAuthor = advisoryBoardIds\n .map((advId) => ({\n advId,\n isAuthor: parsedCourses.some((course) => course.lc_author_id.includes(advId))\n }))\n .filter((item) => !item.isAuthor)\n .map((item) => item.advId);\n return isNoAuthor;\n },\n /** used by course filter */\n get courseList() {\n if (!self.filter?.competencies?.length && !self.filter?.statuses?.length && !self.filter?.hasPodcast && !self.filter?.isExpiring) {\n return self.courseListfilteredByCategories;\n }\n //\n const coursesIdsSet = new Set(); // used to avoid duplicate courses\n //\n const coursesFilteredByCompetence = self.filter?.competencies?.length\n ? self.courseListfilteredByCategories.filter((course) => {\n if (coursesIdsSet.has(course.course_id)) {\n return false;\n }\n const ids = course.course_category2.map((c) => c.tid);\n const found = ids.find((id) => self.filter?.competencies.includes(id));\n if (found) {\n coursesIdsSet.add(course.course_id);\n }\n return !!found;\n })\n : [];\n //\n const coursesFilteredByStatuses = self.filter?.statuses?.length\n ? self.courseListfilteredByCategories.filter((course) => {\n if (coursesIdsSet.has(course.course_id)) {\n return false;\n }\n const exist = self.filter?.statuses.includes(course.course_status);\n if (exist) {\n coursesIdsSet.add(course.course_id);\n }\n return exist;\n })\n : [];\n //\n const coursesFilteredByHasPodcasts = self.filter?.hasPodcast\n ? self.courseListfilteredByCategories.filter((course) => {\n if (coursesIdsSet.has(course.course_id)) {\n return false;\n }\n const isPodcast = Boolean(course.lc_podcast_html);\n if (isPodcast) {\n coursesIdsSet.add(course.course_id);\n }\n return isPodcast;\n })\n : [];\n\n const coursesFilteredByIsExpiring = self.filter?.isExpiring\n ? self.courseListfilteredByCategories.filter((course) => {\n if (coursesIdsSet.has(course.course_id)) {\n return false;\n }\n const expirationDate = new Date(course.valid_period_end).setHours(23, 0, 0, 0);\n const isCourseExpiring = new Date().getTime() >= new Date(expirationDate - 60 * 24 * 60 * 60 * 1000).getTime();\n if (isCourseExpiring) {\n coursesIdsSet.add(course.course_id);\n }\n return isCourseExpiring;\n })\n : [];\n //\n //\n return [\n ...coursesFilteredByCompetence,\n ...coursesFilteredByStatuses,\n ...coursesFilteredByHasPodcasts,\n ...coursesFilteredByIsExpiring\n ].sort((a, b) => (a.course_title > b.course_title ? 1 : -1));\n },\n /** used by course filter */\n get courseListfilteredByCategories() {\n let currentList = self.filter?.authorId ? self.getAuthorCourseList(self.filter?.authorId) : self.courses;\n //\n if (self.filter?.categories?.length) {\n const coursesIdsSet = new Set(); // used to avoid duplicate courses\n currentList = currentList.filter((course) => {\n const courseCategories = course.course_category.map((c) => c.tid);\n const found = courseCategories.find((c) => self.filter?.categories.includes(c));\n if (found && !coursesIdsSet.has(course.course_id)) {\n coursesIdsSet.add(course.course_id);\n return true;\n }\n return false;\n });\n }\n //\n /* clean current filter, (previous filter 'compentece', 'podcast' 'statuses' may not exist in current list) */\n self.cleanFilters(currentList);\n\n return currentList;\n },\n get categories() {\n let currentList = self.courses;\n if (self.filter?.competencies?.length || self.filter?.hasPodcast || self.filter?.statuses?.length || self.filter?.isExpiring) {\n currentList = self.courseList;\n }\n if (self.filter?.authorId) {\n currentList = self.getAuthorCourseList(self.filter?.authorId);\n }\n // TODO: DELETE NEXT LINE BEFORE PRODUCTION\n const mapCategories = {};\n currentList.forEach((course) => {\n course.course_category.forEach((c) => {\n if (!mapCategories[c.tid]) {\n mapCategories[c.tid] = { ...c, count: 1 };\n } else {\n mapCategories[c.tid].count += 1;\n }\n });\n });\n\n return Object.values(mapCategories).sort((a, b) => (a.weight > b.weight ? 1 : -1));\n },\n get competencies() {\n const mapCompetencies = {};\n self.courseListfilteredByCategories.forEach((course) => {\n course.course_category2.forEach((c) => {\n if (!mapCompetencies[c.tid]) {\n mapCompetencies[c.tid] = { ...c, count: 1 };\n } else {\n mapCompetencies[c.tid].count += 1;\n }\n });\n });\n return Object.values(mapCompetencies).sort((a, b) => (a.name > b.name ? 1 : -1));\n },\n get statuses() {\n const mapStatuses = {};\n self.courseListfilteredByCategories.forEach((course) => {\n if (course.course_status && course.course_status !== 'Default') {\n if (!mapStatuses[course.course_status]) {\n mapStatuses[course.course_status] = { name: course.course_status, count: 1 };\n } else {\n mapStatuses[course.course_status].count += 1;\n }\n }\n });\n return Object.values(mapStatuses).sort((a, b) => (a.name > b.name ? 1 : -1));\n },\n get countPodcastes() {\n let count = 0;\n self.courseListfilteredByCategories.forEach((course) => {\n if (course.lc_podcast_html) {\n count += 1;\n }\n });\n return count;\n },\n get countExpiringCourses() {\n let count = 0;\n self.courseListfilteredByCategories.forEach((course) => {\n const expirationDate = new Date(course.valid_period_end).setHours(23, 0, 0, 0);\n const isCourseExpiring = new Date().getTime() >= new Date(expirationDate - 60 * 24 * 60 * 60 * 1000).getTime();\n if (isCourseExpiring) {\n count += 1;\n }\n });\n return count;\n },\n get isFiltering() {\n if (self.isSpecialAccessView) return true;\n return Boolean(\n self.filter?.authorId ||\n self.filter?.categories?.length ||\n self.filter?.competencies?.length ||\n self.filter?.hasPodcast ||\n self.filter?.statuses?.length ||\n self.filter?.isExpiring\n );\n },\n get coursesCount() {\n return self.courses.length;\n },\n coursesByCategoryId(id) {\n return self.courses.filter((course) => {\n const categoryIds = course.course_category?.map((category) => category.tid);\n return categoryIds.includes(id);\n });\n },\n get isSpecialAccessView() {\n return getParent(self).routerState.routeName.includes('specialAccess');\n },\n isCourseExpired(id) {\n const getCourse = getParent(self, 1)?.findCourseByNid(id);\n const endDate = getCourse?.valid_period_end;\n return new Date() >= new Date(endDate).setHours(23, 0, 0, 0);\n },\n hideExpiredLabel(id) {\n // On PE and PO the expiring label is hidden if the course ends on 31/12 of the current year\n const hideExpiredOnLabels = ['pe', 'po'];\n const label = getParent(self, 1)?.label;\n const hideExpLabel = hideExpiredOnLabels.includes(label);\n // if not on PE/PO then don't hide label\n if (!hideExpLabel) return false;\n\n // check end date year of course\n const getCourse = getParent(self, 1)?.findCourseByNid(id);\n const endDate = getCourse?.valid_period_end;\n const courseEndYear = new Date(endDate).getFullYear();\n const currentYear = new Date().getFullYear();\n // if year of course end date is not the current year then don't hide label\n if (courseEndYear !== currentYear) return false;\n\n // Course en date is set to 31/12\n const endDateArray = endDate?.split('-') || [];\n const courseEndsOnLastDayOfYear = endDateArray[1] === '12' && endDateArray[2] === '31';\n\n // hide label if course end date is on 31/12 and course is expiring\n return courseEndsOnLastDayOfYear && self.isCourseExpiring(id);\n },\n isCourseExpiring(id) {\n const getCourse = getParent(self, 1)?.findCourseByNid(id);\n const endDate = getCourse?.valid_period_end;\n const expirationDate = new Date(endDate).setHours(23, 0, 0, 0);\n return new Date().getTime() >= new Date(expirationDate - 60 * 24 * 60 * 60 * 1000).getTime();\n },\n isAccreditated(id) {\n const getCourse = getParent(self, 1)?.findCourseByNid(id);\n const accr = getCourse?.package_accr || 0;\n return accr;\n },\n getCoursePackage(id) {\n const getCourse = getParent(self, 1)?.findCourseByNid(id);\n return getCourse?.package_title || '';\n },\n //\n //\n //\n // TODO remove coursesByCategory (used in courseIntroduction and RelatedCourses), use courses or courseList and categories instead\n coursesByCategory(type) {\n const courses = type === 'course' ? self.courses : self.sortedPackage;\n const categories = [];\n courses.forEach((course) => {\n course.course_category.forEach((c) => {\n const existingCategory = categories.find((category) => category.name === c.name);\n if (existingCategory) {\n existingCategory.courses.push(course);\n } else {\n categories.push({\n name: c.name,\n courses: [course],\n weight: c.weight\n });\n }\n });\n });\n categories.sort((a, b) => a.weight - b.weight);\n const sortedCategories = [];\n categories.forEach((category) => {\n sortedCategories[category.name] = category.courses;\n });\n return sortedCategories;\n },\n getAuthorCourseList(authorId) {\n return self.courses.filter((course) => toJS(course.lc_author_id).find((author) => author.id === authorId));\n },\n // For search\n coursesByAccreditation() {\n const accrCategories = {\n accr: [],\n nonaccr: []\n };\n\n self.courses.forEach((course) => {\n if (course.package_accr === 1) {\n accrCategories.accr.push(course);\n } else {\n accrCategories.nonaccr.push(course);\n }\n });\n\n return accrCategories;\n }\n }))\n .actions((self) => ({\n addNewCourse(course) {\n const existingCourse = self.courses.find((c) => c.course_uuid === course.course_uuid);\n if (!existingCourse) self.courses.push(course);\n },\n filterByAuthor(authorId) {\n self.resetFilter();\n self.filter.authorId = authorId;\n },\n filterByCategories(categoryId) {\n const exist = self.filter.categories.includes(categoryId);\n if (exist) {\n self.filter.categories = self.filter.categories.filter((id) => id !== categoryId);\n } else {\n self.filter.categories.push(categoryId);\n }\n },\n filterByStatuses(status) {\n const exist = self.filter.statuses.includes(status);\n if (exist) {\n self.filter.statuses = self.filter.statuses.filter((value) => value !== status);\n } else {\n self.filter.statuses.push(status);\n }\n },\n filterByCompetencies(competence) {\n const exist = self.filter.competencies.includes(competence);\n if (exist) {\n self.filter.competencies = self.filter.competencies.filter((value) => value !== competence);\n } else {\n self.filter.competencies.push(competence);\n }\n },\n filterByPodcasts() {\n self.filter.hasPodcast = !self.filter.hasPodcast;\n },\n filterByExpiringCourses() {\n self.filter.isExpiring = !self.filter.isExpiring;\n },\n resetFilter() {\n self.filter = {\n authorId: null,\n categories: [],\n competencies: [],\n statuses: [],\n hasPodcast: false,\n isExpiring: false\n };\n },\n cleanFilters(currentList) {\n // clean filter competence array\n self.filter.competencies = self.filter.competencies.reduce((acc, competenceId) => {\n const found = currentList.find((course) => {\n const ids = course.course_category2.map((c) => c.tid);\n return ids.includes(competenceId);\n });\n if (found) {\n acc.push(competenceId);\n }\n return acc;\n }, []);\n //\n // clean filter statuses array\n self.filter.statuses = self.filter?.statuses?.reduce((acc, status) => {\n const found = currentList.find((course) => course.course_status === status);\n if (found) {\n acc.push(status);\n }\n return acc;\n }, []);\n //\n // clean filter podcast value\n if (self.filter?.hasPodcast) {\n const found = currentList.find((course) => Boolean(course.lc_podcast_html));\n self.filter.hasPodcast = Boolean(found);\n }\n //\n\n if (self.filter?.isExpiring) {\n const found = currentList.find((course) => {\n const expirationDate = new Date(course.valid_period_end).setHours(23, 0, 0, 0);\n return new Date().getTime() >= new Date(expirationDate - 60 * 24 * 60 * 60 * 1000).getTime();\n });\n self.filter.isExpiring = Boolean(found);\n }\n }\n }));\n","/* eslint-disable camelcase */\nimport { types as t, flow, getParent } from 'mobx-state-tree';\nimport { Course } from 'state/modelsEwapi/Course';\n\nexport const CourseResult = t.model('CourseResult', {\n id: t.identifierNumber,\n uuid: t.string,\n course_id: t.maybe(t.reference(Course)),\n created: t.number,\n changed: t.number,\n completed: t.number,\n certificate: t.number,\n has_evaluation: t.maybeNull(t.number)\n});\n\nexport const CourseResults = t\n .model({\n courseResults: t.maybeNull(t.array(CourseResult))\n })\n\n .views((self) => ({\n getFinishedCourses() {\n return self.courseResults.filter((courses) => courses.certificate !== 0);\n },\n getStartedCourses() {\n return self.courseResults.filter((courses) => courses.certificate === 0);\n },\n getShownCourses(courseIds) {\n return self.getStartedCourses().filter((course) => !courseIds.includes(course.course_id?.course_uuid));\n },\n isCourseStarted(id) {\n const startedCourses = self.getStartedCourses();\n const started = startedCourses.length > 0 ? self.getStartedCourses().map((course) => course.course_id?.course_id) : [];\n return started.includes(id);\n },\n isCourseFinished(id) {\n const finishedCourses = self.getFinishedCourses();\n const finished = finishedCourses.length > 0 ? self.getFinishedCourses().map((course) => course.course_id?.course_id) : [];\n return finished.includes(id);\n },\n findCourseResultByNid(nid) {\n return self.courseResults.find((courseResult) => courseResult.id === nid);\n },\n findCourseResultByCourseNid(nid) {\n return self.courseResults.find((courseResult) => courseResult.course_id?.course_id === nid);\n }\n }))\n .actions((self) => ({\n setHiddenCourses(courseIds) {\n self.hiddenCourses = courseIds;\n return self.hiddenCourses;\n },\n setShowHidden(bool) {\n self.showHidden = bool;\n return self.showHidden;\n },\n updateCourseResultbyNid: flow(function* updateCourseResultbyNid(nid) {\n try {\n const { data: response } = yield getParent(self, 1).lmsApi.fetchCourseResultsByCourseId(nid);\n const { course_results, lesson_results } = response.data;\n const updatedCourseResult = course_results[0];\n\n if (!updatedCourseResult) {\n return null;\n }\n const updatedLessonResult = lesson_results;\n const index = self.courseResults.findIndex((courseResult) => courseResult.id === updatedCourseResult.id);\n if (index !== -1) {\n self.courseResults[index] = updatedCourseResult;\n } else if (!Array.isArray(updatedCourseResult)) {\n self.courseResults.push(updatedCourseResult);\n }\n getParent(self, 1).lesson_results.updateLessonResults(updatedLessonResult);\n return response;\n } catch (e) {\n return e;\n }\n })\n }));\n","import { types as t } from 'mobx-state-tree';\n\nexport const User = t\n .model('User', {\n uid: t.identifierNumber,\n uuid: t.string,\n name: t.string,\n last_name: t.string,\n first_name: t.maybeNull(t.string),\n initials: t.maybeNull(t.string),\n mail: t.string,\n preferred_langcode: t.string,\n user_picture: t.maybeNull(t.string),\n display_name: t.maybeNull(t.string),\n roles: t.array(t.string),\n permissions: t.array(t.string),\n field_accepted_gdpr: t.maybeNull(t.boolean)\n })\n .views((self) => ({\n hasRole(role) {\n return self.roles.includes(role);\n },\n get hasEditorRights() {\n return (\n self.permissions.findIndex((a) => a === 'administer lesson content') !== -1 ||\n self.permissions.findIndex((a) => a === 'administer users') !== -1\n );\n }\n }))\n .actions((self) => ({\n updatePicture(picture) {\n self.user_picture = picture;\n }\n }));\n","import { types as t, getSnapshot, detach } from 'mobx-state-tree';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { IsoDate } from '../models/BaseModel';\nimport { Lesson } from './Course';\nimport { CourseResult } from './CourseResults';\nimport { User } from './User';\n\nexport const LessonContainer = t.model('LessonResult', {\n id: t.number,\n uuid: t.string,\n user_id: t.reference(User),\n status: t.string,\n score: t.number,\n questions_answered: t.number,\n sequence_no: t.number,\n page_id_max: t.maybeNull(t.number),\n created: t.number,\n changed: t.number,\n data: t.string,\n pages: t.maybe(\n t.array(\n t.model({\n completed: t.boolean\n })\n )\n ),\n questions: t.maybe(\n t.array(\n t.model({\n questionId: t.string,\n type: t.string,\n weight: t.number,\n correct: t.optional(t.boolean, false),\n last_correct: t.optional(t.boolean, false),\n last_response: t.string,\n last_response_timestamp: IsoDate,\n first_response: t.string,\n first_response_timestamp: IsoDate,\n tries: t.number\n })\n )\n ),\n lesson: t.reference(Lesson),\n course_result: t.reference(CourseResult),\n current: t.number\n});\n\nexport const LessonResult = t.array(\n t.snapshotProcessor(LessonContainer, {\n preProcessor(sn) {\n let newSnapshot = cloneDeep(sn);\n try {\n let { data } = newSnapshot;\n if (!data || data === '{}') data = { questions: [], pages: [] };\n else data = JSON.parse(data);\n if (!data.questions) data.questions = [];\n if (!data.pages) data.pages = [];\n newSnapshot = { ...newSnapshot, ...data };\n } catch (e) {\n console.error(e);\n }\n return newSnapshot;\n }\n })\n);\n\nexport const LessonResults = t\n .model({\n lessonResults: LessonResult\n })\n .views((self) => ({\n getLessonPageIdMax(lessonId) {\n const lesson = self.lessonResults.find((item) => item.lesson.nid === lessonId);\n return lesson?.page_id_max || 1;\n },\n findLessonByCourseNid(nid) {\n const lessonResult = self.lessonResults.filter((lesson) => lesson && lesson.course_result.course_id.course_id === nid);\n return lessonResult;\n },\n getFailedCourses() {\n return self.lessonResults.filter((lessonR) => lessonR.status === '2');\n },\n isLessonFailed(lessonId) {\n return !!self.getFailedCourses().filter((failedCourse) => failedCourse.lesson.nid === lessonId).length;\n },\n isLessonSuccess(lessonId) {\n const LessonResultsSuccess = self.lessonResults.filter((lessonR) => lessonR.status === '3');\n return !!LessonResultsSuccess.filter((successCourse) => successCourse.lesson.nid === lessonId).length;\n }\n }))\n .actions((self) => ({\n updateLessonResults(lessonResults) {\n const updatedLessonRes = [...JSON.parse(JSON.stringify(self.lessonResults))];\n lessonResults.forEach((lessonResult) => {\n const index = updatedLessonRes.findIndex((lesson) => lesson.lesson === lessonResult.lesson);\n if (index !== -1) {\n updatedLessonRes[index] = lessonResult;\n } else {\n updatedLessonRes.push(lessonResult);\n }\n });\n\n detach(self.lessonResults);\n self.lessonResults = getSnapshot(LessonResult.create(updatedLessonRes));\n return self.lessonResults;\n }\n }));\n","/* eslint-disable consistent-return */\n/* eslint-disable require-atomic-updates */\n/* eslint no-throw-literal: off */\nimport * as logger from 'loglevel';\nimport { applySnapshot, flow, getSnapshot, types as t } from 'mobx-state-tree';\nimport i18next, { getCurrentLocale } from 'i18n';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { LessonEdit } from 'state/models/LessonEdit';\n\n// TODO : move to CourseEdit modal\nimport { changeLanguageMeta } from 'helpers/Helpers';\nimport { convertSnapshot } from './api/LmsApi';\nimport { LessonResult } from './modelsEwapi/LessonContainer';\nimport { Authors } from './modelsEwapi/Author';\n\nconst log = logger.getLogger('RootStore');\nlog.setDefaultLevel('info');\n\nexport const StoreFetch = t\n .model()\n // PATCH + POST ACTIONS\n .actions((self) => ({\n patchpostData: (method, entity, data) => {\n if (method === 'post') return self.postData(entity, data);\n return self.patchData(data);\n },\n\n patchData: flow(function* patchData(entity, data) {\n try {\n if (entity.type === 'lesson_result') applySnapshot(entity, convertSnapshot.lesson_result(data)); // Direct rerender after submit in question\n const packagecourses = self.courses && self.courses.courses.map((courses) => courses.course_id);\n const response = yield self.lmsApi.patchpost(data);\n if (response.favorite_courses) {\n const favorites = response.favorite_courses.filter((course) => packagecourses.includes(course.target_id));\n if (favorites) {\n self.favorites = { ...response, favorite_courses: favorites };\n self.favoriteIds = response.favorite_courses.map((course) => course.uuid);\n return self.favorites;\n }\n self.favorites = null;\n }\n if (response.liked_courses) {\n const liked = response.liked_courses.filter((course) => packagecourses.includes(course.target_id));\n if (liked) {\n self.likes = { ...response, liked_courses: liked };\n self.likedIds = response.liked_courses.map((course) => course.uuid);\n return self.likes;\n }\n self.likes = null;\n }\n if (response.hidden_courses) {\n const hidden = response.hidden_courses.filter((course) => packagecourses.includes(course.target_id));\n if (hidden) {\n self.hidden = { ...response, hidden_courses: hidden };\n self.hiddenIds = response.hidden_courses.map((course) => course.uuid);\n return self.hidden;\n }\n self.hidden = null;\n return self.hidden;\n }\n if (response.type === 'user') {\n self.profile = { ...response, relationships: self.profile.relationships };\n return self.profile;\n }\n applySnapshot(entity, response);\n log.debug(`Patch ${entity.type}:`, response);\n return response;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n throw e;\n }\n }),\n\n postData: flow(function* patchData(data) {\n try {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const response = yield self.lmsApi.patchpost(data);\n if (response.favorite_courses) {\n const favorites = response.favorite_courses.filter((course) => packagecourses.includes(course.target_id));\n if (favorites) {\n self.favorites = { ...response, favorite_courses: favorites };\n self.favoriteIds = response.favorite_courses.map((course) => course.uuid);\n return self.favorites;\n }\n self.favorites = null;\n return self.favorites;\n }\n if (response.liked_courses) {\n const liked = response.liked_courses.filter((course) => packagecourses.includes(course.target_id));\n if (liked) {\n self.likes = { ...response, liked_courses: liked };\n self.likedIds = response.liked_courses.map((course) => course.uuid);\n return self.likes;\n }\n self.likes = null;\n return self.likes;\n }\n if (response.hidden_courses) {\n const hidden = response.hidden_courses.filter((course) => packagecourses.includes(course.target_id));\n if (hidden) {\n self.hidden = { ...response, hidden_courses: hidden };\n self.hiddenIds = response.hidden_courses.map((course) => course.uuid);\n return self.hidden;\n }\n self.hidden = null;\n return self.hidden;\n }\n log.debug(`Post ${data.type}:`, data);\n return response;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n deleteData: flow(function* deleteData(data) {\n try {\n data = yield self.lmsApi.deletePost(data);\n return data;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n })\n }))\n // INITIAL FETCHES FOR COURSE OVERVIEW\n .actions((self) => ({\n //\n // ============= FETCH EWAPI STUDENT DATA INCL COURSES ================\n fetchData: flow(function* fetchData(selectedProductId, selectedPackageId) {\n const productID = selectedProductId.toString() || self.selectedProductId;\n const packageID = selectedPackageId.toString() || self.selectedPackageId;\n\n // Save some data in session storage as we are loosing data on page refresh\n sessionStorage.setItem('selectedProductId', productID);\n sessionStorage.setItem('selectedPackageId', packageID);\n\n if (self.state === 'pending') return; // wait for running fetch\n self.state = 'pending';\n self.error = null;\n try {\n self.setState('loading');\n const { ewapi: fetched } = yield self.lmsApi.fetchUserData(productID, packageID);\n\n if (fetched?.data?.error) {\n self.state = 'init';\n self.hasSubscriptions = false;\n self.state = 'done';\n return fetched;\n // throw new Error(`${fetched?.ewapi?.data?.errorcode} : ${fetched?.ewapi?.data?.error}`);\n }\n\n self.hasSubscriptions = true;\n\n if (fetched?.data?.result?.base_product_id) {\n fetched.data.result.product_id = 100;\n fetched.data.result.products_in_subscription = [100];\n fetched.data.subscriptions = self.setEwiseSubscriptions(fetched);\n fetched.data.product = self.setEwiseProduct(fetched);\n }\n\n //\n self.setLanguage(fetched);\n changeLanguageMeta(fetched?.data?.user?.preferred_langcode || getCurrentLocale());\n //\n // UPDATE STORE WITH FETCHED RESULT\n self.updateStore(fetched);\n self.setFavorites(fetched);\n self.setLikes(fetched);\n self.setHidden(fetched);\n self.setCourseResults(fetched);\n // TODO: User roles and permissions\n //\n self.setLikedIds(fetched);\n self.setFavoritesIds(fetched);\n\n if (self.isEwiseUser) {\n self.setSelectedProduct(fetched.data.baseproduct.nid, fetched.data.result.package_id);\n } else {\n self.setSelectedProduct(fetched.data.result.product_id, fetched.data.result.package_id);\n }\n\n self.specialAccessCourseIds = [];\n if (self.login.hasSpecialAccess) {\n const specialAccessResult = yield self.lmsApi.fetchSpecialAccessCourses();\n self.specialAccessCourseIds = specialAccessResult?.data?.courses?.map((course) => course.course_id) || [];\n }\n // ==== IF TRIAL PRODUCT ===========================\n if (fetched?.data?.product?.free_product && fetched?.data?.baseproduct_full?.nid) {\n const trialCourses = fetched.data.courses.map((course) => course.course_id) || [];\n // - get baseproduct_id and package_id from baseproduct_full and fetch non trial courses\n const baseProductId = fetched.data.baseproduct_full.nid;\n const basePackageId = fetched.data.baseproduct_full.packages[0].nid;\n // - fetch non trial courses\n const { ewapi: nonTrialCourses } = yield self.lmsApi.fetchUserData(baseProductId, basePackageId);\n // - add isTrialCourse property to nonTrialCourses\n const setTrialCourses = nonTrialCourses.data.courses.map((course) => ({\n ...course,\n isTrialCourse: !!trialCourses.includes(course.course_id)\n }));\n nonTrialCourses.data.courses = setTrialCourses;\n self.updateStoreNonTrialCourses(nonTrialCourses);\n self.trialCourses = trialCourses;\n }\n\n setTimeout(() => {\n self.setState('done');\n }, 1000);\n // eslint-disable-next-line consistent-return\n return self;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n // if (self.error.status === 401) yield self.logout();\n if (e.modelErrors) e.modelErrors.forEach((error) => log.warn(error));\n throw e;\n }\n }),\n //\n // ============= FETCH STUDENT DATA ONLY ================\n fetchUser: flow(function* fetchUser() {\n try {\n const fetched = yield self.lmsApi.fetchUser(self.login.uuid);\n const data =\n fetched?.data?.included.find(\n (entity) => entity.type === 'file--file' && entity.id === fetched.data.data[0].relationships.user_picture.data?.id\n ) || null;\n const professions =\n fetched?.data?.included.find(\n (entity) => entity.type === 'profession' && entity.id === fetched.data.data[0].relationships.professions.data[0]?.id\n ) || null;\n const userProfessions = fetched?.data?.included.filter((bp) => bp.type === 'profession') || [];\n self.profile = { ...fetched.data.data[0], relationships: { user_picture: { data }, professions } };\n self.profile.userProfessions = userProfessions;\n return self.profile;\n } catch (e) {\n return e;\n }\n }),\n //\n // ============= FETCH SPECIALACCESS COURSES ================\n fetchSpecialAccessCourses: flow(function* fetchSpecialAccessCourses() {\n if (self.state === 'pending') return; // wait for running fetch\n self.state = 'pending';\n self.error = null;\n try {\n //\n self.setState('loading');\n //\n const fetched = yield self.lmsApi.fetchSpecialAccessCourses();\n self.state = 'done';\n //\n if (fetched.data.success !== undefined && fetched.data.success === false) {\n self.courses = { courses: [] };\n self.courseResults = { courseResults: [] };\n self.lesson_results = { lessonResults: [] };\n return self.courses;\n }\n self.updateStoreSpecialAccess(fetched);\n self.setCourseResults(fetched);\n self.setLanguage(fetched);\n return self.courses;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n if (e.modelErrors) {\n e.modelErrors.forEach((error) => log.warn(error));\n }\n throw e;\n }\n }),\n // ============= FETCH EWAPI STUDENT DATA INCL COURSES ================\n fetchSearchData: flow(function* fetchSearchData(selectedSearchParam, selectedBaseProductId, selectedSearchAttempt) {\n const searchParam = selectedSearchParam.toString() || self.searchParam;\n const baseProductId = selectedBaseProductId.toString() || self.baseProduct.nid;\n const searchAttempt = parseInt(selectedSearchAttempt) || 0;\n\n if (self.state === 'pending') return; // wait for running fetch\n self.state = 'pending';\n self.error = null;\n try {\n self.setState('loading');\n const fetched = yield self.lmsApi.fetchSearchResults(searchParam, baseProductId, searchAttempt);\n // Throw new error if ewapi returns error\n if (fetched?.data?.error) {\n self.state = 'init';\n self.hasSubscriptions = false;\n self.state = 'done';\n return fetched;\n }\n\n self.hasSubscriptions = true;\n\n const { result, meta } = fetched.data;\n\n self.searchCoursesFound = meta?.total ?? 0;\n self.searchSuggestedParam = result?.suggested_param ?? ''; // Given by AI\n self.searchNextAttempt = result?.attempt ?? 1; // Next attempt number\n self.searchIsRandom = result?.random ?? false; // Random search\n\n if (result?.is_ewise === true) {\n self.product = self.setEwiseProduct(fetched);\n } else {\n self.product = JSON.parse(sessionStorage.getItem('selectedProduct'));\n }\n\n // Get some data from local session storage\n self.selectedPackageId = parseInt(sessionStorage.getItem('selectedPackageId'));\n self.selectedProductId = parseInt(sessionStorage.getItem('selectedProductId'));\n\n if (meta.total === 0) {\n self.state = 'init';\n self.hasSubscriptions = true;\n self.courses = { courses: [] };\n self.courseResults = { courseResults: [] };\n self.lesson_results = { lessonResults: [] };\n self.authors = Authors.create({ authorList: [] });\n self.state = 'done';\n return fetched;\n }\n\n self.updateSearchResults(fetched);\n self.setFavorites(fetched);\n self.setLikes(fetched);\n self.setHidden(fetched);\n self.setCourseResults(fetched);\n self.setLikedIds(fetched);\n self.setFavoritesIds(fetched);\n\n //\n self.state = 'done';\n // eslint-disable-next-line consistent-return\n return self;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n if (e.modelErrors) e.modelErrors.forEach((error) => log.warn(error));\n throw e;\n }\n })\n }))\n // OTHER ACTIONS\n .actions((self) => ({\n // UPDATE STORE WITH FETCHED RESULT\n updateStore(fetched) {\n self.specialAccess = false;\n self.courses = null;\n self.validUser = true;\n self.user = fetched.data.user;\n self.profession = fetched.data.profession;\n self.categories = fetched.data.profession.categories;\n self.categories2 = fetched.data.profession.categories2;\n\n self.courses = { courses: fetched.data.courses.sort((a, b) => a.course_title.localeCompare(b.course_title)) };\n\n self.subscriptions = { subscriptions: fetched.data.subscriptions };\n self.products = fetched.data.result.products_in_subscription;\n self.baseProduct = fetched.data.baseproduct;\n self.packages = fetched.data.baseproduct.packages;\n\n self.authors = Authors.create({ authorList: fetched.data.authors.sort((a, b) => a.last_name.localeCompare(b.last_name)) });\n self.product = fetched.data.product;\n\n self.totalCompletedCourses = fetched.meta.user_courses_finished;\n\n self.showBanner = fetched.meta?.show_banner || false;\n\n sessionStorage.setItem('selectedProduct', JSON.stringify(self.product));\n },\n updateStoreNonTrialCourses(fetched) {\n self.profession = fetched.data.profession;\n self.categories = fetched.data.profession.categories;\n self.categories2 = fetched.data.profession.categories2;\n self.courses = { courses: fetched.data.courses.sort((a, b) => a.course_title.localeCompare(b.course_title)) };\n self.authors.authorList = fetched.data.authors.sort((a, b) => a.last_name.localeCompare(b.last_name));\n },\n updateStoreSpecialAccess(fetched) {\n // self.specialAccess = fetched.data;\n self.specialAccess = true;\n // UPDATE STORE WITH FETCHED RESULT\n fetched.data.user.uid = fetched.data.user.id;\n self.user = fetched.data.user;\n self.courses = null;\n self.validUser = true;\n // eslint-disable-next-line prefer-destructuring, prefer-destructuring\n self.profession = fetched.data.professions[0];\n self.categories = fetched.data.professions[0].categories;\n self.categories2 = fetched.data.professions[0].categories2;\n\n self.favorites = null;\n\n self.courses = null;\n self.courses = { courses: fetched.data.courses.sort((a, b) => a.course_title.localeCompare(b.course_title)) };\n self.specialAccessCourseIds = fetched?.data?.courses?.map((course) => course.course_id) || [];\n\n self.authors = Authors.create({ authorList: fetched.data.authors.sort((a, b) => a.last_name.localeCompare(b.last_name)) });\n self.subscriptions = { subscriptions: fetched.data.subscriptions };\n },\n // Update categories\n updateSearchResults(fetched) {\n self.courses = null;\n self.courses = { courses: fetched.data.courses };\n self.authors = Authors.create({\n authorList: [...(fetched.data.authors || []), ...(fetched.data.reviewers || [])].sort((a, b) =>\n a.last_name.localeCompare(b.last_name)\n )\n });\n self.subscriptions = { subscriptions: fetched.data.subscriptions };\n self.packages = fetched.data.baseproduct.packages;\n self.baseProduct = fetched.data.baseproduct;\n self.products = fetched.data.products_in_subscription;\n },\n // SET LANGUAGE\n setLanguage(fetched) {\n // set app language\n const userLanguage = fetched.data.user.preferred_langcode;\n if (userLanguage && userLanguage !== i18next.language) {\n i18next.changeLanguage(userLanguage, (err) => {\n if (err) return log.error('something went wrong loading', err);\n return log.info('language changed');\n });\n }\n },\n\n // SET FAVORITES\n setFavorites(fetched) {\n if (fetched.data.favorites) {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const favorites = fetched?.data?.favorites.favorite_courses?.filter((course) => packagecourses.includes(course.target_id));\n self.favorites = favorites ? { ...fetched.data.favorites, favorite_courses: favorites } : null;\n }\n },\n // SET LIKES\n setLikes(fetched) {\n if (fetched.data.likes) {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const favorites = fetched?.data?.likes?.liked_courses?.filter((course) => packagecourses.includes(course.target_id));\n self.likes = favorites ? { ...fetched.data.likes, liked_courses: favorites } : null;\n }\n },\n setHidden(fetched) {\n if (fetched.data.hidden) {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const hidden = fetched?.data?.hidden?.hidden_courses?.filter((course) => packagecourses.includes(course.target_id));\n if (hidden) {\n self.hidden = { ...fetched.data.hidden, hidden_courses: hidden };\n self.hiddenIds = hidden.map((course) => course.uuid);\n } else {\n self.hidden = null;\n }\n }\n },\n setLikedIds(fetched) {\n self.likedIds = fetched?.data?.likes && fetched?.data?.likes?.liked_courses?.map((course) => course.uuid);\n // self.likedIds = fetched?.data?.likes.liked_courses.map((course) => course.uuid);\n },\n setFavoritesIds(fetched) {\n self.favoriteIds = fetched?.data?.favorites && fetched?.data?.favorites?.favorite_courses?.map((course) => course.uuid);\n // self.favoriteIds = fetched?.data?.favorites?.favorite_courses.map((course) => course.uuid);\n },\n // SET COURSE RESULTS\n setCourseResults(fetched) {\n if (fetched.data.course_results) {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const started = fetched.data.course_results.filter((course) => packagecourses.includes(course.course_id));\n self.courseResults = { courseResults: started };\n const startedIds = started.map((courses) => courses.id);\n const filteredLessonResults = fetched.data.lesson_results.filter((lesson) => startedIds.includes(lesson.course_result));\n const lessonResults = LessonResult.create(filteredLessonResults);\n self.lesson_results = { lessonResults: getSnapshot(lessonResults) };\n }\n },\n // SET COURSE RESULTS\n setCourseResultsSpecialAccess(fetched) {\n if (fetched.data.course_results) {\n const packagecourses = self.courses.courses.map((courses) => courses.course_id);\n const started = fetched.data.course_results.filter((course) => packagecourses.includes(course.course_id));\n self.courseResults = { courseResults: started };\n const startedIds = started.map((courses) => courses.id);\n const filteredLessonResults = fetched.data.lesson_results.filter((lesson) => startedIds.includes(lesson.course_result));\n const lessonResults = LessonResult.create(filteredLessonResults);\n self.lesson_results = { lessonResults: getSnapshot(lessonResults) };\n }\n },\n setEwiseSubscriptions(fetched) {\n const curDate = new Date();\n const newDate = new Date(curDate.setFullYear(curDate.getFullYear() + 1));\n const subEndValue = newDate.toJSON().slice(0, 10);\n return [\n {\n nid: 8402,\n uuid: 'ce4599ae-8802-46f3-abda-40edb4144477',\n product: 100,\n base_product_title: `EWISE ${fetched.data.baseproduct.title}`,\n maximum_points: 1000,\n valid_period: [{ value: '2022-09-12', end_value: subEndValue }]\n }\n ];\n },\n setEwiseProduct(fetched) {\n return {\n nid: 100,\n uuid: 'b9b056a8-4745-4b88-b9ea-7916ff8eb324',\n title: fetched.data.baseproduct.title,\n free_product: 0\n };\n },\n\n // ============== FETCH COURSES ====================\n // fetches all related course_container data: courses, lesson_container\n // + FETCH USER COURSE RESULTS\n fetchCourses: flow(function* fetchCourses() {\n /**\n * Find base_product in included:\n * get selected package id in base_product : base_product -> relationships -> packages[0].id\n * included.find package with if from base_product\n * package -> relationships -> course_container.id\n * fetched = yield fetchCourseContainerData(id);\n */\n // wait for running fetch\n\n self.error = null;\n let courseContainerId = false;\n const baseProduct = self.included.filter((bp) => bp.type === 'base_product');\n const baseProductJson = baseProduct.filter((on) => on.attributes.unique_name === self.product.attributes.unique_name)[0];\n const firstPackageId = baseProductJson.relationships.packages.data[self.selectedPackageId].id.id;\n const firstPackage = self.included.find((pkg) => pkg.id === firstPackageId);\n const firstPackageJson = JSON.parse(JSON.stringify(firstPackage));\n courseContainerId = firstPackageJson.relationships.course_container.data.id;\n // FETCH COURSE_CONTAINER INCLUDED COURSES, lESSON_CONTAINER\n try {\n if (courseContainerId && !self.clickedTabs.includes(self.selectedPackageId)) {\n const fetched = yield self.lmsApi.fetchCourseContainerData(courseContainerId);\n self.mergeIncludes(fetched);\n }\n } catch (e) {\n self.error = e;\n self.state = 'error';\n log.error(e);\n if (e.modelErrors) {\n e.modelErrors.forEach((error) => log.warn(error));\n }\n throw e;\n }\n\n if (!self.startedCourse) {\n // FETCH THE USER COURSE RESULTS\n self.fetchUserCourseResults();\n // FETCH THE USER COURSE FAVORITES\n self.fetchCourseFavorites();\n self.startedCoursesLoaded(true);\n }\n }),\n\n // TODO : same function as in fetchCourses [2] Both needed ?\n // Get available course results for loaded courses\n fetchUserCourseResults: flow(function* fetchUserCourseResults() {\n try {\n const responseCourseResults = yield self.lmsApi.fetchCourseResults(self.login.uuid);\n self.certificates = responseCourseResults.data;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n log.error(e);\n if (e.modelErrors) {\n e.modelErrors.forEach((error) => log.warn(error));\n }\n throw e;\n }\n }),\n\n fetchCourseFavorites: flow(function* fetchCourseFavorites() {\n try {\n const responseCourseResults = yield self.lmsApi.fetchCourseFavorites(self.user.id);\n if (responseCourseResults) {\n self.mergeIncludes(responseCourseResults.data);\n self.mergeIncludes(responseCourseResults.included);\n }\n } catch (e) {\n self.error = e;\n self.state = 'error';\n log.error(e);\n if (e.modelErrors) {\n e.modelErrors.forEach((error) => log.warn(error));\n }\n throw e;\n }\n }),\n\n fetchBanner: flow(function* fetchBanner(productId) {\n try {\n const fetched = yield self.lmsApi.fetchBanners(productId);\n const banners = fetched.data.data.map((bannersData) => {\n const backgroundImageID = bannersData.relationships.background_image.data.id;\n const backgroundImage = fetched.data.included.find((entity) => entity.type === 'file--file' && entity.id === backgroundImageID);\n return { ...bannersData, relationships: { background_image: { data: backgroundImage } } };\n });\n self.banners = banners;\n return self.banners;\n } catch (e) {\n return e;\n }\n }),\n\n fetchVtbOverview: flow(function* fetchVtbOverview(query) {\n try {\n const fetchedVtb = yield self.lmsApi.fetchVtbOverview(query);\n const vtbevents = fetchedVtb.data.map((eventsData) => ({ ...eventsData }));\n const vtblocations = fetchedVtb.included\n ? fetchedVtb.included.filter((includedEntity) => includedEntity.type === 'event_location')\n : [];\n const vtbcategories = fetchedVtb.included\n ? fetchedVtb.included.filter((includedEntity) => includedEntity.type === 'event_type')\n : [];\n self.vtbevents = vtbevents;\n self.vtblocations = vtblocations;\n self.vtbcategories = vtbcategories;\n } catch (e) {\n return e;\n }\n })\n }))\n // WIDGETS\n .actions((self) => ({\n // .LESSON:get WIDGETS\n getLessonWidgets: flow(function* getLessonWidgets(lessonId) {\n if (self.lessonEditState === 'pending') return; // wait for running fetch\n self.lessonEditState = 'pending';\n self.error = null;\n try {\n const fetched = yield self.lmsApi.getLessonEdit(lessonId);\n\n const objLessonEdit = {\n tagdoc: fetched.included ? fetched.included.find((includedEntity) => includedEntity.type === 'file') : null,\n widgets: fetched.included ? fetched.included.filter((includedEntity) => includedEntity.type === 'question_widget') : [],\n lesson_content: fetched.data\n };\n self.lessonEdit = LessonEdit.create(objLessonEdit);\n self.lessonEditState = 'done';\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n // eslint-disable-next-line consistent-return\n return null;\n }\n }),\n\n // .LESSON:post WIDGET\n postWidget: flow(function* postWidget(questionWidget) {\n // eslint-disable-next-line camelcase\n const { lesson_content } = self.lessonEdit;\n const newLessonContentValue = cloneDeep(getSnapshot(self.lessonEdit.lesson_content));\n\n newLessonContentValue.relationships.lesson_content_widgets.data.push({ type: 'question_widget', id: '{{widget.body@$.data.id}}' });\n try {\n const fetched = yield self.lmsApi.createWidget(questionWidget, newLessonContentValue);\n const cleanResponse = validateFetchedObjects(fetched);\n applySnapshot(lesson_content, cleanResponse.content);\n self.lessonEdit.update(cleanResponse.widget, 'widgets');\n return fetched;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n })\n }));\n\n// create CLEAN RESPONSE OBJECT from SUBREQUEST\nfunction validateFetchedObjects(fetched) {\n const cleanResponse = {};\n Object.keys(fetched).forEach((key) => {\n const cleanKey = key.split('#');\n if (!fetched[key].errors) cleanResponse[cleanKey[0]] = fetched[key].data;\n });\n\n return cleanResponse;\n}\n","import { types as t } from 'mobx-state-tree';\nimport { File } from './BaseModel';\n\nexport const Banner = t.model('Banner', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n branch: t.maybeNull(t.string),\n button_link: t.maybeNull(t.string),\n button_title: t.maybeNull(t.string),\n button_color: t.maybeNull(t.string),\n campaign_title: t.maybeNull(t.string),\n changed: t.maybeNull(t.string),\n chip: t.maybeNull(t.string),\n chip_color: t.maybeNull(t.string),\n created: t.maybeNull(t.string),\n description: t.maybeNull(t.string),\n drupal_internal__nid: t.maybeNull(t.number),\n field_custom_css: t.maybeNull(t.string),\n field_expiring_date: t.maybeNull(t.string),\n field_schedule_date: t.maybeNull(t.string),\n field_title: t.maybeNull(t.string),\n order_weight: t.maybeNull(t.number),\n status: t.maybeNull(t.boolean),\n title: t.maybeNull(t.string),\n title_color: t.maybeNull(t.string)\n }),\n relationships: t.model({\n background_image: t.maybeNull(\n t.model({\n data: File\n })\n )\n })\n});\n","import { types as t } from 'mobx-state-tree';\nimport { Body, RelProfession } from './BaseModel';\n\n// TODO: Update relationships.\n// accr_logo: t.maybeNull(),\n// accr_registers: t.maybeNull(),\n// field_logo: t.maybeNull(),\n\nexport const AccreditationOrganisation = t.model('AccreditationOrganisation', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n title: t.string,\n accr_unit: t.maybeNull(t.string),\n extra_points_unit: t.maybeNull(t.string),\n body: t.maybeNull(Body)\n }),\n relationships: t.model({\n profession: t.maybe(RelProfession)\n })\n});\n\nexport const RelAccreditationOrganisations = t\n .model('RelAccreditationOrganisations', {\n data: t.maybeNull(\n t.model({\n id: t.reference(AccreditationOrganisation),\n type: t.string\n })\n )\n })\n .views((self) => ({\n get accreditationrefs() {\n if (self.data) {\n return self.data.map((accreditationrefs) => accreditationrefs.id);\n }\n return [];\n }\n }));\n\nexport const RelAccreditationOrganisation = t.model('RelAccreditationOrganisation', {\n data: t.maybeNull(\n t.model({\n id: t.reference(AccreditationOrganisation),\n type: t.string\n })\n )\n});\n\nexport const newAccreditationOrganisation = {\n attributes: {\n title: '',\n accr_unit: '',\n extra_points_unit: ''\n }\n};\n","import { types as t } from 'mobx-state-tree';\nimport { RelAccreditationOrganisation } from './AccreditationOrganisation';\n\nexport const AccreditationLink = t.model('AccreditationLink', {\n type: t.string,\n id: t.identifier,\n attributes: t.model({\n drupal_internal__nid: t.number,\n title: t.string,\n accreditation_code: t.string,\n valid_period: t.model({\n value: t.string,\n end_value: t.string\n })\n }),\n relationships: t.model({\n accreditation_organisation: RelAccreditationOrganisation\n })\n});\n\nexport const RelAccreditationLinks = t.model('RelAccreditationLinks', {\n data: t.maybeNull(\n t.array(\n t.model({\n id: t.reference(AccreditationLink),\n type: t.string\n })\n )\n )\n});\n\nexport const newAccreditationLink = {\n attributes: {\n accreditation_code: 'ewise',\n accreditation_points: 0,\n title: '',\n valid_period: {\n value: '',\n end: ''\n }\n }\n};\n","import { types as t } from 'mobx-state-tree';\nimport { Links, RelFile, RelProfessions, Body } from './BaseModel';\n\n// TODO: Remove 'field_' @ 'field_professions' in drupal\nexport const Author = t.model('Author', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n body: t.maybeNull(Body),\n title: t.maybeNull(t.string),\n first_name: t.maybeNull(t.string),\n last_name: t.maybeNull(t.string)\n }),\n relationships: t.model({\n field_photo: t.maybeNull(RelFile),\n professions: t.maybeNull(RelProfessions)\n })\n});\n\nexport const RelAuthors = t\n .model('RelAuthors', {\n data: t.maybeNull(\n t.array(\n t.model({\n id: t.maybeNull(t.reference(Author)),\n type: t.string\n })\n )\n ),\n links: Links\n })\n .views((self) => ({\n get authorrefs() {\n if (self.data) {\n return self.data.map((authorrefs) => authorrefs.id);\n }\n return [];\n }\n }));\n","import { types as t } from 'mobx-state-tree';\nimport { IsoDate, RelProfession } from './BaseModel';\n// eslint-disable-next-line no-unused-vars\nimport { RelLessonContentSimple } from './LessonContent';\n\nexport const Lesson = t.model('Lesson', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n title: t.string,\n created: IsoDate,\n changed: IsoDate,\n rotating_answers: t.maybeNull(t.boolean),\n '1answer_nofeedback': t.maybeNull(t.boolean),\n '1answer_visualfeedback': t.maybeNull(t.boolean),\n minimum_score: t.maybeNull(t.number),\n minimum_score_2nd_try: t.maybeNull(t.number),\n max_attempts: t.maybeNull(t.number),\n lesson_type: t.maybeNull(t.string),\n free_flow: t.maybeNull(t.string) // TODO: Should be enumerated\n }),\n relationships: t.maybeNull(\n t.model({\n lesson_content: t.maybeNull(RelLessonContentSimple)\n })\n )\n});\n\nexport const NewLesson = t.model('NewLesson', {\n type: t.string,\n attributes: t.model({\n title: t.string,\n rotating_answers: t.maybeNull(t.boolean),\n '1answer_nofeedback': t.maybeNull(t.boolean),\n '1answer_visualfeedback': t.maybeNull(t.boolean),\n minimum_score: t.maybeNull(t.number),\n minimum_score_2nd_try: t.maybeNull(t.number),\n max_attempts: t.maybeNull(t.number),\n lesson_type: t.maybeNull(t.string),\n free_flow: t.maybeNull(t.string) // TODO: Should be enumerated\n }),\n relationships: t.model({\n lesson_content: t.maybeNull(RelLessonContentSimple),\n profession: RelProfession\n })\n});\n\nexport const RelLesson = t.model('RelLesson', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Lesson),\n type: t.string\n })\n )\n});\n\nexport const RelLessons1 = t.model('RelLessons', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.reference(Lesson)\n })\n )\n )\n});\n","/* eslint-disable camelcase */\nimport { types as t, getParent, flow } from 'mobx-state-tree';\nimport { RelAuthors } from './Author';\n// eslint-disable-next-line import/no-cycle\nimport { IsoDate, RelProfession, TextField, Links, RelFile } from './BaseModel';\nimport { RelLessons1 } from './Lesson';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\nexport const RelLessons = t.model('RelLessons', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.identifier\n })\n )\n )\n});\n\nexport const RelDependentCourse = t.model('RelDependentCourse', {\n data: t.maybeNull(\n t.array(\n t.model({\n type: t.string,\n id: t.identifier\n })\n )\n )\n});\n\nexport const LessonContainer = t\n .model('LessonContainer', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n drupal_internal__vid: t.number,\n created: IsoDate,\n changed: IsoDate,\n title: t.string,\n status: t.boolean,\n field_extra_label: t.maybeNull(t.string),\n field_keywords: t.maybeNull(t.string),\n field_preview_video: t.maybeNull(TextField),\n field_goals: t.maybeNull(TextField),\n field_information: t.maybeNull(TextField),\n field_podcast_html: t.maybeNull(TextField),\n podcast_title: t.maybeNull(t.string),\n field_sharing_info: t.maybeNull(t.string)\n }),\n relationships: t.model({\n lessons: RelLessons1,\n dependent_courses: RelDependentCourse,\n field_authors: RelAuthors,\n field_course_header_photo: t.maybeNull(RelFile),\n field_coursephoto: t.maybeNull(RelFile),\n field_reviewers: t.maybeNull(RelAuthors),\n profession: RelProfession,\n field_course_image_extern: t.maybeNull(RelFile)\n }),\n links: Links\n })\n .views((self) => ({\n get authors() {\n const { field_authors } = self.relationships;\n return (\n field_authors.data.map((data) => {\n const {\n id,\n attributes: { title }\n } = data.id;\n return {\n id,\n title,\n type: data.type\n };\n }) || []\n );\n },\n get reviewers() {\n const { field_reviewers } = self.relationships;\n return (\n field_reviewers.data.map((data) => {\n const {\n id,\n attributes: { title }\n } = data.id;\n return {\n id,\n title,\n type: data.type\n };\n }) || []\n );\n },\n get field_course_image_extern() {\n const { field_course_image_extern } = self.relationships;\n return (field_course_image_extern?.data && `${drupalBaseUrl}${field_course_image_extern.url}`) || '';\n },\n get field_coursephoto() {\n const { field_coursephoto } = self.relationships;\n return (field_coursephoto?.data && `${drupalBaseUrl}${field_coursephoto.url}`) || '';\n },\n get field_course_header_photo() {\n const { field_course_header_photo } = self.relationships;\n return (field_course_header_photo?.data && `${drupalBaseUrl}${field_course_header_photo.url}`) || '';\n }\n }))\n .actions((self) => ({\n patchPicture: flow(function* patchPicture(entity, file, field) {\n try {\n const response = yield getParent(self, 3).lmsApi.postImage(entity, file, field);\n return response;\n } catch (e) {\n return e;\n }\n })\n }));\n\nexport const RelLessonContainer = t.model('RelLessonContainer', {\n data: t.maybeNull(\n t.model({\n id: t.reference(LessonContainer),\n type: t.string\n })\n )\n});\n\nexport const NewLessonContainer = t.model('NewLessonContainer', {\n type: t.string,\n attributes: t.model({\n title: t.string\n }),\n relationships: t.model({\n lessons: RelLessons,\n profession: RelProfession\n })\n});\n","/* eslint-disable import/no-cycle */\n/* eslint-disable camelcase */\nimport { types as t } from 'mobx-state-tree';\nimport {\n TextField,\n Links,\n RelProfession,\n RelCategories,\n RelSpecialAccess,\n IsoDate,\n DateRange,\n Category,\n Profession,\n SpecialAccess,\n File\n} from './BaseModel';\nimport { RelAccreditationLinks, AccreditationLink } from './AccreditationLink';\nimport { RelLessonContainer, LessonContainer } from './LessonContainer';\nimport { LessonContentEdit } from './LessonContent';\nimport { Lesson } from './Lesson';\nimport { Author } from './Author';\n\nconst dispatchIncluded = (snapshot) => {\n if (snapshot.type === 'lesson_container') return LessonContainer;\n if (snapshot.type === 'lesson') return Lesson;\n if (snapshot.type === 'accreditation_link') return AccreditationLink;\n if (snapshot.type === 'author') return Author;\n if (snapshot.type === 'profession') return Profession;\n if (snapshot.type === 'category') return Category;\n if (snapshot.type === 'file--file') return File;\n // if (snapshot.type === 'lesson_content') return RelLessonContentSimple;\n if (snapshot.type === 'lesson_content') return LessonContentEdit;\n if (snapshot.type === 'special_access') return SpecialAccess;\n if (snapshot.type === 'course') return RelCourses;\n\n return null;\n};\n\nconst Included = t.array(\n t.union(\n { dispatcher: dispatchIncluded },\n LessonContainer,\n Lesson,\n AccreditationLink,\n Author,\n Category,\n Profession,\n File,\n LessonContentEdit,\n SpecialAccess\n // RelCourses\n )\n);\n\nexport const Course = t\n .model('Course', {\n id: t.identifier,\n type: t.string,\n included: t.optional(Included, []),\n attributes: t.model({\n drupal_internal__nid: t.number,\n langcode: t.string,\n status: t.boolean,\n title: t.string,\n created: IsoDate,\n changed: IsoDate,\n information: t.maybeNull(TextField),\n goals: t.maybeNull(TextField),\n preview_video: t.maybeNull(TextField),\n course_status: t.maybeNull(t.string),\n expected: t.boolean,\n online: t.boolean,\n // show_in_public: t.undefined,\n field_points: t.maybeNull(t.string),\n field_extra_points: t.maybeNull(t.string),\n field_extra_points_desc: t.maybeNull(t.string),\n field_accreditation_code: t.maybeNull(t.string),\n field_valid_period: t.maybeNull(DateRange),\n field_skip_evaluation: t.optional(t.boolean, false, [undefined, null]),\n allow_dry_run: t.optional(t.boolean, false, [undefined, null])\n }),\n relationships: t.model({\n // owner: types.maybeNull(types.late(() => types.reference(User)))\n // eslint-disable-next-line arrow-body-style\n // accreditation_links: t.maybeNull(t.late(() => t.reference(RelAccreditationLinks))),\n accreditation_links: t.maybeNull(RelAccreditationLinks),\n course_category: RelCategories,\n course_category2: RelCategories,\n profession: RelProfession,\n lesson_container: RelLessonContainer,\n special_access: RelSpecialAccess\n }),\n links: Links\n })\n .views((self) => ({\n get isFavorite() {\n const { favoriteCourses } = window.store.user;\n const isFavorite = favoriteCourses.findIndex((value) => value.id === self.id);\n\n return isFavorite !== -1;\n },\n\n get profession() {\n return self.relationships.profession.data.id.attributes.name;\n },\n get specialAccess() {\n const { special_access } = self.relationships;\n return (\n special_access.data.map((data) => {\n const {\n id,\n attributes: { name }\n } = data.id;\n return {\n id,\n name,\n type: data.type\n };\n }) || []\n );\n },\n get categories() {\n const { course_category } = self.relationships;\n return (\n course_category.data.map((data) => {\n const {\n id,\n attributes: { name }\n } = data.id;\n return {\n id,\n title: name,\n type: data.type\n };\n }) || []\n );\n },\n get categories2() {\n const { course_category2 } = self.relationships;\n return (\n course_category2.data.map((data) => {\n const {\n id,\n attributes: { name }\n } = data.id;\n return {\n id,\n title: name,\n type: data.type\n };\n }) || []\n );\n }\n }))\n .actions((self) => ({\n setTitle(title) {\n self.attributes.title = title;\n }\n }));\n\nexport const newCourse = {\n type: 'course',\n attributes: {\n title: 'Titel van de nieuwe cursus',\n course_status: 'New',\n expected: false,\n online: false,\n show_in_public: false,\n goals: { value: `Type hier je goals`, processed: `` },\n information: { value: `Type hier de cursus information`, processed: `` },\n field_points: '',\n field_extra_points: '',\n field_accreditation_code: ''\n },\n relationships: {\n profession: { data: {} },\n // authors: { data: [] },\n course_category: { data: [] },\n course_category2: { data: [] },\n special_acesss: { data: [] },\n accreditation_links: { data: [] },\n lesson_container: { data: {} }\n }\n};\n\nexport const courseStatus = [\n { id: 1, name: 'New', value: 'New' },\n { id: 2, name: 'Update', value: 'Update' },\n { id: 3, name: 'Update(manual)', value: 'Update(manual)' }\n];\n\nexport const RelCourse = t.model('RelCourse', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Course),\n type: t.string\n })\n ),\n links: Links\n});\n\nexport const RelCourses = t\n .model('RelCourses', {\n data: t.maybeNull(\n t.array(\n t.model({\n id: t.maybeNull(t.reference(Course)),\n type: t.string\n })\n )\n ),\n links: Links\n })\n .views((self) => ({\n get courserefs() {\n if (self.data) {\n return self.data.map((course) => course.id);\n }\n\n return [];\n }\n }));\n","/* eslint-disable camelcase */\nimport { types as t, getType, resolveIdentifier, getParent } from 'mobx-state-tree';\nimport { RelCourses } from './Course';\nimport { Links, RelCategory, Category, Profession } from './BaseModel';\n\nwindow.getType = getType;\nwindow.resolveIdentifier = resolveIdentifier;\nwindow.getParent = getParent;\nwindow.Category = Category;\n\nexport const CourseContainer = t\n .model('CourseContainer', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n status: t.boolean,\n title: t.string,\n created: t.string,\n changed: t.string\n }),\n links: t.maybeNull(Links),\n relationships: t.model({\n category: RelCategory,\n category2: RelCategory,\n profession: t.maybeNull(\n t.model({\n data: t.maybeNull(Profession)\n })\n ),\n courses: RelCourses\n })\n })\n .views((self) => ({\n // get attributes(){ return self.data.attributes },\n get profession() {\n return self.relationships.profession.data.attributes.name;\n },\n get professionParentId() {\n const { field_categories_parent_term } = self.relationships.profession.data.relationships;\n return field_categories_parent_term.data.meta.drupal_internal__target_id;\n },\n get professionParentId2() {\n const { field_categories2_parent_term } = self.relationships.profession.data.relationships;\n return field_categories2_parent_term.data.meta.drupal_internal__target_id;\n },\n get courses() {\n if (self.relationships.courses) return self.relationships.courses.courserefs;\n return [];\n }\n\n // get coursesByCategory(){\n // // Computed properties get automatically cached by Mobx. First time: 8ms / second time: 0,2ms\n // let categories = [];\n // self.courses.forEach(course => {\n // course.relationships.course_category.data.forEach(c => {\n // if(!categories[c.id.attributes.name]) categories[c.id.attributes.name] = [];\n // categories[c.id.attributes.name].push(course);\n // });\n // });\n // return categories;\n // }\n }));\n\nexport const RelCourseContainer = t.model('RelCourseContainer', {\n data: t.maybeNull(\n t.model({\n id: t.reference(CourseContainer),\n type: t.string\n })\n )\n});\n","import { types as t, getEnv, flow, getSnapshot, destroy, applySnapshot } from 'mobx-state-tree';\nimport cloneDeep from 'lodash/cloneDeep';\nimport dayjs from 'dayjs';\nimport { Course, newCourse } from './Course';\nimport { Lesson } from './Lesson';\nimport { Author } from './Author';\nimport { AccreditationLink, newAccreditationLink } from './AccreditationLink';\nimport { AccreditationOrganisation } from './AccreditationOrganisation';\nimport { LessonContainer } from './LessonContainer';\nimport { LessonContentEdit } from './LessonContent';\nimport { CourseContainer } from './CourseContainer';\nimport { Category, SpecialAccess } from './BaseModel';\nimport { startLmsApiClient } from '../api/LmsApi';\n\nexport const CourseEdit = t\n .model('CourseEdit', {\n course: t.maybeNull(Course),\n authors: t.maybeNull(t.array(Author)),\n lesson_container: t.maybeNull(LessonContainer),\n lessons: t.maybeNull(t.array(Lesson)),\n lesson_contents: t.maybeNull(t.array(LessonContentEdit)),\n category: t.maybeNull(t.array(Category)),\n category2: t.maybeNull(t.array(Category)),\n special_access: t.maybeNull(t.array(SpecialAccess)),\n accreditation_links: t.maybeNull(t.array(AccreditationLink)),\n organisations: t.maybeNull(t.array(AccreditationOrganisation)),\n courseContainer: t.maybeNull(CourseContainer),\n currentCourse: t.maybeNull(Course),\n toasts: t.optional(t.array(t.frozen()), [])\n })\n .volatile(() => ({\n isCreated: true,\n store: null,\n jsonApi: null,\n // lmsApi: null,\n v_state: null,\n duplicate: {},\n link: [],\n isOpen: false,\n setNewCourse: {},\n isFetching: 'init',\n retrieved: [],\n courses: {},\n editCourse: false,\n ewapi: '',\n toast: { open: false, msg: '', type: 'info' },\n modalLesson: { open: false },\n editTab: 'Introductie',\n newCourseId: '',\n dialogLesson: { open: false, lessonId: '' },\n dialogMenuList: false,\n packageMenuList: {},\n specialAccessMenu: [],\n setCopyCourse: null,\n selectedContainer: null,\n img: false,\n toggleDialogEditWidget: false,\n setEditWidget: {},\n defaultSearchData: {},\n drawerOpen: false,\n currentFilename: '',\n currentLesson: {},\n currentLessonWidgets: 'test',\n currentPackage: null,\n accreditation: {},\n tableTotal: 0,\n lessonWidgets: {},\n dependentCourse: {},\n showSidebarDashboard: 'showSidebarDashboard' in localStorage ? localStorage.getItem('showSidebarDashboard') === 'true' : true,\n showSidebarEdit: 'showSidebarEdit' in localStorage ? localStorage.getItem('showSidebarEdit') === 'true' : true\n }))\n\n .views((self) => ({\n get newCourse() {\n return newCourse;\n },\n get lmsApi() {\n return startLmsApiClient();\n },\n\n lessonContentWidgets() {\n return self?.currentLesson?.included.filter((w) => w.type === 'question_widget') || [];\n },\n get newAccreditationLink() {\n return newAccreditationLink;\n },\n\n get newAccrreditation() {\n return { action: 'Add', points: 0, code: 'ewise', start: '', end: '', unit: '', organisation: '' };\n },\n\n isNewRecord() {\n return !self.store.params.courseId;\n },\n\n get filter() {\n return `filter[name][condition][path]=parent.id&filter[name][condition][operator]=CONTAINS&filter[name][condition][value]=`;\n },\n\n get courseFields() {\n return (\n 'fields[lesson_content]=drupal_internal__id,title,lessontext,tagdoc,lesson_content_widgets' +\n '&include=accreditation_links, accreditation_links.accreditation_organisation,' +\n 'lesson_container, lesson_container.lessons, lesson_container.lessons.lesson_content'\n );\n },\n\n get courseEditDataFields() {\n return (\n 'fields[lesson_content]=drupal_internal__id,title,tagdoc,lesson_content_widgets' +\n '&include=course_category,course_category2,special_access,' +\n 'lesson_container,' +\n 'lesson_container.field_coursephoto,' +\n 'lesson_container.field_course_header_photo,' +\n 'lesson_container.field_course_image_extern,' +\n 'lesson_container.dependent_courses,' +\n 'lesson_container.lessons,' +\n 'lesson_container.lessons.profession,' +\n 'lesson_container.lessons.lesson_content,' +\n 'lesson_container.field_authors,' +\n 'lesson_container.field_reviewers,' +\n 'lesson_container.profession'\n );\n },\n\n getContainerIdFromPackageNid(packageNid) {\n const _package = {\n 49: '2a80c909-8d51-422e-bf92-941e14be8543',\n 8279: '193134c7-0920-471a-a8ae-5a323cd35952',\n 8227: '4c874638-5438-4c89-a9d9-595b510f0af8',\n 8221: '012bc8d4-beb8-4b6c-a2fc-8a9e9418f130'\n };\n return _package[packageNid];\n },\n\n categoryId() {\n return self.store.package.courseContainer.relationships.category.data.id;\n },\n\n category2Id() {\n return self.store.package.courseContainer.relationships.category2.data.id;\n },\n\n accreditations() {\n return self.accreditation_links;\n },\n\n currentLessonByNid(nid) {\n return self.lessons.find((l) => l.attributes.drupal_internal__nid === nid);\n },\n getAccrPoint(accr) {\n return accr.attributes.accreditation_points;\n },\n getAccrUnit(accr) {\n return accr.relationships.accreditation_organisation.data.id.attributes.accr_unit;\n },\n\n currentLessonContentId(nid) {\n if (self.currentLessonByNid(nid) && self.currentLessonByNid(nid).relationships.lesson_content.data) {\n return self.currentLessonByNid(nid).relationships.lesson_content.data.id;\n }\n return null;\n },\n\n canPlayLesson(nid) {\n if (!self.currentLessonContentId(nid)) return false;\n const lessonContent = self.lesson_contents.find((l) => l.id === self.currentLessonContentId(nid));\n return !!lessonContent.relationships.tagdoc.data;\n },\n get currentLessonContainer() {\n return self.currentCourse.included.find((l) => l.type === 'lesson_container');\n },\n newLessonContent(title) {\n return {\n type: 'lesson_content',\n attributes: {\n title: `Lesson Content ${title}`\n },\n relationships: {\n lesson_content_widgets: {\n data: []\n },\n tagdoc: {\n data: null\n }\n }\n };\n },\n currentLessonContent(lesson) {\n const title = lesson?.attributes?.title;\n const lessonContentId = lesson?.relationships?.lesson_content?.data?.id;\n const lessonContent =\n (lessonContentId && self.currentCourse.included.find((l) => l.id === lessonContentId)[0]) || self.newLessonContent(title);\n return lessonContent;\n }\n }))\n\n .actions((self) => ({\n afterCreate() {\n self.v_state = 'created';\n self.store = getEnv(self).store;\n self.store.setStoreValue('courseEditState', 'done');\n },\n // ___ SET STORE VALUES ________________________\n setStoreValue(key, value) {\n self[key] = value;\n return value;\n },\n // ___ TOASTS _________________________________\n generateToastId() {\n const crypto = window.crypto || window.msCrypto;\n const array = new Uint32Array(1);\n const newUID = crypto.getRandomValues(array);\n return newUID[0];\n },\n setToasts(toastMsg, type = 'info', variant = 'filled') {\n const id = self.generateToastId();\n if (toastMsg instanceof Object) {\n const toast = {\n id,\n title: toastMsg?.title || type,\n content: toastMsg?.content || 'no content',\n type: toastMsg?.type || 'info',\n timeOut: toastMsg?.timeOut || 8000,\n variant: toastMsg?.variant || 'filled'\n };\n return self.toasts.push(toast);\n }\n return self.toasts.push({ id, content: toastMsg, type, title: type, timeOut: 8000, variant });\n },\n deleteToast(id) {\n const filtered = self.toasts.filter((toast) => toast.id !== id);\n self.toasts = filtered;\n },\n\n setEditTab(tab) {\n self.editTab = tab;\n return self.editTab;\n },\n\n createNewLessonContainer(course) {\n return {\n type: 'lesson_container',\n attributes: { title: `LC ${course.attributes.title}` },\n relationships: {\n profession: { data: course.relationships.data }\n }\n };\n },\n\n // ___ EWAPI: FETCH COURSES ________________________\n fetchEwapiCourses: flow(function* fetchEwapiCourses(product = 0, _package = 0) {\n yield self.lmsApi.fetchEwapiCourses(product, _package);\n }),\n\n // FETCH COURSE_CONTAINER by filtering NID (+ includes)\n // - includes: profession, accreditation\n // used to get the profession and related accreditation to set the points unit\n fetchCourseContainer: flow(function* fetchCourseContainer(nid) {\n const query = {\n filter: {\n 'filter[drupal_internal__nid][condition][value]': `${nid}`,\n 'filter[drupal_internal__nid][condition][path]': 'drupal_internal__nid',\n 'filter[drupal_internal__nid][condition][operator]': '='\n },\n include: `profession, profession.field_accreditation`\n };\n\n try {\n const { data: fetched } = yield self.lmsApi.fetchIt('course_container', query);\n const professionId = fetched.data[0].relationships.profession.data?.id;\n\n const profession = fetched.included?.find((entity) => entity.type === 'profession' && entity.id === professionId);\n const accreditation = fetched.included?.find((entity) => entity.type === 'accreditation') || {};\n\n self.accreditation = accreditation;\n\n self.courseContainer = {\n ...fetched.data[0],\n relationships: {\n ...fetched.data[0].relationships,\n profession: { data: profession }\n }\n };\n return self.courseContainer;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n\n throw e;\n }\n }),\n\n // FETCH COURSE by UUID (+ includes)\n // - includes: lesson_container, lessons\n // - used to get the course data for each tab\n fetchCourseEditData: flow(function* fetchCourseEditData(uuid) {\n try {\n const { data: fetched } = yield self.lmsApi.fetchIt('course', self.courseEditDataFields, uuid);\n const dependentCourse = fetched.included.find((entity) => entity.type === 'course');\n self.dependentCourse = dependentCourse\n ? {\n id: dependentCourse.id,\n type: dependentCourse.type,\n title: dependentCourse.attributes.title,\n nid: dependentCourse.attributes.drupal_internal__nid\n }\n : {};\n\n self.currentCourse = fetched.data;\n self.mergeIncludesCourses(fetched.included);\n return self.currentCourse;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n\n throw e;\n }\n }),\n\n // PATCH: Used to update course\n patchCourseData: flow(function* patchCourseData(entity, data) {\n const query = [\n {\n action: 'update',\n requestId: 'course',\n body: `${JSON.stringify({ data: data.course })}`,\n uri: `jsonapi/${entity.type}/${entity.id}`\n },\n {\n action: 'update',\n requestId: 'lesson_container',\n body: `${JSON.stringify({ data: data.lessonContainer })}`,\n uri: `jsonapi/lesson_container/${entity.relationships.lesson_container.data.id.id}`\n },\n {\n action: 'view',\n requestId: 'course',\n uri: `jsonapi/${entity.type}/${entity.id}?${self.courseEditDataFields}`\n }\n ];\n try {\n const fetched = yield self.lmsApi.patchCourse(query);\n\n self.currentCourse = fetched.course.data;\n self.mergeIncludesCourses(fetched.course.included);\n\n return fetched;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n // > PATCHPOST:\n saveNewCourse: flow(function* saveNewCourse(course) {\n const newLessonContainer = self.createNewLessonContainer(course);\n\n /* ----- POST NEW LC ------ */\n try {\n const newLC = yield self.lmsApi.patchpost(newLessonContainer);\n\n course.relationships.lesson_container = { data: { type: newLC.type, id: newLC.id } };\n const savedCourse = yield self.lmsApi.patchpost(course);\n\n savedCourse.LC = newLC;\n return savedCourse;\n } catch (e) {\n return null;\n }\n }),\n\n // > POST: Create New Course\n postCourse: flow(function* postCourse(course) {\n const {\n profession: { data }\n } = self.courseContainer.relationships;\n const newLessonContainer = {\n type: 'lesson_container',\n attributes: {\n title: 'new lesson_container'\n },\n relationships: {\n profession: { data: null },\n lessons: { data: [] }\n }\n };\n\n // _ Course_Container\n const courseContainer = cloneDeep(getSnapshot(self.courseContainer));\n\n courseContainer.relationships.courses.data.push({ type: 'course', id: '{{course.body@$.data.id}}' });\n\n // _ Course -*created by user-\n course.relationships.lesson_container = { data: { type: 'lesson_container', id: '{{lessoncontainer.body@$.data.id}}' } };\n course.relationships.profession = { data };\n\n // _ NEW Lesson_container -*imported from dataObjects-\n newLessonContainer.attributes.title = `lessonContainer-${course.attributes.title}`;\n newLessonContainer.relationships.profession.data = data;\n\n const subQuery = [];\n // _ function _createSubReqItem(action, id, data=false, uri=false, waitfor=false)\n subQuery.push(_createSubReqItem('create', 'lessoncontainer', newLessonContainer, false, false));\n subQuery.push(_createSubReqItem('create', 'course', course, false, 'lessoncontainer'));\n subQuery.push(_createSubReqItem('update', 'coursecontainer', courseContainer, false, 'course'));\n\n try {\n const fetched = yield self.lmsApi.createCourse(subQuery);\n self.newCourseId = fetched['course#body{0}'].data.id;\n\n return fetched;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n throw e;\n }\n }),\n\n // ! ============== SAME FUNCTIONS =====================\n // ! 1. fetchCourseEdit\n fetchCourseEdit: flow(function* fetchCourseLessons(courseId) {\n const subQuery = self.createSubQuery(courseId);\n\n if (self.store.courseEditState === 'pending') return;\n self.store.setStoreValue('courseEditState', 'pending');\n\n try {\n const fetched = yield self.jsonApi.getCourseEdit(subQuery);\n const objCourseEdit = self.convertFetchedToMobxObj(fetched);\n self.updateCourseEditTree(objCourseEdit);\n self.store.setStoreValue('courseEditState', 'done');\n } catch (e) {\n self.store.setStoreValue('error', e);\n self.store.setStoreValue('courseEditState', 'error');\n if (self.store.error.status === 401 || self.store.error.status === 403) {\n self.gotoErrorPage({\n title: 'Error loading course',\n message: 'No access',\n statuscode: self.error.status.toString()\n });\n return;\n }\n throw e;\n }\n }),\n\n // ! 2. createCourse\n createCourse: flow(function* postCourse(courseId) {\n const subQuery = self.createSubQuery(courseId);\n\n if (self.store.courseEditState === 'pending') return;\n self.store.setStoreValue('courseEditState', 'pending');\n\n try {\n const fetched = yield self.jsonApi.getCourseEdit(subQuery);\n const objCourseEdit = self.convertFetchedToMobxObj(fetched);\n self.updateCourseEditTree(objCourseEdit);\n self.store.setStoreValue('courseEditState', 'done');\n } catch (e) {\n self.store.setStoreValue('error', e);\n self.store.setStoreValue('courseEditState', 'error');\n if (self.store.error.status === 401 || self.store.error.status === 403) {\n self.gotoErrorPage({\n title: 'Error loading course',\n message: 'No access',\n statuscode: self.error.status.toString()\n });\n return;\n }\n throw e;\n }\n }),\n // ! 3. updateCourse\n updateCourse: flow(function* patchCourse(courseId) {\n const subQuery = self.createSubQuery(courseId);\n\n if (self.store.courseEditState === 'pending') return;\n self.store.setStoreValue('courseEditState', 'pending');\n\n try {\n const fetched = yield self.jsonApi.getCourseEdit(subQuery);\n const objCourseEdit = self.convertFetchedToMobxObj(fetched);\n self.updateCourseEditTree(objCourseEdit);\n self.store.setStoreValue('courseEditState', 'done');\n } catch (e) {\n self.store.setStoreValue('error', e);\n self.store.setStoreValue('courseEditState', 'error');\n if (self.store.error.status === 401 || self.store.error.status === 403) {\n self.gotoErrorPage({\n title: 'Error loading course',\n message: 'No access',\n statuscode: self.error.status.toString()\n });\n return;\n }\n throw e;\n }\n }),\n // ! ======================================================\n // helper function to get new odt file\n getNewODT(tagdoc) {\n if (tagdoc?.data?.filename) return tagdoc.data;\n return false;\n },\n\n // DELETE LESSON ________________________\n deleteLessonFromLessonContainer: flow(function* deleteLessonFromLessonContainer(lesson) {\n const lessonContainer = cloneDeep(getSnapshot(self.currentLessonContainer));\n const lessonIndex = lessonContainer.relationships.lessons.data.findIndex((l) => l.id === lesson.id);\n lessonContainer.relationships.lessons.data.splice(lessonIndex, 1);\n try {\n const response = yield self.lmsApi.patchpost(lessonContainer);\n const existingContainerIndex = self.currentCourse.included.findIndex((entity) => entity.id === response.id);\n applySnapshot(self.currentCourse.included[existingContainerIndex], response);\n return response;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n // PATCH POST LESSON _____________________________________\n patchpostLesson: flow(function* postLesson(lesson) {\n const { selectedLessonContent } = lesson;\n const { tagdoc } = selectedLessonContent.relationships;\n const lessonContainer = cloneDeep(getSnapshot(self.currentLessonContainer));\n // check if new file is uploaded || false\n const newFileUpload = tagdoc?.data?.filename ? tagdoc.data : false;\n // to trigger the parsing of the odt in the backend\n // the filename must be unique, therefore we add a unix timestamp to the filename\n if (newFileUpload) {\n const fileName = newFileUpload.filename;\n const unixTimeStamp = dayjs().unix();\n newFileUpload.filename = `${unixTimeStamp}_${fileName}`;\n }\n delete lesson.selectedLessonContent;\n //\n if (newFileUpload) selectedLessonContent.relationships.tagdoc = { data: null };\n //\n // creating subQuery settings for each entity\n const subQuery = [];\n // set lesson action to update or create by lesson.id\n const lessonAction = lesson?.id ? 'update' : 'create';\n // set lesson to wait for lesson_content\n const lessonWFLC = selectedLessonContent?.id ? false : 'lessonContent';\n // set lesson_container to wait for lesson\n const lcntrWFLesson = lesson?.id ? false : 'lesson';\n // set lesson_content action to update or create by lesson_content.id\n const lessonContentAction = selectedLessonContent?.id ? 'update' : 'create';\n //\n // LESSON CONTENT: create subrequest\n if (selectedLessonContent) {\n subQuery.push(_createSubReqItem(lessonContentAction, 'lessonContent', selectedLessonContent, false, false));\n }\n // LESSON: create subrequest\n if (lesson) {\n // set lesson > relationship > profession\n if (!lesson?.id) lesson.relationships.profession = { data: lessonContainer.relationships.profession.data };\n if (lessonWFLC) {\n // set lesson > relationship > lesson_content > data\n lesson.relationships.lesson_content.data = { type: 'lesson_content', id: '{{lessonContent.body@$.data.id}}' };\n }\n subQuery.push(_createSubReqItem(lessonAction, 'lesson', lesson, false, lessonWFLC));\n }\n // LESSON CONTAINER: create subrequest\n if (lessonContainer) {\n if (!lesson?.id) {\n lessonContainer.relationships.lessons.data.push({ type: 'lesson', id: '{{lesson.body@$.data.id}}' });\n subQuery.push(_createSubReqItem('update', 'lessonContainer', lessonContainer, false, lcntrWFLesson));\n }\n }\n try {\n const fetched = yield self.lmsApi.subRequest(subQuery);\n self.merge2Includes(fetched, true);\n\n if (fetched?.lessonContent?.data && newFileUpload) {\n const { data: updateODT } = yield self.lmsApi.postODT(fetched?.lessonContent.data, newFileUpload, 'tagdoc');\n const { data: updatedLC } = yield self.lmsApi.fetchIt('lesson_content', {}, fetched?.lessonContent.data.id);\n self.merge2Includes({ updatedLessonContent: updatedLC, updatedOdt: updateODT }, true);\n }\n return fetched;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n deleteCourse: flow(function* deleteCourse(courseId) {\n const subQuery = self.createSubQuery(courseId);\n if (self.store.courseEditState === 'pending') return;\n self.store.setStoreValue('courseEditState', 'pending');\n\n try {\n const fetched = yield self.jsonApi.subQuery(subQuery);\n // update store\n const objCourseEdit = self.convertFetchedToMobxObj(fetched);\n self.updateCourseEditTree(objCourseEdit);\n self.store.setStoreValue('courseEditState', 'done');\n } catch (e) {\n self.store.setStoreValue('error', e);\n self.store.setStoreValue('courseEditState', 'error');\n if (self.store.error.status === 401 || self.store.error.status === 403) {\n self.gotoErrorPage({\n title: 'Error loading course',\n message: 'No access',\n statuscode: self.error.status.toString()\n });\n return;\n }\n throw e;\n }\n }),\n\n patchPostWidget: flow(function* patchPostWidget(widget) {\n const isNewWidget = !widget?.id;\n const strWidgetData = JSON.stringify(widget.attributes.widget_data);\n widget.attributes.widget_data = strWidgetData;\n // delete key from widget\n if (widget.tableData) delete widget.tableData;\n try {\n // # API post or patch widget\n const responseWidget = yield self.lmsApi.patchpost(widget);\n //\n // if new widget add it to lesson_content and save it to the backend\n if (isNewWidget) {\n const { lessonContent } = self.currentLesson;\n const { lesson_content_widgets: lessonContentWidgets } = lessonContent.relationships;\n // add the new widget to lesson content\n lessonContentWidgets.data.push({ type: responseWidget.type, id: responseWidget.id });\n // delete keys from lessonContent to avoid conflict with the backend\n delete lessonContent.attributes.changed;\n delete lessonContent.attributes.created;\n // # API patch lesson_content\n const updatedLC = yield self.lmsApi.patchpost(lessonContent);\n // ! workaround to update the lesson_content_widgets count in tab [lesson]\n self.lessonWidgets[updatedLC.id] = updatedLC.relationships.lesson_content_widgets.data.length;\n }\n // update store: add || replace widget\n if (isNewWidget) {\n self.currentLesson.included.push(responseWidget);\n } else {\n const index = self.currentLesson.included.findIndex((w) => w.id === widget.id);\n self.currentLesson.included[index] = responseWidget;\n }\n // update currentLessonWidgets to force rerender in dialogWidgetsTable\n self.currentLessonWidgets = Date.now();\n return responseWidget;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n throw e;\n }\n }),\n deleteWidget: flow(function* deleteWidget() {\n const widget = self.setEditWidget;\n const { id } = widget;\n const { lessonContent } = self.currentLesson;\n const { lesson_content_widgets: lessonContentWidgets } = lessonContent.relationships;\n const toastSucces = { title: 'succes', type: 'success', timeOut: 4000, variant: 'outlined' };\n // show toast\n self.setToasts({ content: 'Preparing to delete the widget', ...toastSucces });\n try {\n // delete course from course_container > courses > data array by index\n const indexWidget = lessonContentWidgets.data.findIndex((w) => w.id === id);\n lessonContentWidgets.data.splice(indexWidget, 1);\n // delete keys from lessonContent to avoid conflict with the backend\n delete lessonContent.attributes.changed;\n delete lessonContent.attributes.created;\n //\n // # API patch: the updated lesson_content node\n const resLessonContent = yield self.lmsApi.patchpost(lessonContent);\n //\n // ! workaround to update the lesson_content_widgets count in tab [lesson]\n const curWidgets = self.lessonWidgets;\n curWidgets[resLessonContent.id] = resLessonContent.relationships.lesson_content_widgets.data.length;\n //\n // # API delete: widget\n yield self.lmsApi.deletePost(widget);\n //\n // update store\n const index = self.currentLesson.included.findIndex((w) => w.id === id);\n self.currentLesson.included.splice(index, 1);\n // ! update currentLessonWidgets to force rerender in dialogWidgetsTable\n self.currentLessonWidgets = Date.now();\n // show toast\n self.setToasts({ content: 'Widget deleted', ...toastSucces, variant: 'filled' });\n // close dialog of the widget\n self.setStoreValue('toggleDialogEditWidget', false);\n return;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n // show error toast\n const toastError = { title: 'error', type: 'error', timeOut: 3000, variant: 'outlined' };\n self.setToasts({ content: 'Successfully deleted the widget', ...toastError });\n throw e;\n }\n }),\n\n /**\n * DELETE DRAFT COURSE FROM COURSE CONTAINER\n * The course is not deleted, only the id is deleted from the array courses in course_container\n * @param {string} uuidCourse\n * @returns {Promise<*>}\n */\n deleteDraftCourse: flow(function* deleteDraftCourse(uuidCourse) {\n const courseContainer = cloneDeep(getSnapshot(self.courseContainer));\n const getIndexofCourseToDelete = courseContainer.relationships.courses.data.findIndex((c) => c.id === uuidCourse);\n courseContainer.relationships.courses.data.splice(getIndexofCourseToDelete, 1);\n try {\n const response = yield self.lmsApi.patchpost(courseContainer);\n return response;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n /**\n * UNLINK/DECOUPLE A LINKED COURSE FROM A COURSE CONTAINER\n * The course is not deleted, only the id is deleted from the array courses in course_container\n * @param {object} data\n * @returns {Promise<*>}\n */\n unlinkCourse: flow(function* unlinkCourse(data) {\n const {\n courseUuid,\n link: { course_container_uuid: courseContainerUuid }\n } = data;\n try {\n // fetch course_container belonging to the course to unlink\n const { data: fetchedCourseContainer } = yield self.lmsApi.fetchIt('course_container', {}, courseContainerUuid);\n // find the index of the course in course_container > courses > data array\n const getIndexofCourseToDelete = fetchedCourseContainer.data.relationships.courses.data.findIndex((c) => c.id === courseUuid);\n // delete course from course_container > courses > data array by index\n fetchedCourseContainer.data.relationships.courses.data.splice(getIndexofCourseToDelete, 1);\n // save the updated course_container\n const pacthCourseContainer = yield self.lmsApi.patchpost(fetchedCourseContainer.data);\n return pacthCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // MERGE INCLUDES\n mergeIncludesCourses(newEntities, overwrite = false) {\n if (!newEntities || !Array.isArray(newEntities)) return;\n newEntities.forEach((newEntity) => {\n if (!newEntity) return;\n const existingEntity =\n self.currentCourse.included.length && self.currentCourse.included.find((entity) => entity.id === newEntity.id);\n if (overwrite && existingEntity) {\n destroy(existingEntity);\n self.currentCourse.included.push(newEntity);\n } else if (!existingEntity) {\n self.currentCourse.included.push(newEntity);\n }\n });\n },\n //\n getCourse() {\n return self.isNewRecord() ? self.newCourse : cloneDeep(getSnapshot(self.store.findCourseByNid(parseInt(self.store.params.courseId))));\n },\n\n getAccreditationPoints() {\n if (!self.accreditations()) return null;\n return self.accreditations().map((accr) => ({ points: self.getAccrPoint(accr), unit: self.getAccrUnit(accr) }));\n },\n\n copyCourse() {\n self.duplicate.course = self.course;\n },\n\n isReUsedCoursed() {\n const currentCourse = JSON.parse(JSON.stringify(self.currentCourse));\n const courseProfId = currentCourse.relationships.profession.data.id;\n const lessonContainer = currentCourse.included.find((l) => l.type === 'lesson_container');\n const lessonContainerProfId = lessonContainer.relationships.profession.data.id;\n return courseProfId !== lessonContainerProfId;\n },\n\n update(newEntity, key = 'lessons', overwrite = false) {\n const existingEntity = self[key].find((entity) => entity.id === newEntity.id);\n if (overwrite && existingEntity) {\n destroy(existingEntity);\n self[key].push(newEntity);\n } else if (!existingEntity) {\n self[key].push(newEntity);\n }\n },\n\n updateCourseEditTree(obj) {\n // self.course = obj.course\n self.authors = obj.authors;\n self.category = obj.category;\n self.category2 = obj.category2;\n self.accreditation_links = obj.accreditation_links;\n // self.accreditations = obj.accreditations\n self.organisations = obj.accreditations;\n self.lessons = obj.lessons;\n self.lesson_container = obj.lesson_container;\n self.lesson_contents = obj.lesson_contents;\n },\n\n createQueryProps() {\n return { filter: self.filter, fields: self.courseFields };\n },\n\n createSubQuery(courseId) {\n const categoryId = self.categoryId();\n const category2Id = self.category2Id();\n const queryProp = self.createQueryProps();\n const subQuery = [];\n if (courseId) {\n subQuery.push(self.createSubReqItem('view', 'course', false, `jsonapi/course/${courseId}?${queryProp.fields}`, false));\n }\n subQuery.push(self.createSubReqItem('view', 'authors', false, '/jsonapi/author?include=field_photo', false));\n subQuery.push(self.createSubReqItem('view', 'category', false, `/jsonapi/category?${queryProp.filter}${categoryId}`, false));\n subQuery.push(self.createSubReqItem('view', 'category2', false, `/jsonapi/category?${queryProp.filter}${category2Id}`, false));\n return subQuery;\n },\n\n createSubReqItem(action, id, data = false, uri = false, waitfor = false) {\n const obj = {};\n obj.action = action;\n obj.requestId = id;\n if (data) obj.body = JSON.stringify({ data });\n if (uri) {\n obj.uri = uri;\n } else {\n obj.uri = action === 'create' ? `jsonapi/${data.type}` : `jsonapi/${data.type}/${data.id}`;\n }\n if (waitfor) obj.waitFor = [`${waitfor}`];\n return obj;\n },\n\n convertFetchedToMobxObj(fetched) {\n return {\n course: fetched.course ? fetched.course.data : null,\n authors: fetched.authors.data,\n category: fetched.category.data,\n category2: fetched.category2.data,\n accreditation_links: fetched?.course?.included ? fetched.course.included.filter((l) => l.type === 'accreditation_link') : [],\n accreditations: fetched?.course?.included ? fetched.course.included.filter((l) => l.type === 'accreditation_organisation') : [],\n lessons: fetched?.course?.included ? fetched.course.included.filter((l) => l.type === 'lesson') : [],\n lesson_container: fetched?.course?.included ? fetched.course.included.find((lc) => lc.type === 'lesson_container') : null,\n lesson_contents: fetched?.course?.included ? fetched.course.included.filter((c) => c.type === 'lesson_content') : []\n };\n }\n }))\n // ========== LESSON ACTIONS =======\n .actions((self) => ({\n // afterCreate() {\n // self.consoleTimestamp();\n // },\n // eslint-disable-next-line consistent-return\n getCategoriesByContainerNid: flow(function* getCategoriesByContainerNid(nid, category = 'category') {\n const courseCategory = `field_categories_parent_term`;\n const courseCompetence = `field_categories2_parent_term`;\n const fieldCategory = category === 'category' ? courseCategory : courseCompetence;\n const query = `filter[drupal_internal__nid][value]=${nid}&include=profession`;\n try {\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', query);\n const profession = curCC.included.find((l) => l.type === 'profession');\n const catId = profession.relationships[fieldCategory].data.meta.drupal_internal__target_id;\n const queryCategory = `filter[parent.meta.drupal_internal__target_id][value]=${catId}`;\n const { data: categories } = yield self.lmsApi.fetchIt('category', queryCategory);\n return categories;\n } catch (e) {\n console.error(e);\n }\n }),\n //\n // ==== ADVANCED COPY COURSE ACTIONS FOR COURSES IN SAME COURSE CONTAINER AND EXTERNAL COURSE CONTAINER =====\n /*\n @param {string} category - category or category2\n */\n // eslint-disable-next-line consistent-return\n advGetCategoriesByContainerNid: flow(function* advGetCategoriesByContainerNid(category = 'category') {\n const courseCategory = `field_categories_parent_term`;\n const courseCompetence = `field_categories2_parent_term`;\n const fieldCategory = category === 'category' ? courseCategory : courseCompetence;\n\n const query = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}&include=profession`;\n try {\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', query);\n const profession = curCC.included.find((l) => l.type === 'profession');\n const catId = profession.relationships[fieldCategory].data.meta.drupal_internal__target_id;\n const queryCategory = `filter[parent.meta.drupal_internal__target_id][value]=${catId}`;\n const { data: categories } = yield self.lmsApi.fetchIt('category', queryCategory);\n return categories;\n } catch (e) {\n console.error(e);\n }\n }),\n\n // eslint-disable-next-line consistent-return\n advGetCategoryforCurrentCourseContainer: flow(function* advGetCategoryforCurrentCourseContainer(containerNid) {\n if (containerNid.toString() === self.store.params.containerNid.toString()) return false;\n const query = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}&include=profession`;\n try {\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', query);\n\n const profession = curCC.included.find((l) => l.type === 'profession');\n\n const catId = profession.relationships.field_categories_parent_term.id;\n\n //\n const queryCategory = `filter[parent.meta.drupal_internal__target_id][value]=${catId}`;\n const { data: categories } = yield self.lmsApi.fetchIt('category', queryCategory);\n //\n const category = categories?.data[0].id;\n\n return category;\n } catch (e) {\n console.error(e);\n }\n }),\n\n // ADVANCED COPY ACTION: CREATE COPY COURSE\n advCreateCopyCourse: flow(function* advCreateCopyCourse(currentCourse, newLessonContainer = false) {\n const action = newLessonContainer ? 'duplicate' : 'reuse';\n\n try {\n delete currentCourse.data.id;\n delete currentCourse.data.attributes.drupal_internal__nid;\n delete currentCourse.data.attributes.langcode;\n delete currentCourse.data.attributes.changed;\n delete currentCourse.data.attributes.created;\n delete currentCourse.data.links;\n delete currentCourse.data.relationships.uid;\n currentCourse.data.attributes.title = `${action} of ${currentCourse.data.attributes.title}`;\n currentCourse.data.attributes.online = false;\n currentCourse.data.attributes.status = false;\n currentCourse.data.attributes.field_extra_points = '';\n currentCourse.data.attributes.field_extra_points_desc = '';\n if (newLessonContainer) {\n currentCourse.data.relationships.lesson_container.data = { type: 'lesson_container', id: newLessonContainer.id };\n }\n // CREATE COURSE\n const respCreateNewCourse = yield self.lmsApi.patchpost(currentCourse.data);\n\n //\n return respCreateNewCourse;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // TESTING COPY LESSON CONTENT EWAPI\n advDuplicateLessonContent: flow(function* advDuplicateLessonContent(lesContentNid) {\n //\n\n const res = yield fetch(`${process.env.REACT_APP_JSONAPI}/ewapi/lesson_content/${lesContentNid}/clone`, {\n method: 'get',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${window.clientInstance.tokenInformation.access_token}`\n }\n });\n //\n if (!res.ok) {\n const message = `An error has occured: ${res.status} - ${res.statusText}`;\n throw new Error(message);\n }\n const data = yield res.json();\n\n return data;\n }),\n // CREATE DUPLICATE OF THE LESSON\n advCreateCopyLessson: flow(function* advCreateCopyLessson(curLesson) {\n // set action\n const action = 'duplicate';\n // CREATE A DEEP CLONE OF CURRENT LESSON\n const newLesson = JSON.parse(JSON.stringify(curLesson));\n // CHECK IF LESSON_CONTENT EXIST\n const hasLessonContent = newLesson.relationships?.lesson_content?.data?.id;\n let clonedLessonContentId = false;\n\n if (hasLessonContent) {\n // -> create copy of lesson_content\n const lesContentNid = newLesson.relationships.lesson_content.data.meta.drupal_internal__target_id;\n //\n\n const duplicateLessonContent = yield self.advDuplicateLessonContent(lesContentNid);\n\n //\n clonedLessonContentId = duplicateLessonContent.clone_uuid;\n }\n try {\n // DELETE KEYS\n delete newLesson.attributes.changed;\n delete newLesson.attributes.created;\n delete newLesson.attributes.drupal_internal__nid;\n delete newLesson.id;\n delete newLesson.links;\n delete newLesson.relationships.uid;\n // UPDATE TITLE\n newLesson.attributes.title = `${action} of ${newLesson.attributes.title}`;\n\n if (hasLessonContent) {\n newLesson.relationships.lesson_content.data = { type: 'lesson_content', id: clonedLessonContentId };\n }\n // CREATE NEW LESSON\n\n const respCreateNewLesson = yield self.lmsApi.patchpost(newLesson);\n //\n return respCreateNewLesson;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n // ADVANCED COPY EXTERNAL COURSE IN CURRENT CONTAINER\n advCreateCopyExternalCourse: flow(function* advCreateCopyExternalCourse(currentCourse, settings = false) {\n const { profession, category } = settings;\n try {\n delete currentCourse.data.id;\n delete currentCourse.data.attributes.drupal_internal__nid;\n delete currentCourse.data.attributes.langcode;\n delete currentCourse.data.attributes.changed;\n delete currentCourse.data.attributes.created;\n delete currentCourse.data.links;\n delete currentCourse.data.relationships.uid;\n currentCourse.data.attributes.title = `Reuse of ${currentCourse.data.attributes.title}`;\n currentCourse.data.attributes.online = false;\n currentCourse.data.attributes.status = false;\n currentCourse.data.attributes.field_extra_points = '';\n currentCourse.data.attributes.field_extra_points_desc = '';\n\n // ===== UPDATE RELATIONSHIPS FIELDS =====\n // SET COURSE_CATEGORY2 = []\n currentCourse.data.relationships.course_category2.data = [];\n // SET PROFESSION TO COURSE CONTAINER PROFESSION\n if (profession) {\n currentCourse.data.relationships.profession.data = profession;\n }\n // SET CATEGORY TO SELECTED COURSE_CATEGORY\n if (category) {\n currentCourse.data.relationships.course_category.data = [{ id: category, type: 'category' }];\n }\n\n // ====== CREATE COURSE =======\n const respCreateNewCourse = yield self.lmsApi.patchpost(currentCourse.data);\n\n return respCreateNewCourse;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n // ADVANCED COPY ACTION: CREATE COPY LESSON CONTAINER\n advCreateCopyLessonContainer: flow(function* advCreateCopyLessonContainer(curLessonContainer) {\n const curLC = JSON.parse(JSON.stringify(curLessonContainer));\n try {\n delete curLC.id;\n delete curLC.attributes.drupal_internal__nid;\n delete curLC.attributes.drupal_internal__vid;\n delete curLC.attributes.langcode;\n delete curLC.attributes.changed;\n delete curLC.attributes.created;\n delete curLC.attributes.field_goals;\n delete curLC.attributes.field_information;\n delete curLC.attributes.field_preview_video;\n delete curLC.attributes.field_podcast_html;\n delete curLC.links;\n delete curLC.relationships.uid;\n // update fields\n curLC.attributes.field_goals = curLessonContainer?.attributes?.field_goals?.value || '';\n curLC.attributes.field_information = curLessonContainer.attributes.field_information?.value || '';\n curLC.attributes.field_preview_video = curLessonContainer.attributes.field_preview_video?.value || '';\n curLC.attributes.field_podcast_html = curLessonContainer.attributes.field_podcast_html?.value || '';\n curLC.attributes.title = `Duplicate of ${curLC.attributes.title}`;\n\n // CREATE COURSE\n const respCreateNewLC = yield self.lmsApi.patchpost(curLC);\n\n return respCreateNewLC;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n // ADVANCED COPY ACTION: UPDATE COURSE CONTAINER\n advUpdateCourseContainer: flow(function* advUpdateCourseContainer(newCourseId) {\n try {\n const newQuery = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}`;\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', newQuery);\n\n const courseContainer = curCC.data[0];\n\n courseContainer.relationships.courses.data.push({ type: 'course', id: newCourseId });\n\n const resPatchCourseContainer = yield self.lmsApi.patchpost(courseContainer);\n\n return resPatchCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n /* ==================== COURSE IN CURRENT COURSE_CONTAINER =================== */\n // - REUSE CURRENT COURSE IN CONTAINER\n reuseCourseInContainer: flow(function* copyCourseInContainer(uuidCourse) {\n try {\n const { data: curCourse } = yield self.lmsApi.fetchIt('course', {}, uuidCourse);\n\n //\n\n const newCopyCourse = yield self.advCreateCopyCourse(curCourse);\n\n //\n\n const updateCourseContainer = yield self.advUpdateCourseContainer(newCopyCourse.id);\n\n return updateCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // - DUPLICATE COMPLETE COURSE IN CURRENT COURSE CONTAINER\n duplicateCourseInContainer: flow(function* duplicateCourseInContainer(uuidCourse) {\n const newFilter = `include=lesson_container, lesson_container.lessons`;\n const toastDefault = { title: 'succes', type: 'success', timeOut: 3000, variant: 'outlined' };\n try {\n // FETCH CURRENTCOURSE + INCLUDES\n\n const { data: curCourse } = yield self.lmsApi.fetchIt('course', newFilter, uuidCourse);\n\n self.setToasts({ content: 'Cursus opgehaald', ...toastDefault });\n //\n const { included } = curCourse;\n //\n // FIND/FILTER LESSON_CONTAINER + LESSONS FROM INCLUDED\n\n const lessonContainer = included.find((l) => l.type === 'lesson_container');\n\n //\n\n const lessons = included.filter((l) => l.type === 'lesson');\n\n // LESSON(s)\n const newLessonArray = [];\n if (lessons.length) {\n //\n\n const lesson0 = yield self.advCreateCopyLessson(lessons[0]);\n\n //\n\n newLessonArray.push({ type: 'lesson', id: lesson0.id });\n\n //\n if (lessons.length > 1) {\n const lesson1 = yield self.advCreateCopyLessson(lessons[1]);\n newLessonArray.push({ type: 'lesson', id: lesson1.id });\n }\n self.setToasts({ content: 'Kopie gemaakt van de lesson', ...toastDefault });\n\n //\n // UPDATE LESSON_CONTAINER WITH NEW LESSONS\n\n lessonContainer.relationships.lessons.data = newLessonArray;\n }\n\n // LESSEN_CONTAINER\n let newCopyLC = false;\n if (lessonContainer) {\n newCopyLC = yield self.advCreateCopyLessonContainer(lessonContainer);\n\n self.setToasts({ content: 'Copy van de lesson container gemaakt', ...toastDefault });\n }\n\n // CREATE COPY OF CURRENT COURSE + ADD NEW LESSON CONTAINER\n\n const newCopyCourse = yield self.advCreateCopyCourse(curCourse, newCopyLC);\n\n self.setToasts({ content: 'Copy van de cursus gemaakt', ...toastDefault });\n\n //\n\n // UPDATE COURSE CONTAINER WITH DUPLICATE COURSE\n const updateCourseContainer = yield self.advUpdateCourseContainer(newCopyCourse.id);\n\n self.setToasts({ content: 'finalishing', ...toastDefault });\n\n return updateCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n\n /* ==================== COURSE IN ANOTHER COURSE_CONTAINER ==================== */\n // --- LINK TO EXTERNAL COURSE\n linkExternalCourseInContainer: flow(function* linkExternalCourseInContainer(uuidCourse) {\n try {\n const newQuery = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}`;\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', newQuery);\n\n const courseContainer = curCC.data[0];\n\n courseContainer.relationships.courses.data.push({ type: 'course', id: uuidCourse });\n const resPatchCourseContainer = yield self.lmsApi.patchpost(courseContainer);\n\n return resPatchCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // --- RE-USE COPY OF EXTERNAL COURSE ! course category should be set to the course\n copyExternalCourseInContainer: flow(function* copyExternalCourseInContainer(courseUuid, categoryUuid = false) {\n try {\n // GET CURRENT COURESE CONTAINER\n const newQuery = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}`;\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', newQuery);\n\n //\n const courseContainer = curCC.data[0];\n const ccProfession = courseContainer.relationships.profession.data;\n\n // GET SELECTED COURSE\n const { data: curCourse } = yield self.lmsApi.fetchIt('course', {}, courseUuid);\n\n // CREATE COPY OF SELECTED COURSE\n const options = { profession: ccProfession, category: categoryUuid };\n // ! + update relationships: course_category / profession\n const newCopyCourse = yield self.advCreateCopyExternalCourse(curCourse, options);\n\n //\n const updateCourseContainer = yield self.advUpdateCourseContainer(newCopyCourse.id);\n\n return updateCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // - DUPLICATE COMPLETE COURSE FROM ANOTHER COURSE CONTAINER IN CURRENT COURSE_CONTAINER\n duplicateExternalCourseInContainer: flow(function* duplicateExternalCourseInContainer(uuidCourse, categoryUuid) {\n try {\n //\n // GET CURRENT COURSE_CONTAINER by route params containerNid\n const ccQuery = `filter[drupal_internal__nid][value]=${self.store.params.containerNid}`;\n const { data: curCC } = yield self.lmsApi.fetchIt('course_container', ccQuery);\n\n //\n const courseContainer = curCC.data[0];\n const ccProfession = courseContainer.relationships.profession.data;\n // ccProfession (course_container profession) is needed when creating the duplicate course\n // the duplicated course should have the same profession as the current course_container\n\n // GET CURRENT COURSE + INCLUDES 2 DUPLICATE\n\n const newFilter = `include=lesson_container, lesson_container.lessons`;\n const { data: curCourse } = yield self.lmsApi.fetchIt('course', newFilter, uuidCourse);\n const { included } = curCourse;\n\n // GET LESSON CONTAINER + LESSONS FROM INCLUDED\n const lessonContainer = included.find((l) => l.type === 'lesson_container');\n const lessons = included.filter((l) => l.type === 'lesson');\n\n let newCopyLC = false;\n const newLessonArray = [];\n\n // DUPLICATING LESSON(s)\n if (lessons.length) {\n const lesson0 = yield self.advCreateCopyLessson(lessons[0]);\n newLessonArray.push({ type: 'lesson', id: lesson0.id });\n if (lessons.length > 1) {\n const lesson1 = yield self.advCreateCopyLessson(lessons[1]);\n newLessonArray.push({ type: 'lesson', id: lesson1.id });\n }\n // UPDATE LESSONCONTAINER WITH NEW LESSONS\n lessonContainer.relationships.lessons.data = newLessonArray;\n }\n\n // DUPLICATE LESSEN_CONTAINER\n if (lessonContainer) {\n lessonContainer.relationships.profession.data = ccProfession;\n newCopyLC = yield self.advCreateCopyLessonContainer(lessonContainer);\n }\n\n // DEEP CLONE CURRENT COURSE\n const clonedCourse = JSON.parse(JSON.stringify(curCourse));\n\n // SET CATEGORY TO SELECTED COURSE_CATEGORY\n if (categoryUuid) {\n clonedCourse.data.relationships.profession.data = ccProfession;\n clonedCourse.data.relationships.course_category2.data = [];\n clonedCourse.data.relationships.course_category.data = [{ id: categoryUuid, type: 'category' }];\n }\n // CREATE DUPLICATE OF CURRENT COURSE + ADD NEW LESSON CONTAINER\n const newCopyCourse = yield self.advCreateCopyCourse(clonedCourse, newCopyLC);\n\n // UPDATE COURSE CONTAINER WITH DUPLICATE COURSE\n const updateCourseContainer = yield self.advUpdateCourseContainer(newCopyCourse.id);\n\n return updateCourseContainer;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }),\n // ==== OTHER ACTIONS\n setCurrentPackage(packageNid) {\n self.currentPackage = packageNid;\n },\n\n // open/close dialog lesson screen\n setDialogLesson(uuid = '') {\n self.dialogLesson = { open: !self.dialogLesson.open, lessonId: uuid };\n self.currentFilename = '';\n },\n\n // Merge different entities into self.included\n merge2Includes(newEntities, overwrite = false) {\n Object.values(newEntities).forEach((key) => {\n if (key?.errors) return;\n const existingEntity = self.currentCourse.included.find((item) => item.id === key.data.id);\n\n if (overwrite && existingEntity) {\n destroy(existingEntity);\n self.currentCourse.included.push(key.data);\n } else if (!existingEntity) {\n self.currentCourse.included.push(key.data);\n }\n });\n },\n /**\n * Convert json course to ewapi course\n *\n * Used for editor to inject the course in the course overview and to start the lessonplay.\n * @param {*} course\n * @returns\n */\n convertJsonCourseToEwapiCourse(course) {\n const { profession: prof, lesson_container: lc } = course.relationships;\n const isProxy = prof.data?.id?.attributes?.drupal_internal__tid;\n const profNid = isProxy ? prof.data.id.attributes.drupal_internal__tid : prof.data.meta.drupal_internal__target_id;\n const lcNid = isProxy ? lc.data.id.attributes.drupal_internal__nid : lc.data.meta.drupal_internal__target_id;\n const lcId = isProxy ? course.relationships.lesson_container.data.id.id : course.relationships.lesson_container.data.id;\n return {\n course_accreditation: null,\n course_delta: 0,\n course_expected: 0,\n course_extra_points: null,\n course_goals: null,\n course_id: course.attributes.drupal_internal__nid,\n course_information: null,\n course_points: 0,\n course_preview_video: null,\n course_profession: profNid,\n course_status: null,\n course_title: course.attributes.title,\n course_uuid: course.id,\n coursephoto_alt: null,\n coursephoto_url: null,\n headerphoto_alt: null,\n headerphoto_url: null,\n lc_course_header_photo: null,\n lc_coursephoto: null,\n lc_extra_label: null,\n lc_goals: null,\n lc_information: null,\n lc_podcast_html: null,\n lc_podcast_title: null,\n lc_preview_video: null,\n lesson_container_id: lcNid,\n lesson_container_uuid: lcId,\n valid_period_end: null,\n valid_period: null,\n lc_author_id: null,\n lc_reviewer_id: null, // array ref per autore\n course_extra_points_desc: null,\n course_category: null,\n course_category2: null, // array ref per cat\n lessons: null // array ref per less\n };\n }\n }))\n .actions((self) => ({\n /**\n * PATCH POST FOR POLL and WORDCLOUD WIDGETS\n */\n patchPostPolWordQuestion: flow(function* patchPostPolWordQuestion(values) {\n const widgetType = values?.poll ? 'poll' : 'wordcloud';\n try {\n // 1. CREATE/UPDATE WIDGET _______________________________________________________\n // 2.1 set widgetdata to patch/post\n const widgetData = values[widgetType];\n // 1.1 PATCH/POST WIDGET\n const respWidgetData = yield self.lmsApi.patchPostData(widgetData);\n\n // 2. CREATE/UPDATE QUESTION _______________________________________________________\n // 2.1 get widget id and nid from response widget\n const widgetId = respWidgetData.id;\n const widgetNid = respWidgetData.attributes.drupal_internal__nid;\n // 2.2 set questionData to patch/post\n const questionData = values.question;\n // 2.3 Update question with new widget id and meta data\n questionData.relationships.widget_link.data.id = widgetId;\n questionData.relationships.widget_link.data.meta = { drupal_internal__target_id: widgetNid, target_type: 'node' };\n // 2.4 PATCH POST QUESTION\n const respQuestion = yield self.patchPostWidget(questionData);\n // return\n return respQuestion;\n } catch (e) {\n console.error(e);\n }\n return 'success';\n })\n }));\n\n// ==================================[ HELPER FUNCTIONS ]============================================================\n// get PROFESSION OBJECT\n// function _getProfessionObj(store) {\n// return {\n// id: store.package.relationships.profession.data.id.id,\n// type: store.package.relationships.profession.data.id.type\n// };\n// }\n\n// create SUBREQUEST ITEMS\nfunction _createSubReqItem(action, id, data = false, uri = false, waitfor = false, includes = false) {\n const obj = {};\n obj.action = action;\n obj.requestId = id;\n if (data) obj.body = JSON.stringify({ data });\n if (uri) {\n obj.uri = uri;\n } else {\n obj.uri = action === 'create' ? `jsonapi/${data.type}` : `jsonapi/${data.type}/${data.id}`;\n }\n if (waitfor) obj.waitFor = [`${waitfor}`];\n if (includes) obj.includes = includes;\n return obj;\n}\nexport async function createCourseEdit(store) {\n if (store.courseEdit.isCreated) return;\n\n await store.setCourseEdit(CourseEdit.create({}, { store }));\n}\n","import { destroy, types as t } from 'mobx-state-tree';\nimport { Author } from './Author';\nimport { File, Profession } from './BaseModel';\n\nexport const AuthorEdit = t\n .model('AuthorEdit', {\n authors: t.maybeNull(t.array(Author)),\n photos: t.maybeNull(t.array(File)),\n professions: t.maybeNull(t.array(Profession))\n })\n .actions((self) => ({\n setNext(href) {\n const url = new URL(href);\n self.next = url.search;\n },\n\n update(newEntity, key = 'photos') {\n if (self[key] && self[key].length >= 0) {\n const existingEntity = self[key].find((entity) => entity.id === newEntity.id);\n if (existingEntity) {\n destroy(existingEntity);\n self[key].push(newEntity);\n } else if (!existingEntity) {\n self[key].push(newEntity);\n }\n } else {\n self[key] = newEntity;\n }\n }\n }));\n","/* eslint-disable require-atomic-updates, no-use-before-define, camelcase */\nimport { flow, getEnv, getSnapshot, getParent, types as t } from 'mobx-state-tree';\nimport cloneDeep from 'lodash/cloneDeep';\nimport * as logger from 'loglevel';\n\nconst log = logger.getLogger('CourseCopy');\n\nexport async function getCourseCopy() {\n return null;\n}\n\nexport const CourseCopy = t\n .model('CourseCopy', {})\n .volatile(() => ({\n store: null,\n course_container: null,\n course: null,\n lesson_container: null,\n lessons: null,\n fetched: null,\n fetchedCourse: null,\n selected: null,\n rollBack: null,\n rollBackArray: null,\n newCourse: null\n }))\n .views((self) => ({\n get currentProfessionId() {\n return self.store.packageProfession;\n },\n\n get jsonApi() {\n return getParent(self).jsonApi;\n },\n\n get queryParams() {\n return (\n `fields[lesson_content]=drupal_internal__id,title,lessontext,tagdoc,lesson_content_widgets` +\n `&include=lesson_container, lesson_container.lessons, lesson_container.lessons.lesson_content,` +\n `lesson_container.lessons.lesson_content.lesson_content_widgets`\n );\n },\n\n get emptySubQuery() {\n return { subQuery: [], relData: [], waitFor: [] };\n }\n }))\n .actions((self) => ({\n afterCreate() {\n // Constructor\n log.info('Starting courseCopy');\n self.store = getEnv(self).store;\n self.course_container = self.store.package.courseContainer;\n },\n\n getTime() {\n return `${new Date().getHours()}-${new Date().getMinutes()}`;\n },\n\n getCourseContainer() {\n const newCourseContainer = cloneDeep(getSnapshot(self.course_container));\n newCourseContainer.relationships.courses.data.push({ type: 'course', id: '{{course.body@$.data.id}}' });\n return newCourseContainer;\n },\n\n getCreateRequest(actionId) {\n const createReq = {\n 1: {},\n 2: {\n course_container: true,\n course: true,\n lesson_container: false,\n lesson: false,\n lesson_content: false,\n question_widgets: false\n },\n 3: {\n course_container: true,\n course: true,\n lesson_container: true,\n lesson: true,\n lesson_content: false,\n question_widgets: false\n },\n 4: {\n course_container: true,\n course: true,\n lesson_container: true,\n lesson: true,\n lesson_content: true,\n question_widgets: true\n }\n };\n return createReq[actionId];\n },\n\n getProfession() {\n return { type: 'profession', id: self.currentProfessionId };\n },\n\n getStoreUpdateItems() {\n return self.newCourse.filter((item) => item.type === 'course_container' || item.type === 'course');\n },\n\n // [2] COPY [Course] --> [lesson container]\n fetchCourse: flow(function* fetchCourse(courseUUId) {\n const { queryParams } = self;\n const createReq = self.getCreateRequest(2);\n\n try {\n const fetched = yield self.jsonApi.fetchIt('course', queryParams, courseUUId);\n const groupCourse = groupCourseByType(fetched);\n const groupCourseLessons = groupLessonsByItems(cloneDeep(groupCourse));\n const subRequest = self.createSubRequest(createReq, groupCourseLessons, groupCourse);\n const newCourse = yield self.jsonApi.createCourse(subRequest);\n self.newCourse = validateFetchedToArray(newCourse);\n return newCourse;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n // [3] COPY: [Course] + [lesson container] + [lesson] --> [lesson_content]\n fetchCourse2Lessons: flow(function* fetchCourse2Lessons(courseUUId) {\n const { queryParams } = self;\n const createReq = self.getCreateRequest(3);\n\n try {\n const fetched = yield self.jsonApi.fetchIt('course', queryParams, courseUUId);\n const groupCourse = groupCourseByType(fetched);\n const groupCourseLessons = groupLessonsByItems(cloneDeep(groupCourse));\n const subRequest = self.createSubRequest(createReq, groupCourseLessons, groupCourse);\n const newCourse = yield self.jsonApi.createCourse(subRequest);\n self.newCourse = validateFetchedToArray(newCourse);\n return newCourse;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n // [4] COPY: [Course] + [lesson container] + [lesson] + [lesson_content] + [widgets]\n fetchCompleteCourse: flow(function* fetchCompleteCourse(courseUUId) {\n const { queryParams } = self;\n const createReq = self.getCreateRequest(4);\n\n try {\n const fetched = yield self.jsonApi.fetchIt('course', queryParams, courseUUId);\n const groupCourse = groupCourseByType(fetched);\n const groupCourseLessons = groupLessonsByItems(cloneDeep(groupCourse));\n const subRequest = self.createSubRequest(createReq, groupCourseLessons, groupCourse);\n const newCourse = yield self.jsonApi.createCourse(subRequest);\n self.newCourse = validateFetchedToArray(newCourse);\n return newCourse;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n // [5] ========= TEST TEST ======\n testCourse: flow(function* testCourse(courseUUId) {\n const { queryParams } = self;\n const createReq = {\n course_container: true,\n course: true,\n lesson_container: true,\n lesson: true,\n lesson_content: true,\n question_widgets: true\n };\n\n try {\n const fetched = yield self.jsonApi.fetchIt('course', queryParams, courseUUId);\n\n const groupCourse = groupCourseByType(fetched);\n const groupCourseLessons = groupLessonsByItems(cloneDeep(groupCourse));\n const subRequest = self.createSubRequest(createReq, groupCourseLessons, groupCourse);\n const newCourse = yield self.jsonApi.createCourse(subRequest);\n self.newCourse = validateFetchedToArray(newCourse);\n return newCourse;\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n // ROLLBACK\n rollbackCourse: flow(function* rollbackCourse() {\n const rollBackQuery = self.doRollBack();\n try {\n return yield self.jsonApi.createCourse(rollBackQuery);\n } catch (e) {\n self.error = e;\n self.state = 'error';\n self.errorShown = false;\n log.error(e);\n return null;\n }\n }),\n\n /**\n * create subrequest\n */\n createSubRequest(createReq, lessonsArray, fetchedCourse) {\n const subReq = self.emptySubQuery;\n const create = createReq;\n\n const totLessonSubRequest = [];\n const lessonContainerReldata = [];\n const lessonContainerWaitFor = [];\n\n const courseContainer = cloneDeep(getSnapshot(self.course_container));\n\n if (lessonsArray) {\n lessonsArray.forEach((lesson, i) => {\n const index = i + 1;\n\n const reqWidgets = create.question_widgets ? self.createReq_CourseWidgets(lesson, index) : subReq;\n\n const reqContent = create.lesson_content\n ? self.createReq_LessonContent(lesson, index, reqWidgets.relData, reqWidgets.waitFor)\n : subReq;\n\n const reqLesson = create.lesson ? self.createReq_Lesson(lesson, index, reqContent.relData, reqContent.waitFor) : subReq;\n\n const subQuery = [...reqWidgets.subQuery, ...reqContent.subQuery, ...reqLesson.subQuery];\n\n totLessonSubRequest.push(...subQuery);\n lessonContainerReldata.push(reqLesson.relData);\n lessonContainerWaitFor.push(reqLesson.waitFor);\n });\n }\n\n //\n\n const reqLessonContainer =\n create.lesson_container && fetchedCourse.lesson_container\n ? self.createReq_LessonContainer(fetchedCourse.lesson_container, 1, lessonContainerReldata, lessonContainerWaitFor)\n : subReq;\n\n const reqCourse =\n create.course && fetchedCourse.course\n ? self.createReq_Course(fetchedCourse.course, 1, reqLessonContainer.relData, reqLessonContainer.waitFor)\n : subReq;\n\n const reqCourseContainer =\n create.course_container && fetchedCourse.course && courseContainer\n ? self.createReq_CourseContainer(courseContainer, 1, reqCourse.relData, reqCourse.waitFor)\n : subReq;\n\n const totSubRequest = [...totLessonSubRequest, ...reqLessonContainer.subQuery, ...reqCourse.subQuery, ...reqCourseContainer.subQuery];\n\n return totSubRequest;\n },\n\n createReq_CourseWidgets(lesson, index) {\n if (!lesson.question_widgets || !lesson.question_widgets.length) return self.emptySubQuery;\n const cleanData = lesson.question_widgets.map((item) => deleteKeys(item));\n return createMultiDependencySubQuery2(cleanData, index);\n },\n\n createReq_LessonContent(lesson, index, relData, waitFor) {\n if (!lesson.lesson_content) return self.emptySubQuery;\n const data = self.processData(lesson.lesson_content);\n const dal = data.attributes.lessontext;\n\n if (Array.isArray(relData) && relData.length) data.relationships.lesson_content_widgets.data = relData;\n if (dal && dal.value) {\n data.attributes.lessontext = { value: data.attributes.lessontext.value };\n }\n\n const request = { action: 'create', requestId: data.type, body: data, uri: false, waitFor, key: index };\n return createSubRequestItem(request);\n },\n\n createReq_Lesson(lesson, index, relData, waitFor) {\n if (!lesson.lesson) return self.emptySubQuery;\n const data = self.processData(lesson.lesson);\n if (!Array.isArray(relData)) data.relationships.lesson_content.data = relData;\n\n const request = { action: 'create', requestId: data.type, body: data, uri: false, waitFor, key: index };\n return createSubRequestItem(request);\n },\n\n createReq_LessonContainer(lessonContainer, key, relData, waitFor) {\n const data = self.processData(lessonContainer);\n data.relationships.lessons.data = relData;\n\n const request = { action: 'create', requestId: data.type, body: data, uri: false, waitFor, key };\n return createSubRequestItem(request);\n },\n\n createReq_Course(course, key, relData, waitFor) {\n const data = self.processData(course);\n\n if (!Array.isArray(relData)) data.relationships.lesson_container.data = relData;\n data.attributes.online = false;\n data.attributes.course_status = 'New';\n\n const request = { action: 'create', requestId: data.type, body: data, uri: false, waitFor, key };\n return createSubRequestItem(request);\n },\n\n createReq_CourseContainer(courseContainer, key, relData, waitFor) {\n const data = courseContainer;\n data.relationships.courses.data.push(relData);\n\n const request = { action: 'update', requestId: data.type, body: data, uri: false, waitFor, key };\n return createSubRequestItem(request);\n },\n\n processData(data) {\n const newData = deleteKeys(data);\n if (newData.relationships.profession) newData.relationships.profession.data = self.getProfession();\n newData.attributes.title = `${getTime()} > ${data.attributes.title}`;\n return newData;\n },\n\n doRollBack() {\n const rollBack = [];\n let nr = 1;\n Object.keys(self.rollBack).forEach((item) => {\n const node = { type: self.rollBack[item].type, id: self.rollBack[item].id };\n if (node.type !== 'course_container') {\n const del = _createDeleteSubRequestItem(node, nr);\n rollBack.push(del);\n nr++;\n }\n });\n\n return rollBack;\n }\n }));\n\n/**\n * Group jsonapi response by type\n */\nfunction groupCourseByType(fetched) {\n return {\n course: fetched.data,\n lessons: fetched && fetched.included ? fetched.included.filter((l) => l.type === 'lesson') : false,\n lesson_container: fetched && fetched.included ? fetched.included.find((lc) => lc.type === 'lesson_container') : false,\n lesson_contents: fetched && fetched.included ? fetched.included.filter((c) => c.type === 'lesson_content') : false,\n question_widgets: fetched && fetched.included ? fetched.included.filter((c) => c.type === 'question_widget') : false\n };\n}\n\n/**\n * groupLessonsByItems : Main function\n * Group lesson, lesson_content, questrion_widgets by lesson\n */\nfunction groupLessonsByItems(groupCourse) {\n if (!groupCourse.lessons) return false;\n\n return groupCourse.lessons.map((lesson) => {\n const lessonContent = _groupLessons_LessonContent(lesson, groupCourse);\n const lessonWidgets = _groupLessons_QuestionWidgets(lessonContent, groupCourse);\n\n return {\n lesson,\n lesson_content: lessonContent,\n question_widgets: lessonWidgets\n };\n });\n}\n\n/**\n * _groupLessons_LessonContent: Returns lesson_content\n * Help function @ groupLessonsByItems\n */\nfunction _groupLessons_LessonContent(lesson, groupCourse) {\n if (!lesson.relationships.lesson_content.data) return false;\n const lessonContentId = lesson.relationships.lesson_content.data.id;\n return groupCourse.lesson_contents.find((c) => c.id === lessonContentId);\n}\n\n/**\n * _groupLessons_QuestionWidgets: Returns question_widgets\n * Help function @ groupLessonsByItems\n */\nfunction _groupLessons_QuestionWidgets(lessonContent, groupCourse) {\n if (!lessonContent) return false;\n if (!lessonContent.relationships.lesson_content_widgets.data) return false;\n\n const lessonContentWidgets = lessonContent.relationships.lesson_content_widgets.data;\n return lessonContentWidgets.map((widget) => groupCourse.question_widgets.find((q) => q.id === widget.id));\n}\n\nfunction getTime() {\n return `${new Date().getHours()}-${new Date().getMinutes()}`;\n}\n\n// ! *** DELETE SUBREQUEST ***\nfunction _createDeleteSubRequestItem(req, nr) {\n // let body = (req.body) && req.body;\n return {\n action: 'delete',\n requestId: `${nr}_${req.type}`,\n uri: `jsonapi/${req.type}/${req.id}`\n };\n}\n\n/**\n * CREATE SUBREQUEST ITEM\n * Main function\n */\nfunction createSubRequestItem(req) {\n const requestId = `L${req.key}${req.requestId}`;\n const body = req.body ? req.body : {};\n\n const newSubQuery = [\n {\n action: req.action,\n requestId,\n body: JSON.stringify({ data: body }),\n uri: _getSubRequest_Uri(req),\n waitFor: _getSubRequest_WaitFor(req)\n }\n ];\n\n const relData = { type: req.body.type, id: `{{${requestId}.body@$.data.id}}` };\n\n return {\n subQuery: newSubQuery,\n relData,\n waitFor: requestId\n };\n}\n\n// Help function @ createSubRequestItem\nfunction _getSubRequest_Uri(req) {\n const endpoint = req.body?.type;\n return req.action === 'create' ? `jsonapi/${endpoint}` : `jsonapi/${endpoint}/${req.body.id}`;\n}\n// Help function @ createSubRequestItem\nfunction _getSubRequest_WaitFor(req) {\n let waitFor = [];\n if (req.waitFor && Array.isArray(req.waitFor)) {\n waitFor = req.waitFor;\n }\n if (req.waitFor && !Array.isArray(req.waitFor)) {\n waitFor.push(req.waitFor);\n }\n return waitFor;\n}\n\n// create SUBREQUEST ITEMS\nfunction _createSubReqItem(action, requestId, data = false, uri = false, waitfor = false) {\n const obj = {};\n const endpoint = data?.type;\n obj.action = action;\n obj.requestId = requestId;\n if (data) obj.body = JSON.stringify({ data });\n if (uri) {\n obj.uri = uri;\n } else {\n obj.uri = action === 'create' ? `jsonapi/${endpoint}` : `jsonapi/${endpoint}/${data.id}`;\n }\n if (waitfor && Array.isArray(waitfor)) obj.waitFor = waitfor;\n if (waitfor && !Array.isArray(waitfor)) obj.waitFor = [`${waitfor}`];\n return obj;\n}\n\n// Removes Subrequest response items with errors in it\nfunction validateFetchedToArray(fetched) {\n const response = [];\n Object.keys(fetched).forEach((key) => {\n if (!fetched[key].errors) response.push(fetched[key].data);\n });\n return response;\n}\n\nfunction createMultiDependencySubQuery2(items, reqId = '') {\n // items must be array\n const { type } = items[0];\n const time = getTime();\n\n const newArray = items.map((item) => {\n item.attributes.title = `${time} > ${item.attributes.title}`;\n return item;\n });\n\n // info: _createSubReqItem(action, requestId, data = false, uri = false, waitfor = false)\n const newSubQuery = newArray.map((req, i) => _createSubReqItem('create', `${reqId}${type}${i}`, req, false, false));\n\n const subWaitFor = newSubQuery.map((waitfor) => waitfor.requestId);\n const relationshipData = newSubQuery.map((_rel, i) => ({\n type,\n id: `{{${reqId}${type}${i}.body@$.data.id}}`\n }));\n\n return {\n subQuery: newSubQuery,\n relData: relationshipData,\n waitFor: subWaitFor\n };\n}\n\nfunction deleteKeys(obj) {\n const attributes = [\n 'changed',\n 'created',\n 'default_langcode',\n 'drupal_internal__id',\n 'drupal_internal__nid',\n 'drupal_internal__vid',\n 'langcode',\n 'path',\n 'promote',\n 'revision_log',\n 'revision_timestamp',\n 'revision_translation_affected',\n 'status',\n 'sticky'\n ];\n const relationships = ['menu_link', 'node_type', 'revision_uid', 'uid'];\n\n if (obj.links) delete obj.links;\n if (obj.id) delete obj.id;\n\n Object.keys(obj.attributes).forEach((item) => {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.attributes?.[item]?.hasOwnProperty('processed')) delete obj.attributes[item].processed;\n if (attributes.includes(item)) delete obj.attributes[item];\n });\n\n Object.keys(obj.relationships).forEach((item) => {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.relationships?.[item]?.hasOwnProperty('links')) delete obj.relationships[item].links;\n if (relationships.includes(item)) delete obj.relationships[item];\n });\n\n return obj;\n}\n","import { types as t } from 'mobx-state-tree';\nimport { Course } from 'state/modelsEwapi/Course';\n\nexport const Likes = t\n .model('Likes', {\n nid: t.number,\n uuid: t.string,\n liked_courses: t.maybe(\n t.array(\n t.model({\n target_id: t.reference(Course),\n uuid: t.maybeNull(t.string)\n })\n )\n )\n })\n .views((self) => ({\n isCourseLiked(courseId) {\n const likedCourses = self.liked_courses && self.liked_courses.map((course) => course.target_id.course_id);\n return likedCourses.includes(courseId);\n }\n }));\n","import { types as t } from 'mobx-state-tree';\nimport { Course } from 'state/modelsEwapi/Course';\n\nexport const Hidden = t.model('Likes', {\n nid: t.number,\n uuid: t.string,\n hidden_courses: t.maybe(\n t.array(\n t.model({\n target_id: t.reference(Course),\n uuid: t.maybeNull(t.string)\n })\n )\n )\n});\n","import { types as t } from 'mobx-state-tree';\n\nexport const Product = t.model('Product', {\n nid: t.identifierNumber,\n uuid: t.string,\n title: t.string,\n free_product: t.maybeNull(t.number),\n trial_detail_text: t.maybeNull(t.string),\n trial_overview_text: t.maybeNull(t.string)\n});\n","import { types as t, getParent, flow } from 'mobx-state-tree';\nimport { File, IsoDate } from '../models/BaseModel';\n\nexport const Profile = t\n .model('User', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__uid: t.maybeNull(t.number),\n // langcode: t.maybeNull(t.string),\n preferred_langcode: t.string,\n timezone: t.maybeNull(t.string),\n field_display_name: t.maybeNull(t.string),\n field_first_name: t.maybeNull(t.string),\n // default_langcode: t.boolean,\n name: t.string,\n mail: t.string,\n access: t.maybeNull(t.string),\n display_name: t.string,\n field_no_registration_numbers: t.maybeNull(t.boolean),\n field_bignr: t.maybeNull(t.string),\n field_birthdate: t.maybeNull(IsoDate),\n field_company_name: t.maybeNull(t.string),\n field_gender: t.maybeNull(t.string),\n field_initials: t.maybeNull(t.string),\n field_kabiznr: t.maybeNull(t.string),\n field_kngfnr: t.maybeNull(t.string),\n field_krmnr: t.maybeNull(t.string),\n field_last_name: t.maybeNull(t.string),\n field_rbnr: t.maybeNull(t.string),\n field_receive_email_notification: t.maybeNull(t.boolean),\n login: t.maybeNull(IsoDate),\n zoho_id: t.maybeNull(t.string),\n field_accountants_type: t.maybeNull(t.string),\n field_fysio_deelregister: t.array(t.maybeNull(t.string)),\n field_rechtsgebieden: t.array(t.maybeNull(t.string)),\n field_nirv_number: t.maybeNull(t.string),\n field_slpo_id: t.maybeNull(t.string),\n field_function: t.maybeNull(t.string),\n field_somn_member: t.maybeNull(t.boolean),\n field_vvn_nr: t.maybeNull(t.string),\n field_nova_number: t.maybeNull(t.string)\n }),\n relationships: t.model({\n user_picture: t.maybeNull(\n t.model({\n data: t.maybeNull(File)\n })\n )\n })\n })\n .actions((self) => ({\n patchPicture: flow(function* patchPicture(entity, file, field) {\n try {\n const response = yield getParent(self, 1).lmsApi.postImage(entity, file, field);\n delete response.data.relationships;\n self.relationships.user_picture.data = response.data;\n return self.profile;\n } catch (e) {\n //\n return null;\n }\n })\n }));\n","import { types as t } from 'mobx-state-tree';\n\nexport const Accreditation = t.model({\n nid: t.number,\n uuid: t.string,\n title: t.string,\n short_name: t.string,\n profession: t.number,\n accr_unit: t.maybeNull(t.string),\n accr_unit_plural: t.maybeNull(t.string),\n accr_unit_short: t.maybeNull(t.string),\n extra_points_unit: t.maybeNull(t.string),\n accr_subtext: t.maybeNull(t.string),\n accr_registers: t.maybeNull(t.number),\n logo: t.maybeNull(t.string),\n accr_logo: t.maybeNull(t.string)\n});\n\nexport const Package = t.model('Package', {\n nid: t.number,\n uuid: t.string,\n tab_label: t.maybeNull(t.string),\n body: t.maybeNull(t.string),\n accredited: t.number,\n course_container: t.number, // reference per course container\n accreditation: t.maybeNull(Accreditation),\n microlearning: t.optional(t.number, 0)\n});\n\nexport const Packages = t.array(Package);\n","import { types as t } from 'mobx-state-tree';\nimport { Course } from 'state/modelsEwapi/Course';\n\nexport const Favorites = t\n .model('Favorites', {\n nid: t.number,\n uuid: t.string,\n favorite_courses: t.maybe(\n t.array(\n t.model({\n target_id: t.reference(Course),\n uuid: t.maybeNull(t.string)\n })\n )\n )\n })\n .views((self) => ({\n isCourseFavorite(courseId) {\n const favoriteCourses = self.favorite_courses && self.favorite_courses.map((course) => course.target_id.course_id);\n return favoriteCourses.includes(courseId);\n }\n }));\n","import { types as t } from 'mobx-state-tree';\nimport { Package } from './Package';\n\nexport const BaseProduct = t.model('BaseProduct', {\n nid: t.number,\n uuid: t.string,\n title: t.string,\n unique_name: t.string,\n packages: t.array(Package)\n});\n","import { types as t, flow, getParent } from 'mobx-state-tree';\nimport { DateRange } from '../models/BaseModel';\n\nexport const Subscription = t.model('Subscription', {\n nid: t.number,\n uuid: t.string,\n product: t.number,\n product_title: t.maybeNull(t.string),\n base_product_id: t.maybeNull(t.number),\n base_product_title: t.string,\n maximum_points: t.number,\n available_points: t.maybeNull(t.number),\n valid_period: t.array(DateRange)\n});\n\nexport const Subscriptions = t\n .model({\n subscriptions: t.array(Subscription)\n })\n .views((self) => ({\n earnedPoints(bsProductNid) {\n return self.subscriptions\n .filter((subscription) => subscription?.base_product_id === bsProductNid)\n .reduce((points, subscription) => points + subscription.maximum_points - subscription.available_points, 0);\n },\n totalPoints(bsProductNid) {\n return !self.subscriptions\n ? 0\n : self.subscriptions\n .filter((subscription) => subscription?.base_product_id === bsProductNid)\n .reduce((points, subscription) => {\n points += subscription.maximum_points;\n if (points >= 100) {\n return 'Unlimited';\n }\n return points;\n }, 0);\n },\n totalSubscriptionPoints(bsProductNid) {\n if (getParent(self, 1).isEwiseUser) {\n return 'Unlimited';\n }\n if (self.totalPoints(bsProductNid) === 'Unlimited') {\n return `${self.earnedPoints(bsProductNid)} ${self.getLabel(true)}`;\n }\n return `${self.earnedPoints(bsProductNid)}/${self.totalPoints(bsProductNid)} ${self.getLabel(true)}`;\n },\n maxPoints(productNid) {\n return self.subscriptions\n .filter((subscription) => subscription?.product === productNid)\n .reduce((points, subscription) => {\n points += subscription.maximum_points;\n return points;\n }, 0);\n },\n availablePoints(productNid) {\n return self.subscriptions\n .filter((subscription) => subscription?.product === productNid)\n .reduce((points, subscription) => {\n points += subscription.available_points;\n return points;\n }, 0);\n },\n enoughPoints(bsProductNid, courseNid) {\n if (self.totalPoints(bsProductNid) === 'Unlimited') return true;\n const course = getParent(self, 1).findCourseByNid(Number(courseNid));\n const coursePoints = course?.course_points ?? 0;\n return Number(coursePoints) === 0 || (Number(self.totalPoints(bsProductNid)) - Number(self.earnedPoints(bsProductNid)) >= Number(coursePoints));\n },\n maxPointsReached(bsProductNid) {\n if (self.totalPoints(bsProductNid) === 'Unlimited') return false;\n return self.totalPoints(bsProductNid) - self.earnedPoints(bsProductNid) <= 0;\n },\n getLabel(top) {\n const accreditation = top\n ? getParent(self, 1).baseProduct?.packages[0]\n : getParent(self, 1).baseProduct?.packages.find((packag) => packag.nid === getParent(self, 1).selectedPackageId);\n const accrUnit = accreditation?.accreditation?.accr_unit;\n if (accrUnit) {\n return accrUnit;\n }\n return 'uur';\n }\n }))\n .actions((self) => ({\n updateSubscription: flow(function* updateSubscription() {\n try {\n const response = yield getParent(self, 1).lmsApi.fetchSubscriptions();\n\n self.subscriptions = response.subscriptions;\n return self.subscriptions;\n } catch (e) {\n return e;\n }\n })\n }));\n","import { toJS } from 'mobx';\nimport { types as t, getParent, flow } from 'mobx-state-tree';\n\nconst chartModel = t.model('chart', {\n status: t.string, // 'idle' | 'isLoading' | 'hasError' | 'isSuccess' | 'hasNoOrganisations'\n data: t.array(\n t.model({\n month: t.string,\n monthdisplay: t.string,\n students: t.number,\n login: t.number,\n completed: t.number,\n points: t.number\n })\n )\n});\nconst profesionsModel = t.model('professions array', {\n status: t.string, // 'idle' | 'isLoading' | 'hasError' | 'isSuccess'\n data: t.array(\n t.model('profession', {\n profession: t.string,\n professionId: t.number,\n students: t.number,\n login: t.number,\n open_courses: t.number,\n completed: t.number,\n points: t.number,\n students_with_finished_course: t.number,\n students_with_open_course: t.number\n })\n )\n});\nconst productsModel = t.model('Products', {\n status: t.string, // 'idle' | 'isLoading' | 'hasError' | 'isSuccess'\n data: t.array(\n t.model({\n product: t.string,\n productId: t.number,\n profession: t.string,\n professionId: t.number,\n students: t.number,\n login: t.number,\n completed: t.number,\n open_courses: t.number,\n students_with_open_course: t.number,\n points: t.number,\n students_with_finished_course: t.number\n })\n )\n});\n\nconst dashboardModel = t\n .model('LmsDashboard', {\n chart: t.maybeNull(chartModel),\n professions: t.maybeNull(profesionsModel),\n products: t.maybeNull(productsModel),\n organisationIds: t.array(t.number)\n })\n .views((self) => ({\n get chartData() {\n return toJS(self.chart.data);\n },\n get professionsData() {\n return toJS(self.professions.data);\n },\n get productsData() {\n return toJS(self.products.data);\n },\n get parentOrgId() {\n return self.organisationIds[0] || null;\n }\n }))\n .actions((self) => ({\n fetchLmsProfessions: flow(function* fetchLmsProfessions(query) {\n self.professions.status = 'isLoading';\n if (!getParent(self, 1).lmsAccess?.organisations?.length) {\n self.professions.status = 'hasNoOrganisations';\n self.professions.data = [];\n return;\n }\n try {\n const response = yield getParent(self, 1).lmsApi.fetchLMSProfessions(query);\n const { data } = response;\n self.professions.data = data;\n self.professions.status = 'isSuccess';\n } catch (error) {\n self.professions.status = 'hasError';\n self.professions.data = [];\n }\n }),\n fetchLmsProducts: flow(function* fetchLmsProducts(query) {\n self.products.status = 'isLoading';\n if (!getParent(self, 1).lmsAccess?.organisations?.length) {\n self.products.status = 'hasNoOrganisations';\n self.products.data = [];\n return;\n }\n try {\n const response = yield getParent(self, 1).lmsApi.fetchLMSProducts(query);\n const { data } = response;\n self.products.data = data;\n self.products.status = 'isSuccess';\n } catch (error) {\n self.products.status = 'hasError';\n self.products.data = [];\n }\n }),\n fetchLmsChart: flow(function* fetchLmsChart(query) {\n self.chart.status = 'isLoading';\n if (!getParent(self, 1).lmsAccess?.organisations?.length) {\n self.chart.status = 'hasNoOrganisations';\n self.chart.data = [];\n return;\n }\n try {\n const response = yield getParent(self, 1).lmsApi.fetchLMSChart(query);\n const { data, organisationIds } = response;\n self.chart.data = data;\n self.chart.status = 'isSuccess';\n self.organisationIds = organisationIds;\n } catch (error) {\n self.chart.status = 'hasError';\n self.chart.data = [];\n }\n })\n }));\n\nexport const LmsDashboard = t.optional(dashboardModel, {\n chart: {\n status: 'idle',\n data: []\n },\n products: {\n status: 'idle',\n data: []\n },\n professions: {\n status: 'idle',\n data: []\n },\n organisationIds: []\n});\n","export const CURRICULUM_STAGE = {\n functions: 'functions',\n learningGoals: 'learning-goals',\n evaluation: 'evaluation'\n};\n\nexport const CURRICULUM_STEP = {\n functions: 1,\n 'learning-goals': 2,\n evaluation: 3\n};\n\nexport const CURRICULUM_STAGE_BY_STEP = {\n 1: CURRICULUM_STAGE.functions,\n 2: CURRICULUM_STAGE.learningGoals,\n 3: CURRICULUM_STAGE.evaluation\n};\n\nexport const CURRICULUM_TYPE = {\n function: 'portfolio_function',\n functionActivity: 'function_activity',\n learningGoal: 'learning_goal',\n learningGoalActivity: 'learning_goal_activity',\n learningGoalEvaluation: 'learning_goal_evaluation',\n learningGoalEvaluationActivity: 'learning_goal_evaluation_activity',\n courseResult: 'course_result'\n};\n","import { flow, types as t } from 'mobx-state-tree';\nimport { CURRICULUM_TYPE } from './constants';\n\nconst initialData = { data: [], included: [] };\n\nconst SORT_DIR = {\n ASC: 'asc',\n DESC: 'desc'\n};\n\nconst yearSorter = (a, b, sortDir = SORT_DIR.ASC) => {\n if (a.year < b.year) {\n return sortDir === SORT_DIR.ASC ? -1 : 1;\n }\n if (a.year > b.year) {\n return sortDir === SORT_DIR.ASC ? 1 : -1;\n }\n if (a.created < b.created) {\n return sortDir === SORT_DIR.ASC ? -1 : 1;\n }\n if (a.created > b.created) {\n return sortDir === SORT_DIR.ASC ? 1 : -1;\n }\n return 0;\n};\n\nconst yearSorterDesc = (a, b) => yearSorter(a, b, SORT_DIR.DESC);\n\nexport const CurriculumStore = t\n .model({\n isLoadingCurriculum: t.optional(t.boolean, false),\n\n curriculumState: t.optional(t.enumeration(['init', 'done', 'error']), 'init'),\n curriculums: t.optional(t.frozen(), {}),\n\n curriculum: t.optional(t.frozen(), {}),\n curriculumFunctions: t.optional(t.frozen(), []),\n curriculumFunctionActivities: t.optional(t.frozen(), []),\n curriculumLearningGoals: t.optional(t.frozen(), []),\n curriculumLearningGoalActivities: t.optional(t.frozen(), []),\n curriculumEvaluations: t.optional(t.frozen(), []),\n curriculumEvaluationCourses: t.optional(t.frozen(), []),\n\n curriculumFunctionExamples: t.optional(t.frozen(), []),\n curriculumLearningGoalExamples: t.optional(t.frozen(), []),\n curriculumLearningGoalActivityExamples: t.optional(t.frozen(), []),\n\n // all completed courses for a given year that a user can pick from\n curriculumAvailableCourseResults: t.optional(t.frozen(), [])\n })\n\n .actions((self) => ({\n startLoadCurriculum: () => {\n self.isLoadingCurriculum = true;\n },\n\n stopLoadCurriculum: () => {\n self.isLoadingCurriculum = false;\n },\n\n initCurriculumState: () => {\n self.error = null;\n },\n\n // ================================\n // Portfolio/Curriculum\n // ================================\n refreshCurrentCurriculum: () => {\n if (self.curriculum) {\n setTimeout(() => {\n self.fetchCurriculum(self.curriculum.data.id);\n }, 200);\n }\n },\n\n /**\n * Fetches portfolio items from different API endpoint and returns\n * the items in a different format than the JSONAPI does\n */\n fetchCurriculums: flow(function* fetchCurriculums(params) {\n // Start loading before fetching\n self.startLoadCurriculum();\n\n // Reset state\n self.initCurriculumState();\n\n // Fetch curriculums\n const result = yield self.lmsApi.curriculumApi.getAll(params);\n\n if (result.errors) {\n self.curriculumState = 'error';\n self.error = result.errors;\n } else {\n self.curriculums = {\n ...result,\n data: result?.portfolios?.length > 0 ? result.portfolios.sort(yearSorterDesc) : []\n };\n self.curriculumState = 'done';\n }\n\n // Stop loading after completion\n self.stopLoadCurriculum();\n\n return result;\n }),\n\n /**\n * Fetches a portfolio item from the JSONAPI and returns\n * the data in the JSONAPI format, e.g. with attributes, relationships, included, etc.\n */\n fetchCurriculum: flow(function* fetchCurriculum(uid) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumApi.getSingle(uid);\n\n if (result.errors) {\n self.curriculum = initialData;\n self.curriculumState = 'error';\n self.error = result.errors;\n } else {\n self.curriculum = result;\n self.curriculumFunctions = result.included?.filter((item) => item.type === CURRICULUM_TYPE.function);\n self.curriculumFunctionActivities = result.included?.filter((item) => item.type === CURRICULUM_TYPE.functionActivity);\n self.curriculumLearningGoals = result.included?.filter((item) => item.type === CURRICULUM_TYPE.learningGoal);\n self.curriculumLearningGoalActivities = result.included?.filter((item) => item.type === CURRICULUM_TYPE.learningGoalActivity);\n self.curriculumEvaluations = result.included?.filter((item) => item.type === CURRICULUM_TYPE.learningGoalEvaluation);\n self.curriculumEvaluationCourses = result.included?.filter((item) => item.type === CURRICULUM_TYPE.courseResult);\n yield self.fetchAvailableCourseResultForCurriculum(self.curriculum?.data?.attributes?.year);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n createCurriculum: flow(function* createCurriculum(data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumApi.create({\n ...data,\n is_finished: false,\n percentage_completed: 0,\n is_deleted: 0,\n current_step: 1\n });\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n updateCurriculum: flow(function* updateCurriculum(curriculum) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumApi.update(curriculum);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n unarchiveCurriculum: flow(function* unarchiveCurriculum(uid) {\n self.initCurriculumState();\n\n const data = {\n id: uid,\n type: 'portfolio',\n attributes: {\n is_deleted: 0\n }\n };\n\n return yield self.lmsApi.curriculumApi.update(data);\n }),\n\n deleteCurriculum: flow(function* deleteCurriculum(id) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumApi.delete(id);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumState = 'done';\n }\n\n // update curriculums state\n if (self.curriculums?.length > 0) {\n self.curriculums = {\n ...self.curriculums,\n data: self.curriculums.data.filter((c) => c.id !== id)\n };\n }\n\n return true;\n }),\n\n finalizeCurriculum: flow(function* finalizeCurriculum(curriculum) {\n self.initCurriculumState();\n\n const data = {\n id: curriculum.id,\n type: curriculum.type,\n attributes: {\n is_finished: true,\n percentage_completed: 100\n }\n };\n\n return yield self.lmsApi.curriculumApi.update(data);\n }),\n\n updateCurriculumStep: flow(function* updateCurriculumStep(curriculum, step) {\n self.initCurriculumState();\n\n const data = {\n id: curriculum.id,\n type: curriculum.type,\n attributes: {\n current_step: step\n }\n };\n\n yield self.lmsApi.curriculumApi.update(data);\n }),\n\n /**\n * Used when deleting a function or learning goal from a curriculum\n *\n * @param curriculum\n * @param percentage\n */\n maybeUpdateCurriculumPercentage: flow(function* maybeUpdateCurriculumPercentage(curriculum, percentage) {\n if (percentage <= curriculum.attributes.percentage_completed) {\n return;\n }\n\n const data = {\n id: curriculum.id,\n type: curriculum.type,\n attributes: {\n percentage_completed: percentage\n }\n };\n\n yield self.lmsApi.curriculumApi.update(data);\n }),\n\n /**\n * Used when deleting a function or learning goal from a curriculum\n *\n * @param curriculum\n */\n maybeResetStepAndPercentage: flow(function* maybeResetStepAndPercentage(curriculum) {\n const numFunctions = curriculum.relationships?.functions?.data?.length ?? 0;\n const numLearningGoals = curriculum.relationships?.learning_goals?.data?.length ?? 0;\n\n if (numFunctions === 0 || numLearningGoals === 0) {\n const currentStep = numFunctions === 0 ? 1 : 2;\n const percentageCompleted = numFunctions === 0 ? 0 : 25;\n\n const data = {\n ...curriculum,\n attributes: {\n ...curriculum.attributes,\n current_step: currentStep,\n percentage_completed: percentageCompleted\n }\n };\n\n return yield self.lmsApi.curriculumApi.update(data);\n }\n\n return curriculum;\n }),\n\n attachCurriculumFunctionToCurriculum: flow(function* attachCurriculumFunctionToCurriculum(curriculum, functionId) {\n return yield self.lmsApi.curriculumApi.attach(curriculum, 'functions', 'portfolio_function', functionId);\n }),\n\n attachCurriculumLearningGoalToCurriculum: flow(function* attachCurriculumLearningGoalToCurriculum(curriculum, functionId) {\n return yield self.lmsApi.curriculumApi.attach(curriculum, 'learning_goals', 'learning_goal', functionId);\n }),\n\n // ================================\n // Functions & Activities\n // ================================\n fetchCurriculumFunctionExamples: flow(function* fetchCurriculumFunctionExamples() {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumFunctionExamplesApi.getAll();\n\n if (result?.errors) {\n self.curriculumFunctionExamples = {};\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumFunctionExamples = result;\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n createCurriculumFunctionWithActivity: flow(function* createCurriculumFunctionWithActivity(curriculum, data) {\n self.initCurriculumState();\n\n // create function for this curriculum\n const fn = yield self.createCurriculumFunction(curriculum, { name: data.functionName });\n\n if (fn.errors) {\n return fn;\n }\n // create activity for this function\n const activity = yield self.createCurriculumFunctionActivity(fn.data.data, {\n name: data.activityName,\n expected_result: data.activityResult\n });\n\n if (!activity || activity?.errors) {\n yield self.lmsApi.curriculumFunctionApi.delete(fn.data.data.id);\n return activity;\n }\n\n yield self.maybeUpdateCurriculumPercentage(curriculum, 25);\n return fn;\n }),\n\n createCurriculumFunction: flow(function* createCurriculumFunction(curriculum, data) {\n self.initCurriculumState();\n\n self.error = null;\n\n const result = yield self.lmsApi.curriculumFunctionApi.create(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n yield self.sleep();\n yield self.attachCurriculumFunctionToCurriculum(curriculum, result.data.data.id);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n updateCurriculumFunction: flow(function* updateCurriculumFunction(fn) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumFunctionApi.update(fn);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n createCurriculumFunctionActivity: flow(function* createCurriculumFunctionActivity(fnData, data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumFunctionActivityApi.create(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n yield self.sleep();\n yield self.attachCurriculumFunctionActivityToCurriculumFunction(fnData, result.data.data.id);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n updateCurriculumFunctionActivity: flow(function* updateCurriculumFunctionActivity(data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumFunctionActivityApi.update(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n deleteCurriculumFunction: flow(function* deleteCurriculumFunction(curriculum, fn) {\n self.initCurriculumState();\n\n // first we delete the relationship between the curriculum and the function\n // when deleting the last function, we also need to reset the current_step and percentage_completed\n const updatedCurriculum = yield self.lmsApi.curriculumApi.detach(curriculum, 'functions', fn.id);\n\n if (!updatedCurriculum || updatedCurriculum?.errors) {\n self.curriculumState = 'error';\n self.error = updatedCurriculum?.errors;\n return updatedCurriculum;\n }\n\n yield self.maybeResetStepAndPercentage(updatedCurriculum.data);\n\n // next delete all related function activities\n const stack = fn.activities.map((activity) => self.lmsApi.curriculumFunctionActivityApi.delete(activity.id));\n yield Promise.all(stack);\n\n // finally delete the function itself\n const result = yield self.lmsApi.curriculumFunctionApi.delete(fn.id);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumState = 'done';\n }\n\n return updatedCurriculum;\n }),\n\n deleteCurriculumFunctionActivities: flow(function* deleteCurriculumFunctionActivities(fn, ids) {\n self.initCurriculumState();\n\n // First remove the relationship between the function and the activities\n // For the user this is the real delete (any orphaned activities will be deleted by the backend)\n const fnUpdated = {\n ...fn,\n relationships: {\n ...fn.relationships,\n activities: {\n ...fn.relationships.activities,\n data: fn.relationships.activities.data.filter((a) => !ids.includes(a.id))\n }\n }\n };\n const result = yield self.updateCurriculumFunction(fnUpdated);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumFunctions = self.curriculumFunctions.filter((a) => !ids.includes(a.id));\n\n // Then try and delete the activities themselves so we don't have any orphaned activities\n const stack = ids.map((id) => self.lmsApi.curriculumFunctionActivityApi.delete(id));\n yield Promise.all(stack);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n attachCurriculumFunctionActivityToCurriculumFunction: flow(function* attachCurriculumFunctionActivityToCurriculumFunction(\n functionData,\n functionActivityId\n ) {\n return yield self.lmsApi.curriculumFunctionApi.attach(functionData, 'activities', 'function_activity', functionActivityId);\n }),\n\n // ================================\n // Learning Goals\n // ================================\n fetchCurriculumLearningGoalExamples: flow(function* fetchCurriculumLearningGoalExamples() {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalExamplesApi.getAll();\n\n if (result?.errors) {\n self.curriculumLearningGoalExamples = {};\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumLearningGoalExamples = result.data;\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n fetchCurriculumLearningGoalActivityExamples: flow(function* fetchCurriculumLearningGoalActivityExamples() {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalActivityExamplesApi.getAll();\n\n if (result?.errors) {\n self.curriculumLearningGoalActivityExamples = {};\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumLearningGoalActivityExamples = result.data;\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n createCurriculumLearningGoalWithActivity: flow(function* createCurriculumLearningGoalWithActivity(curriculum, data) {\n self.initCurriculumState();\n\n // create goal for this curriculum\n const goal = yield self.createCurriculumLearningGoal(curriculum, { name: data.learningGoalName });\n\n if (!goal || goal?.errors) {\n return goal;\n }\n\n // create activity for this goal\n // used a sleep here, because sometimes got a 404 error from the API, that the goal didn't exist...\n yield self.sleep();\n const activityResult = yield self.createCurriculumLearningGoalActivity(goal.data.data, {\n name: data.activityName,\n explanation: data.activityExplanation\n });\n\n if (!activityResult || activityResult?.errors) {\n yield self.lmsApi.curriculumLearningGoalApi.delete(goal.data.data.id);\n return activityResult;\n }\n\n yield self.maybeUpdateCurriculumPercentage(curriculum, 50);\n\n return goal;\n }),\n\n createCurriculumLearningGoal: flow(function* createCurriculumLearningGoal(curriculum, data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalApi.create(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n yield self.sleep();\n yield self.attachCurriculumLearningGoalToCurriculum(curriculum, result.data.data.id);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n updateCurriculumLearningGoal: flow(function* updateCurriculumLearningGoal(data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalApi.update(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n deleteCurriculumLearningGoal: flow(function* deleteCurriculumLearningGoal(curriculum, goal) {\n self.initCurriculumState();\n\n // first delete relationship between curriculum and learning goal\n // when deleting the last learning goal, we also need to reset the current_step and percentage_completed\n const updatedCurriculum = yield self.lmsApi.curriculumApi.detach(curriculum, 'learning_goals', goal.id);\n\n if (!updatedCurriculum || updatedCurriculum?.errors) {\n self.curriculumState = 'error';\n self.error = updatedCurriculum?.errors;\n return updatedCurriculum;\n }\n\n yield self.maybeResetStepAndPercentage(updatedCurriculum.data);\n\n // delete all related activities\n const activityIds = goal.relationships?.activities?.data?.map((a) => a.id);\n const goalWithoutActivities = yield self.deleteCurriculumLearningGoalActivities(goal, activityIds);\n if (!goalWithoutActivities || goalWithoutActivities?.errors) {\n return goalWithoutActivities;\n }\n\n // delete all related evaluations\n const evaluationIds = goal.relationships?.evaluations?.data?.map((e) => e.id);\n const goalWithoutEvaluations = yield self.deleteCurriculumEvaluations(goalWithoutActivities.data, evaluationIds);\n if (!goalWithoutEvaluations || goalWithoutEvaluations?.errors) {\n return goalWithoutEvaluations;\n }\n\n // delete the learning goal itself\n const result = yield self.lmsApi.curriculumLearningGoalApi.delete(goal.id);\n if (!result || result?.errors) {\n self.curriculumState = 'error';\n self.error = updatedCurriculum?.errors;\n } else {\n self.curriculumState = 'done';\n }\n\n return updatedCurriculum;\n }),\n\n createCurriculumLearningGoalActivity: flow(function* createCurriculumLearningGoalActivity(goal, data) {\n self.initCurriculumState();\n\n const activity = yield self.lmsApi.curriculumLearningGoalActivityApi.create(data);\n\n if (activity?.errors) {\n self.curriculumState = 'error';\n self.error = activity?.errors;\n return activity;\n }\n\n yield self.sleep();\n const goalWithActivity = yield self.attachCurriculumLearningGoalActivityToLearningGoal(goal, activity.data.data.id);\n\n if (goalWithActivity?.errors) {\n self.curriculumState = 'error';\n self.error = goalWithActivity?.errors;\n yield self.lmsApi.curriculumLearningGoalActivityApi.delete(activity.data.data.id);\n return goalWithActivity;\n }\n\n self.curriculumState = 'done';\n\n return { activity: activity.data.data, goal: goalWithActivity.data };\n }),\n\n updateCurriculumLearningGoalActivity: flow(function* updateCurriculumLearningGoalActivity(data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalActivityApi.update(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result;\n } else {\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n deleteCurriculumLearningGoalActivities: flow(function* deleteCurriculumLearningGoalActivities(goal, ids) {\n self.initCurriculumState();\n\n // First remove the relationship between the learning goal and the activities\n const result = yield self.lmsApi.curriculumLearningGoalApi.detach(goal, 'activities', ids);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n // Then try and delete the activities themselves so we don't have any orphaned activities\n const stack = ids.map((id) => self.lmsApi.curriculumLearningGoalActivityApi.delete(id));\n yield Promise.all(stack);\n\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n attachCurriculumLearningGoalActivityToLearningGoal: flow(function* attachCurriculumLearningGoalActivityToLearningGoal(\n goal,\n activityId\n ) {\n return yield self.lmsApi.curriculumLearningGoalApi.attach(goal, 'activities', 'learning_goal_activity', activityId);\n }),\n\n attachCurriculumEvaluationToLearningGoal: flow(function* attachCurriculumEvaluationToLearningGoal(goal, evaluationId) {\n return yield self.lmsApi.curriculumLearningGoalApi.attach(goal, 'evaluations', 'learning_goal_evaluation', evaluationId);\n }),\n\n // ================================\n // Evaluations & activities\n // ================================\n createOrUpdateCurriculumEvaluation: flow(function* createOrUpdateCurriculumEvaluation(goal, data) {\n if (data.id) {\n return yield self.updateCurriculumEvaluation(data);\n }\n\n return yield self.createCurriculumEvaluation(goal, data);\n }),\n\n createCurriculumEvaluation: flow(function* createCurriculumEvaluation(goal, data) {\n self.initCurriculumState();\n\n const result = yield self.lmsApi.curriculumLearningGoalEvaluationApi.create(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n yield self.sleep();\n yield self.attachCurriculumEvaluationToLearningGoal(goal, result.data.data.id);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n updateCurriculumEvaluation: flow(function* updateCurriculumEvaluation(data) {\n self.initCurriculumState();\n\n // E4-450 - Remove 'arity' keys for update actions.\n // @todo implement as utility api function for all PATCH requests?\n Object.fromEntries(\n Object.entries(data?.relationships ?? {}).map(([key, relationship]) => {\n if (Array.isArray(relationship?.data)) {\n relationship.data = relationship.data.map(item => {\n if (item.meta?.arity !== undefined) {\n const { meta } = item;\n delete meta.arity;\n return { ...item, meta };\n }\n return item;\n });\n }\n else if (relationship?.data?.meta?.arity !== undefined) {\n const { meta } = relationship.data;\n delete meta.arity;\n relationship.data = { ...relationship.data, meta };\n }\n\n return [key, relationship];\n })\n );\n\n const result = yield self.lmsApi.curriculumLearningGoalEvaluationApi.update(data);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n yield self.maybeUpdateCurriculumPercentage(self.curriculum.data, 75);\n\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n deleteCurriculumEvaluations: flow(function* deleteCurriculumEvaluations(goal, ids) {\n self.initCurriculumState();\n\n // First remove the relationship between the evaluation and the learning goal\n const result = yield self.lmsApi.curriculumLearningGoalApi.detach(goal, 'evaluations', ids);\n\n if (result?.errors) {\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n // Then try and delete the evaluations themselves so we don't have any orphaned evaluations\n const stack = ids.map((id) => self.lmsApi.curriculumLearningGoalEvaluationApi.delete(id));\n yield Promise.all(stack);\n self.curriculumState = 'done';\n }\n\n return result;\n }),\n\n attachCurriculumCourseResultToEvaluation: flow(function* attachCurriculumCourseResultToEvaluation(evaluation, courseId) {\n return yield self.lmsApi.curriculumLearningGoalEvaluationApi.attach(evaluation, 'courses', 'course_result', courseId);\n }),\n\n // ================================\n // CourseResults\n // ================================\n fetchAvailableCourseResultForCurriculum: flow(function* fetchAvailableCourseResultForCurriculum(year) {\n self.initCurriculumState();\n\n if (!year) {\n return;\n }\n\n const timestampFrom = new Date(`${year}-01-01T00:00:00+00:00`).getTime() / 1000;\n const timestampTill = new Date(`${year + 1}-01-31T23:59:59+00:00`).getTime() / 1000;\n\n const params = {\n sort: 'name',\n filter: {\n completedDate: {\n condition: {\n value: [timestampFrom, timestampTill],\n path: 'certificate',\n operator: 'BETWEEN'\n }\n }\n }\n };\n\n const result = yield self.lmsApi.fetchCourseResults(self.login.uuid, params);\n\n if (result?.errors) {\n self.curriculumAvailableCourseResults = {};\n self.curriculumState = 'error';\n self.error = result?.errors;\n } else {\n self.curriculumAvailableCourseResults = result.data.data;\n self.curriculumState = 'done';\n }\n })\n }));\n","/* eslint-disable require-atomic-updates, no-nested-ternary */\n/* eslint no-throw-literal: off */\nimport { reaction } from 'mobx';\nimport { createRouterState, RouterStore, HistoryAdapter } from 'mobx-state-router';\nimport { types as t, flow, destroy, getSnapshot, onSnapshot, getEnv } from 'mobx-state-tree';\n// import {getType, resolveIdentifier, } from 'mobx-state-tree';\nimport * as logger from 'loglevel';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { createBrowserHistory } from 'history';\nimport cloneDeep from 'lodash/cloneDeep';\nimport _isEmpty from 'lodash/isEmpty';\nimport { changeMetaRoute, trackGaPageViews } from 'helpers/Helpers';\nimport { StoreFetch } from './RootStoreFetch';\nimport { startLmsApiClient } from './api/LmsApi';\n\n// MODELS\nimport { Banner } from './models/Banner';\nimport { CourseEdit } from './models/CourseEdit';\nimport { LessonEdit } from './models/LessonEdit';\nimport { AuthorEdit } from './models/AuthorEdit';\nimport { CourseCopy } from './models/CourseCopy';\n// import { LessonPlay } from './models/LessonPlay';\n\n// MODELS EWAPI\nimport { User } from './modelsEwapi/User';\nimport { Likes } from './modelsEwapi/Likes';\nimport { Hidden } from './modelsEwapi/Hidden';\nimport { Authors } from './modelsEwapi/Author';\nimport { Courses, Course } from './modelsEwapi/Course';\nimport { Product } from './modelsEwapi/Product';\nimport { Profile } from './modelsEwapi/Profile';\nimport { Packages } from './modelsEwapi/Package';\nimport { Favorites } from './modelsEwapi/Favorites';\nimport { BaseProduct } from './modelsEwapi/BaseProduct';\nimport { Subscriptions } from './modelsEwapi/Subscription';\nimport { CourseResults } from './modelsEwapi/CourseResults';\nimport { LessonResults } from './modelsEwapi/LessonContainer';\nimport { Category, Profession } from './modelsEwapi/Profession';\nimport { LmsDashboard } from './models/Lms/LmsDashboard';\n\nimport { CurriculumStore } from '../pages/curriculum/store';\nimport { resetLocalState } from '../helpers/session.helper';\n\nconst log = logger.getLogger('RootStore');\nlog.setDefaultLevel('info');\n\n// live routes in the root\nconst RouterStateModel = t.model({\n routeName: '',\n // The unknown properties of the objects params and queryParams kan only be accessed by toJSON/getSnapshot\n params: t.map(t.string),\n queryParams: t.map(t.string)\n});\n\nconst FirstStore = t\n .model({\n validUser: false,\n maintenance: false,\n packages: Packages,\n selectedProductId: 0,\n selectedPackageId: 0,\n user: t.maybeNull(User),\n likes: t.maybeNull(Likes),\n hidden: t.maybeNull(Hidden),\n product: t.maybeNull(Product),\n courses: t.maybeNull(Courses),\n specialAccessCourseIds: t.maybeNull(t.array(t.number)),\n // trialCoursesCourseIds: t.maybeNull(t.array(t.reference(Course))),\n trialCourses: t.maybeNull(t.array(t.safeReference(t.late(() => Course)))),\n categories: t.array(Category),\n authors: t.maybeNull(Authors),\n profile: t.maybeNull(Profile),\n // product: t.maybeNull(Product),\n favorites: t.maybeNull(Favorites),\n professions: t.maybeNull(Profession),\n baseProduct: t.maybeNull(BaseProduct),\n banners: t.maybeNull(t.array(Banner)),\n products: t.maybeNull(t.array(t.number)),\n subscriptions: t.maybeNull(Subscriptions),\n courseResults: t.maybeNull(CourseResults),\n lesson_results: t.maybeNull(LessonResults),\n categories2: t.maybeNull(t.array(Category)),\n // invalidProducts: t.array(t.reference(BaseProduct)),\n // invalidPackages: t.array(t.array(t.reference(Package))),\n // marketing_messages: t.array(t.reference(MarketingMessage)),\n state: t.optional(t.enumeration('State', ['init', 'pending', 'done', 'error', 'loading']), 'init'),\n // faq: t.array(Faq),\n routerState: t.optional(RouterStateModel, { routeName: '', params: {}, queryParams: {} }),\n LmsDashboard,\n totalCompletedCourses: t.optional(t.number, 0),\n showBanner: t.optional(t.boolean, false)\n })\n .volatile(() => ({\n specialAccess: 'init',\n hasSubscriptions: 'init',\n errorPage: {},\n // authors: [],\n modelErrors: [],\n lessonPlay: null,\n errorShown: false,\n browserHistory: [],\n lessonState: 'init',\n permissions: new Map(),\n courseEditState: 'init',\n authorEdit: t.maybeNull(AuthorEdit),\n courseEdit: t.maybeNull(CourseEdit),\n lessonEdit: t.maybeNull(LessonEdit),\n assistantManagement: { title: 'Mijn Account' },\n maxRetries: 2, // TODO: get this from the server\n error: null, // Properties can change and not needed in permanent shapes\n authorEditState: t.optional(t.enumeration(['init', 'pending', 'done', 'error']), 'init'),\n lessonEditState: t.optional(t.enumeration(['init', 'pending', 'done', 'error']), 'init'),\n // professionsState: t.optional(t.enumeration(['init', 'pending', 'done', 'error']), 'init'),\n // professions: t.maybeNull(t.array(Profession)),\n prevTab: 0,\n lessons: [],\n dialog: false,\n resetToken: '',\n selectedNid: '',\n minDrawer: true,\n toastStates: [],\n clickedTabs: [],\n courseDetails: [],\n openDrawer: false,\n scrollPosition: 0,\n ewiseProducts: [],\n // courseCopy: null,\n startedCourse: false,\n loadingCourses: false,\n isToastvisible: false,\n isfilterVisible: true,\n courseHeaderTabs: 'All',\n // courseFavorite: t.number,\n assistantNavbar: 'assistant',\n courseCopy: t.maybeNull(CourseCopy),\n courseoverview: 3, // TODO: use enumeration for this\n login: { userName: '', scope: [], prefBaseProduct: null, uuid: '' },\n lmsAccess: null,\n lmsStudentDetail: {},\n lmsRecordsPerPage: 50,\n passwordForced: false,\n noSidebar: false,\n searchParam: '',\n searchBaseParam: 0,\n searchingCourses: false,\n searchCoursesFound: 0,\n searchSuggestedParam: '',\n searchNextAttempt: 1,\n searchIsRandom: false,\n showDependingPopup: false,\n dependingCourse: null,\n bannerProducts: []\n }))\n .views((self) =>\n // const tmpRouterState = null;\n ({\n get params() {\n return getSnapshot(self.routerState.params);\n }, // Shortcut to get to uri params of the active URL\n findCourseByNid(nid) {\n return self.courses && self.courses.courses.find((course) => course.course_id === nid);\n },\n get defaultCourseGridImage() {\n return '/images/fallback_image_intern.jpg';\n },\n avatarUrl() {\n if (self?.user?.user_picture) return self.user.user_picture.replace('http://', 'https://');\n if (self.login.profilePicture) return self.login.profilePicture.replace('http://', 'https://');\n return null;\n },\n getCourses() {\n return self.courses.courses.map((course) => ({ courseId: course.course_id, courseTitle: course.course_title }));\n },\n get lmsApi() {\n return startLmsApiClient();\n },\n\n get oauth() {\n return window.clientInstance;\n }\n })\n )\n // ========== Packages ==========\n .views((self) => ({\n get selectedPackageTitle() {\n return (\n (self.packages.length > 0 &&\n self.selectedPackageId !== 0 &&\n self?.packages?.find((findPackage) => findPackage.nid === self?.selectedPackageId).tab_label) ||\n ''\n );\n },\n get selectedPackage() {\n return self.packages.find((findPackage) => findPackage.nid === self.selectedPackageId);\n },\n get isMicrolearning() {\n return self?.selectedPackage?.microlearning;\n }\n }))\n\n // ========== LOGIN, SHOW/HIDE ELEMENTS based on role/permissions ==========\n .views((self) => ({\n get label() {\n const hostname = window.location.host;\n if (hostname.includes('e-wise')) return 'ewise';\n if (hostname.includes('pe-academy')) return 'pe';\n if (hostname.includes('po-online')) return 'po';\n if (hostname.includes('cme-online')) return 'cme';\n return 'pe';\n },\n get isAdministrator() {\n return !!self.login.scope.includes('administrator');\n },\n get hideAnswersForLessons() {\n // test lesson id for testing on staging : 62972\n // security lesson id on production: 225536\n return ['62972', '225536'].includes(self.params.lessonId);\n },\n get canSeeAnswers() {\n if (self.hideAnswersForLessons) return false;\n if (self.login.scope.includes('redactie')) return true;\n return self.isAdministrator;\n },\n get isEwiseUser() {\n return !!self.login.scope.includes('e_wise');\n },\n get isMarketing() {\n return !!self.login.scope.includes('marketing');\n },\n get canPrintCourseOverview() {\n if (self.isAdministrator) return true;\n if (self.login.scope.includes('redactie')) return true;\n if (self.isMarketing || self.login.scope.includes('sales')) return true;\n return false;\n },\n get canCreateXml() {\n if (self.isAdministrator) return true;\n if (self.isMarketing) return true;\n return false;\n },\n get hasPreferredBaseproduct() {\n return !!self.login.prefBaseProduct;\n },\n get preferredBaseproduct() {\n return self.login.prefBaseProduct;\n },\n get canPrintCourse() {\n if (self.isAdministrator) return true;\n if (self.login.scope.includes('redactie')) return true;\n if (self.login.hasSpecialAccess) return true;\n return false;\n },\n get canEditCourse() {\n if (self.isAdministrator) return true;\n if (self.login.scope.includes('redactie')) return true;\n if (self.isMarketing) return true;\n return false;\n },\n get canAddAnswerPdfToCourse() {\n const allowedPackages = ['huisarts', 'ouderengeneeskunde', 'verpleegkundig-specialist', 'ge-bu'];\n if (self.isAdministrator) return true;\n if (self.login.scope.includes('redactie') && allowedPackages.includes(self.params.package)) return true;\n return false;\n },\n get canGotoAdminPanel() {\n if (self.isAdministrator) return true;\n if (self.isMarketing) return true;\n if (self.login.scope.includes('sales')) return true;\n if (self.login.scope.includes('redactie')) return true;\n return false;\n },\n get ewiseUserUuid() {\n return self.login.uuid;\n },\n get showMenuMyCompany() {\n if (self.showMenuItemLms) return true;\n if (self.showMenuAssistant) return true;\n return false;\n },\n get showMenuItemLms() {\n if (self.isAdministrator || self.isEwiseUser) return true;\n if (self.login.scope.includes('customer_report')) return true;\n return false;\n },\n get showMenuAssistant() {\n if (self.isEwiseUser) return false;\n if (self.isAdministrator) return false;\n if (self.login.scope.includes('customer_manage')) return true;\n return false;\n },\n get showMenuVTB() {\n return false;\n },\n get showMenuPortfolio() {\n return self.baseProduct?.title?.toLowerCase() === 'accountant';\n },\n get showBtnSubscribe() {\n return self.isDemoProduct;\n // return false;\n },\n get isDemoProduct() {\n return self?.baseProduct?.title.toLowerCase().includes('proef') || false;\n },\n get showNotificationsIcon() {\n return false;\n },\n get showCourseAccrEndDate() {\n const showAccrEndateForlabels = ['cme'];\n return showAccrEndateForlabels.includes(self.label);\n }\n }))\n\n // DEFAULT ACTIONS\n .actions((self) => ({\n afterCreate() {\n // Constructor\n log.debug('Starting new store');\n\n //\n //\n self.setLoginBydDecodeJWT();\n\n // const tokenUser = self.oauth.tokenInformation.access_token;\n // const tokenDecode = self.decodeJWT(tokenUser);\n // const tokenPayload = tokenDecode.payload;\n // self.login.userName = `${tokenPayload.first_name} ${tokenPayload.last_name}`;\n // self.login.scope = tokenPayload.scope;\n // self.login.prefBaseProduct = tokenPayload.preferred_base_product;\n // self.login.uuid = tokenPayload.sub_uuid;\n //\n //\n //\n // const roles = self.included.filter((includedEntity) => includedEntity.type === 'user_role');\n // if (roles) {\n // roles.forEach((role) => role.attributes.permissions.map((permission) => self.permissions.set(permission, true)));\n // }\n\n // Initialize routing\n if (!getEnv(self).routes) return; // Only applicable if within Cypress instantiation\n self.routerStore = new RouterStore(getEnv(self).routes, createRouterState('notFound'), { store: self });\n\n //\n //\n const history = createBrowserHistory({\n basename: process.env.PUBLIC_URL\n });\n self.history = new HistoryAdapter(self.routerStore, history);\n self.history.observeRouterStateChanges(); // Observe history changes\n // navigate to intialRouteName\n if (getEnv(self).intitialRouteName) {\n history.push(getEnv(self).intitialRouteName);\n }\n // if (self.routerState.routeName) self.routerStore.hydrate(getSnapshot(self.routerState)); // Initialize url / routing if starting from a snapshot\n setTimeout(() => {\n // Give routerStore a chance to initialize\n if (!self.routerState.routeName) self.setRouterState(JSON.parse(JSON.stringify(self.routerStore.routerState))); // first time initialize\n reaction(\n () => self.routerStore.routerState,\n (routerState) => {\n // Keep routState changes synced\n const state = JSON.stringify(routerState);\n if (!self.routerState.routeName || JSON.stringify(getSnapshot(self.routerState)) !== state) {\n self.setRouteIsEqual(true); // for preventing bounce back by onSnapshot\n self.setRouterState(JSON.parse(state));\n changeMetaRoute(self.routerStore);\n trackGaPageViews();\n self.setOverviewType(self.getOverviewType());\n }\n }\n );\n onSnapshot(self.routerState, () => {\n // When rootstore.routerState changes by something other then routerStore\n if (self.routeIsEqual || !self.routerState.routeName) self.setRouteIsEqual(false);\n else self.routerStore.hydrate(getSnapshot(self.routerState)); // Change the routerStore (url)\n });\n }, 0);\n },\n\n addToBrowserHistory(link) {\n if (typeof link === 'string') return;\n if (self.browserHistory.length === 0) {\n self.browserHistory.push(link);\n } else {\n if (link.queryParams && _isEmpty(link.queryParams)) delete link.queryParams;\n const previous = self.browserHistory[self.browserHistory.length - 1];\n if (previous.routeName === 'lessonPlay' && link.routeName === 'lessonPlay') return; // don't keep lessonplay history\n const prevLink = typeof previous === 'string' ? previous : JSON.stringify(previous);\n const newLink = typeof link === 'string' ? link : JSON.stringify(link);\n if (prevLink !== newLink) self.browserHistory.push(link);\n }\n },\n setLoginBydDecodeJWT() {\n const accessToken = self.oauth.tokenInformation.access_token;\n const base64Url = accessToken.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n\n const jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split('')\n .map((c) => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join('')\n );\n\n const payload = JSON.parse(jsonPayload);\n self.login.isImpersonation = self.oauth.tokenInformation.isImpersonation || false;\n\n self.login.userName = `${payload.first_name} ${payload.last_name}`;\n self.login.scope = payload.scope;\n self.login.prefBaseProduct = self.getPrefProduct() > 0 ? self.getPrefProduct() : payload.preferred_base_product; // On browser refresh login payload is still the same\n self.login.uuid = payload.sub_uuid;\n self.login.profilePicture = payload?.profile_picture;\n self.login.hasSpecialAccess = payload?.has_special_access;\n self.login.gdpr = payload.accepted_gdpr;\n self.login.isVtbTeacher = payload?.is_vtb_teacher ? 1 : 0;\n self.login.dlxGate = payload?.is_lti_deeplinking ? 1 : 0; // Used for LTI deeplinking, using a more cryptic name to prevent misuse and security\n self.login.X4gJ2Kq = payload?.lti_user ? 1 : 0; // Used for LTI sessions in the frontend, using a more cryptic name to prevent misuse and security\n },\n\n setState(state) {\n self.state = state;\n return self.state;\n },\n\n setScrollingPosition(y) {\n self.scrollPosition = y;\n return self.scrollPosition;\n },\n\n setRouteIsEqual(state) {\n self.routeIsEqual = state;\n },\n\n setLessonPlay(lessonPlay = null) {\n self.lessonPlay = lessonPlay;\n },\n\n setLessonState(state, error) {\n self.lessonState = state;\n self.error = error;\n },\n\n setResetToken(token) {\n self.resetToken = token;\n },\n\n setNavbar(tab) {\n self.assistantNavbar = tab;\n },\n\n setStoreValue(key, value) {\n self[key] = value;\n return value;\n },\n\n /**\n * Used to show/hide the left sidebar in mobile view\n *\n * @returns {boolean}\n */\n toggleDrawer() {\n self.openDrawer = !self.openDrawer;\n return self.openDrawer;\n },\n\n /**\n * Used to minimize/maximize the left sidebar in desktop view\n *\n * @returns {boolean}\n */\n setMinDrawer(open) {\n self.minDrawer = open;\n return self.minDrawer;\n },\n\n setGdpr() {\n // We use this to set the GDPR popup on first time user enters course introduction page\n sessionStorage.setItem('gdpr', true);\n },\n\n getGdprAss() {\n // We use this to set the GDPR popup on first time user enters course introduction page\n return localStorage.getItem('gdprAss') || 0;\n },\n\n setGdprAss() {\n // We use this to set the GDPR popup on first time user enters assistant management page\n localStorage.setItem('gdprAss', 1);\n },\n\n getOverviewType() {\n // Retrieve the course overview type from local storage\n const type = localStorage.getItem('courseoverviewType');\n // Return the type as a number or default to 3\n return type ? Number(type) : 3;\n },\n\n setOverviewType(overviewType) {\n // We use this to set course overview type when a customer changes the view\n self.courseoverview = overviewType;\n localStorage.setItem('courseoverviewType', overviewType);\n },\n\n setPrefProduct(product) {\n // We use this to set the GDPR popup on first time user enters course introduction page\n sessionStorage.setItem('prefBaseProduct', Number(product));\n },\n\n setLtiSession() {\n // We use this to set the LTI session on first time user enters course\n sessionStorage.setItem('ltiSession', 1);\n },\n\n getLtiSession() {\n // We use this to set the LTI session on first time user enters course\n return sessionStorage.getItem('ltiSession') || 0;\n },\n\n isLtiSession() {\n return self.getLtiSession() === 1 || self.getLtiSession() === '1';\n },\n\n setEwiseBannerProducts(products) {\n self.bannerProducts = self.isEwiseUser || self.isAdministrator ? products : [];\n },\n\n getPrefProduct() {\n // We use this to set the GDPR popup on first time user enters course introcution page\n const prefSessionBaseProduct = sessionStorage.getItem('prefBaseProduct') || 0;\n return Number(prefSessionBaseProduct);\n },\n\n getEvaluation() {\n // We use this to get the course evaluation to prevent double evaluations\n return sessionStorage.getItem('courseEvaluation');\n },\n\n setEvaluation(courseResultUuid) {\n // We use this to set the course evaluation to prevent double evaluations\n sessionStorage.setItem('courseEvaluation', courseResultUuid);\n },\n\n getPasswordForced() {\n return sessionStorage.getItem('forcePasswordReset');\n },\n\n setPasswordForced() {\n sessionStorage.setItem('forcePasswordReset', 1);\n },\n\n setResetPasswordForced() {\n sessionStorage.removeItem('forcePasswordReset');\n },\n\n clearEvaluation() {\n // We use this to clear the course evaluation back to original state\n sessionStorage.removeItem('courseEvaluation'); // Remove course evaluation\n },\n\n setLmsRecordsPerPage(records) {\n localStorage.setItem('lmsRecordsPerPage', JSON.stringify(records));\n self.lmsRecordsPerPage = records;\n return records;\n },\n\n getLmsRecordsPerPage() {\n const records = localStorage.getItem('lmsRecordsPerPage');\n return records ? JSON.parse(records) : self.setLmsRecordsPerPage(self.lmsRecordsPerPage);\n },\n\n getFeedback1() {\n // We use this to not show any colors in options on the lesson play\n let showFeedback1 = false;\n if (self.lessonPlay) {\n showFeedback1 = self.lessonPlay?.lesson?.attributes['1answer_nofeedback'] || false;\n }\n return showFeedback1;\n },\n\n setSearchParam(searchparam) {\n // We use this to set the search param whenever a user searches for a course\n self.searchParam = searchparam;\n },\n\n setSearchBaseProductParam(baseProductId) {\n // We use this to set the search param whenever a user searches for a course\n self.searchBaseParam = baseProductId;\n },\n\n setSearchSuggestedParam(suggestedparam) {\n // We use this to set the search param whenever a user searches for a course\n self.searchSuggestedParam = suggestedparam;\n },\n\n // [ LESSONPLAY ]\n // TODO: ❌ async -> should be FLOW function\n async getLesson(courseId, lessonId) {\n if (self.lessonPlay && self.lessonPlay.lesson.attributes.drupal_internal__nid.toString() === lessonId) return self.lesson;\n await self.fetchLessonPlay(courseId, lessonId);\n return self.lesson;\n },\n\n // .LESSON:OPEN POPUP WIDGET MODAL/DIALOG\n setWidgetDialogOpen(status) {\n self.dialog = status;\n },\n\n /**\n * $ Other actions\n */\n setRouterState(state) {\n // log.info(\"setRouterState: \" + JSON.stringify(state));\n self.routerState = state;\n },\n\n gotoErrorPage(params) {\n self.errorPage = params;\n self.routerStore.goTo('errorPage');\n },\n\n // Merge different entities into self.included\n mergeIncludes(newEntities, overwrite = false) {\n if (!newEntities || !newEntities.forEach) return;\n newEntities.forEach((newEntity) => {\n if (!newEntity) return;\n const existingEntity = self.included.find((entity) => entity.id === newEntity.id);\n if (overwrite && existingEntity) {\n // log.info(`Found matching entities `, existingEntity.toJSON());\n destroy(existingEntity);\n self.included.push(newEntity);\n } else if (!existingEntity) {\n // log.info(`Pushing entity type ${newEntity.type} in store.included`);\n self.included.push(newEntity);\n }\n });\n },\n\n addIncludes(newEntity) {\n const existingEntity = self.included.find((entity) => entity.id === newEntity.id);\n if (existingEntity) {\n destroy(existingEntity);\n self.included.push(newEntity);\n } else if (!existingEntity) {\n self.included.push(newEntity);\n }\n },\n\n setSelectedProduct(productId, packageId) {\n self.selectedPackageId = packageId;\n self.selectedProductId = productId;\n },\n setSelectedPackage(packageId) {\n self.selectedPackageId = packageId;\n },\n\n // ============= SHOW MESSAGE IF DEPENDENT COURSE ==============\n setLessonDependsOnCourse(dependingCourse) {\n self.showDependingPopup = true;\n self.dependingCourse = dependingCourse;\n },\n\n resetDependinCourse() {\n self.showDependingPopup = false;\n self.dependingCourse = null;\n },\n\n // TODO: ❌ async -> should be FLOW function\n async logout(removeSaved = false) {\n self.validUser = false;\n self.password = '';\n self.remember = false;\n self.permissions = new Map();\n self.resetState();\n self.state = 'init';\n resetLocalState();\n if (removeSaved) {\n await window.clientInstance.killSession();\n }\n },\n\n resetState() {\n if (self.lessonPlay) destroy(self.lessonPlay);\n if (self.products) destroy(self.products);\n if (self.invalidProducts) destroy(self.invalidProducts);\n if (self.invalidPackages) destroy(self.invalidPackages);\n if (self.subscriptions) destroy(self.subscriptions);\n if (self.user) destroy(self.user);\n if (self.included) destroy(self.included);\n },\n\n changeUser(newusername, newPassword, remember = false) {\n if (self.validUser) self.logout();\n self.username = newusername;\n self.password = newPassword;\n self.remember = remember;\n },\n\n fetchSubscriptions: flow(function* fetchSubscriptions() {\n try {\n const response = yield self.lmsApi.fetchSubscriptions();\n\n self.subscriptions = response.subscriptions;\n return self.subscriptions;\n } catch (e) {\n return e;\n }\n }),\n\n hasActiveSubscription: (productName) => {\n if (!Array.isArray(self.subscriptions?.subscriptions)) {\n return false;\n }\n\n if (self.subscriptions.subscriptions.length === 0) {\n return false;\n }\n\n if (!productName) {\n return true;\n }\n\n if (!Array.isArray(productName)) {\n productName = [productName];\n }\n\n const productNameLowerCase = productName.map((name) => name.toLowerCase());\n return (\n self.subscriptions.subscriptions.filter((sub) => productNameLowerCase.includes(sub.base_product_title.toLowerCase())).length > 0\n );\n },\n\n sleep: (ms = 100) => new Promise((r) => setTimeout(r, ms))\n }))\n\n // TOAST\n .actions((self) => ({\n resetErrorState() {\n self.state = 'done';\n self.error = null;\n self.modelErrors = [];\n self.errorPage = {};\n self.errorShown = false;\n },\n hideToast() {\n self.isToastvisible = false;\n self.toastStates.pop();\n },\n showToast(props) {\n self.toastStates.push({ ...props, isToastvisible: true });\n self.isToastvisible = true;\n }\n }))\n\n // MARKETINGMESSAGES\n .actions((self) => ({\n /**\n * Get the marketing\n * messages for the given category\n */\n marketingMessagesForCategory(category, position) {\n if (!self.marketing_messages || self.marketing_messages.length < 1) return false;\n\n const filteredMarketingMessages = self.marketing_messages.filter((marketingMessage) => {\n if (!marketingMessage.isRelatedToCategoryName(category)) return false;\n if (marketingMessage.attributes.position !== position) return false;\n return true;\n });\n\n if (filteredMarketingMessages.length < 1) {\n return false;\n }\n\n return filteredMarketingMessages;\n },\n\n /**\n * Get the marketing messages for\n * the given Node ID\n */\n marketingMessagesForCourseNid(courseNid, position) {\n if (!self.marketing_messages || self.marketing_messages.length < 1) return false;\n\n const filteredMarketingMessages = self.marketing_messages.filter((marketingMessage) => {\n if (!marketingMessage.isRelatedToCourseNid(courseNid)) return false;\n if (marketingMessage.attributes.position !== position) return false;\n return true;\n });\n\n if (filteredMarketingMessages.length < 1) {\n return false;\n }\n\n return filteredMarketingMessages;\n }\n }))\n\n // COURSES\n .actions((self) => ({\n setCourseEdit() {\n // if (\n // self.courseEditState === 'done' &&\n // self.courseEdit.course &&\n // self.courseEdit.course.attributes.drupal_internal__nid === parseInt(self.params.courseId)\n // ) {\n // return self.courseEdit.course.attributes.drupal_internal__nid === parseInt(self.params.courseId);\n // }\n self.courseEdit = CourseEdit.create({}, { store: self });\n return null;\n },\n\n // TODO: ❌ async -> should be FLOW function\n async getNewCourseEdit() {\n await self.fetchCourseEdit(false);\n return true;\n },\n\n // TODO: ❌ async -> should be FLOW function\n async getCourseEdit(courseId) {\n if (\n self.courseEditState === 'done' &&\n self.courseEdit.course &&\n self.courseEdit.course.attributes.drupal_internal__nid === courseId\n ) {\n return self.courseEdit.course.attributes.drupal_internal__nid === courseId;\n }\n const courseUUID = self.findCourseByNid(courseId).id;\n // let test = await self.fetchCourseEdit(courseUUID);\n await self.courseEdit.fetchCourseEdit(courseUUID);\n return self.courseEdit.course.attributes.drupal_internal__nid === courseId;\n },\n setTotalCoursesCompleted(value) {\n self.totalCompletedCourses = value;\n return self.totalCompletedCourses;\n }\n }))\n\n // ================== FILTERBAR / TABS =================\n .actions((self) => ({\n showFilter() {\n self.isfilterVisible = !self.isfilterVisible;\n return self.isfilterVisible;\n },\n setFilter(bool) {\n self.isfilterVisible = bool;\n return self.isfilterVisible;\n },\n hideFilter(open) {\n self.isfilterVisible = open;\n return self.isfilterVisible;\n },\n coursesLoaded(value) {\n self.loadingCourses = value;\n return self.loadingCourses;\n },\n startedCoursesLoaded(value) {\n self.startedCourse = value;\n return self.startedCourse;\n },\n // clicked packages\n tabClicked(packageId) {\n return self.clickedTabs.push(packageId);\n },\n setPrevTab(packageId) {\n self.prevTab = packageId;\n return self.prevTab;\n },\n clearTabClicked() {\n self.clickedTabs = [];\n return self.clickedTabs;\n },\n isSearching(value) {\n self.searchingCourses = value;\n return self.searchingCourses;\n }\n }))\n\n // LESSON EDIT\n .actions((self) => ({\n // [ LESSONS ]\n // TODO: ❌ async -> should be FLOW function\n async getLessonEdit(courseId, lessonId) {\n if (self.courseEdit.lessons && self.courseEdit.lessons.find((p) => p.attributes.drupal_internal__nid === lessonId)) {\n return self.courseEdit.lessons.find((p) => p.attributes.drupal_internal__nid === lessonId);\n }\n const courseUUID = self.findCourseByNid(courseId).id;\n await self.fetchCourseEdit(courseUUID);\n return self.courseEdit.lessons.find((p) => p.attributes.drupal_internal__nid === lessonId);\n }\n }))\n\n // FAQ\n .actions((self) => ({\n fetchFaqByLabel: flow(function* fetchFaqByLabel(label) {\n let fetched = null;\n try {\n fetched = yield window.authedClient.get(`feed/faq/${label}`);\n self.faq = fetched.data;\n } catch (e) {\n self.error = e;\n return null;\n }\n return Promise.resolve(fetched);\n })\n }))\n\n // AUTHORS\n .actions((self) => ({\n /**\n * $ AUTHORS\n * Todo: Implement for USER accounts\n */\n async postNewAuthor(newValues) {\n const author = await self.postData(newValues);\n\n return author.attributes.drupal_internal__nid.toString();\n },\n // .AUTHORS:UPDATE (incl upload avatar)\n async patchPerson(entity, newValues) {\n let respFileObj;\n\n const newAvatar = newValues.newAvatar || false;\n const hasAvatar = entity.relationships.field_photo.data || false;\n const currentAvatar = hasAvatar ? cloneDeep(getSnapshot(hasAvatar)) : false;\n\n const endPointField = 'field_photo';\n\n if (newAvatar) {\n delete newValues.newAvatar;\n }\n\n if (newAvatar) {\n respFileObj = await self.uploadImg(entity, newAvatar, endPointField);\n\n self.authorEdit.update(respFileObj, 'photos');\n self.addIncludes(respFileObj);\n if (currentAvatar) await self.deleteData(currentAvatar);\n\n newValues.relationships.field_photo.data = { id: respFileObj.id, type: respFileObj.type };\n }\n const respAuthorObj = await self.patchData(entity, newValues);\n self.addIncludes(respAuthorObj);\n return true;\n }\n }))\n\n // LMS\n .actions((self) => ({\n fetchLmsAccess: flow(function* fetchLmsAccess() {\n if (self.lmsAccess) return self.lmsAccess;\n try {\n const response = yield self.lmsApi.fetchLMSAccess();\n const { data } = response;\n self.lmsAccess = data;\n } catch (error) {\n console.error(error);\n }\n return self.lmsAccess;\n })\n }))\n .views((self) => ({\n get lmsAccessData() {\n return self.lmsAccess;\n }\n }))\n\n // LMS Student detail\n .actions((self) => ({\n fetchStudentDetail: flow(function* fetchStudentDetail(id, startdate, enddate) {\n const response = yield self.lmsApi.fetchLMSStudent(id, startdate, enddate);\n const { data } = response;\n\n self.lmsStudentDetail = data;\n\n return data;\n }),\n clearStudentDetail() {\n self.lmsStudentDetail = {};\n return self.lmsStudentDetail;\n }\n }))\n\n // LMS Course detail\n .actions((self) => ({\n fetchCourseDetail: flow(function* fetchCourseDetail(id) {\n const response = yield self.lmsApi.fetchLMSCourse(id);\n const { data } = response;\n\n self.lmsCourseDetail = data;\n\n return data;\n }),\n clearCourseDetail() {\n self.lmsCourseDetail = {};\n return self.lmsCourseDetail;\n }\n }))\n\n // Clear search\n .actions((self) => ({\n clearSearchParam() {\n // We use this to clear the search param whenever a user searches for a course\n self.searchParam = '';\n self.searchBaseParam = 0;\n self.searchingCourses = false;\n self.searchCoursesFound = 0;\n self.searchSuggestedParam = '';\n self.searchNextAttempt = 1;\n return self.searchingCourses;\n }\n }))\n // trialProduct\n .views((self) => ({\n get isTrialProduct() {\n return self?.product?.free_product === 1;\n },\n get getTrialCourses() {\n return self?.trialCourses || [];\n },\n get trialCourseIds() {\n return self?.trialCourses?.map((course) => course.course_id) || [];\n }\n }));\n\nexport const RootStore = t.compose(FirstStore, CurriculumStore, StoreFetch).named('RootStore');\n","import { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nconst GTMProvider = ({ containerId, children }) => {\n useEffect(() => {\n // Check if the user meets certain conditions\n // GTM script\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.innerHTML = `\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${containerId}');\n `;\n\n // GTM noscript\n const noscript = document.createElement('noscript');\n const iframe = document.createElement('iframe');\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${containerId}`;\n iframe.height = '0';\n iframe.width = '0';\n iframe.style = 'display:none;visibility:hidden';\n\n // Append elements to head and body\n document.head.appendChild(script);\n noscript.appendChild(iframe);\n document.body.appendChild(noscript);\n\n // Cleanup on component unmount\n return () => {\n document.head.removeChild(script);\n document.body.removeChild(noscript);\n };\n // If not an allowed user, do nothing\n }, [containerId]);\n\n return <>{children};\n};\n\nGTMProvider.propTypes = {\n containerId: PropTypes.string,\n children: PropTypes.object.isRequired\n};\n\nexport default GTMProvider;\n","import { observe } from 'mobx';\nimport { useRouterStore } from 'mobx-state-router';\nimport { debounce } from 'lodash';\nimport { useStore } from '../../hooks';\n\n// E4-512 / EWISE-36; Session ping.\n// Ping back end app while navigation through the app.\n//\n// Note: we're only checking route changes\n// and only ping once every 60 seconds.\n// A full page reload will also trigger the ping\n// in order to ensure a valid session is present.\nconst SessionPing = () => {\n const store = useStore();\n const router = useRouterStore();\n\n // Minimum time between pings.\n const intervalTime = (1000 * 60);\n\n // The debounced session debounced ping.\n // Ping the ping API endpoint and trigger (front end)\n // logout if back end session is expired.\n const doSessionPing = debounce(async () => {\n const { host} = window.location;\n const authDomain = window.clientInstance.authorizationDomain;\n const endpoint = 'ewapi/session/ping';\n const url = new URL(`${authDomain}/${endpoint}`);\n\n // Prevent session ping on Amplify domain when autDomain does not match.\n if (host.includes('.amplifyapp.com') && !authDomain.includes('.amplifyapp.com')) {\n return;\n }\n\n const response = await fetch(url.href, { credentials: 'include' }).catch(error => console.error(error));\n if (!response?.ok && response?.status === 403) {\n store.logout(true);\n }\n }, intervalTime, {\n 'leading': true,\n 'trailing': false,\n 'maxWait': intervalTime,\n });\n\n // Initial session ping.\n doSessionPing();\n\n // Session ping on route change.\n observe(router, () => {\n doSessionPing();\n });\n\n return null;\n}\n\nexport default SessionPing;","/* Core */\nimport PropTypes from 'prop-types';\nimport { useRef, useState } from 'react';\nimport { RouterView, RouterContext } from 'mobx-state-router';\nimport { Toast } from 'components';\n\nimport { StoreProvider } from 'state/ContextStore';\nimport { RootStore } from 'state/RootStore';\nimport makeInspectable from 'mobx-devtools-mst';\n\nimport { ModalProvider } from './ModalProvider';\nimport GTMProvider from './GTMProvider';\nimport { setGtmId } from '../helpers/Helpers';\nimport { injectStore } from '../state/api/AuthenticatedClient';\nimport SessionPing from '../components/common/SessionPing';\n\nconst WithStoreProvided = ({ routes, viewMap, intitialRouteName }) => {\n const store = useRef(null);\n\n if (!store.current) {\n store.current = RootStore.create({}, { routes, intitialRouteName });\n\n makeInspectable(store.current);\n\n // for testing purpose\n window.store = store.current;\n }\n\n const [routerStoreHasLoaded, setRouterStoreHasLoaded] = useState(false);\n\n if (!routerStoreHasLoaded && store.current.routerStore) {\n const queryString = new URLSearchParams(window.location.search);\n\n // If the backend initiates with state,\n // we route there.\n if (queryString.has('state') && queryString.get('state') !== '' && queryString.get('state') !== null) {\n // eslint-disable-next-line no-restricted-globals\n location.href = queryString.get('state');\n }\n // if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n // return createRouterState('selectProduct', { params: { user: store.login.userName } });\n // }\n setRouterStoreHasLoaded(true);\n }\n\n injectStore(store.current);\n\n return (\n \n \n \n \n {routerStoreHasLoaded && (\n \n \n \n \n )}\n \n \n \n );\n};\nexport default WithStoreProvided;\n\nWithStoreProvided.propTypes = {\n routes: PropTypes.array,\n viewMap: PropTypes.object,\n intitialRouteName: PropTypes.string\n};\n","/* eslint-disable react-hooks/exhaustive-deps,prettier/prettier */\nimport PropTypes from 'prop-types';\n\n/**\n * This middleware is for determining whether you are entering\n * the application through a protected route. once the application has\n * loaded these checks are not performed anymore\n *\n * @param props\n * @return {JSX.Element}\n * @constructor\n */\nconst ProtectedRoutesMiddleware = ({ children, LoaderComponent }) => {\n\n /**\n * these are the protected routes that\n * should be handled by the backend\n */\n const protectedRoutes = [\n new RegExp('/user/trial/activate(?:/(.+))?'),\n new RegExp('/user/reset/[0-9]+/[0-9]+/.+')\n ];\n\n let routeFound = false;\n protectedRoutes.forEach((routeregex) => {\n const currLocation = window.location.pathname;\n if (routeFound === false && routeregex.exec(currLocation) !== null) {\n routeFound = true;\n window.location.href = process.env.REACT_APP_JSONAPI + currLocation;\n }\n })\n\n return (\n <>\n {!routeFound && children}\n {routeFound && }\n \n );\n};\n\nProtectedRoutesMiddleware.propTypes = {\n children: PropTypes.object.isRequired,\n LoaderComponent: PropTypes.any\n};\n\nexport default ProtectedRoutesMiddleware;\n","import { CourseEdit } from 'state/models/CourseEdit';\nimport { createRouterState } from 'mobx-state-router';\n\n// GET EWAPI -------------------------------------------------------\nexport const getEwapi = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const fromRoute = fromState.routeName;\n const isInitial = fromRoute === '__initial__';\n const newPackageId = fromState.params.packageId !== toState.params.packageId;\n const newProductId = fromState.params.product !== toState.params.product;\n\n const productId = toState.params.product;\n const { packageId } = toState.params;\n\n if (isInitial || newPackageId || newProductId) {\n store.coursesLoaded(false);\n return store\n .fetchData(productId, packageId)\n .then((response) => {\n store.coursesLoaded(true);\n if (response?.data?.error) return Promise.resolve(response);\n return Promise.resolve();\n })\n .catch(() => {\n store.setState('error');\n });\n }\n return Promise.resolve();\n};\n\n//\n// GET EWAPI -------------------------------------------------------\nexport const getEwapiForEditors = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const productId = store?.login?.prefBaseProduct || localStorage.getItem('latestPrefBaseProduct') || 0;\n const packageId = 0;\n if (productId) {\n store.coursesLoaded(false);\n return store\n .fetchData(productId, packageId)\n .then((response) => {\n store.coursesLoaded(true);\n if (response?.data?.error) return Promise.resolve(response);\n return Promise.resolve();\n })\n .catch(() => {\n store.setState('error');\n });\n }\n return Promise.resolve();\n};\n\n// RELOAD LESSON FROM COURSE ADMIN IN LESSONPLAY ----------------------\nexport const reloadAdminLesson = async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const fromRoute = fromState.routeName;\n const isReload = fromRoute === '__initial__';\n if (isReload) {\n try {\n await getEwapiForEditors(fromState, toState, routerStore);\n const { data: course } = await store.lmsApi.fetchIt('course', '', toState.params.packageId);\n await createEditStore(fromState, toState, routerStore);\n const newEwapiCourse = store.courseEdit.convertJsonCourseToEwapiCourse(course.data);\n store.courses.addNewCourse(newEwapiCourse);\n } catch (e) {\n console.error('reloadAdminLesson ERROR:', e);\n }\n }\n};\n\n// GET EWAPI -------------------------------------------------------\nexport const specialAccessGetPackages = (fromState, toState, routerStore) => {\n const { params } = toState;\n const { store } = routerStore.options;\n //\n const isInit = store.hasSubscriptions === 'init';\n const fromRoute = fromState.routeName;\n const isInitial = fromRoute === '__initial__';\n //\n const isSpecialAccessRouteName = toState.routeName.includes('specialAccess');\n const productId = isSpecialAccessRouteName ? 0 : params.product;\n const packageId = isSpecialAccessRouteName ? 0 : params.packageId;\n\n if (isInitial || isInit) {\n store.coursesLoaded(false);\n return store\n .fetchData(productId, packageId)\n .then((response) => {\n store.coursesLoaded(true);\n if (response?.data?.error) return Promise.resolve(response);\n return Promise.resolve();\n })\n .catch(() => {\n store.setState('error');\n });\n }\n return Promise.resolve();\n};\n\n// GET SPECIALACCESS COURSES ---------------------------------------\nexport const getSpecialAccessCourses = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store\n .fetchSpecialAccessCourses()\n .then(() => {\n store.coursesLoaded(true);\n\n return Promise.resolve();\n })\n .catch(() => {\n store.setState('error');\n routerStore.goTo('errorPage');\n });\n};\n\n// CREATE EDIT STORE -----------------------------------------------\nexport const createEditStore = async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n if (store.courseEditState === 'done') return;\n try {\n await store.setCourseEdit(CourseEdit.create({}, { store }));\n } catch (e) {\n console.error('CourseEdit error', e);\n }\n};\n\n// GET PROFILE -------------------------------------------------------\nexport const getProfile = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.fetchUser().catch(() => {\n store.setState('error');\n routerStore.goTo('errorPage');\n });\n};\n\n// GET CERTIFICATES -------------------------------------------------------\nexport const getCertificates = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.fetchUserCourseResults().catch(() => {\n store.setState('error');\n routerStore.goTo('errorPage');\n });\n};\n\n/**\n * Routing guard to check if the current session is\n * authenticated or not\n *\n * @param fromState\n * @param toState\n * @param routerStore\n * @return {Promise}\n */\n// CHECK USER SIGNED IN ===================================================\nexport const checkUserSignedIn = (fromState, toState, routerStore) =>\n new Promise((resolve, reject) => {\n const { store } = routerStore.options;\n\n //\n //\n /**\n * Note to other devs\n * (It is currently impossible to reach this part of the app without valid credentials)\n * so we dont have to have logic bouncing unauthed users anymore\n */\n if (store.state === 'done') {\n resolve();\n }\n if (store.state === 'pending' || store.state === 'init') {\n // Go try to fetch data if credentials are present\n\n let prefProductId = '0';\n if (store.isEwiseUser && store.hasPreferredBaseproduct) {\n prefProductId = store.preferredBaseproduct;\n }\n\n if (store.getPrefProduct() > 0) {\n prefProductId = store.getPrefProduct(); // This is to prevent wrong product on refresh my account page\n }\n\n store\n .fetchData(prefProductId, 0)\n .then(() => {\n store.coursesLoaded(true);\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n }\n });\n\n// PREPARE COURSE VIEW ====================================================\nexport const prepareCourseView = async (fromState, toState, routerStore) => {\n try {\n await checkUserSignedIn(fromState, toState, routerStore); // If rejected (throw) stop and return to router\n } catch (e) {\n return e;\n }\n return null;\n};\n\nexport const ewiseUserHasPrefBaseproduct = (routerStore) => {\n const { store } = routerStore.options;\n if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n return createRouterState('selectProduct', { params: { user: store.login.userName } });\n }\n return null;\n};\n\n/**\n *\n * @param {*} fromState\n * @param {*} toState\n * @param {*} routerStore\n * @param {string[]} requiredSubscriptions array of subscription names\n * @returns\n */\nexport const checkSubscription = async (fromState, toState, routerStore, requiredSubscriptions = []) => {\n const { store } = routerStore.options;\n\n if (!store.hasActiveSubscription(requiredSubscriptions)) {\n store.setState('init');\n return createRouterState('home');\n }\n\n return null;\n};\n\n//\n// GET EWAPI SEARCH -------------------------------------------------------\n/**\n * Perform EWAPI search based on route state changes.\n * @param {Object} fromState - Previous route state.\n * @param {Object} toState - New route state.\n * @param {Object} routerStore - Router store containing options.\n * @returns {Promise|null} Promise resolving when search completes or null if no action needed.\n */\nexport const getEwapiSearch = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n\n // Extract old and new parameters from route states\n const oldSearchParam = fromState.params.searchParam;\n const oldBaseProductId = parseInt(fromState.params.baseProductId);\n const oldSearchAttempt = parseInt(fromState.params.searchAttempt);\n\n const { searchParam, baseProductId, searchAttempt } = toState.params;\n\n // Determine if parameters have changed\n const hasParamChanged = oldSearchParam !== searchParam;\n const hasBaseProductIdChanged = oldBaseProductId !== parseInt(baseProductId);\n const hasSearchAttemptChanged = oldSearchAttempt !== parseInt(searchAttempt);\n\n // If any parameter has changed, initiate search\n if (hasParamChanged || hasBaseProductIdChanged || hasSearchAttemptChanged) {\n store.isSearching(true);\n\n // Fetch search data from store\n return store\n .fetchSearchData(searchParam, baseProductId, searchAttempt)\n .then(() => {\n store.isSearching(false);\n return null; // Successful search, return null (no further action)\n })\n .catch((error) => {\n window.console.error('Error fetching search data:', error);\n return null; // Return null to propagate the error further if needed\n });\n }\n\n // Return null if no parameters have changed (no action needed)\n return null;\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport { checkUserSignedIn } from 'state/RoutesActions';\n\nexport const homeRoute = {\n name: 'home',\n pattern: '/',\n meta: { title: `Home | ${ThemeBrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n // check if user is logged is EwiseUser and has no preferred baseproduct\n if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n return createRouterState('selectProduct', { params: { user: store.login.userName } });\n }\n // Get User Courses from ewapi if not already done\n try {\n if (store.state !== 'done') await checkUserSignedIn(fromState, toState, routerStore);\n } catch (err) {\n return createRouterState({ routeName: 'login' });\n }\n // redirect to course overview if user has courses\n if (store.courses) {\n const productName = store.baseProduct.unique_name;\n return createRouterState('courseOverview', {\n params: { product: store.selectedProductId.toString(), productName, packageId: store.selectedPackageId.toString() }\n });\n }\n // redirect to special access if user has special access but no courses\n if (!store.courses && store.login.hasSpecialAccess) {\n return createRouterState('specialAccess', {\n params: {}\n });\n }\n // redirect to profile if user has no courses and no special access\n return createRouterState('profile', {\n params: {}\n });\n }\n};\n","/* eslint-disable no-unused-expressions */\nimport { getEwapi } from 'state/RoutesActions';\nimport { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\n// http://elearn4.local.pe-academy.nl:3000/accountant/38/49/course/62738/De-kern-van-de-NV-COS-I#Information\n\nexport const defCourseIntroductionRoute = {\n name: 'defCourseIntroduction',\n pattern: '/:productName/:product/:packageId/course/:courseId/:title',\n altPatterns: ['/:productName/:product/:packageId/course/:courseId'],\n meta: { title: `%%introduction.metatitle%% | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { productName, product, packageId, courseId } = toState.params;\n const { store } = routerStore.options;\n\n if (productName === 'special') {\n return createRouterState('specialAccessCourseIntroduction', {\n params: { sa: 'my', productName, product, packageId, courseId, title: 'test' }\n });\n }\n if (productName === 'redactie') {\n return createRouterState('defEditCourse', {\n params: { def: 'red', package: '00', packageNid: product, containerNid: '00', courseuuid: packageId }\n });\n }\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n // load courses if not already done\n try {\n await getEwapi(fromState, toState, routerStore);\n if (store.isMicrolearning) {\n const currentCourse = store.courses.courses.find((course) => course.course_id === +courseId);\n\n return createRouterState('defLessonPlay', {\n params: {\n product,\n productName,\n packageId,\n courseId: courseId.toString(),\n lessonId: currentCourse.lessons[0].nid?.toString(),\n pageNo: store?.lesson_results?.getLessonPageIdMax(+currentCourse.lessons[0].nid).toString() || '1'\n }\n });\n }\n return null;\n } catch (e) {\n return e;\n }\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseId } = toState.params;\n await store.courseResults.updateCourseResultbyNid(Number(courseId));\n store.courseResults.isCourseFinished(Number(courseId)) && !store.isEwiseUser && store.subscriptions.updateSubscription();\n }\n};\nexport const CourseIntroductionRoute = {\n name: 'courseIntroduction',\n pattern: '/:productName/:product/:packageId/course/:courseId/:title',\n altPatterns: ['/:productName/:product/:packageId/course/:courseId'],\n meta: { title: `%%introduction.metatitle%% | ${ThemeBrandTitle()}` },\n beforeEnter: getEwapi,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseId } = toState.params;\n await store.courseResults.updateCourseResultbyNid(Number(courseId));\n store.courseResults.isCourseFinished(Number(courseId)) && !store.isEwiseUser && store.subscriptions.updateSubscription();\n }\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapi } from 'state/RoutesActions';\n\n/**\n * CourseOverviewRoute\n * @type {{name: string, pattern: string, title: string, beforeEnter: (function(*, *, *): Promise)}}\n */\nexport const courseOverviewRoute = {\n name: 'courseOverview',\n pattern: '/:productName/:product/:packageId/cursusoverzicht',\n meta: { title: `%%courseoverview.title%% | ${ThemeBrandTitle()}` },\n // eslint-disable-next-line consistent-return\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n // update course results when returning directly from lessonPlay or feedback (skipping courseIntroduction)\n // - microlearnings return directly to courseoverview\n const routesFromLessonPlay = ['lessonPlay', 'feedback', 'terms'];\n if (routesFromLessonPlay.includes(fromState.routeName)) {\n await store.courseResults.updateCourseResultbyNid(Number(fromState.params.courseId));\n // eslint-disable-next-line no-unused-expressions\n store.courseResults.isCourseFinished(Number(fromState.params.courseId)) &&\n !store.isEwiseUser &&\n store.subscriptions.updateSubscription();\n }\n const selPackageId = store.selectedPackageId.toString();\n const fromPackageId = fromState.params.packageId === undefined ? selPackageId : fromState.params.packageId.toString();\n const toPackageId = toState.params.packageId.toString();\n\n // E4-625 Redirect E-WISE users form product to base product.\n if (store.isEwiseUser && toState.queryParams?.bp && toState.queryParams?.bp !== toState.params?.product) {\n toState.params.product = toState.queryParams.bp;\n delete toState.queryParams.bp;\n }\n\n // Empty the search params\n store.clearSearchParam();\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n //\n if (toPackageId === '0' || selPackageId !== toPackageId || toPackageId !== fromPackageId || fromState.routeName !== toState.routeName) {\n const response = await getEwapi(fromState, toState, routerStore);\n if (response?.data?.error) return createRouterState('home');\n }\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapi } from 'state/RoutesActions';\n\nexport const defCourseOverviewRoute = {\n name: 'defCourseOverview',\n pattern: '/:productName/:product/cursusoverzicht',\n meta: { title: `Cursusoverzicht | ${ThemeBrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => getEwapi(fromState, toState, routerStore)\n};\n","import { getEwapi } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const teacherDetailRoute = {\n name: 'teacherDetail',\n meta: { title: `%%teachers.title.bio%% | ${ThemeBrandTitle()}` },\n pattern: '/:productName/:product/:packageId/teachers/:teacherId',\n beforeEnter: getEwapi\n};\n","import { getEwapi } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const teachersOverviewRoute = {\n name: 'teachersOverview',\n meta: { title: `%%teachers.title.teachers%% | ${ThemeBrandTitle()}` },\n pattern: '/:productName/:product/:packageId/teachers',\n beforeEnter: getEwapi,\n onEnter(fromState, toState, routerStore) {\n const { author } = toState.queryParams;\n const authorName = author || '';\n const { store } = routerStore.options;\n store.authors?.searchByName(authorName);\n }\n};\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\n// import Icon from '@mui/material/Icon';\nimport EditIcon from '@mui/icons-material/Edit';\n// import IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport Button from '@mui/material/Button';\n\nconst EditWidgetButton = (props) => {\n const { store, id } = props;\n if (!store.canSeeAnswers) return null;\n const isLessonPlay = !!store.lessonPlay;\n const canEdit = store.canEditCourse;\n\n const action = 'edit';\n\n const onClick = () => {\n store.lessonPlay.toggleWidgetMenu(action, id);\n };\n\n return (\n isLessonPlay &&\n canEdit && (\n \n }\n >\n Edit widget\n \n \n )\n );\n};\n\nEditWidgetButton.propTypes = {\n id: PropTypes.string,\n lessonPlay: PropTypes.any,\n store: PropTypes.any\n};\n\nexport default observer(EditWidgetButton);\n","import { useEffect, useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport { makeStyles } from '@mui/styles';\nimport { Button, FormControl, FormHelperText, FormLabel } from '@mui/material';\nimport { rawHTML } from 'helpers/Helpers';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n widgetForm: {\n margin: '0px 0px'\n },\n formControl: {\n width: '100%',\n margin: theme.spacing * 3\n // paddingBottom: '10px'\n },\n group: {\n margin: `${theme.spacing}px 0`\n },\n notActive: {\n color: '#e25500fc',\n fontWeight: 'bold',\n textAlign: 'center',\n paddingTop: `38px`,\n marginBottom: '1.3em',\n fontSize: '0.8em',\n lineHeight: '1.2'\n }\n}));\n\n// Initialisation of a widget, handle submit and share JSX code\nfunction useWidget(props) {\n const { store, widget, widgetCode } = props;\n const { lessonPlay } = store;\n // -- hooks\n const node = useRef(null);\n const isDisabled = useRef(false);\n const classes = useStyles();\n //\n // -- PAGE ID MAX\n const { pageNo } = lessonPlay;\n const { page_id_max: pageIdMax } = lessonPlay;\n const isPageMax = pageNo === pageIdMax;\n // -- INIT\n const isQuestion = widget.attributes.widget_type.includes('Question');\n // Show greyout without feedback\n const showFeedback1 = store?.lessonPlay?.lesson?.attributes['1answer_nofeedback'] || false;\n // Show color without feedback\n const showFeedback2 = store?.lessonPlay?.lesson?.attributes['1answer_visualfeedback'] || false;\n // Get weight off the widget\n const widgetWeight = Number(widget.attributes?.weight) > 0;\n\n // ! DETERMINE IF FEEDBACK IS SHOWN\n let detectFeedback = true;\n if (showFeedback1 || showFeedback2) {\n detectFeedback = false;\n if (!widgetWeight) {\n detectFeedback = true;\n }\n }\n\n // Allowed retries to do the widget\n const allowedTries = lessonPlay.allowedTries(widget);\n //\n const mappedPageWidgets = lessonPlay.mapPageWidgets2QwAnswers();\n const mappedQuestions = mappedPageWidgets.filter((pw) => pw.isQuestion);\n const mappedNotCompleted = mappedQuestions.filter((pw) => !pw.isCompleted);\n const firstItem = mappedNotCompleted.length > 0 && mappedNotCompleted[0];\n\n const onPageMax = () => {\n if (!isQuestion) return false;\n return firstItem?.qwId !== widget.id;\n };\n\n //\n const canNotAnswerQuestion = () => {\n if (pageNo === 0 && store.canEditCourse) return false;\n\n if (!isQuestion) return false;\n\n if (!isPageMax) return true; // other page than page max id => true\n\n if (isPageMax) return onPageMax(); // on page max\n\n return false;\n };\n const mayNotAnswerQuestion = canNotAnswerQuestion();\n\n isDisabled.current = mayNotAnswerQuestion;\n //\n //\n const question = store.lessonPlay.getLessonResultQuestion(widget);\n\n let questionResultClass;\n\n if (!question.tries) {\n questionResultClass = 'spa-form-default';\n // backgroundColor = 'transparent';\n } else if (question.last_correct) {\n // backgroundColor = '#eefcde';\n questionResultClass = 'spa-form-correct';\n } else {\n // backgroundColor = '#fcf4f4';\n questionResultClass = 'spa-form-incorrect';\n }\n if (widget.attributes.widget_type.includes('Open')) {\n questionResultClass = 'spa-form-open';\n }\n // set class of cmeVariable (grandparent) node\n useEffect(() => {\n if (node.current) {\n const cmeVariable = node.current.closest('.cmeVariable');\n if (cmeVariable) {\n cmeVariable.classList.add(questionResultClass);\n\n if (cmeVariable.classList.contains('spa-form-incorrect') && questionResultClass === 'spa-form-correct') {\n cmeVariable.classList.remove('spa-form-incorrect');\n }\n if (mayNotAnswerQuestion || cmeVariable.classList.contains('spa-form-correct')) {\n cmeVariable.classList.add('spa-form-disabled');\n isDisabled.current = true;\n }\n if (showFeedback1) {\n cmeVariable.classList.remove('spa-form-incorrect');\n cmeVariable.classList.remove('spa-form-correct');\n }\n }\n }\n }, [node, questionResultClass, mayNotAnswerQuestion, isDisabled, showFeedback1]);\n\n useEffect(() => {\n if (node.current) {\n const cmeVariable = node.current.closest('.cmeVariable');\n if (cmeVariable) {\n if (cmeVariable.children[0]?.classList.contains('EwVideo')) {\n cmeVariable.classList.add('video_widget');\n }\n const isSpan = cmeVariable?.children[0]?.closest('span');\n if (isSpan?.children[0]?.classList.contains('EwVideo')) {\n cmeVariable.classList.add('video_widget');\n }\n Array.from(cmeVariable.children).forEach((child) => {\n if (child?.classList?.contains('EwHTML')) {\n cmeVariable.classList.add('html_widget');\n }\n });\n }\n }\n }, [node]);\n\n const inProgress = useRef(false);\n\n // Share jsx\n const PlayWidget = observer((localProps) => {\n const { validateAnswer, showFeedback, children } = localProps;\n\n const isReflect = widget?.attributes?.options?.type === 'Reflect';\n const buttonLabel = isReflect ? 'lesson.checkReflect' : 'lesson.checkQuestion';\n\n // CHECK ANSWER => ON SUBMIT FORM\n const checkAnswer = (event) => {\n event.preventDefault();\n const answer = validateAnswer();\n\n if (!answer) {\n // const toastAnswerText = widget?.attributes?.widget_type === 'Open Question' ? 'lesson.noAnswer1' : 'lesson.noAnswer';\n const toastAnswerText = {\n 'Open Question': 'lesson.noAnswer1',\n 'Match Question': 'lesson.noAnswerMatch',\n 'Check Question': 'lesson.noAnswerMultiple',\n default: 'lesson.noAnswer'\n };\n store.showToast({\n message: window.i18next.t(toastAnswerText[widget?.attributes?.widget_type] || toastAnswerText.default),\n variant: 'error',\n vertical: 'bottom',\n horizontal: 'right'\n });\n return;\n }\n\n if (inProgress.current) return;\n inProgress.current = true;\n store.lessonPlay.saveAnswer(widget, answer).then(() => {\n inProgress.current = false;\n });\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n = allowedTries || !!question.last_correct}\n ref={node}\n >\n
\n \n \n {!widgetCode?.match('video') && rawHTML(widget.attributes.question)}\n \n {children}\n {widget.attributes.helpText && {widget.attributes.helpText}}\n \n {mayNotAnswerQuestion && !question.correct && question.tries < allowedTries && (\n // eslint-disable-next-line react/no-danger\n
\n )}\n {detectFeedback && showFeedback()}\n {isQuestion && question.tries < allowedTries && !question.last_correct && (\n \n {window.i18next.t(buttonLabel)}\n \n )}\n
\n \n );\n });\n\n // return object\n return {\n question,\n widget,\n allowedTries,\n PlayWidget,\n answerDisabled: mayNotAnswerQuestion\n };\n}\n\nexport default useWidget;\n","export function seededShuffle(array, seed) {\n function seededRandom(max, min) {\n max = max || 1;\n min = min || 0;\n seed = (seed * 9301 + 49297) % 233280;\n const rnd = seed / 233280;\n return min + rnd * (max - min);\n }\n\n const shuffledArray = array.slice();\n\n for (let i = shuffledArray.length - 1; i > 0; i--) {\n const j = Math.floor(seededRandom() * (i + 1));\n [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];\n }\n\n return shuffledArray;\n}\n","/* eslint-disable react/no-danger */\nimport { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { makeStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport { LinearProgress } from '@mui/material';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { useTranslation } from 'react-i18next';\nimport { rawHTML } from 'helpers/Helpers';\nimport useWidget from './useWidget';\nimport { seededShuffle } from './lib/seededShuffle';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n margin: `${theme.spacing}px 0`\n }\n}));\n\nconst RadioQuestion = (props) => {\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const classes = useStyles();\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n\n const { options, feedback, question: widgetAttributeQuestion } = widget.attributes;\n\n const rotatingAnswers = store.lessonPlay.lesson.attributes.rotating_answers;\n\n const [value, setValue] = useState(question.last_response ?? false);\n\n const createSeed = () => {\n const seedLessonResult = parseInt(store.lessonPlay.lesson_result.id.replace(/[^\\d]/g, ''), 10);\n const seedWidgetId = parseInt(widget.id.replace(/[^\\d]/g, ''), 10);\n return seedLessonResult + seedWidgetId;\n };\n\n const shuffledOptions = rotatingAnswers ? seededShuffle(options, createSeed()) : options;\n\n const canSeeAnswers = store?.canSeeAnswers;\n\n const validateAnswer = () => {\n if (!value) {\n return false;\n }\n\n const { correct } = options.find((optionItem) => optionItem.value === value);\n\n return { value, correct };\n };\n\n const handleChange = (event) => {\n setValue(event.target.value);\n };\n\n const radioOptions = () => {\n const disabled = answerDisabled || question.tries >= allowedTries || question.last_correct;\n\n return shuffledOptions.map((option) => {\n const checked = value === option.value;\n\n return (\n }\n value={option.value}\n label={\n \n {rawHTML(option.label)}\n
\n }\n disabled={disabled}\n />\n );\n });\n };\n\n // show feedback after an answer\n const showFeedback = () => {\n if (!question.tries) return null;\n const respAnswer = question.last_correct ? t('Correct') : t('Incorrect');\n\n const chosenOption = options.find((option) => option.value === question.last_response);\n\n return (\n
\n {/* title: shows if answer is wrong or right */}\n \n\n {/* show specific feedback of the choosen answer(s) after 1st and 2nd try */}\n {chosenOption.feedback &&
{rawHTML(chosenOption.feedback)}
}\n\n {/* show correct feedback after 2nd wrong answer */}\n {showCorrectFeedback()}\n\n {/* feedback = general feedback => widget.attributes.feedback */}\n {/* Shouldn't be used for radio and check questions */}\n {/* workaround when feedback is only

*/}\n {feedback.length > 15 &&
{rawHTML(feedback)}
}\n\n {question.tries < allowedTries && !question.last_correct && (\n
\n )}\n
\n );\n };\n\n // On second wrong answer show correct feedback (works for multiple question types)\n function showCorrectFeedback() {\n if (question.tries < allowedTries || question.last_correct) return null;\n return options\n .filter((option) => option.correct)\n .map((option, _index) => (\n
\n {t('feedback')}\n
\n
\n ));\n }\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n {radioOptions()}\n \n \n \n );\n};\n\nRadioQuestion.propTypes = {\n // eslint-disable-next-line react/no-unused-prop-types\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n question: PropTypes.object,\n // eslint-disable-next-line react/no-unused-prop-types\n props: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(RadioQuestion);\n","/* eslint-disable react/no-danger */\nimport { useEffect, useRef, useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { makeStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport { Box, LinearProgress } from '@mui/material';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { useTranslation } from 'react-i18next';\nimport { rawHTML } from 'helpers/Helpers';\nimport { seededShuffle } from 'pages/play/questions/lib/seededShuffle';\nimport useWidget from './useWidget';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n margin: `${theme.spacing}px 0`,\n paddingBottom: '15px'\n }\n}));\nconst bg = {\n false: 'darkred',\n true: 'darkgreen'\n};\n\nconst CheckQuestion = (props) => {\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n //\n const [isValidated, setIsValidated] = useState(false);\n const classes = useStyles();\n //\n const dontShowBg = window.store?.getFeedback1() || false;\n const rotatingAnswers = store.lessonPlay.lesson.attributes.rotating_answers;\n\n const widgetAttr = widget.attributes;\n\n const [values, setValues] = useState([]);\n\n const touched = useRef(!!question.last_response);\n\n const canSeeAnswers = store?.canSeeAnswers;\n\n useEffect(() => {\n const originalOptions = widgetAttr.options.map((option, index) => ({\n originalOption: option,\n apiIndex: index,\n label: option?.label\n }));\n\n const lastResponseResult = question.last_response\n ? question.last_response.split(',').map((value) => value === '1')\n : Array(widgetAttr.options.length).fill(false);\n\n const parsedOptions = originalOptions.map((option) => ({\n ...option,\n\n lastChecked: lastResponseResult[option.apiIndex],\n checked: lastResponseResult[option.apiIndex]\n }));\n\n const createSeed = () => {\n const seedLessonResult = parseInt(store.lessonPlay.lesson_result.id.replace(/[^\\d]/g, ''), 10);\n const seedWidgetId = parseInt(widget.id.replace(/[^\\d]/g, ''), 10);\n return seedLessonResult + seedWidgetId;\n };\n\n const shuffledOptions = rotatingAnswers ? seededShuffle(parsedOptions, createSeed()) : parsedOptions;\n\n setValues(shuffledOptions);\n }, [\n question.last_response,\n question.tries,\n rotatingAnswers,\n store.lessonPlay.lesson_result.id,\n widget.id,\n widgetAttr.options,\n widgetCode\n ]);\n\n const validateAnswer = () => {\n if (!values.map((option) => option.checked).includes(true)) {\n return false;\n }\n\n const userIsIncorrectAnswers = values\n .map((option) => ({ ...option, userIsCorrect: option.originalOption.correct === option.checked }))\n .filter((option) => !option.userIsCorrect);\n\n const responseValues = values\n .sort((a, b) => a.apiIndex - b.apiIndex)\n .map((option) => (option.checked ? '1' : '0'))\n .join(',');\n\n setIsValidated(true);\n return { value: responseValues, correct: userIsIncorrectAnswers.length < 1 };\n };\n\n const handleChange = (option) => {\n const originalValuesCopy = [...values];\n const listIndex = originalValuesCopy.findIndex((originalOption) => originalOption.apiIndex === option.apiIndex);\n\n originalValuesCopy[listIndex] = { ...option, checked: !option.checked };\n\n setValues(originalValuesCopy);\n };\n\n const checkOptions = () => {\n const disabled = answerDisabled || question.tries >= allowedTries || question.last_correct;\n\n return values.map((option) => {\n const { lastChecked } = option;\n const isChecked = option.checked;\n const showColor = isChecked && lastChecked;\n const getColor = showColor && option.originalOption.correct ? 'success' : 'error';\n const setColor = showColor ? getColor : 'default';\n return (\n handleChange(option)}\n value={option.originalOption.value}\n checked={option.checked}\n color={setColor}\n disabled={disabled}\n sx={{\n '&.Mui-checked': {\n // eslint-disable-next-line no-nested-ternary\n color: isValidated && question.last_response ? (dontShowBg ? 'primary' : bg[option.correct]) : 'primary'\n }\n }}\n />\n }\n label={\n
\n {rawHTML(option.label)}\n
\n }\n />\n );\n });\n };\n\n // show feedback after an answer\n const showFeedback = () => {\n if (!question.tries) return null;\n\n return (\n
\n {!question.last_correct && {t('Incorrect')}}\n {question.last_correct && {t('Correct')}}\n\n {/* 1. show specific feedback after 1st try */}\n {showSpecificFeedback()}\n\n {/* 2. show correct feedback / answer */}\n {showCorrectFeedback()}\n\n {/* 2. show globalfeedBack after 2nd try */}\n {showGlobalFeedback()}\n\n {/* Text to try again afyer 1st attempt */}\n {question.tries < allowedTries && !question.last_correct && (\n
\n )}\n
\n );\n };\n\n function showGlobalFeedback() {\n if ((question.tries < allowedTries && !question.last_correct) || !widgetAttr.feedback) return null;\n /* globalFeedback => widget.attributes.feedback \n - shouldn't be used/filled for radio and check questions\n */\n // workaround when feedback is filled but only contains

(default from editor widget) */\n if (widgetAttr?.feedback.length < 15) return null;\n // Any othercase the feedback is shown as italic text\n return (\n \n
{rawHTML(widgetAttr.feedback)}
\n
\n );\n }\n\n function showSpecificFeedback() {\n const specificFeedback = values.reduce((html, option, index) => {\n if (option.lastChecked) {\n html.push(\n \n {rawHTML(option.originalOption.feedback)}\n \n );\n }\n return html;\n }, []);\n return <>{specificFeedback};\n }\n\n // On correct answer or after max_retries show correct feedback (works for multiple question types)\n function showCorrectFeedback() {\n if (question.tries < allowedTries || question.last_correct) return null;\n\n const correctFeedback = values.reduce((html, option, index) => {\n if (option.originalOption.correct) {\n html.push({rawHTML(option.originalOption.feedback)});\n }\n return html;\n }, []);\n\n return (\n <>\n {t('feedback')}\n {correctFeedback}\n \n );\n }\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n {checkOptions()}\n \n \n );\n};\n\nCheckQuestion.propTypes = {\n // eslint-disable-next-line react/no-unused-prop-types\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(CheckQuestion);\n","import { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Input from '@mui/material/TextField';\nimport { Box } from '@mui/material';\n\n/*\nIn summary, the Open component is a text input field that allows users to enter open-ended text responses. \nIt provides options for customization and includes features like character limits. \nThe component is designed to be easily integrated into different parts of an application and offers internationalization support for messages and labels.\n*/\nconst Open = (props) => {\n const { value, handleInput, disabled } = props;\n\n const [inputValue, setInputValue] = useState(value);\n\n const inputProps = { type: 'text', label: 'Antwoord', rows: '4', margin: 'normal', variant: 'outlined' };\n\n const handleChange = (event) => {\n handleInput(event.target.value);\n setInputValue(event.target.value);\n };\n\n return (\n \n \n \n );\n};\n\nOpen.propTypes = {\n value: PropTypes.string,\n handleInput: PropTypes.func,\n disabled: PropTypes.bool\n};\n\nexport default observer(Open);\n","/* eslint-disable react/no-danger */\nimport { useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Open from 'components/widgets/Open';\nimport { LinearProgress } from '@mui/material';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { rawHTML } from 'helpers/Helpers';\nimport useWidget from './useWidget';\n\nconst OpenQuestion = (props) => {\n const { store, widgetCode } = props;\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n\n const widgetAttr = widget.attributes;\n const touched = useRef(!!question.last_response);\n const lastResponse = question.last_response ? question.last_response : '';\n const isDisabled = answerDisabled || question.tries >= allowedTries || question.last_correct || false;\n const answer = useRef(lastResponse);\n const isReflect = widgetAttr?.options?.type === 'Reflect';\n\n const nowTime = new Date().getTime();\n const reflectionList = store.lessonPlay?.reflectionList || [];\n const isRepeatReflection =\n reflectionList.length > 0 ? reflectionList.filter((w) => w.id === widgetAttr?.widget_code?.toLowerCase()) : null;\n const checkTime = isRepeatReflection !== null ? isRepeatReflection[0]?.time : nowTime;\n\n const isTimeDifferenceMoreThan30Seconds = (timestamp1, timestamp2) => {\n const differenceInSeconds = Math.abs((timestamp1 - timestamp2) / 1000);\n return differenceInSeconds > 30;\n };\n\n const validateAnswer = () => {\n if (!answer.current && !answer.current.length > 0) return false;\n const isCorrect = true;\n\n return { value: answer.current, correct: isCorrect };\n };\n\n const handleInput = (value) => {\n answer.current = value;\n };\n\n const showFeedback = () => {\n if (!question.tries) return null;\n\n if (isReflect) {\n if (!reflectionList) {\n return null;\n }\n if (isRepeatReflection && isRepeatReflection.length > 0 && !isTimeDifferenceMoreThan30Seconds(nowTime, checkTime)) {\n return null;\n }\n }\n return (\n
\n {/* show general feedback (allways show) */}\n {rawHTML(widgetAttr.feedback)}\n
\n );\n };\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n \n \n );\n};\n\nOpenQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(OpenQuestion);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\n// import isEqual from 'lodash/isEqual';\nimport { Box, Grid, Paper, Typography } from '@mui/material';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { rawHTML } from 'helpers/Helpers';\nimport ComponentProps from 'helpers/ComponentProps';\n\n/*\nIn summary, the Sort component allows users to reorder a list of items by dragging and dropping them. \nIt provides visual cues for different item orders and is integrated with the react-beautiful-dnd library to manage drag-and-drop interactions. \nIt doesn't include language-specific strings, indicating that it can be used in various contexts and applications.\n*/\nconst bg = {\n default: '#3597ff',\n wrong: 'darkred',\n correct: 'darkgreen'\n};\n\nconst Sort = (props) => {\n const { items, handleInput, handleTouched, disabled, store } = props;\n const { t } = useTranslation('widget');\n const canSeeAnswers = store?.canSeeAnswers;\n const dontShowBg = window.store?.getFeedback1() || false;\n const style = ComponentProps();\n let randomItems = items;\n\n const isCorrectAnswer = (newOrder) => {\n const answer = newOrder.map((a) => a.value);\n handleTouched(true);\n handleInput(answer);\n };\n\n const reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n return result;\n };\n\n function onDragEnd(result) {\n if (!result.destination) return;\n if (result.destination.index === result.source.index) return;\n randomItems = reorder(randomItems, result.source.index, result.destination.index);\n isCorrectAnswer(randomItems);\n }\n return (\n
\n {t('sortItem')}\n \n \n {(providedDroppable) => (\n
\n {randomItems &&\n randomItems.length > 0 &&\n randomItems.map((option, index) => (\n \n {(providedDraggable) => (\n
\n
\n \n \n \n {/*
{option.value}
*/}\n
\n \n \n {rawHTML(canSeeAnswers ? `${option.label} (${option.value})` : option.label)}\n \n \n
\n \n
\n
\n )}\n
\n ))}\n {providedDroppable.placeholder}\n
\n )}\n
\n
\n
\n );\n};\n\nSort.propTypes = {\n onChange: PropTypes.func,\n handleInput: PropTypes.func,\n handleTouched: PropTypes.func,\n setFieldValue: PropTypes.func,\n items: PropTypes.array,\n setValues: PropTypes.func,\n touched: PropTypes.bool,\n disabled: PropTypes.bool,\n store: PropTypes.any\n};\n\nexport default observer(Sort);\n","// SHUFFLE algorithm\nexport function shuffle(array) {\n let currentIndex = array.length;\n let temporaryValue;\n let randomIndex;\n // While there remain elements to shuffle...\n while (currentIndex !== 0) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex); // sonarclound false positive on Math.random()\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n}\n\n// DRAG & DROP MOVE method\nexport const move = (state, source, destination) => {\n const srcListClone = [...state[source.droppableId].items];\n const destListClone = source.droppableId === destination.droppableId ? srcListClone : [...state[destination.droppableId].items];\n const [movedElement] = srcListClone.splice(source.index, 1);\n\n destListClone.splice(destination.index, 0, movedElement);\n\n return {\n ...state,\n [source.droppableId]: { ...state[source.droppableId], items: srcListClone },\n [destination.droppableId]: { ...state[destination.droppableId], items: destListClone }\n };\n};\n","/* eslint-disable react/no-danger */\nimport { useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport { getSnapshot } from 'mobx-state-tree';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport FormGroup from '@mui/material/FormGroup';\nimport { makeStyles } from '@mui/styles';\nimport { Box, LinearProgress } from '@mui/material';\n// Components\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport Sort from 'components/widgets/Sort';\nimport { shuffle } from 'components/widgets/DragDropUtils';\n//\nimport { rawHTML } from 'helpers/Helpers';\nimport useWidget from './useWidget';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n margin: `${theme.spacing}px 0`\n }\n}));\n\nconst SortQuestion = (props) => {\n const classes = useStyles();\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n\n const widgetAttr = widget.attributes;\n // new array with answers sorted by default (NOT CORRECT SORTED)\n const sortItems = cloneDeep(getSnapshot(widgetAttr.options));\n // --------\n const correctAnswerByValueUnsorted = [...sortItems];\n // Value is a string, so we need to convert it to a number to sort it correctly\n // (when # answers >= 10 and if value is a string it will sort 1, 10, 2, 3, 4, 5, 6, 7, 8, 9)\n // After sorting we convert it back to a string\n const correctAnswerByValue = correctAnswerByValueUnsorted\n .map((a) => ({ ...a, value: Number(a.value) })) // convert value to number\n .sort((a, b) => a.value - b.value) // sort by value\n .map((a) => ({ ...a, value: a.value.toString() })); // convert value back to string\n\n // 2. sort items in correct order by value\n const correctAnswerArray = correctAnswerByValue.map((a) => a.value);\n const touched = useRef(!!question.last_response);\n const lastResponse = question.last_response ? convertResponseToArray() : '';\n const isDisabled = answerDisabled || question.tries >= allowedTries || question.last_correct || false;\n\n function convertResponseToArray() {\n return question.last_response\n .split(',')\n .map((n) => correctAnswerByValue.find((s) => s.value === n))\n .map((obj, i) => ({\n ...obj,\n order: correctAnswerByValue[i].value === obj.value ? 'correct' : 'wrong'\n }));\n }\n\n const answer = useRef(lastResponse);\n\n const handleInput = (value) => {\n answer.current = value;\n };\n const handleTouched = (value) => {\n touched.current = value;\n };\n\n const validateAnswer = () => {\n if (!touched.current) return false;\n let isCorrect = false;\n isCorrect = isEqual(answer.current, correctAnswerArray);\n\n return { value: answer.current.toString(), correct: isCorrect };\n };\n\n const showFeedback = () => {\n if (!question.tries) return null;\n // CREATE NEW ARRAY WITH CORRECT SORTED ITEMS\n const sortItemsCorrect = correctAnswerByValue.map((item) => ({ ...item, order: 'correct' }));\n // SORT ELEMENT WITH THE CORRECT ANSWERS\n const correctSort = (\n \n );\n // Is Question answered correctly\n const isCorrect = question.last_correct;\n // Translations isCorrect\n const respAnswer = isCorrect ? t('Correct', 'correct') : t('Incorrect', 'incorrect');\n // can answer question again\n const canTryAgain = !isCorrect && question.tries < allowedTries;\n // can user try again to answer the question.\n const tryAgain = !isCorrect && question.tries < allowedTries ? t('Try again', 'Try again') : '';\n // Show translatable textafter the user has failed or has tried to answer the question twice.\n const showCorrectAnswer = !isCorrect && question.tries === allowedTries ? t('feedback', 'the correct anwer is') : '';\n // show the correct feedback if the user has succesfully or failed the question\n const feedback = isCorrect ? widgetAttr.feedbackCorrect : widgetAttr.feedbackFalse;\n //\n\n return (\n
\n \n {!canTryAgain &&
{rawHTML(feedback)}
} {/* show feedback on finishing question */}\n {/* show correct answer in case of 2nd answer wrong */}\n p': { display: 'none' } }}>\n {/* showCorrectAnswer (= toelichting) */}\n
\n\n {/* show correct sorting widget */}\n {!isCorrect && question.tries === allowedTries ? correctSort : ''}\n \n
\n
\n );\n };\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n \n \n \n \n );\n};\n\nSortQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(SortQuestion);\n","/* eslint-disable react/no-danger */\nimport { Droppable, Draggable } from 'react-beautiful-dnd';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { Grid, Typography } from '@mui/material';\nimport { rawHTML } from 'helpers/Helpers';\n\n/*\nIn summary, the Dropzone component provides a user interface for a dropzone area where items can be dragged and dropped.\n It can be used in various contexts, such as implementing drag-and-drop functionality for reordering items within a list. The isDropDisabled prop allows the dropzone to be dynamically enabled or disabled. \nThe component is part of a larger grid-based layout and can display a title or label above the dropzone area.\n*/\nconst bg = {\n default: '#3597ff',\n wrong: 'darkred',\n correct: 'darkgreen'\n};\n\nconst Dropzone = ({ isDropDisabled, listItems, id, label }) => (\n \n \n {rawHTML(label) || 'opties'}\n \n
\n
\n\n \n {(provided) => (\n \n {listItems &&\n listItems.length > 0 &&\n listItems.map(({ answer, order }, index) => (\n \n ))}\n\n {provided.placeholder}\n
\n )}\n \n
\n
\n);\n\nconst ListItem = ({ name, style, index, isDisabled }) => {\n const dontShowBg = window.store?.getFeedback1() || false;\n return (\n \n {(provided) => (\n
\n \n
\n )}\n
\n );\n};\n\nDropzone.propTypes = {\n isDropDisabled: PropTypes.bool,\n listItems: PropTypes.array,\n id: PropTypes.any,\n label: PropTypes.string,\n name: PropTypes.string,\n index: PropTypes.any\n};\n\nListItem.propTypes = {\n name: PropTypes.string,\n index: PropTypes.any,\n style: PropTypes.string,\n isDisabled: PropTypes.bool\n};\n\nexport default observer(Dropzone);\n","import { Grid, Typography } from '@mui/material';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport { useTranslation } from 'react-i18next';\n\nimport { move } from './DragDropUtils';\nimport Dropzone from './DragDropZone';\n\n/*\nIn summary, the Match component is used to create a matching question interface, where users can drag items to the correct positions. \nIt is designed to be flexible and customizable, with the ability to enable or disable the matching interaction. \nThe use of the DragDropContext allows for smooth drag-and-drop interactions between different drop zones.\n*/\nconst Match = (props) => {\n const { items, handleInput, handleTouched, disabled, store } = props;\n const canSeeAnswers = store?.canSeeAnswers;\n const [state, setState] = useState(items);\n const { t } = useTranslation('widget');\n\n const isDropDisabled = disabled;\n\n if (!state) return 'loading';\n\n function getDropLists() {\n const _items = cloneDeep(items);\n delete _items.bench;\n const dropList = Object.keys(_items);\n return dropList;\n }\n\n const isCorrectAnswer = (newState) => {\n handleTouched(true);\n handleInput(newState);\n };\n\n const onDragEnd = (result) => {\n const { source, destination } = result;\n if (!destination) return;\n const newState = move(state, source, destination);\n setState(newState);\n isCorrectAnswer(newState);\n };\n\n const dropLists = getDropLists();\n\n return (\n <>\n {t('dragItem')}\n \n \n \n {dropLists?.map((i, index) => (\n \n ))}\n \n {!isDropDisabled && (\n \n ({ ...item, answer: `(${item.nr}) - ${item.answer}` }))\n : state?.bench?.items\n }\n isDropDisabled={isDropDisabled}\n label={t('dragOptions')}\n />\n \n )}\n \n \n \n );\n};\n\nMatch.propTypes = {\n items: PropTypes.any,\n handleInput: PropTypes.func,\n handleTouched: PropTypes.func,\n disabled: PropTypes.bool,\n store: PropTypes.any\n};\n\nexport default observer(Match);\n","import { shuffle } from 'components/widgets/DragDropUtils';\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport const convertToCorrectMatchAnswer = (items) => {\n const correctAnswer = { bench: { items: [] } };\n const DATA = cloneDeep(items);\n DATA.forEach((i) => {\n correctAnswer[`list${i.nr}`] = {\n items: i.matches.map((item) => ({ ...item, order: 'correct' })),\n label: i.label\n };\n });\n return correctAnswer;\n};\n\nexport const convertDefaultItems = (items, isShuffle = true) => {\n const defaultState = {};\n let dragItems = [];\n const DATA = cloneDeep(items);\n dragItems = DATA.map((item) => item.matches).flat(2);\n DATA.forEach((i) => {\n defaultState[`list${i.nr}`] = {\n items: [],\n label: i.label\n };\n });\n defaultState.bench = { items: isShuffle ? shuffle(dragItems) : dragItems };\n return defaultState;\n};\n\nexport const includeCorrectWrongOrderToLastResponse = (questionLastResponse) => {\n const newResponse = { bench: { items: [] } };\n const lastResponse = JSON.parse(questionLastResponse);\n delete lastResponse.bench;\n const entriesLastResponse = Object.entries(lastResponse);\n entriesLastResponse.forEach(([list, { items: value, label }]) => {\n newResponse[list] = {\n label,\n items: value.map((item) => ({\n ...item,\n order: Number(list.match(/\\d+$/)) === parseInt(item.nr, 10) ? 'correct' : 'wrong' // sonarcloud false positive on rgex\n }))\n };\n });\n return newResponse;\n};\n","/* eslint-disable react/no-danger */\nimport { useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { getSnapshot } from 'mobx-state-tree';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { LinearProgress, Box } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nimport Match from 'components/widgets/Match';\nimport { convertDefaultItems, convertToCorrectMatchAnswer, includeCorrectWrongOrderToLastResponse } from './MatchSortUtils';\n\nimport useWidget from './useWidget';\n\n// match question component\nconst MatchQuestion = (props) => {\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n\n const widgetAttr = widget.attributes;\n const items = cloneDeep(getSnapshot(widgetAttr.options));\n\n const itemsAsCorrectMatchObject = convertToCorrectMatchAnswer(items);\n const defaultItems = convertDefaultItems(items);\n\n const touched = useRef(!!question.last_response);\n const lastResponse = question.last_response ? includeCorrectWrongOrderToLastResponse(question.last_response) : '';\n const isDisabled = answerDisabled || question.tries >= allowedTries || question.last_correct || false;\n\n const answer = useRef(lastResponse);\n const matchItems = touched.current ? lastResponse : defaultItems;\n\n const isAnswerCorrect = () => {\n const checkCorrect = [];\n delete answer.current.bench;\n const entries = Object.entries(answer.current);\n entries.forEach(([list, { items: value }]) => {\n value.map((item) => checkCorrect.push(Number(list.match(/\\d+$/)) === parseInt(item.nr, 10))); // sonarcloud false positive on regular expression\n });\n return !checkCorrect.includes(false);\n };\n\n const handleInput = (value) => {\n answer.current = value;\n };\n\n const handleTouched = (value) => {\n touched.current = value;\n };\n\n const validateAnswer = () => {\n if (question.tries === 1 && answer.current?.bench && answer.current?.bench?.items?.length !== 0) return false;\n if ((answer.current?.bench && answer.current?.bench?.items?.length !== 0) || !answer.current) return false;\n const isCorrect = isAnswerCorrect();\n return { value: JSON.stringify(answer.current), correct: isCorrect };\n };\n\n const showFeedback = () => {\n if (!question.tries) return null;\n const correctMatch = (\n \n );\n const isCorrect = isAnswerCorrect();\n // respAnswer: show static translated text for correct or incorrect answer (Juist/Fout)\n const respAnswer = isCorrect ? t('Correct') : t('Incorrect');\n // can answer question again\n const canTryAgain = !isCorrect && question.tries < allowedTries;\n // tryAgain: show static translated text for try again\n const tryAgain = !isCorrect && question.tries < allowedTries ? t('Try again') : '';\n // showCorrectAnswer: show static translated text for feedback (= toelichting)\n const showCorrectAnswer = !isCorrect && question.tries === allowedTries ? t('feedback') : '';\n //\n const showCorrectMatch = !isCorrect && question.tries === allowedTries ? correctMatch : '';\n //\n const feedback = isCorrect ? widgetAttr.feedbackCorrect : widgetAttr.feedbackFalse;\n\n return (\n
\n \n {!canTryAgain &&
}\n {/* show correct answer in case of 2nd answer wrong */}\n p': { display: 'none' } }}>\n
\n {showCorrectMatch}\n \n
\n
\n );\n };\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n \n \n );\n};\n\nMatchQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(MatchQuestion);\n","/* eslint-disable react/no-danger */\nimport { useState, useRef, memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport Video from 'components/widgets/Video';\nimport { observer } from 'mobx-react';\nimport { LinearProgress } from '@mui/material';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport useWidget from './useWidget';\n\nconst useStyles = makeStyles(() => ({\n reactPlayerWrapper: {\n background: '#c0c0c029',\n position: 'relative',\n paddingTop: '56.25%',\n textAlign: 'center'\n },\n reactPlayer: {\n position: 'absolute',\n top: 0,\n left: 0\n },\n noPlayWrapper: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%,-50%)'\n }\n}));\n\nconst VideoQuestion = (props) => {\n const { store, widgetCode } = props;\n const classes = useStyles();\n const { question, widget, allowedRetries, PlayWidget } = useWidget(props);\n const widgetAttr = widget.attributes;\n const playerRef = useRef(null);\n\n const touched = useRef(!!question.last_response);\n const lastResponse = question.last_response ? question.last_response : '';\n const [values] = useState(lastResponse);\n const videoUrl = widgetAttr?.options?.url || '';\n\n const validateAnswer = () => ({ value: values, correct: true });\n\n const showFeedback = () => {\n if (!question.tries) return null;\n return (\n <>\n
{/* show general feedback (allways show) */}\n {showCorrectFeedback()}\n \n );\n };\n\n // * show main feedback */\n function showCorrectFeedback() {\n if (question.tries < allowedRetries && !question.last_correct) return null;\n const correctFeedback = widgetAttr.options.feedback;\n return correctFeedback;\n }\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n
\n
\n {videoUrl &&
\n
\n
\n \n );\n};\n\nVideoQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default memo(observer(VideoQuestion));\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { rawHTML } from 'helpers/Helpers';\n\n// renders raw html\nconst Html = (props) => {\n const { data } = props;\n\n if (data) {\n return (\n
\n {rawHTML(data)}\n
\n );\n }\n\n return Nothing 2 C here;\n};\n\nHtml.propTypes = {\n data: PropTypes.string\n};\n\nexport default observer(Html);\n","/* eslint-disable react/no-danger */\nimport { useState, useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Html from 'components/widgets/Html';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { LinearProgress } from '@mui/material';\nimport { rawHTML } from 'helpers/Helpers';\nimport useWidget from './useWidget';\n\nconst HtmlQuestion = (props) => {\n const { store, widgetCode } = props;\n const { question, widget, allowedTries, PlayWidget } = useWidget(props);\n const widgetAttr = widget.attributes;\n const touched = useRef(!!question.last_response);\n const lastResponse = question.last_response ? question.last_response : '';\n\n const [values] = useState(lastResponse);\n\n const validateAnswer = () => ({ value: values, correct: true });\n\n const showFeedback = () => {\n if (!question.tries) return null;\n return (\n <>\n {/* show general feedback (allways show) */}\n
{rawHTML(widgetAttr.feedback)}
\n {showCorrectFeedback()}\n \n );\n };\n\n function showCorrectFeedback() {\n if (question.tries < allowedTries && !question.last_correct) return null;\n const correctFeedback = widgetAttr.options.feedback;\n return rawHTML(correctFeedback);\n }\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n {widgetAttr?.options?.feedback &&
{rawHTML(widgetAttr.options.feedback)}
}\n \n
\n \n );\n};\n\nHtmlQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(HtmlQuestion);\n","import { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Grid, TextField, InputAdornment, Slider } from '@mui/material';\nimport SwapHoriz from '@mui/icons-material/SwapHoriz';\nimport { decideUnitPos, formatWith, isCurrency } from 'helpers/Helpers';\n\n/*\nIn summary, the Numerical component is a flexible numerical input component that can be customized to display either a slider or a text field.\nIt allows users to input numerical values and can be used for various purposes, including selecting a value within a specified range. \nThe component is designed to be easily integrated into different parts of an application and offers options for customization and internationalization.\n*/\nconst Numerical = (props) => {\n const { answer, handleInput, disabled, options: propOptions, value } = props;\n const [options, setOptions] = useState(propOptions);\n const { t } = useTranslation('widget');\n\n const field = {\n input: { type: 'text', variant: 'outlined', name: 'answer', label: t('Answer', 'Answer'), InputLabelProps: { shrink: true } }\n };\n\n const handleSliderChange = (e, newValue) => {\n handleInput(newValue);\n if (!Array.isArray(newValue)) return setOptions({ ...options, value: newValue });\n return setOptions({ ...options, value: newValue[0], valueEnd: newValue[1] });\n };\n\n const handleInputChange = (val) => {\n handleInput(val);\n setOptions({ ...options, value: val });\n };\n\n const marks = [\n { value: options.sliderMin, label: decideUnitPos(options.unit, options.sliderMin) },\n { value: options.sliderMax, label: decideUnitPos(options.unit, options.sliderMax) }\n ];\n\n const sliderProps = {\n min: options.sliderMin,\n max: options.sliderMax,\n step: options.sliderStep,\n valueLabelDisplay: 'on',\n marks\n };\n\n return (\n
\n \n {propOptions.type === 'slider' && (\n \n \n \n )}\n \n {propOptions.type === 'slider' ? (\n \n ) : (\n {options.unit} }\n : { endAdornment: {options.unit} }\n }\n defaultValue={value}\n value={answer.current}\n onChange={(e) => {\n const val = e.target.value.match(/^\\d*\\.?\\d*$/);\n if (!val) return;\n handleInputChange(val[0]);\n }}\n {...field.input}\n disabled={disabled}\n />\n )}\n \n \n
\n );\n};\n\nNumerical.propTypes = {\n options: PropTypes.object,\n props: PropTypes.object,\n handleInput: PropTypes.func,\n answer: PropTypes.number,\n value: PropTypes.number,\n disabled: PropTypes.bool\n};\n\nexport default observer(Numerical);\n","/* eslint-disable react/no-danger */\nimport { useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport inRange from 'lodash/inRange';\nimport Numerical from 'components/widgets/Numerical';\nimport { LinearProgress } from '@mui/material';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { useTranslation } from 'react-i18next';\nimport { decideUnitPos, rawHTML } from 'helpers/Helpers';\nimport useWidget from './useWidget';\n\nconst NumericalQuestion = (props) => {\n const { store, widgetCode } = props;\n const { question, widget, allowedTries, PlayWidget, answerDisabled } = useWidget(props);\n const { t } = useTranslation('widget');\n //\n const widgetAttr = widget.attributes;\n const touched = useRef(!!question.last_response);\n // E-WISE USERS Override lastresponse to see the correct answer\n let lastResponse = question.last_response ? Number(question.last_response) : 0;\n if (store.canSeeAnswers) {\n lastResponse = widgetAttr.options.value;\n }\n\n const answer = useRef(lastResponse);\n const isDisabled = answerDisabled || question.last_correct || question.tries >= allowedTries || false;\n\n // Check if question is range question\n const isRangeQuestion = widgetAttr.options.valueEnd > widgetAttr.options.value;\n\n // Answer options\n const isInRange = () => inRange(answer.current, widgetAttr.options.value, widgetAttr.options.valueEnd);\n const isExact = () => Number(answer.current) === Number(widgetAttr.options.value);\n const answerIsCorrect = isRangeQuestion ? isInRange() : isExact();\n // is answer less or more than the correct answer\n const isLess = () => Number(answer.current) < Number(widgetAttr.options.value);\n\n const handleInput = (value) => {\n answer.current = value;\n };\n\n const validateAnswer = () => {\n if (answer.current === 0) return false;\n const isCorrect = isRangeQuestion ? isInRange() : isExact();\n return { value: answer.current.toString(), correct: isCorrect };\n };\n\n function getOptionsFeedback() {\n if (answerIsCorrect) return 'feedbackCorrect';\n return isLess() ? 'feedbackLess' : 'feedbackMore';\n }\n\n // show feedback after an answer\n const showFeedback = () => {\n if (!question.tries) return null;\n const isCorrect = answerIsCorrect;\n const respAnswer = isCorrect ? t('Correct') : t('Incorrect');\n // try again button text\n const tryAgain = !isCorrect && question.tries < allowedTries ? t('Try again') : '';\n //\n const correctAnswer = isRangeQuestion\n ? `${t('tussen')} ${decideUnitPos(widgetAttr.options.unit, widgetAttr.options.value)} ${t('en')} ${decideUnitPos(\n widgetAttr.options.unit,\n widgetAttr.options.valueEnd\n )}`\n : widgetAttr.options.value;\n\n // get feedback for given answer: feedbackCorrect, feedbackLess, feedbackMore\n const respAnswerFb = widgetAttr.options[getOptionsFeedback()];\n\n // show correct answer + feedback in case of 2nd answer wrong\n const explanationTitle = !isCorrect && question.tries === allowedTries ? t('feedback') : '';\n const explanationAnswer = !isCorrect && question.tries === allowedTries ? `${t('The correct answer is')} ${correctAnswer}` : '';\n\n return (\n
\n {/* Title correct or incorrect */}\n \n\n {/* show feedback for given answer: feedbackCorrect, feedbackLess, feedbackMore */}\n
{rawHTML(respAnswerFb)}
\n\n {/* show / explain correct answer in case of 2nd answer wrong */}\n {!isCorrect && question.tries === allowedTries && (\n \n )}\n\n {/* RETRY TEXT */}\n
\n
\n );\n };\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n \n \n );\n};\n\nNumericalQuestion.propTypes = {\n widget: PropTypes.object.isRequired,\n widgetCode: PropTypes.string.isRequired,\n question: PropTypes.object,\n store: PropTypes.object\n};\n\nexport default observer(NumericalQuestion);\n\nconst Explanation = ({ explanationTitle, explanationAnswer }) => (\n
\n {explanationTitle}\n
\n
\n);\n\nExplanation.propTypes = {\n explanationTitle: PropTypes.string,\n explanationAnswer: PropTypes.string\n};\n","/* eslint-disable react/no-danger */\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { rawHTML } from 'helpers/Helpers';\nimport { Box, Button, FormControl, RadioGroup, Radio, FormControlLabel, Typography } from '@mui/material';\n\nconst PollVote = ({ options, title, onSubmit, disable }) => {\n const [inputValue, setInputValue] = useState('');\n const { t } = useTranslation('widget');\n\n const handleSubmit = (e) => {\n e.preventDefault();\n onSubmit(inputValue);\n };\n\n return (\n \n \n {rawHTML(title)}\n \n \n setInputValue(e.target.value)}>\n {options.map(({ value }, id) => (\n } label={value} />\n ))}\n \n \n \n \n \n \n );\n};\n\nPollVote.propTypes = {\n options: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n onSubmit: PropTypes.func,\n disable: PropTypes.any\n};\n\nexport default PollVote;\n","import { LinearProgress } from '@mui/material';\nimport { observer } from 'mobx-react';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport PropTypes from 'prop-types';\nimport { useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PollStats from './PollStats';\nimport PollVote from './PollVote';\n\nconst PollWidget = (props) => {\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const widget = store.lessonPlay.getPollWidget?.(widgetCode);\n const isFetching = useRef(false);\n const handleSubmit = (answer) => {\n try {\n if (!answer) {\n store.showToast({ message: t('pollWidget.vote.error.empty'), variant: 'error' });\n return;\n }\n store.lessonPlay.pollWidgetList.pollVote(widget, answer);\n store.showToast({ message: t('pollWidget.vote.success'), variant: 'success' });\n } catch (error) {\n store.showToast({ message: t('pollWidget.vote.error.failed'), variant: 'error' });\n }\n };\n const handleCancelVote = () => {\n store.lessonPlay.pollWidgetList.pollCancelVote(widget);\n };\n\n useEffect(() => {\n if (!widget && !isFetching.current) {\n isFetching.current = true;\n store.lessonPlay.fetchPollWidget(widgetCode);\n }\n }, [store.lessonPlay, widget, widgetCode]);\n\n if (!widget) {\n return null;\n }\n const { options, body: title, user_has_answered: userHasAnswered } = widget.poll;\n\n return userHasAnswered ? (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n ) : (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n );\n};\n\nPollWidget.propTypes = {\n widgetCode: PropTypes.string.isRequired,\n store: PropTypes.object\n};\n\nexport default observer(PollWidget);\n","/* eslint-disable react/prop-types */\nimport { Box, Button, LinearProgress, TextField, Typography } from '@mui/material';\nimport { rawHTML } from 'helpers/Helpers';\nimport { observer } from 'mobx-react';\nimport EditWidgetButton from 'pages/play/questions/EditWidgetButton';\nimport { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactWordcloud from 'react-wordcloud';\n\n// import 'tippy.js/dist/tippy.css';\n// import \"tippy.js/animations/scale.css\";\n\nconst WordCloudWidget = (props) => {\n const { store, widgetCode } = props;\n const { t } = useTranslation('widget');\n const widget = store.lessonPlay.getWordCloud?.(widgetCode);\n const isFetching = useRef(false);\n const [inputValues, setInputValues] = useState([]);\n\n useEffect(() => {\n if (!widget && !isFetching.current) {\n isFetching.current = true;\n store.lessonPlay.fetchWordCloud(widgetCode);\n }\n }, [store.lessonPlay, widget, widgetCode]);\n\n if (!widget) {\n return null;\n }\n\n const checkIfDuplicateExists = (arr) => new Set(arr).size !== arr.length;\n const handleSubmit = (e) => {\n e.preventDefault();\n try {\n if (!inputValues[0]) {\n store.showToast({ message: t('edit.wordcloud.error.required'), variant: 'error', vertical: 'bottom' });\n return;\n }\n if (checkIfDuplicateExists(inputValues.filter(Boolean))) {\n store.showToast({ message: t('edit.wordcloud.error.duplicate'), variant: 'error', vertical: 'bottom' });\n return;\n }\n // happy path\n store.lessonPlay.wordCloudList.submitAnswers(widget, inputValues);\n } catch (error) {\n store.showToast({ message: t('edit.wordcloud.error.failed'), variant: 'error', vertical: 'bottom' });\n }\n };\n\n const handleOnChange = (e, i) => {\n const { value } = e.target;\n const newInput = [...inputValues];\n newInput[i] = value;\n\n setInputValues(newInput);\n };\n\n if (widget.wordcloud.user_has_answered >= 1) {\n const formatWords = widget.wordcloud.words.map(({ word: value, count }) => ({\n text: value.slice(0, 20),\n value: count\n }));\n\n const options = {\n colors: ['#1A237E', '#ff7f0e', '#039BE5'],\n enableTooltip: true,\n deterministic: false,\n fontFamily: 'impact',\n fontSizes: [13, 60],\n fontStyle: 'normal',\n fontWeight: 'normal',\n padding: 1,\n rotations: 3,\n rotationAngles: [0, 90],\n scale: 'sqrt',\n spiral: 'archimedean',\n transitionDuration: 1000\n };\n\n return (\n <>\n \n \n \n {rawHTML(widget.wordcloud.body)}\n \n \n \n {/* */}\n \n \n \n );\n }\n\n return (\n <>\n \n {store.lessonPlay?.isSaving === widgetCode && }\n \n \n {rawHTML(widget.wordcloud.body)}\n \n \n {Array(widget.wordcloud.show_fields)\n .fill()\n .map((_, i) => (\n handleOnChange(e, i)}\n sx={{ width: '70%', [`& .MuiInputBase-root`]: { borderRadius: '10px' } }}\n inputProps={{ maxLength: 33 }}\n required={i === 0}\n InputLabelProps={{\n shrink: true\n }}\n disable={store.lessonPlay.pageNo === 0}\n />\n ))}\n {checkIfDuplicateExists(inputValues.filter(Boolean)) && (\n {t('wordcloud.duplicate', 'Every word should be unique')}\n )}\n \n \n \n \n );\n};\n\nexport default observer(WordCloudWidget);\n","import { createElement } from 'react';\nimport logger from 'loglevel';\nimport Radio from 'pages/play/questions/RadioQuestion';\nimport Check from 'pages/play/questions/CheckQuestion';\nimport Open from 'pages/play/questions/OpenQuestion';\nimport Sort from 'pages/play/questions/SortQuestion';\nimport Match from 'pages/play/questions/MatchQuestion';\nimport Video from 'pages/play/questions/VideoQuestion';\nimport Html from 'pages/play/questions/HtmlQuestion';\nimport Numerical from 'pages/play/questions/NumericalQuestion';\nimport Poll from 'pages/play/questions/PollWidget';\nimport Wordcloud from 'pages/play/questions/WordCloudWidget';\n\nconst log = logger.getLogger('PageParsing');\nlog.setDefaultLevel('info');\n\nconst components = {\n // Static container to connect the names to the (imported) widget-classes\n Radio,\n Check,\n Open,\n Sort,\n Match,\n Video,\n HTML: Html,\n Numerical,\n Poll,\n Wordcloud\n};\n\n/** ************************************************** */\n/* Return array of alle pages as react components */\n/* which undergone parsing (including widgets) */\n/** ************************************************** */\nexport function buildLessonPages(lessonPlay) {\n const { store } = lessonPlay;\n const isDevEnv = process.env.NODE_ENV === 'development';\n const canEdit = store.canEditCourse;\n\n let countQuestions = 0;\n let questionsAnswered = 0;\n let widgetCodes = [];\n\n return lessonPlay.pages.map((page, index) => {\n // E4-590: Extract correct app files hostname.\n // Use app api hostname or current environment domain as files url.\n // Ideally we want to use the current domain as base but not all\n // environments support this, so we'll fall back to the api domain\n // to ensure working links.\n const { hostname } = new URL(window.location.href);\n const { hostname: apiHostname } = new URL(process.env.REACT_APP_JSONAPI);\n\n let filesHostname = apiHostname;\n if (hostname.match(/(\\.cme-online.nl|\\.pe-academy.nl|\\.e-wise.nl|\\.po-online.nl)/g)) {\n filesHostname = `${apiHostname.split('.').slice(0, -2).join('.') }.${hostname.split('.').slice(-2).join('.')}`;\n }\n\n // For all pages\n // Parse the HTML\n const parsedPage = parsePage(page);\n\n // For each page find and replace all widget-references with real HTML and instantiate / cache the react component\n countQuestions = 0;\n questionsAnswered = 0;\n widgetCodes = [];\n\n const html = parsedPage\n .replace(/\\[\\[([^[\\]]*?)\\]\\]/gm, (match, widgetCode) => createWidget(match, widgetCode))\n // Remove styling odt tags\n .replaceAll(/\\[#[a-zA-Z-]*#\\]/g, '')\n // Replace all relative urls to absolute (/or relative) urls based on the\n // base path set in the root store\n .replaceAll(/src=\"/g, `src=\"${lessonPlay.store.PATH || process.env.REACT_APP_JSONAPI}/`)\n // E4-590: Replace all private file urls with file url for current label and environment.\n .replaceAll(/(learn)(\\.*)(\\.cme-online.nl|\\.pe-academy.nl|\\.e-wise.nl|\\.po-online.nl)(\\/system\\/)/g, `${filesHostname}$4`);\n\n return {\n // eslint-disable-next-line react/no-danger\n html:
,\n countQuestions,\n questionsAnswered,\n widgetCodes\n };\n });\n\n function createWidget(match, widgetCode) {\n if (!lessonPlay.question_widgets) return null;\n const widget = lessonPlay.question_widgets.find((_widget) => _widget.attributes.widget_code.toLowerCase() === widgetCode.toLowerCase());\n // widget not found: return placeholder for widget\n const showMissingWidget = isDevEnv ? `
missing widget: ${widgetCode}
` : `
`;\n\n // Show greyout without feedback\n const showFeedback1 = lessonPlay?.lesson?.attributes['1answer_nofeedback'] || false;\n // Show color without feedback\n const showFeedback2 = lessonPlay?.lesson?.attributes['1answer_visualfeedback'] || false;\n\n if (!widget) {\n if (!canEdit) return showMissingWidget;\n return `
`;\n }\n\n // widget component undefined\n if (components[widget.widgetType] === undefined) {\n return null;\n }\n\n // Store the widget codes\n widgetCodes.push(widgetCode);\n // register the number of answered questions on page\n if (widget.isQuestion) countQuestions++;\n if (lessonPlay.lesson_result.attributes.questions) {\n const questionResult = lessonPlay.lesson_result.attributes.questions.find((question) => question.questionId === widget.id);\n\n const maxAttempts =\n showFeedback1 || showFeedback2 || (widget.attributes.widget_type === 'Radio Question' && widget.attributes.options.length === 2)\n ? 1\n : 2;\n\n if (questionResult && (questionResult.tries >= maxAttempts || questionResult.last_correct)) {\n questionsAnswered++;\n }\n\n log.debug(`Widget code is: ${widgetCode}`);\n }\n\n // Create instantiated component\n const component = createElement(components[widget.widgetType], {\n widget,\n widgetCode,\n store: lessonPlay.store,\n active: true,\n feedback1: showFeedback1,\n feedback2: showFeedback2\n });\n\n // Cache the instantiated component with the widget to be reused when building the page (in Pages.js)\n widget.setComponent(component);\n\n return `
`;\n }\n}\n\n/** ************************************************************************** */\n/* Parse html in the page */\n/** ************************************************************************** */\nconst parser = new DOMParser();\nfunction parsePage(page) {\n const doc = parser.parseFromString(page, 'text/html');\n\n // wraps multiple 'Kader'-paragraphs\n doc.querySelectorAll('.cmebox').forEach((el) => {\n const classes = el.getAttribute('class').split(' ');\n let classname = classes.find((elClass) => elClass.indexOf('cmebox-') === 0);\n classname = classname ? classname.match(/^cmebox-(.+)/i)[1] : '';\n wrap(el, `
`);\n });\n\n // Put widget heading before widget tag\n doc.querySelectorAll('.CMEVraagkop, .text-question-header').forEach((vraagkop) => {\n if (!vraagkop.nextElementSibling) return;\n\n const elements = getTillcmeVariable(vraagkop);\n const cmeVariable = elements.pop();\n elements.reverse().forEach((el) => {\n cmeVariable?.insertAdjacentElement('afterbegin', el);\n });\n });\n\n // Collapsable sections\n doc.querySelectorAll('section[id^=\"collapsed\"]').forEach((section) => {\n section.style.display = 'none'; // Reset the default display:none\n const buttonClassList = ['code-function-button', 'CMECollapsed-Buttontekst'];\n const courseListElement = section.querySelector('.courseList');\n const id = section.getAttribute('id');\n let button;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const className of buttonClassList) {\n button = section.querySelector(`.${className}`);\n if (button) break;\n // If not found at the immediate child level, search within descendants\n button = section.querySelector(`.${className}`);\n if (button) break;\n }\n // Move the button before the courseList\n if (button && courseListElement && button.parentNode === section && courseListElement.parentNode === section) {\n section.insertBefore(button, courseListElement);\n }\n if (button) {\n button.firstElementChild.setAttribute('data-btext', button.firstElementChild.innerText);\n button.firstElementChild.classList.add('button-text-wrapper');\n } else {\n button = htmlToDom(`\n
\n \n ${window.i18next.t('lesson.open')}\n \n
\n `);\n }\n button.setAttribute('id', `button-${id}`);\n button.setAttribute('onClick', `ewPage.collapse('${id}')`);\n section.insertAdjacentElement('afterend', button);\n });\n\n // Tabelcel highlight/header/subheader - move classname from span to table-cell\n // Part 1: Styling Manipulation\n const cellSelector =\n 'td, td .CMETabHighlight, td .table-cell-highlight, td .CMETableHeader, td .table-cell-header, td .CMETableSubHeader, td .table-cell-header-sub, td .CMETableFooter, td .table-cell-footer';\n doc.querySelectorAll(cellSelector).forEach((el) => {\n const { className } = el;\n el.classList.remove(...el.classList); // Clear all existing classes\n const parentTd = el.closest('td');\n className.split(' ').forEach((cls) => {\n if (cls) {\n parentTd.classList.add(cls);\n }\n });\n });\n\n // Part 2: Table Cell Styling Based on Content\n const tdSelector = '//td';\n const tdElements = doc.evaluate(tdSelector, doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n const cellClassMap = [];\n\n for (let i = 0; i < tdElements.snapshotLength; i++) {\n const tdElement = tdElements.snapshotItem(i);\n // Find all spans within the current td\n const spans = tdElement.querySelectorAll('span');\n const tagContent = Array.from(spans)\n .map((span) => span.innerText)\n .join('');\n const regexMatch = tagContent.match(/\\[#(.*?)#\\]/);\n const tag = regexMatch && regexMatch[1];\n if (tag !== null && tag !== undefined) {\n const classLabels = tag.split(' ').filter((text) => text !== '');\n spans.forEach((span) => {\n const classText = span.innerHTML;\n span.innerHTML = classText.replace(/\\[#[^\\]]*#\\]/, '');\n });\n\n classLabels.forEach((classLabel) => {\n cellClassMap.push({ cell: tdElement, classLabel });\n });\n }\n }\n // Apply the modifications to the DOM after processing all elements\n cellClassMap.forEach(({ cell, classLabel }) => {\n const updatedClassLabel = classLabel.replace(/[,\\s]/g, '');\n cell.classList.add(updatedClassLabel);\n });\n\n // right align numbers, underline options for total counts\n doc.querySelectorAll('.ew-tablestyle-align-numbers td, .align-numbers td').forEach((el) => {\n let str = el.innerText.trim();\n if (str === '') return;\n if (str.match(/^\\*\\*\\*(.+)\\*\\*\\*$/m) !== null) {\n el.innerHTML = el.innerHTML.replace(/\\*\\*\\*/g, '');\n el.classList.add('text-align-right');\n }\n if (str.match(/^___(.+)___$/m) !== null) {\n el.innerHTML = el.innerHTML.replace(/___/g, '');\n el.classList.add('ew-underline');\n }\n if (str.match(/^===(.+)===$/m) !== null) {\n el.innerHTML = el.innerHTML.replace(/===/g, '');\n el.classList.add('ew-double-underline');\n }\n str = str.replace(/([0-9,_=+$%*/.()\\xA3\\xA4\\xA5\\xB1\\xB3\\xB2\\u20AC\\u0192\\u2030\\-\\s]|euro?|nlg|usd)+/gim, ''); // remove all numerical values (like isNaN(content))\n if (str === '') {\n el.classList.add('text-align-right');\n }\n });\n\n // Open full http(s) url and links to documents in new browser tab\n doc.querySelectorAll('a[href]').forEach((el) => {\n const url = el.getAttribute('href');\n if (url.match(/^https?:|\\.pdf$|\\.png$|\\.pptx?$|\\.key$|\\.docx?$|\\.xlsx?$|\\.gif$|\\.jpg$|\\.jpeg$/i)) el.setAttribute('target', '_blank');\n });\n\n // Add functionality to footnotelinks\n doc.querySelectorAll('.footnotelink').forEach((el) => {\n const id = el.getAttribute('id').split('_')[1];\n el.classList.add('tooltipTrigger');\n el.setAttribute('onmouseover', `ewPage.showFootnote('${id}', this)`);\n const footnotebody = doc.getElementById(`footnotebody_${id}`);\n footnotebody.setAttribute('onmouseleave', `ewPage.hideFootnote('${id}')`);\n });\n\n // Move footnotebodies to upper level\n doc.querySelectorAll('.footnotebody').forEach((el) => el && doc.body.appendChild(el));\n\n // Done parsing\n return `
${doc.body.innerHTML}
`;\n}\n\n/** ******************************************************************************************************************************* */\n/* Make a global ewPage with functions so all javascript within the HTML can access these functions (currently only one function) */\n/** ******************************************************************************************************************************* */\nwindow.ewPage = {\n // Collapse and open a section\n // TODO: Langzamere animatie\n // TODO: na verbergen moeten de focus van de \"tonen\" button in beeld blijven. Niets doen als de button nog in beeld is, en anders bovenaan in beeld zetten\n collapse: (id) => {\n const el = document.getElementById(id);\n const buttonSpan = document.getElementById(`button-${id}`).firstElementChild;\n if (el.classList.toggle('collapsed')) {\n el.style.display = '';\n el.style.maxHeight = `${el.scrollHeight}px`;\n buttonSpan.innerText = window.i18next.t('lesson.close');\n } else {\n el.style.maxHeight = null;\n setTimeout(() => {\n el.style.display = 'none';\n buttonSpan.innerText = buttonSpan.getAttribute('data-btext');\n }, 250);\n }\n },\n showFootnote: (id, footnotelink) => {\n const footnotebody = document.getElementById(`footnotebody_${id}`);\n const { scrollTop, pageYOffset } = window.store.lessonPlay.pageNo\n ? document.getElementById('pages').children[1]\n : document.getElementById('pages'); // if pageNo is set, we are in the lesson, otherwise we are in the overview\n const { offsetWidth: drawerWidth } = document.getElementById('leftDrawer');\n const { top, left } = footnotelink.getBoundingClientRect();\n const resumebarHeight = document.querySelector('[data-test=\"resumeBar\"]') ? 34 : 0;\n const newStyle = {\n top: `${top + (pageYOffset || scrollTop) - 60 - resumebarHeight}px`,\n left: `${left - drawerWidth}px`,\n visibility: 'visible'\n };\n Object.assign(footnotebody.style, newStyle);\n },\n hideFootnote: (id) => {\n const footnotebody = document.getElementById(`footnotebody_${id}`);\n footnotebody.style.visibility = 'hidden';\n }\n // *** //\n};\n\n// Recursive function to get all the elements from cmeVraagkop till cmeVariable\nconst getTillcmeVariable = (start, accEls = []) =>\n !start?.nextElementSibling?.firstElementChild || // done if nextElementSibling doesn't exist\n start?.nextElementSibling?.firstElementChild?.classList?.contains('cmeVariable') || // done if next sibling is Variable\n accEls.length > 10 // done if the accumulated elements get to big\n ? accEls.concat([start, start?.nextElementSibling?.firstElementChild]) // cmeVariable will be last element so we can pop\n : getTillcmeVariable(start?.nextElementSibling, accEls.concat([start])); // accumulate current element and try next sibling\n\n// DOM util function\nfunction wrap(el, wrapper) {\n wrapper = htmlToDom(wrapper);\n el.parentNode.insertBefore(wrapper, el);\n wrapper.appendChild(el);\n}\n\n// util function\nfunction capitalize(word) {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\n// DOM util function\nfunction htmlToDom(html) {\n if (typeof html === 'string') {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content ? template.content.firstChild : template.firstChild; // Difference ie11 & chrome\n }\n return html;\n}\n","/* eslint-disable no-unused-vars */\nimport { convertToCorrectMatchAnswer } from 'pages/play/questions/MatchSortUtils';\n\nconst types = {\n check: 'Check Question',\n sort: 'Sort Question',\n radio: 'Radio Question',\n open: 'Open Question',\n match: 'Match Question',\n numerical: 'Numerical Question'\n};\n\n/*\n NOTE: sonarclound is showing security hotspost issues on this file, but it is a false positive.\n the errors are related to using regular expressions.\n /(<([^>]+)>)/gi is used to remove html tags.\n there is no risk of using regular expressions in this file.\n*/\n\nexport const createCmi5JourneyHooks = (cmi5Client) => ({\n onStartCourse: (courseId) => {\n // cmi5Client.startCourse(courseId);\n },\n onStartLesson: (courseId, lessonId) => {\n // cmi5Client.startLesson(courseId, lessonId);\n },\n onStartPage: (courseId, lessonId, pageId) => {\n // cmi5Client.startPage(courseId, lessonId, pageId);\n },\n onAnswerQuestion: (courseId, questionId, answerIds, question, correct, options, type) => {\n const saveFunction = createSaveFunctionsMap(cmi5Client)[type];\n if (!saveFunction) return;\n const variablesGenerator = createCMI5VariablesGenerator(type);\n const variables = variablesGenerator({ courseId, questionId, answerIds, question, correct, options });\n saveFunction(...Object.values(variables));\n },\n onNextPage: (courseId, lessonId, pageId) => {\n // cmi5Client.nextPage(courseId, lessonId, pageId);\n },\n onFinishLesson: (courseId, lessonId) => {\n // cmi5Client.finishLesson(courseId, lessonId);\n },\n onNextLesson: (courseId, lessonId) => {\n // cmi5Client.nextLesson(courseId, lessonId);\n },\n onFinishCourse: (courseId) => {\n // cmi5Client.finishCourse(courseId);\n },\n onLeaveLesson: (courseId, lessonId) => {\n // cmi5Client.leaveLesson(courseId, lessonId);\n },\n onLeaveCourse: (courseId) => {\n // cmi5Client.leaveCourse(courseId);\n }\n});\n\n// wrapped in a function to avoid loss of `this` context in the cmi5 api, maybe fixable with bind(cmi5Client)\nconst createSaveFunctionsMap = (cmi5Client) => ({\n [types.check]: (...args) => cmi5Client.interactionChoice(...args),\n [types.sort]: (...args) => cmi5Client.interactionSequencing(...args),\n [types.radio]: (...args) => cmi5Client.interactionChoice(...args),\n [types.open]: (...args) => withoutChoices((...nargs) => cmi5Client.interactionLongFillIn(...nargs))(...args),\n [types.numerical]: (...args) => withoutChoices((...nargs) => cmi5Client.interactionNumeric(...nargs))(...args),\n [types.match]: (...args) => withoutChoices((...nargs) => cmi5Client.interactionOther(...nargs))(...args)\n});\n\nconst withoutChoices = (interaction) => (testId, questionId, answers, correctAnswers, _choices, name, description, success) =>\n interaction(testId, questionId, answers, correctAnswers, name, description, success);\n\nconst createCMI5VariablesGenerator =\n (widgetType) =>\n ({ courseId, questionId, answerIds, question, correct, options }) => ({\n testId: courseId,\n questionId,\n answerIds: widgetTransforms[widgetType]?.answerIds ? widgetTransforms[widgetType].answerIds(answerIds) : answerIds,\n correctAnswerIds: widgetTransforms[widgetType]?.correctAnswerIds ? widgetTransforms[widgetType].correctAnswerIds(options) : options,\n choices: widgetTransforms[widgetType]?.choices ? widgetTransforms[widgetType].choices(options) : options,\n name: widgetTransforms[widgetType]?.name ? widgetTransforms[widgetType].name(question) : question,\n description: widgetTransforms[widgetType]?.description ? widgetTransforms[widgetType].description(question) : question,\n success: correct\n });\n\nconst widgetTransforms = {\n [types.check]: {\n answerIds: (values) =>\n values\n .split(',')\n .map((value, i) => (+value ? `option-${i}` : false))\n .filter(Boolean),\n correctAnswerIds: (options) => options.map((option, i) => (option.correct ? `option-${i}` : false)).filter(Boolean),\n choices: (options) =>\n options.map((option, i) => ({\n id: `option-${i}`,\n description: { 'en-US': `${option.label} ${option.feedback.replace(/(<([^>]+)>)/gi, '')}` }\n })),\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n },\n [types.sort]: {\n correctAnswerIds: (options) => options.map((a) => a.value),\n choices: (options) => options.map((item) => ({ id: item.value, description: { 'en-US': item.label } })),\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n },\n [types.radio]: {\n answerIds: (value) => [`option-${value}`],\n correctAnswerIds: (options) => options.map((option, i) => (option.correct ? `option-${i}` : false)).filter(Boolean),\n choices: (options) =>\n options.map((option, i) => ({\n id: `option-${i}`,\n description: { 'en-US': `${option.label} ${option.feedback.replace(/(<([^>]+)>)/gi, '')}` }\n })),\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n },\n [types.open]: {\n answerIds: (value) => [value],\n correctAnswerIds: () => ['*'],\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n },\n [types.numerical]: {\n correctAnswerIds: (options) =>\n options.valueEnd > options.value ? { min: options.value, max: options.valueEnd } : { exact: options.value },\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n },\n [types.match]: {\n correctAnswerIds: (options) => JSON.stringify({ ...convertToCorrectMatchAnswer(options), bench: undefined }),\n name: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') }),\n description: (question) => ({ 'en-US': question.replace(/(<([^>]+)>)/gi, '') })\n }\n};\n","import { types as t } from 'mobx-state-tree';\n// eslint-disable-next-line no-unused-vars\nimport cloneDeep from 'lodash/cloneDeep';\nimport { RelLesson } from './Lesson';\nimport { Links, IsoDate } from './BaseModel';\n\nexport const LessonResult = t\n .model('LessonResult', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__id: t.number,\n created: IsoDate,\n changed: IsoDate,\n status: t.string, // 0 = Not started --- 1 = Started --- 2 = Failure --- 3 = Succesfully finished\n page_id_max: t.number,\n course_result: t.maybeNull(t.number),\n score: t.number,\n questions_answered: t.number,\n sequence_no: t.number,\n current: t.boolean,\n data: t.maybeNull(t.string), // general field for serialized data\n is_lti: t.maybeNull(t.number),\n // Below are the deserialized fields\n pages: t.maybe(\n t.array(\n t.model({\n completed: t.boolean\n })\n )\n ),\n questions: t.maybe(\n t.array(\n t.model({\n questionId: t.string,\n type: t.string,\n weight: t.number,\n correct: t.optional(t.boolean, false),\n last_correct: t.optional(t.boolean, false),\n last_response: t.string,\n last_response_timestamp: IsoDate,\n first_response: t.string,\n first_response_timestamp: IsoDate,\n tries: t.number\n })\n )\n )\n }),\n relationships: t.maybeNull(\n t.model({\n lesson: RelLesson\n // user: RelUser,\n // course_result: t.maybe(RelCourseResult),\n })\n )\n })\n .preProcessSnapshot((snapshot) => {\n const newSnapshot = cloneDeep(snapshot);\n try {\n let { data } = newSnapshot.attributes;\n if (!data || data === '{}') data = { questions: [], pages: [] };\n else data = JSON.parse(data);\n if (!data.questions) data.questions = [];\n if (!data.pages) data.pages = [];\n newSnapshot.attributes = { ...newSnapshot.attributes, ...data };\n } catch (e) {\n console.error('Error parsing lesson result data', e);\n }\n return newSnapshot;\n });\n\nexport const RelLessonResult = t.model('RelLessonResult', {\n data: t.maybeNull(\n t.model({\n id: t.reference(LessonResult),\n type: t.string\n })\n ),\n links: Links\n});\n\nexport function postProcessLessonResult(snapshot) {\n const newSnapshot = cloneDeep(snapshot);\n const attr = newSnapshot.attributes;\n delete attr.data;\n const serialized = {};\n\n if (attr.questions) {\n serialized.questions = attr.questions;\n delete attr.questions;\n }\n\n if (attr.pages) {\n serialized.pages = attr.pages;\n delete attr.pages;\n }\n\n attr.data = JSON.stringify(serialized);\n return newSnapshot;\n}\n","import { types as t } from 'mobx-state-tree';\nimport { Links, RelProfession } from './BaseModel';\nimport { RelCourseContainer } from './CourseContainer';\nimport { RelAccreditationOrganisations } from './AccreditationOrganisation';\n\n// Todo: Add relationships: Accreditation_organisation\nexport const Package = t\n .model('Package', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n // uuid: t.string,\n status: t.boolean,\n title: t.string,\n tab_label: t.maybeNull(t.string),\n body: t.maybeNull(t.string),\n max_question_retries: t.maybeNull(t.number)\n }),\n relationships: t.model({\n profession: RelProfession,\n accreditation_organisation: t.maybeNull(RelAccreditationOrganisations),\n course_container: RelCourseContainer,\n logo: t.model({\n data: t.maybeNull(t.string),\n links: Links\n })\n })\n })\n .volatile(() => ({\n sortedPackage: [],\n selections: {\n category: [],\n status: [],\n competence: [],\n author: []\n }\n }))\n .actions((self) => ({\n afterCreate() {\n if (!self.attributes.max_question_retries) self.attributes.max_question_retries = 2;\n },\n saveSorted() {\n const isSelected =\n (self.selections.category.length ||\n self.selections.status.length ||\n self.selections.competence.length ||\n self.selections.author.length) > 0;\n if (!isSelected) {\n self.sortedPackage = self.coursesByCategory('course');\n }\n\n return self.sortedPackage;\n },\n setOptions(input, type) {\n if (type === 'author') {\n self.selections[type] = [input];\n } else {\n self.selections[type].push(input);\n }\n return self.selections;\n },\n resetfilterModel() {\n self.selections = {\n category: [],\n status: [],\n competence: [],\n author: []\n };\n },\n removeSelection(input, type) {\n const result = self.selections[type].filter((option) => option !== input);\n self.selections[type] = result;\n },\n multipleFilter(filters) {\n let results = self.courses;\n if (filters.category.length) {\n const category = results.filter((product) => {\n const filterCategory = filters.category.map((element) => element);\n const data = product.relationships.course_category.data.filter((res) => filterCategory.includes(res.id.attributes.name));\n return data.length > 0;\n });\n results = category;\n }\n if (filters.author.length) {\n const author = results.filter((product) => {\n const filterAuthor = filters.author.length > 0 ? filters.author.map((element) => element) : filters.author;\n const data =\n product.relationships.lesson_container.data &&\n product.relationships.lesson_container.data.id.relationships.field_authors.data.filter((res) =>\n filterAuthor.includes(res.id.attributes.title)\n );\n return data && data.length > 0;\n });\n results = author;\n }\n if (filters.competence.length) {\n const competence = results.filter((product) => {\n const filterCompetence = filters.competence.map((element) => element);\n const data = product.relationships.course_category2.data.filter((el) =>\n filterCompetence.includes(el.id.attributes.name.split('-')[0])\n );\n return data.length > 0;\n });\n results = competence;\n }\n if (filters.status.length) {\n const status = results.filter((product) => {\n const filterStatus = filters.status.map((element) => element);\n return filterStatus.includes(product.attributes.course_status);\n });\n results = status;\n }\n self.sortedPackage = results;\n return self.sortedPackage;\n },\n filterBy(filterName, type) {\n const filterMap = {\n author: { data: Object.entries(self.coursesByAuthor) },\n category: { data: Object.entries(self.coursesByCategory) },\n competence: { data: Object.entries(self.coursesByCompetence) },\n status: { data: Object.entries(self.coursesByStatus) }\n };\n const courses = filterMap[type].data;\n const filteredData = courses.filter(([key]) => key === filterName);\n self.sortedPackage = Object.fromEntries(filteredData);\n }\n }))\n .views((self) => ({\n get maxRetries() {\n return self.attributes.max_question_retries;\n },\n get courseContainer() {\n if (self.relationships.course_container && self.relationships.course_container.data) {\n return self.relationships.course_container.data.id;\n }\n return null;\n },\n get courses() {\n try {\n if (self.courseContainer && self.courseContainer.relationships.courses && self.courseContainer.relationships.courses.courserefs) {\n return self.courseContainer.relationships.courses.courserefs;\n }\n return [];\n } catch (e) {\n return [];\n }\n },\n\n get totalCourses() {\n return self.courses.length;\n },\n coursesByCategory(type) {\n // Computed properties get automatically cached by Mobx. First time: 8ms / second time: 0,2ms\n const courses = type === 'course' ? self.courses : self.sortedPackage;\n const categories = [];\n courses.forEach((course) => {\n course.relationships.course_category.data.forEach((c) => {\n if (!categories[c.id.attributes.name]) categories[c.id.attributes.name] = [];\n categories[c.id.attributes.name].push(course);\n });\n });\n return categories;\n },\n coursesByCompetence(type) {\n const courses = type === 'course' ? self.courses : self.sortedPackage;\n const competence = [];\n courses.forEach((course) => {\n course.relationships.course_category2.data?.forEach((c) => {\n if (!competence[c.id.attributes.name.split('-')[0]]) competence[c.id.attributes.name.split('-')[0]] = [];\n competence[c.id.attributes.name.split('-')[0]].push(course);\n });\n });\n return competence;\n },\n coursesByAuthor(type) {\n const courses = type === 'course' ? self.courses : self.sortedPackage;\n const authors = [];\n courses.forEach((course) => {\n if (course.relationships.lesson_container.data) {\n course.relationships.lesson_container.data.id.relationships.field_authors.data.forEach((c) => {\n if (!authors[c.id.attributes.title]) authors[c.id.attributes.title] = [];\n authors[c.id.attributes.title].push(course);\n });\n }\n });\n return authors;\n },\n coursesByStatus(type) {\n const courses = type === 'course' ? self.courses : self.sortedPackage;\n const status = [];\n courses.forEach((course) => {\n if (!status[course.attributes.course_status]) status[course.attributes.course_status] = [];\n status[course.attributes.course_status].push(course);\n });\n return status;\n }\n }));\n\nexport const RelPackages = t\n .model('RelPackages', {\n data: t.array(\n t.model({\n id: t.reference(Package),\n type: t.string\n })\n )\n })\n .views((self) => ({\n get packagerefs() {\n if (self.data && self.data.length) {\n return self.data.map((packageref) => packageref.id);\n }\n return [];\n }\n }));\n","import { types as t } from 'mobx-state-tree';\n// import { RelAccreditation } from './Accreditation';\nimport { Body, Links, RelProfession } from './BaseModel';\nimport { RelPackages } from './Package';\n\nexport const BaseProduct = t\n .model('BaseProduct', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n drupal_internal__vid: t.number,\n unique_name: t.string,\n status: t.boolean,\n title: t.string,\n body: t.maybeNull(Body)\n }),\n relationships: t.model({\n packages: RelPackages,\n profession: t.maybe(RelProfession)\n // accreditation_organisation: RelAccreditation,\n // ewiselabels: t.maybe(RelProfession)\n }),\n links: Links\n })\n .volatile(() => ({\n packageClicked: [false, false, false, false]\n }))\n .views((self) => ({\n get profession() {\n if (self.relationships.profession) return self.relationships.profession.data.id.attributes.name;\n return '';\n },\n get packages() {\n if (self.relationships.packages) return self.relationships.packages.packagerefs;\n return [];\n },\n get coursesByPackage() {\n return self.packages.map(\n (packages) =>\n packages.relationships.course_container.data.id &&\n packages.relationships.course_container.data.id.relationships.courses.data.map((course) => course).length\n );\n },\n get ewiselabels() {\n if (self.relationships.profession) {\n return self.relationships.profession.data.id.attributes.field_ewise_labels !== null\n ? self.relationships.profession.data.id.attributes.field_ewise_labels\n : 'ewise';\n }\n return [];\n }\n }))\n .actions((self) => ({\n addPackageRef(packageRef) {\n self.relationships.packages.data.push(packageRef);\n },\n setArray(index) {\n self.packageClicked[index] = true;\n return self.packageClicked;\n }\n }));\n\nexport const RelBaseProduct = t.model('RelBaseProduct', {\n data: t.maybeNull(\n t.model({\n id: t.reference(BaseProduct),\n type: t.string\n })\n )\n});\n","import { types as t } from 'mobx-state-tree';\nimport { RelProfession } from './BaseModel';\nimport { RelBaseProduct } from './BaseProduct';\n\nexport const Product = t\n .model('Product', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n status: t.boolean,\n title: t.string,\n free_product: t.boolean,\n maximum_points: t.maybeNull(t.number),\n maximum_subscriptions: t.maybeNull(t.number)\n }),\n relationships: t.model({\n base_product: RelBaseProduct,\n profession: RelProfession\n })\n })\n .views((self) => ({\n get baseProduct() {\n if (self.relationships.base_product && self.relationships.base_product.data) {\n return self.relationships.base_product.data.id;\n }\n return null;\n },\n get packages() {\n if (self.baseProduct && self.baseProduct.relationships.packages && self.baseProduct.relationships.packages.packagerefs) {\n return self.baseProduct.relationships.packages.packagerefs;\n }\n return [];\n }\n }));\n\nexport const RelProduct = t.model('RelProduct', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Product),\n type: t.string\n })\n )\n});\n\nexport const RelProducts = t\n .model('RelProducts', {\n data: t.array(\n t.maybeNull(\n t.model({\n id: t.reference(Product),\n type: t.string\n })\n )\n )\n })\n .views((self) => ({\n get productrefs() {\n if (self.data && self.data.length) {\n return self.data.map((productref) => productref.id);\n }\n return [];\n }\n }));\n","import { types as t, getParent } from 'mobx-state-tree';\nimport { Profession, RelFile, RelUserRole, IsoDate } from './BaseModel';\nimport { RelCourses } from './Course';\nimport { RelProducts } from './Product';\n\nexport const User = t\n .model('User', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__uid: t.maybeNull(t.number),\n // langcode: t.maybeNull(t.string),\n preferred_langcode: t.string,\n timezone: t.string,\n field_display_name: t.maybeNull(t.string),\n field_first_name: t.maybeNull(t.string),\n // default_langcode: t.boolean,\n name: t.string,\n mail: t.string,\n access: t.maybeNull(t.string),\n display_name: t.string,\n field_no_registration_numbers: t.maybeNull(t.boolean),\n field_bignr: t.maybeNull(t.string),\n field_birthdate: t.maybeNull(IsoDate),\n field_company_name: t.maybeNull(t.string),\n field_gender: t.maybeNull(t.string),\n field_initials: t.maybeNull(t.string),\n field_kabiznr: t.maybeNull(t.string),\n field_kngfnr: t.maybeNull(t.string),\n field_krmnr: t.maybeNull(t.string),\n field_last_name: t.maybeNull(t.string),\n field_rbnr: t.maybeNull(t.string),\n login: t.maybeNull(IsoDate),\n field_accepted_gdpr: t.maybeNull(t.boolean),\n field_accountants_type: t.maybeNull(t.string),\n field_fysio_deelregister: t.maybeNull(t.array(t.string)),\n field_rechtsgebieden: t.array(t.maybeNull(t.string)),\n field_nirv_number: t.maybeNull(t.string),\n field_slpo_id: t.maybeNull(t.string),\n field_function: t.maybeNull(t.string),\n field_somn_member: t.maybeNull(t.boolean),\n field_vvn_nr: t.maybeNull(t.string),\n field_nova_number: t.maybeNull(t.string)\n }),\n relationships: t.model({\n roles: t.maybe(RelUserRole),\n user_picture: t.maybeNull(RelFile),\n course_favorites: t.maybeNull(RelCourses),\n field_lms_groups: t.maybeNull(\n t.model({\n data: t.array(\n t.model({\n type: t.string,\n id: t.string\n })\n )\n })\n ),\n products: RelProducts,\n professions: t.model({\n data: t.array(\n t.model({\n id: t.reference(Profession),\n type: t.string\n })\n )\n })\n })\n })\n .volatile(() => ({\n settingSource: 'profile',\n updateCourseFavoritesState: t.optional(t.enumeration(['init', 'pending', 'done', 'error']), 'init')\n }))\n .views((self) => ({\n get products() {\n if (self.relationships.products.productrefs) {\n return self.relationships.products.productrefs;\n }\n return [];\n },\n\n get favoriteCourses() {\n if (self.relationships.course_favorites.courserefs) {\n return self.relationships.course_favorites.courserefs;\n }\n return [];\n },\n\n get lmsApi() {\n return getParent(self).lmsApi;\n }\n }))\n .actions((self) => ({\n /**\n * Set the API error state and message\n *\n * @param stateName\n * @param err\n * @param errPage\n */\n setApiErrorState(stateName = '', err = '', errPage = {}) {\n self.error = err;\n self[stateName] = 'error';\n\n if (self.error.status === 401 || self.error.status === 403) {\n self.gotoErrorPage(errPage);\n }\n },\n\n /**\n * Persist the current state of\n * course favorites to the backend\n *\n * @param courseFavorites\n * @returns {Promise<*>}\n */\n persistCourseFavorites(courseFavorites) {\n return self.lmsApi.APIPersistCourseFavorites(courseFavorites, self).catch((error) => {\n self.setApiErrorState('courseEditState', error, {\n title: 'Error loading course',\n message: 'No access',\n statuscode: self.error?.status.toString()\n });\n });\n },\n\n /**\n * Set the local state of course favorites\n *\n * @param courseFavorites\n * @returns {*}\n */\n setLocalCourseFavorites(courseFavorites) {\n self.relationships.course_favorites.data = courseFavorites;\n return self.relationships.course_favorites.data;\n },\n\n /**\n * Toggle a course as favorite\n *\n * @param courseId\n */\n toggleFavoriteCourse(courseId) {\n const courseFavoritesArray = Array.from(self.relationships.course_favorites.data.values());\n\n const isCurrentlyFavorited = courseFavoritesArray.findIndex((value) => value.id.id === courseId);\n\n if (isCurrentlyFavorited !== -1) {\n courseFavoritesArray.splice(isCurrentlyFavorited, 1);\n } else {\n courseFavoritesArray.push({\n id: courseId,\n type: 'course'\n });\n }\n\n return self.persistCourseFavorites(courseFavoritesArray).then(() => self.setLocalCourseFavorites(courseFavoritesArray));\n },\n\n setSettingsSource(type) {\n self.settingSource = type;\n }\n }));\n\nexport const RelUser = t.model('RelUser', {\n data: t.model({\n id: t.reference(User),\n type: t.string\n })\n});\n","import { types as t } from 'mobx-state-tree';\nimport { RelPackages } from './Package';\nimport { RelUser } from './User';\nimport { DateRange, Body, IsoDate } from './BaseModel';\n\nexport const Contract = t\n .model('Contract', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n langcode: t.string,\n status: t.boolean,\n title: t.string,\n body: t.maybeNull(Body),\n created: IsoDate,\n changed: IsoDate,\n promote: t.boolean,\n default_langcode: t.boolean,\n // subscription_status: t.maybeNull(t.string),\n contract: t.maybeNull(t.string),\n // guid: t.maybeNull(t.string),\n maximum_points: t.number,\n maximum_subscriptions: t.number,\n valid_period: DateRange\n }),\n relationships: t.model({\n packages: t.maybeNull(RelPackages),\n customer: RelUser\n })\n })\n .views((self) => ({\n get packages() {\n if (self.relationships.packages) {\n return self.relationships.packages.packagerefs;\n }\n return [];\n }\n }));\n\nexport const RelContract = t.model('RelContract', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Contract),\n type: t.string\n })\n )\n});\n","import { types as t } from 'mobx-state-tree';\nimport { RelProduct } from './Product';\nimport { RelContract } from './Contract';\nimport { RelUser } from './User';\nimport { DateRange, Body } from './BaseModel';\n\nexport const Subscription = t\n .model('Subscription', {\n id: t.identifier,\n type: t.string,\n attributes: t.model({\n drupal_internal__nid: t.number,\n langcode: t.maybeNull(t.string),\n status: t.boolean,\n title: t.string,\n body: t.maybeNull(Body),\n created: t.string,\n changed: t.string,\n default_langcode: t.maybeNull(t.string),\n subscription_status: t.maybeNull(t.string),\n contract: t.maybeNull(t.string),\n guid: t.maybeNull(t.string),\n maximum_points: t.number,\n valid_period: DateRange\n }),\n relationships: t.model({\n product: RelProduct,\n student: RelUser,\n contract: t.maybeNull(RelContract)\n })\n })\n .views((self) => ({\n get product() {\n if (self.relationships.product && self.relationships.product.data) {\n return self.relationships.product.data.id;\n }\n return null;\n },\n get contract() {\n if (self.relationships.contract && self.relationships.contract.data) {\n return self.relationships.contract.data.id;\n }\n return null;\n }\n }));\n\nexport const RelSubscription = t.model('RelSubscription', {\n data: t.maybeNull(\n t.model({\n id: t.reference(Subscription),\n type: t.string\n })\n )\n});\n\nexport const RelSubscriptions = t.model('RelSubscription', {\n data: t.maybeNull(\n t.array(\n t.model({\n id: t.reference(Subscription),\n type: t.string\n })\n )\n )\n});\n","import { types as t } from 'mobx-state-tree';\nimport { RelCourse } from './Course';\nimport { Links, RelProfession, IsoDate } from './BaseModel';\nimport { RelUser } from './User';\nimport { RelSubscription } from './Subscription';\n\nexport const CourseResult = t\n .model('CourseResult', {\n id: t.string,\n type: t.string,\n attributes: t.model({\n drupal_internal__id: t.number,\n name: t.string,\n created: IsoDate,\n changed: IsoDate,\n completed: IsoDate,\n certificate: IsoDate,\n points: t.string,\n is_accredited: t.maybeNull(t.boolean),\n data: t.maybeNull(t.string)\n }),\n links: t.maybeNull(Links),\n relationships: t.model({\n subscription: RelSubscription,\n profession: RelProfession,\n user: RelUser,\n course: RelCourse\n })\n })\n .views((self) => ({\n get isAccreditated() {\n return self.attributes.is_accredited;\n }\n }));\n\nexport const RelCourseResult = t.model('RelCourseResult', {\n data: t.maybeNull(\n t.model({\n id: t.reference(CourseResult),\n type: t.string\n })\n ),\n links: Links\n});\n\nexport const RelCourseResults = t.model('RelCourseResult', {\n data: t.maybeNull(\n t.array(\n t.model({\n id: t.reference(CourseResult),\n type: t.string\n })\n )\n ),\n links: Links\n});\n","/* eslint-disable camelcase */\nimport { applySnapshot, flow } from 'mobx-state-tree';\nimport { buildLessonPages } from 'pages/play/PageParsing';\nimport * as logger from 'loglevel';\nimport { PollWidgetItem, PollWidgetList } from './PollWidget';\n\nconst log = logger.getLogger('PageParsing');\nlog.setDefaultLevel('info');\n\nexport const pollWidgetLessonPlayViews = (lessonplay) => ({\n getPollWidget(widgetCode) {\n return lessonplay.pollWidgetList?.getPollWidget(widgetCode);\n }\n});\n\nexport const pollWidgetLessonPlayActions = (lessonPlay) => ({\n createPollWidgetList(pollWidget) {\n const newWidget = PollWidgetItem.create(pollWidget);\n lessonPlay.pollWidgetList = PollWidgetList.create({ widgets: [newWidget] });\n },\n //\n fetchPollWidget: flow(function* fetchPollWidget(widgetCode) {\n const questionWidget = lessonPlay.question_widgets.find((w) => w.attributes.widget_code.toLowerCase() === widgetCode.toLowerCase());\n if (!questionWidget) {\n return;\n }\n const widget = yield lessonPlay.lmsApi.fetchPollWidget(questionWidget.attributes.widget_link);\n const pollWidget = {\n ...widget,\n widgetCode\n };\n if (lessonPlay.pollWidgetList) {\n lessonPlay.pollWidgetList.add(pollWidget);\n } else {\n lessonPlay.createPollWidgetList(pollWidget);\n }\n }),\n\n /**\n * UPDATEPOLL WIDGET\n * Create new poll widget\n * Create || Update question widget\n * Update lesson content\n */\n //\n updatePollWidget2: flow(function* updatePollWidget2(poll) {\n const status = { success: 'error', message: window.i18next.t('widgetError') };\n // ==> CREATE NEW QUESTION WIDGET\n if (!poll.id) {\n // 1. create a new node: question_widget\n try {\n let widgetLinkId = poll?.pollData?.id;\n // --> if !relationship widget_link data -> CREATE NEW POLL WIDGET\n // If there is no pollData.id => create a new poll widget\n if (!poll?.pollData?.id) {\n const newPollWidget = lessonPlay.createPollWidget(poll);\n const resPollWidget = yield lessonPlay.lmsApi.patchpost(newPollWidget);\n widgetLinkId = resPollWidget.id;\n }\n if (poll?.pollData?.id) {\n const resPollWidget = yield lessonPlay.lmsApi.patchpost(poll.pollData);\n widgetLinkId = resPollWidget.id;\n }\n // --> set correct format -> QUESTION WIDGET\n const newQuestionWidget = lessonPlay.createQuestionWidget(poll, widgetLinkId);\n const resQuestionWidget = yield lessonPlay.lmsApi.patchpost(newQuestionWidget);\n // ====== END CREATING POLL WIDGET AND QUESTION WIDGET ======\n const resQuestionWidgetRelPollNid = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n // --> set correct format -> LESSON_CONTENT\n const newQuestionWidgetId = resQuestionWidget?.id;\n // ========= CREATE LESSON CONTENT\n const newLessonContent = lessonPlay.createLessonContent(newQuestionWidgetId);\n // --> patchpost LESSON_CONTENT\n yield lessonPlay.lmsApi.patchpost(newLessonContent);\n\n // --> fetch ewapi -> RELATED POLL WIDGET\n const fetchedPollWidget = yield lessonPlay.lmsApi.fetchPollWidget(resQuestionWidgetRelPollNid);\n fetchedPollWidget.widgetCode = resQuestionWidget.attributes.widget_code;\n fetchedPollWidget.answer = null;\n // ================= ADD POLL WIDGET TO POLL WIDGET LIST\n if (lessonPlay.pollWidgetList) {\n lessonPlay.pollWidgetList.add(fetchedPollWidget);\n } else {\n lessonPlay.createPollWidgetList(fetchedPollWidget);\n }\n lessonPlay.question_widgets.push({ ...resQuestionWidget });\n lessonPlay.pageList = buildLessonPages(lessonPlay);\n lessonPlay.reload++;\n status.success = 'success';\n status.message = window.i18next.t('widgetSaved');\n //\n } catch (e) {\n console.error(e);\n window.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n throw e;\n }\n }\n // ==> UPDATE QUESTION WIDGET\n if (poll?.id) {\n const existingWidgetIndex = lessonPlay?.question_widgets?.findIndex((qw) => qw.id === poll.id);\n try {\n // get current question widget from api\n const _updateQuestionWidget = yield lessonPlay.lmsApi.fetchIt('question_widget', '', poll.id);\n const updateQuestionWidget = _updateQuestionWidget.data.data;\n // 1. first update the current poll widget\n let widgetLinkId = poll?.pollData?.id;\n if (!poll?.pollData?.id) {\n const newPollWidget = lessonPlay.createPollWidget(poll);\n const resPollWidget = yield lessonPlay.lmsApi.patchpost(newPollWidget);\n widgetLinkId = resPollWidget.id;\n }\n if (poll?.pollData?.id) {\n const resPollWidget = yield lessonPlay.lmsApi.patchpost(poll.pollData);\n widgetLinkId = resPollWidget.id;\n }\n\n updateQuestionWidget.attributes.title = poll.attributes.title;\n updateQuestionWidget.relationships.widget_link.data = {\n type: 'poll_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n };\n\n const resQuestionWidget = yield lessonPlay.lmsApi.patchpost(updateQuestionWidget);\n resQuestionWidget.attributes.widget_link = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n resQuestionWidget.attributes.widget_link_uuid = resQuestionWidget.relationships.widget_link.data.id;\n const resQuestionWidgetNid = resQuestionWidget.relationships?.widget_link?.data?.meta.drupal_internal__target_id;\n // FETCH THE NEW RELATED POLL WIDGET\n const fetchedPollWidget = yield lessonPlay.lmsApi.fetchPollWidget(resQuestionWidgetNid);\n fetchedPollWidget.widgetCode = resQuestionWidget.attributes.widget_code;\n const existingPollIndex = lessonPlay.pollWidgetList.widgets.findIndex((pw) => pw.widgetCode === poll.attributes.widget_code);\n applySnapshot(lessonPlay.pollWidgetList.widgets[existingPollIndex], fetchedPollWidget);\n // QUESTION_WIDGETS\n applySnapshot(lessonPlay.question_widgets[existingWidgetIndex], resQuestionWidget);\n if (lessonPlay.pollWidgetList) {\n lessonPlay.pollWidgetList.add(fetchedPollWidget);\n } else {\n lessonPlay.createPollWidgetList(fetchedPollWidget);\n }\n status.success = 'success';\n status.message = window.i18next.t('widgetSaved');\n } catch (e) {\n window.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n console.error(e);\n throw e;\n }\n }\n // ==> RETURN STATUS\n return status;\n //\n }),\n //\n\n editPollWidget: flow(function* addPollWidget(widget) {\n yield JSON.stringify(widget, null, 2);\n }),\n //\n // returns correct format new -> poll_widget\n createPollWidget(poll) {\n return {\n type: 'poll_widget',\n attributes: {\n title: poll.pollData.attributes.title,\n body: {\n value: poll.pollData.attributes.body.value\n },\n poll_options: poll.pollData.attributes.poll_options\n }\n };\n },\n //\n // returns correct format new -> question_widget\n patchQuestionWidget(qw, widgetLinkId) {\n return {\n id: qw.id,\n type: 'question_widget',\n attributes: {\n title: qw.attributes.title,\n weight: qw.attributes.weight,\n widget_code: qw.attributes.widget_code,\n widget_type: 'Poll widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'poll_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n }\n }\n }\n };\n },\n // returns correct format update -> question_widget\n createQuestionWidget(poll, widgetLinkId) {\n return {\n type: 'question_widget',\n attributes: {\n title: poll.attributes.title,\n weight: poll.attributes.weight,\n widget_code: poll.attributes.widget_code,\n widget_data: null,\n widget_type: 'Poll widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'poll_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n }\n }\n }\n };\n },\n\n //\n // returns correct format update -> lesson_content\n createLessonContent(questionWidgetId) {\n const {\n id,\n type,\n attributes: { title }\n } = lessonPlay.lesson_content;\n //\n const lesson_content_widgets = {\n data: [...lessonPlay.question_widgets.map((qw) => ({ id: qw.id, type: qw.type })), { type: 'question_widget', id: questionWidgetId }]\n };\n return { id, type, attributes: { title }, relationships: { lesson_content_widgets } };\n },\n //\n hasRelatedPoll(control) {\n let relPoll = { id: '', question: '', options: [] };\n const pollLink = control._formValues.attributes?.widget_link;\n if (pollLink) {\n const relatedPoll = lessonPlay.pollWidgetList.widgets.find((w) => w.nid === pollLink);\n const question = relatedPoll.poll.body;\n const options = relatedPoll.poll.options.map((p) => p.value);\n relPoll = { id: '1', question, options };\n }\n return relPoll;\n },\n\n getDefaultValueLinkedPoll(control) {\n const pollLink = control._formValues.attributes?.widget_link;\n let iniValue = [];\n if (pollLink) {\n const relatedPoll = lessonPlay.pollWidgetList.widgets.find((w) => w.nid === pollLink);\n const internalTitle = relatedPoll?.poll.internal_title;\n iniValue = internalTitle ? [{ attributes: { title: internalTitle } }] : [];\n }\n return iniValue;\n },\n\n isLinkedPoll(poll) {\n return !!poll.relationships.data;\n }\n});\n","/* eslint-disable camelcase */\nimport { flow, applySnapshot } from 'mobx-state-tree';\nimport * as logger from 'loglevel';\nimport { buildLessonPages } from 'pages/play/PageParsing';\nimport { WordCloudItem, WordCloudList } from './WordCloud';\n\nconst log = logger.getLogger('LessonPlay');\nlog.setDefaultLevel('info');\n\nexport const wordCloudLessonPlayViews = (lessonplay) => ({\n getWordCloud(widgetCode) {\n return lessonplay.wordCloudList?.getWordCloud(widgetCode);\n }\n});\n\nexport const wordCloudLessonPlayActions = (lessonPlay) => ({\n createWordCloudWidget(wordCloudWidget) {\n const newWidget = WordCloudItem.create(wordCloudWidget);\n\n lessonPlay.wordCloudList = WordCloudList.create({ widgets: [newWidget] });\n },\n fetchWordCloud: flow(function* fetchWordCloud(widgetCode) {\n const questionWidget = lessonPlay.question_widgets.find((w) => w.attributes.widget_code.toLowerCase() === widgetCode.toLowerCase());\n if (!questionWidget) {\n return;\n }\n const widget = yield lessonPlay.lmsApi.fetchWordCloud(questionWidget.attributes.widget_link);\n\n const wordCloud = {\n ...widget,\n widgetCode\n };\n if (lessonPlay.wordCloudList) {\n lessonPlay.wordCloudList.add(wordCloud);\n } else {\n lessonPlay.createWordCloudWidget(wordCloud);\n }\n }),\n\n updateWordcloudWidget: flow(function* updateWordcloudWidget(values) {\n const status = { success: 'error', message: window.i18next.t('widgetError') };\n if (!values.id) {\n // 1. create a new node: question_widget\n try {\n let widgetLinkId = values?.wordcloudData?.id;\n // ======== CREATE or UPDATE WORDCLOUD WIDGET ===============\n // --- create wordcloud widget\n if (!values?.wordcloudData?.id) {\n const newWordcloudWidget = lessonPlay.createWordcloudWidget(values);\n const resWordcloudWidget = yield lessonPlay.lmsApi.patchpost(newWordcloudWidget);\n widgetLinkId = resWordcloudWidget.id;\n }\n // --- update wordcloud widget\n if (values?.wordcloudData?.id) {\n const resWordcloudWidget = yield lessonPlay.lmsApi.patchpost(values.wordcloudData);\n widgetLinkId = resWordcloudWidget.id;\n }\n // ========== CREATE or UPDATE QUESTION WIDGET =======================\n const newQuestionWidget = lessonPlay.createQuestionWidget(values, widgetLinkId);\n const resQuestionWidget = yield lessonPlay.lmsApi.patchpost(newQuestionWidget);\n // update the question widget with the widget_link and uuid\n resQuestionWidget.attributes.widget_link = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n resQuestionWidget.attributes.widget_link_uuid = resQuestionWidget.relationships.widget_link.data.id;\n\n // ========= LESSON CONTENT ===================\n const newLessonContent = lessonPlay.createLessonContent(resQuestionWidget.id);\n yield lessonPlay.lmsApi.patchpost(newLessonContent);\n\n // ========== FETCH THE WIDGET ===================\n // const resQuestionWidgetRelWordcloudNid = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n const fetchedWordcloudWidget = yield lessonPlay.lmsApi.fetchWordCloud(resQuestionWidget.attributes.widget_link);\n fetchedWordcloudWidget.widgetCode = resQuestionWidget.attributes.widget_code;\n fetchedWordcloudWidget.answer = null;\n\n // ========= ADD WORDCLOUD WIDGET TO WORDCLOUDLIST ====================\n if (lessonPlay.wordCloudList) {\n lessonPlay.wordCloudList.add(fetchedWordcloudWidget);\n } else {\n lessonPlay.createWordCloudWidget(fetchedWordcloudWidget);\n }\n\n lessonPlay.question_widgets.push(resQuestionWidget);\n lessonPlay.pageList = buildLessonPages(lessonPlay);\n lessonPlay.reload++;\n status.success = 'success';\n status.message = window.i18next.t('widgetSaved');\n //\n } catch (e) {\n console.error(e);\n window.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n throw e;\n }\n }\n // ==> UPDATE QUESTION WIDGET\n if (values?.id) {\n try {\n // get current question widget from api\n const _updateQuestionWidget = yield lessonPlay.lmsApi.fetchIt('question_widget', '', values.id);\n const updateQuestionWidget = _updateQuestionWidget.data.data;\n // update question widget title (can be changed)\n updateQuestionWidget.attributes.title = values.attributes.title;\n\n // ======= create or update wordcloud widget =========\n let widgetLinkId = values?.wordcloudData?.id;\n // --- create wordcloud widget\n if (!values?.wordcloudData?.id) {\n const newWordcloudWidget = lessonPlay.createWordcloudWidget(values);\n const resWordcloudWidget = yield lessonPlay.lmsApi.patchpost(newWordcloudWidget);\n widgetLinkId = resWordcloudWidget.id;\n }\n // --- update wordcloud widget\n if (values?.wordcloudData?.id) {\n const resWordcloudWidget = yield lessonPlay.lmsApi.patchpost(values.wordcloudData);\n widgetLinkId = resWordcloudWidget.id;\n }\n\n updateQuestionWidget.relationships.widget_link.data = {\n type: 'poll_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n };\n\n // ========== CREATE or UPDATE QUESTION WIDGET =======================\n const resQuestionWidget = yield lessonPlay.lmsApi.patchpost(updateQuestionWidget);\n // update the question widget with the widget_link and uuid\n resQuestionWidget.attributes.widget_link = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n resQuestionWidget.attributes.widget_link_uuid = resQuestionWidget.relationships.widget_link.data.id;\n\n // ========= LESSON CONTENT ===================\n const newLessonContent = lessonPlay.createLessonContent(resQuestionWidget.id);\n yield lessonPlay.lmsApi.patchpost(newLessonContent);\n\n // ========== FETCH THE WIDGET ===================\n // const resQuestionWidgetRelWordcloudNid = resQuestionWidget.relationships.widget_link.data.meta.drupal_internal__target_id;\n const fetchedWordcloudWidget = yield lessonPlay.lmsApi.fetchWordCloud(resQuestionWidget.attributes.widget_link);\n fetchedWordcloudWidget.widgetCode = resQuestionWidget.attributes.widget_code;\n fetchedWordcloudWidget.answer = null;\n\n // GET THE INDEX OF THE WORDCLOUD WIDGET IN THE WORDCLOUD WIDGET LIST\n const existingWordCloudWidgetIndex = lessonPlay.wordCloudList.widgets.findIndex(\n (pw) => pw.widgetCode === values.attributes.widget_code\n );\n // WORDCLOUD WIDGETS\n applySnapshot(lessonPlay.wordCloudList.widgets[existingWordCloudWidgetIndex], fetchedWordcloudWidget);\n // QUESTION_WIDGETS\n const existingQuestionWidgetIndex = lessonPlay?.question_widgets?.findIndex((qw) => qw.id === values.id);\n applySnapshot(lessonPlay.question_widgets[existingQuestionWidgetIndex], resQuestionWidget);\n // ========= ADD WORDCLOUD WIDGET TO WORDCLOUDLIST ====================\n if (lessonPlay.wordCloudList) {\n lessonPlay.wordCloudList.add(fetchedWordcloudWidget);\n } else {\n lessonPlay.createWordCloudWidget(fetchedWordcloudWidget);\n }\n status.success = 'success';\n status.message = window.i18next.t('widgetSaved');\n } catch (e) {\n window.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n console.error(e);\n throw e;\n }\n }\n //\n //\n // ==> RETURN STATUS\n return status;\n //\n }),\n\n addWordCloudWidget: flow(function* addWordCloudWidget(values) {\n const { title, question, show_fields, input_required, widget_code } = values.attributes;\n // Does the widget exist in lessonplay\n const existingWidgetIndex = lessonPlay.question_widgets.findIndex((qw) => qw.id === values.id);\n\n let widgetLinkId = values.relationships.widget_link?.data?.id;\n let wordCloudWidget;\n\n try {\n if (existingWidgetIndex >= 0) {\n const patchWidget = {\n id: values.id,\n type: values.type,\n attributes: {\n title: values.attributes.title,\n weight: values.attributes.weight,\n widget_code: values.attributes.widget_code,\n widget_type: values.attributes.widget_type\n },\n relationships: {\n widget_link: {\n data: {\n type: 'wordcloud_widget',\n id: values.relationships.widget_link.data.id,\n meta: {\n target_type: 'node'\n }\n }\n },\n lesson_content_link: values.relationships.lesson_content_link\n }\n };\n const wordCloudWidgetDataEdit = {\n nid: values.attributes.widget_link,\n widgetCode: widget_code,\n wordcloud: {\n body: question,\n input_required: input_required ? 1 : 0,\n internal_title: title,\n profession: null,\n show_fields,\n user_has_answered: 0,\n words: []\n }\n };\n const existingWordCloudIndex = lessonPlay.wordCloudList.widgets.findIndex((widget) => widget.widgetCode === widget_code);\n applySnapshot(lessonPlay.question_widgets[existingWidgetIndex], patchWidget);\n applySnapshot(lessonPlay.wordCloudList.widgets[existingWordCloudIndex], wordCloudWidgetDataEdit);\n yield lessonPlay.lmsApi.patchpost(patchWidget);\n }\n\n if (existingWidgetIndex < 0) {\n if (!values.relationships.widget_link.data) {\n // create word could widget\n const newWordCloudWidget = {\n data: {\n type: 'wordcloud_widget',\n attributes: {\n title,\n body: {\n value: question\n },\n input_required,\n show_fields\n }\n }\n };\n const wordCloud = yield lessonPlay.lmsApi.createWordCloudWidget(newWordCloudWidget);\n wordCloudWidget = wordCloud.wordCloudWidget;\n widgetLinkId = wordCloudWidget.data.id;\n }\n const questionWidgetData = {\n data: {\n type: 'question_widget',\n attributes: {\n title,\n weight: 0,\n widget_code,\n widget_data: null,\n widget_type: 'Wordcloud Widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'wordcloud_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n }\n }\n }\n }\n };\n\n // Create a new question_widget of type wordcloud_widget and linked to the wordcloud widget\n\n const {\n id,\n type,\n attributes: { drupal_internal__id, title: lessonTitle }\n } = lessonPlay.lesson_content;\n const lesson_content_widgets = {\n data: [\n ...lessonPlay.question_widgets.map((qw) => ({ id: qw.id, type: qw.type })),\n { type: 'question_widget', id: '{{questionwidget.body@$.data.id}}' }\n ]\n };\n const lessonContentData = {\n data: { id, type, attributes: { drupal_internal__id, title: lessonTitle }, relationships: { lesson_content_widgets } }\n };\n\n // ======== CREATE QUESTION WIDGET + UPDATE LESON CONTENT\n const response = yield lessonPlay.lmsApi.createWordCloudQuestionWidget({ questionWidgetData, lessonContentData });\n\n const { questionwidget } = response;\n const inputRequired = input_required ? 1 : 0;\n const wordCloudWidgetData = {\n nid:\n wordCloudWidget?.data.attributes.drupal_internal__nid ||\n questionwidget.data.relationships.widget_link.data.meta.drupal_internal__target_id,\n widgetCode: widget_code,\n wordcloud: {\n body: wordCloudWidget?.data.attributes.body.value || question,\n input_required: wordCloudWidget?.data.attributes.input_required ? 1 : inputRequired,\n internal_title: wordCloudWidget?.data.attributes.title || title,\n profession: null,\n show_fields: wordCloudWidget?.data.attributes.show_fields || show_fields,\n user_has_answered: 0,\n words: []\n }\n };\n\n // ==================== ADD WORDCLOUD WIDGET TO WORDCLOUDLIST ====================\n if (lessonPlay.wordCloudList) {\n lessonPlay.wordCloudList.add(wordCloudWidgetData);\n } else {\n lessonPlay.createWordCloudWidget(wordCloudWidgetData);\n }\n\n lessonPlay.question_widgets.push({ ...questionWidgetData.data, ...response.questionwidget.data });\n\n lessonPlay.pageList = buildLessonPages(lessonPlay);\n lessonPlay.reload++;\n }\n } catch (e) {\n log.error(e);\n }\n }),\n\n // ================================================\n // returns correct format new -> wordcloud_widget\n createWordcloudWidget(values) {\n return {\n type: 'wordcloud_widget',\n attributes: {\n title: values.wordcloudData.attributes.title,\n body: {\n value: values.wordcloudData.attributes.body.value\n },\n input_required: values.wordcloudData.attributes.input_required,\n show_fields: values.wordcloudData.attributes.show_fields\n }\n };\n },\n\n // returns correct format update -> question_widget\n createQuestionWidget(values, widgetLinkId) {\n return {\n type: 'question_widget',\n attributes: {\n title: values.attributes.title,\n weight: values.attributes.weight,\n widget_code: values.attributes.widget_code,\n widget_data: null,\n widget_type: 'Wordcloud Widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'wordcloud_widget',\n id: widgetLinkId,\n meta: {\n target_type: 'node'\n }\n }\n }\n }\n };\n },\n\n // returns correct format update -> lesson_content\n createLessonContent(questionWidgetId) {\n const {\n id,\n type,\n attributes: { title }\n } = lessonPlay.lesson_content;\n //\n const lesson_content_widgets = {\n data: [...lessonPlay.question_widgets.map((qw) => ({ id: qw.id, type: qw.type })), { type: 'question_widget', id: questionWidgetId }]\n };\n return { id, type, attributes: { title }, relationships: { lesson_content_widgets } };\n },\n\n getDefaultValueLinkedWordCloud(control) {\n const pollLink = control._formValues.attributes?.widget_link;\n\n let iniValue = [];\n if (pollLink) {\n const relatedPoll = lessonPlay.wordCloudList?.widgets.find((w) => w.nid === pollLink);\n const internalTitle = relatedPoll?.wordcloud.internal_title;\n iniValue = internalTitle ? [{ attributes: { title: internalTitle } }] : [];\n }\n return iniValue;\n }\n});\n","/* eslint-disable camelcase */\nimport { types as t, applySnapshot, getSnapshot, flow, getEnv } from 'mobx-state-tree';\nimport * as logger from 'loglevel';\nimport { buildLessonPages } from 'pages/play/PageParsing';\nimport cloneDeep from 'lodash/cloneDeep';\nimport axios from 'axios';\nimport Cmi5 from '@xapi/cmi5';\nimport { createCmi5JourneyHooks } from 'helpers/cmi5';\nimport { isCourseFailed } from 'helpers/Helpers';\nimport * as Sentry from '@sentry/react';\nimport { shuffledQuestionWidgetsArray } from 'pages/play//lib/shuffledQuestionWidgetsArray';\nimport { LessonContent } from './LessonContent';\nimport { Lesson } from './Lesson';\nimport { LessonResult } from './LessonResult';\nimport { CourseResult } from './CourseResult';\nimport { QuestionWidget } from './QuestionWidget';\nimport { PollWidgetList, pollWidgetLessonPlayActions, pollWidgetLessonPlayViews } from './PollWidget';\nimport { wordCloudLessonPlayActions, WordCloudList, wordCloudLessonPlayViews } from './WordCloudWidget';\n\nconst log = logger.getLogger('LessonPlay');\nlog.setDefaultLevel('info');\n\nexport const LessonPlay = t\n .model('LessonPlay', {\n lesson: Lesson,\n lesson_content: t.maybeNull(LessonContent),\n question_widgets: t.maybeNull(t.array(QuestionWidget)),\n lesson_result: t.maybeNull(LessonResult),\n pollWidgetList: t.maybeNull(PollWidgetList),\n wordCloudList: t.maybeNull(WordCloudList),\n allQuestionWidgets: t.maybeNull(t.array(QuestionWidget))\n })\n .volatile(() => ({\n store: null,\n jsonApi: null,\n cmi5Client: null,\n lmsApi: null,\n movement: { direction: '', left: '', right: '', center: '' }, // Horizontal page scroll\n location: undefined, // For scroll to vertical page location (#id)\n prevPage: null,\n pageNo: null,\n selectedToc: null,\n pageList: [], // pageList of cached pages.\n isNextPageEnabled: false, // Cannot be derrived (view-method or computed) because pageList in volatile is not deeply observable\n isTocScroll: false,\n reload: 0,\n isOpenWm: false,\n widgetCode: '',\n widgetMenuItem: { action: 'new', widgetId: '' },\n courseResult: t.maybeNull(CourseResult),\n reflectionList: [],\n isSaving: '',\n showDependingPopup: false,\n dependingCourse: null\n }))\n .views((self) => ({\n get jsonWidgets() {\n return self.question_widgets;\n },\n get pages() {\n return self.lesson_content.attributes.pages;\n },\n questionsAnswered(pageNo) {\n pageNo = pageNo || self.pageNo;\n pageNo = self.pageNo === 0 ? 1 : pageNo;\n\n return self.pageList[pageNo - 1].questionsAnswered === self.pageList[pageNo - 1].countQuestions;\n },\n get allQuestionsAnswered() {\n for (let i = 1; i <= self.totalPages; i++) {\n if (!self.questionsAnswered(i)) return false;\n }\n return true;\n },\n get highestSelectableToc() {\n // Only used for Cypress testing\n if (self.freeFlow === 'Off') {\n const lastEnabled = self.canPageBeCompleted(self.page_id_max) ? self.page_id_max + 1 : self.page_id_max;\n return self.reverseToc.find((toc) => toc.pagenr <= lastEnabled).id;\n }\n return self.reverseToc[0].id; // Allways the last toc-line\n },\n\n wasNeighbourPage() {\n return self.prevPage && (self.prevPage - 1 === self.pageNo || self.prevPage + 1 === self.pageNo);\n },\n\n isPageEnabled(pageNo = self.pageNo) {\n return (\n self.freeFlow !== 'Off' || pageNo <= self.page_id_max || (pageNo === self.page_id_max + 1 && self.questionsAnswered(pageNo - 1))\n );\n },\n\n canPageBeCompleted(pageNo) {\n if (self.freeFlow !== 'Full') {\n return pageNo < self.page_id_max || (pageNo === self.page_id_max && self.questionsAnswered(pageNo));\n }\n return self.questionsAnswered(pageNo);\n },\n\n isPageCompleted(pageNo) {\n return self.lesson_result.attributes.pages[pageNo - 1]?.completed;\n },\n\n getValidPage(pageNo) {\n pageNo = Math.abs(pageNo);\n if (pageNo <= 1) return pageNo;\n if (self.freeFlow === 'Full') return Number.isNaN(pageNo) || pageNo > self.totalPages ? 1 : pageNo;\n if (\n Number.isNaN(parseInt(pageNo, 10)) ||\n (self.freeFlow === 'Off' && (pageNo > self.page_id_max + 1 || !self.questionsAnswered(pageNo - 1)))\n ) {\n return self.page_id_max || 1;\n }\n if (pageNo > self.totalPages) return self.totalPages;\n return pageNo;\n },\n\n get canFinishLesson() {\n if (self.freeFlow === 'Full') return self.allQuestionsAnswered;\n return self.page_id_max === self.totalPages && this.canPageBeCompleted(self.page_id_max);\n },\n get freeFlow() {\n return self.lesson.attributes.free_flow;\n },\n showResumeBar(pageNo = self.pageNo) {\n return self.freeFlow === 'Normal' && !(self.page_id_max === pageNo || (self.page_id_max + 1 === pageNo && self.waitIncreasePageNo));\n },\n get page_id_max() {\n return self.lesson_result.attributes.page_id_max;\n },\n get widgets() {\n return self.lesson_content.attributes.widgets;\n },\n get widgetsOnPageMax() {\n return self.lesson_content.attributes.widgets[self.page_id_max - 1];\n },\n // get mappedPageWidgets() {\n // if (self.widgetOnPage().length < 1) return false;\n // const pageWidgets = self.widgetsOnPageMax().map((w) => {\n // const pageWidgetQuestionProperties = _getQuestionWidgetProperties(w);\n // const pageWidgetAnsweredProperties = _getLessonResultQuestionProperties(pageWidgetQuestionProperties);\n // return { ...pageWidgetQuestionProperties, ...pageWidgetAnsweredProperties };\n // });\n // },\n get totalPages() {\n return self.lesson_content.attributes.pages.length;\n },\n get title() {\n return self.lesson.attributes.title;\n },\n get reverseToc() {\n return [...self.lesson_content.attributes.toc].reverse();\n },\n get isLti() {\n return self.lesson_result.attributes.is_lti > 0;\n },\n allowedTries(widget) {\n // Show greyout without feedback\n const showFeedback1 = self.store?.lessonPlay?.lesson?.attributes['1answer_nofeedback'] || false;\n // Show color without feedback\n const showFeedback2 = self.store?.lessonPlay?.lesson?.attributes['1answer_visualfeedback'] || false;\n // Define max attempts for this widget\n const maxAttempts = !showFeedback1 && !showFeedback2 ? 2 : 1;\n return widget.attributes.widget_type === 'Radio Question' && widget.attributes.options.length === 2 ? 1 : maxAttempts;\n },\n isChildPage(parentPageNo, childPageNo) {\n if (childPageNo <= parentPageNo) return false;\n const foundParent = self.nestedToc.find((page) => {\n if (page.list.length) {\n return page.list.find((childPage) => childPage.details.pagenr >= childPageNo);\n }\n return false;\n });\n return !!(foundParent && foundParent.details.pagenr === parentPageNo);\n },\n get nestedToc() {\n // timer(\"build nested TOC\");\n const newToc = self.lesson_content.attributes.toc.reduce((tocList, chapter) => {\n if (chapter.level === 0) {\n tocList.push({ details: chapter, list: [] });\n } else {\n tocList[tocList.length - 1].list.push({ details: chapter });\n }\n return tocList;\n }, []);\n // log.debug(timer(\"build nested TOC\"));\n return newToc;\n },\n getLessonResultQuestion(widget) {\n const lr = self.lesson_result;\n\n let question;\n if (lr.attributes.questions) {\n question = lr.attributes.questions.find((q) => q.questionId === widget.id);\n } else lr.attributes.questions = [];\n if (!question) {\n question = {};\n question.questionId = widget.id;\n question.type = widget.widgetType;\n question.weight = widget.attributes.weight;\n question.last_correct = false;\n question.tries = 0;\n }\n return question;\n }\n }))\n // # views --> useWidget.jsx\n .views((self) => ({\n get answeredQuestions() {\n return JSON.parse(JSON.stringify(self.lesson_result.attributes.questions));\n // return self.lesson_result.attributes.questions;\n },\n get widgetsOnPageMaxWithRelatedWidgetType() {\n return true;\n },\n // ------- GET FIRST QUESTION FROM PAGEWIDGETS ---------\n get getFirstQuestionFromPageWidgets() {\n const firstQuestions = self.widgetsOnPageMaxWithRelatedWidgetType.filter((pw) => pw.widget_type.includes('Question'));\n return firstQuestions.length > 0 && firstQuestions[0];\n }\n }))\n // # actions --> useWidget.jsx\n .actions((self) => ({\n getQuestionWidgetRetries(questionWidget) {\n // Show greyout without feedback / max attempts\n const showNoFeedBackForOneAnswer = self.store?.lessonPlay?.lesson?.attributes['1answer_nofeedback'] || false;\n // Show color without feedback / max attempts 1\n const showVisualFeedbackForOneAnswer = self.store?.lessonPlay?.lesson?.attributes['1answer_visualfeedback'] || false;\n\n const maxAttempts = showNoFeedBackForOneAnswer || showVisualFeedbackForOneAnswer ? 1 : 2; // Force 1 attempt\n\n return questionWidget.attributes.widget_type === 'Radio Question' && questionWidget.attributes.options.length === 2 ? 1 : maxAttempts;\n },\n getQuestionWidgetProperties(widgetCode) {\n const { question_widgets: allQuestionWidgets } = self;\n // find questionWidget in lessonPlay by widgetCode\n const questionWidget = allQuestionWidgets.find((lpQw) => lpQw.attributes.widget_code.toLowerCase() === widgetCode.toLowerCase());\n const qwValues = {};\n qwValues.foundWidget = !!questionWidget;\n if (questionWidget) {\n qwValues.qwRetries = self.getQuestionWidgetRetries(questionWidget);\n qwValues.qwWidgetCode = questionWidget.attributes.widget_code;\n qwValues.qwId = questionWidget.id;\n qwValues.qwType = questionWidget.attributes.widget_type;\n qwValues.isQuestion = questionWidget.attributes.widget_type.includes('Question');\n }\n return qwValues;\n },\n // ----> MAP THE LESSON RESULTS TO THE PAGEWIDGET\n getLessonResultQuestionProperties(pageWidget) {\n // find question result by widget id\n const lrQuestion = self.answeredQuestions.find((q) => q.questionId === pageWidget.qwId);\n const lrValues = {};\n lrValues.lrFoundWidget = false;\n lrValues.isCompleted = false;\n if (lrQuestion) {\n lrValues.lrFoundWidget = true;\n lrValues.isCompleted = lrQuestion.correct || lrQuestion.tries >= pageWidget.qwRetries;\n lrValues.lrId = lrQuestion.questionId;\n lrValues.lrTries = lrQuestion.tries;\n lrValues.lrRetries = pageWidget.qwRetries;\n lrValues.lrCorrect = lrQuestion.correct;\n lrValues.lrLast_correct = lrQuestion.last_correct;\n }\n return lrValues;\n },\n // ============= IMPORTANT ==============\n mapPageWidgets2QwAnswers() {\n const hasWidgetsOnPage = self.widgetsOnPageMax.length > 0;\n if (hasWidgetsOnPage) {\n // map data from lesson result with question widget in lesson play\n const pageWidgets = self.widgetsOnPageMax.map((w) => {\n const pageWidgetQuestionProperties = self.getQuestionWidgetProperties(w);\n const pageWidgetAnsweredProperties = self.getLessonResultQuestionProperties(pageWidgetQuestionProperties);\n return { ...pageWidgetQuestionProperties, ...pageWidgetAnsweredProperties };\n });\n return pageWidgets;\n }\n return [];\n }\n }))\n .views(pollWidgetLessonPlayViews)\n .views(wordCloudLessonPlayViews)\n .actions(pollWidgetLessonPlayActions)\n .actions(wordCloudLessonPlayActions)\n .actions((self) => ({\n afterCreate() {\n self.store = getEnv(self).store;\n self.jsonApi = self.store.jsonApi;\n self.lmsApi = self.store.lmsApi;\n if (self.page_id_max === 0) self.lesson_result.attributes.page_id_max = 1;\n self.shuffleQuestionWidget();\n self.pageList = buildLessonPages(self); // Cache pages\n self.checkPagesCompleted();\n },\n shuffleQuestionWidget() {\n const seed = parseInt(self.lesson_result.id.replace(/[^\\d]/g, ''), 10);\n self.question_widgets = shuffledQuestionWidgetsArray(self.question_widgets, seed);\n return self.question_widgets;\n },\n setNewArray(newValues) {\n self.allQuestionWidgets = newValues;\n return self.allQuestionWidgets;\n },\n\n updateWidget: flow(function* updateWidget(widget) {\n delete widget.attributes.widget_link;\n delete widget.attributes.widget_link_uuid;\n // Does the widget exist in lessonplay\n const existingWidgetIndex = self.question_widgets.findIndex((qw) => qw.id === widget.id);\n try {\n // UPDATE WIDGET\n if (existingWidgetIndex >= 0) {\n // QuestionWidget preProcessSnapshot hook replaces attributes with JSON.parse(widget_data)\n // Setting the widget_data with the new values, makes your edit widget changes not disappear\n const feedbackCorrect = widget?.attributes?.feedbackCorrect ? { feedbackCorrect: widget.attributes.feedbackCorrect } : {};\n const feedbackFalse = widget?.attributes?.feedbackFalse ? { feedbackFalse: widget.attributes.feedbackFalse } : {};\n widget.attributes.widget_data = JSON.stringify({\n ...feedbackCorrect,\n ...feedbackFalse,\n question: widget.attributes.question,\n feedback: widget.attributes.feedback,\n options: widget.attributes.options\n });\n //\n applySnapshot(self.question_widgets[existingWidgetIndex], widget);\n self.allQuestionWidgets[existingWidgetIndex] = widget;\n //\n const patchWidget = {\n id: widget.id,\n type: widget.type,\n attributes: {\n title: widget.attributes.title,\n weight: widget.attributes.weight,\n widget_code: widget.attributes.widget_code,\n widget_data: widget.attributes.widget_data,\n widget_type: widget.attributes.widget_type\n },\n relationships: {\n lesson_content_link: widget.relationships.lesson_content_link\n }\n };\n //\n // const widgetEdit = {\n // ...widget,\n // attributes: {\n // ...widget.attributes,\n // question: undefined,\n // feedback: undefined,\n // options: undefined,\n // created: undefined,\n // changed: undefined\n // }\n // };\n //\n yield self.lmsApi.patchpost(patchWidget);\n //\n }\n // NEW WIDGET => 2 actions (with 1ubrequest)\n // 1. Save the new widget\n // 2. Update lesson_content with the saved wiidget\n if (existingWidgetIndex < 0) {\n const {\n id,\n type,\n attributes: { drupal_internal__id, title }\n } = self.lesson_content;\n //\n const lesson_content_widgets = {\n data: [\n ...self.allQuestionWidgets.map((qw) => ({ id: qw.id, type: qw.type })),\n { type: 'question_widget', id: '{{widget.body@$.data.id}}' }\n ]\n };\n //\n const lessonContent = {\n id,\n type,\n attributes: {\n drupal_internal__id,\n title\n },\n relationships: {\n lesson_content_widgets\n }\n };\n // lmsApi.createWidget => subRequest\n // createWidget(questionWidget, lessonContent)\n const response = yield self.lmsApi.createWidget(widget, lessonContent);\n\n self.question_widgets.push({ ...widget, ...response.widget.data });\n self.shuffleQuestionWidget();\n self.allQuestionWidgets.push({ ...widget, ...response.widget.data });\n\n self.pageList = buildLessonPages(self);\n self.reload++;\n }\n //\n //\n self.setIsSaving('');\n self.store.showToast({ message: window.i18next.t('widgetSaved'), variant: 'success' });\n } catch (e) {\n if (e.status === 422) {\n log.info('Something is wrong');\n const { product, courseId, lessonId, productName, packageId } = self.store.routerStore.routerState.params;\n self.store.routerStore.goTo('lessonPlay', {\n params: { product, courseId, productName, packageId, lessonId, pageNo: '1' }\n });\n }\n self.setIsSaving('');\n self.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n log.error(e);\n throw e;\n }\n }),\n\n deleteWidget: flow(function* deleteWidget(widget) {\n try {\n const {\n id,\n type,\n attributes: { drupal_internal__id, title }\n } = self.lesson_content;\n self.question_widgets = self.question_widgets.filter((qw) => qw.id !== widget.id);\n self.allQuestionWidgets = self.allQuestionWidgets.filter((qw) => qw.id !== widget.id);\n\n const lesson_content_widgets = {\n data: self.allQuestionWidgets.map((qw) => ({ id: qw.id, type: qw.type }))\n };\n\n yield self.lmsApi.deleteWidget(widget, {\n id,\n type,\n attributes: { drupal_internal__id, title },\n relationships: { lesson_content_widgets }\n });\n\n self.pageList = buildLessonPages(self);\n self.reload++;\n self.setIsSaving('');\n self.store.showToast({ message: window.i18next.t('widgetDeleted'), variant: 'success' });\n } catch (e) {\n self.setIsSaving('');\n self.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n log.error(e);\n }\n }),\n\n createCmi5Client: flow(function* init() {\n let params = '';\n if (!window.location.href.includes('fetch')) {\n // This is not calling the backend, so no authed client here!\n const resp = yield axios.get('https://localhost:8090/fake-launch', {\n params: {\n course_id: self.lesson.id,\n lms_id: 'fake-lms'\n }\n });\n\n const { registration_id } = resp.data;\n const { session_id } = resp.data;\n const { agent } = resp.data;\n\n self.session_id = session_id;\n self.registration_id = registration_id;\n\n const mockParams = [\n { name: 'fetch', value: 'https://localhost:8090/fetch' },\n { name: 'endpoint', value: 'https://ec2-54-229-30-131.eu-west-1.compute.amazonaws.com/data/xAPI' },\n { name: 'registration', value: registration_id },\n { name: 'activityId', value: `https://e-wise.nl/course/${self.lesson.id}` },\n { name: 'actor', value: JSON.stringify(agent) }\n ];\n\n params = mockParams.reduce((previousValue, currentValue) => {\n if (previousValue === '') {\n previousValue = '?';\n } else {\n previousValue += '&';\n }\n return `${previousValue}${currentValue.name}=${currentValue.value}`;\n }, '');\n }\n window.history.pushState({ loaded: true }, '', params);\n\n const cmi5 = new Cmi5();\n yield cmi5.initialize();\n self.cmi5Client = cmi5;\n }),\n\n getUpdatedFormData(widget) {\n const widgetData = cloneDeep(getSnapshot(widget));\n // sonarcloud false positive on rgex below\n const uppercaseWidgetType = widgetData.attributes.widget_type.replace(/(^\\w{1})|(\\s+\\w{1})/g, (letter) => letter.toUpperCase());\n\n widgetData.attributes.widget_type = uppercaseWidgetType;\n // ___________ poll ____________________\n if (widgetData.attributes.widget_type.includes('Poll')) {\n // questionData\n widgetData.questionData = {\n id: widgetData.id,\n type: widgetData.type,\n attributes: {\n drupal_internal__nid: widgetData.attributes.drupal_internal__nid,\n title: widgetData.attributes.title,\n weight: widgetData.attributes.weight,\n widget_code: widgetData.attributes.widget_code,\n widget_type: widgetData.attributes.widget_type,\n widget_data: widgetData.attributes.widget_data,\n widget_link: widgetData.attributes.widget_link,\n widget_link_uuid: widgetData.attributes.widget_link_uuid\n }\n };\n // pollData\n widgetData.pollData = {\n id: widgetData.attributes.widget_link_uuid || '',\n attributes: {\n title: 'poll title',\n body: { value: 'poll question' },\n weight: 0,\n poll_options: ['option1', 'option2']\n }\n };\n widgetData.attributes.poll_options = ['option1', 'option2'];\n const relatedPoll = self?.pollWidgetList?.widgets?.find((w) => w.nid === widgetData.attributes.widget_link);\n widgetData.attributes.question = relatedPoll.poll.body;\n widgetData.attributes.relPollOptions = cloneDeep(getSnapshot(relatedPoll.poll.options));\n }\n //\n // ___________ wordcloud ____________________\n if (widgetData.attributes.widget_type.includes('Wordcloud')) {\n // questionData\n widgetData.questionData = {\n id: widgetData.id,\n type: widgetData.type,\n attributes: {\n drupal_internal__nid: widgetData.attributes.drupal_internal__nid,\n title: widgetData.attributes.title,\n weight: widgetData.attributes.weight,\n widget_code: widgetData.attributes.widget_code,\n widget_type: widgetData.attributes.widget_type,\n widget_data: widgetData.attributes.widget_data,\n widget_link: widgetData.attributes.widget_link,\n widget_link_uuid: widgetData.attributes.widget_link_uuid\n }\n };\n // wordcloudData\n widgetData.wordcloudData = {\n id: widgetData.attributes.widget_link_uuid || ''\n };\n }\n return widgetData;\n },\n\n toggleWidgetMenu(action = 'new', widgetId = '') {\n self.isOpenWm = !self.isOpenWm;\n self.widgetCode = widgetId;\n self.widgetMenuItem.action = action;\n self.widgetMenuItem.widgetId = widgetId;\n },\n\n setContent(content) {\n const differentCourse = self.lesson_content.attributes.documentTitle !== content.attributes.documentTitle;\n const belowCurrentPage = content.attributes.pages.length < self.pageNo;\n\n self.setTitle(self.lesson.title || content.attributes.documentTitle);\n self.lesson_content = content;\n self.pageList = buildLessonPages(self);\n if (differentCourse) {\n self.resetLessonToPage(1);\n } else if (belowCurrentPage) {\n self.pageNo = 1;\n }\n self.reload++;\n },\n\n // page_id_max should always be the furthest visited page (not one past that)\n setPageIdMax() {\n if (self.freeFlow === 'Full') return;\n if (self.pageNo === self.page_id_max + 1) {\n self.lesson_result.attributes.page_id_max += 1;\n }\n },\n\n checkPagesCompleted() {\n const lr = self.lesson_result;\n // Make sure all pages have a completed property\n // Not full freeflow? Make sure all pages before page_id_max are set as completed\n const lrPagesLength = self.freeFlow === 'Full' && lr.attributes.pages.length ? lr.attributes.pages.length : 0;\n for (let i = lrPagesLength; i < self.pageList.length; i++) {\n lr.attributes.pages[i] = { completed: i < self.page_id_max };\n }\n },\n\n setSelectedToc(selectedToc) {\n if (selectedToc === -1) {\n const { reverseToc } = self;\n const toc = reverseToc.find((reverseTocItem) => reverseTocItem.pagenr < self.pageNo);\n self.selectedToc = toc ? toc.id : undefined;\n } else {\n self.selectedToc = selectedToc;\n }\n },\n\n setTocScrollInProgress(isTocScroll) {\n self.isTocScroll = isTocScroll;\n },\n\n getNeighbourLocation(currentLocation, direction) {\n const { toc } = self.lesson_content.attributes;\n const index = toc.findIndex((item) => item.id === currentLocation);\n if (index > 0) return toc[index + direction].id;\n return null;\n },\n\n setLocation(location) {\n self.location = location;\n },\n\n setTitle(title) {\n self.lesson.attributes.title = title;\n },\n\n setMoveNewPage(newPageNo, locationOnPage) {\n if (locationOnPage !== undefined) self.location = locationOnPage;\n if (typeof newPageNo === 'string') newPageNo = parseInt(newPageNo, 10);\n if (newPageNo === 0) {\n self.pageNo = 0;\n self.lesson.attributes.free_flow = 'Full';\n return false;\n }\n if (newPageNo === self.pageNo || newPageNo < 0 || self.getValidPage(newPageNo) !== newPageNo) return false;\n\n // Freeflow off situation\n if (self.waitIncreasePageNo && self.freeFlow === 'Off' && newPageNo > self.pageNo) {\n return false; // Don't go to the higher page - wait until forward to current page is handled\n }\n\n self.prevPage = self.pageNo;\n self.pageNo = newPageNo;\n self.isNextPageEnabled = self.isPageEnabled(self.pageNo + 1);\n\n // Mark page as completed\n if (!self.waitIncreasePageNo) {\n // Browsing to fast\n const isPageNotSaved = !self.lesson_result.attributes.pages[newPageNo - 1].completed;\n const isFullFreeflowPageCompleted = self.freeFlow === 'Full' && self.questionsAnswered(newPageNo);\n const isPageCompleted = newPageNo === self.page_id_max + 1 && self.questionsAnswered(self.page_id_max);\n\n if (isPageNotSaved && (isFullFreeflowPageCompleted || isPageCompleted)) {\n self.waitIncreasePageNo = setTimeout(() => {\n self.savePageStatus();\n }, 1000); // Mark page as read after 1 second\n }\n }\n\n if (self.prevPage === null) return true; // Otherwise page 1 will scroll on initialize\n // Scroll if went to a neighbour page\n if (parseInt(newPageNo, 10) === self.prevPage - 1) {\n // left\n self.setPageMovement({ direction: 'left', center: 'enter-left', left: 'invisible', right: 'leave-right' });\n } else if (parseInt(newPageNo, 10) === self.prevPage + 1) {\n // right\n self.setPageMovement({ direction: 'right', center: 'enter-right', left: 'leave-left', right: 'invisible' });\n } else {\n self.setPageMovement({ direction: '', left: '', right: '', center: '' });\n }\n return true;\n },\n\n setPageMovement(movement) {\n self.movement.direction = movement.direction;\n self.movement.left = movement.left;\n self.movement.right = movement.right;\n self.movement.center = movement.center;\n },\n\n saveAnswer: flow(function* saveAnswer(widget, answer) {\n const lr = self.lesson_result;\n const timeStamp = new Date().toISOString();\n const question = self.getLessonResultQuestion(widget);\n const widgetType = widget.attributes?.widget_type?.toLowerCase() || '';\n const widgetCode = widget.attributes?.widget_code?.toLowerCase() || '';\n question.last_correct = answer.correct;\n question.last_response = answer.value;\n question.last_response_timestamp = timeStamp;\n question.tries++;\n if (question.tries === 1) {\n question.correct = answer.correct;\n question.first_response = answer.value;\n question.first_response_timestamp = timeStamp;\n lr.attributes.questions.push(question);\n }\n\n lr.attributes.questions_answered = lr.attributes.questions.length;\n if (question.tries === self.allowedTries(widget) || question.last_correct) {\n // Get the page number\n const pageNo = self.pageNo === 0 ? 1 : self.pageNo;\n const savePageNo = pageNo - 1;\n // Update current page questions\n self.pageList[savePageNo].questionsAnswered++;\n self.isNextPageEnabled = self.isPageEnabled(self.pageNo + 1);\n // Try to find the same widget on multiple pages and mark it answered on different pages\n // Use case reflection widget is coming back on different pages with the feedback\n const findSameWidget = self.pageList\n .map((w, index) => ({ index, widgetCodes: w.widgetCodes }))\n .filter((obj) => obj.widgetCodes.some((code) => code.toLowerCase() === widgetCode.toLowerCase()) && obj.index !== savePageNo)\n .map((obj) => obj.index);\n // Loop through findSameWidget and perform some action for each index\n if (findSameWidget) {\n findSameWidget.forEach((index) => {\n self.pageList[index].questionsAnswered++;\n });\n }\n if (process.env.REACT_APP_CMI5_ENABLED === 'true') {\n self.saveCmi5Answer(widget, question, answer);\n }\n }\n if (widgetType && widgetType.includes('open question')) {\n self.setReflectionList({ id: widgetCode, time: new Date().getTime() });\n }\n\n yield self.savePageStatus(true);\n }),\n\n finishLesson: flow(function* finishLesson(nid) {\n try {\n const response = yield self.lmsApi.postFinish(nid);\n applySnapshot(self.lesson_result, response.data.lesson_result);\n self.courseResult = response.data.course_result;\n return response.data;\n } catch (e) {\n self.store.setLessonState('error', e);\n throw e;\n }\n }),\n\n finishCourse: flow(function* finishCourse(nid) {\n try {\n const response = yield self.lmsApi.finishCourseResult(nid);\n const totalCompletedCourses = response.data?.meta?.user_courses_finished;\n if (totalCompletedCourses) {\n self.store.setTotalCoursesCompleted(totalCompletedCourses);\n }\n\n return response.data;\n } catch (e) {\n self.store.setLessonState('error', e);\n throw e;\n }\n }),\n\n retrieveEvaluation: flow(function* retrieveEvaluation(uuid, cuuid) {\n try {\n const response = yield self.lmsApi.fetchEvaluationByUser(uuid, cuuid);\n return response.data.meta.count > 0;\n } catch (e) {\n return false;\n }\n }),\n\n // params = widget, question, answer\n saveCmi5Answer({ attributes }, { questionId }, answer) {\n if (!self.cmi5Client.isAuthenticated) return;\n\n createCmi5JourneyHooks(self.cmi5Client).onAnswerQuestion(\n self.lesson.id,\n questionId,\n answer.value,\n attributes.question,\n answer.correct,\n attributes.options,\n attributes.widget_type\n );\n },\n\n savePageStatus: flow(function* savePageStatus(again = false) {\n const lr = self.lesson_result;\n const pageNo = self.pageNo === 0 ? 1 : self.pageNo;\n self.setPageIdMax();\n if (self.canPageBeCompleted(self.pageNo)) lr.attributes.pages[pageNo - 1].completed = true;\n self.isNextPageEnabled = self.isPageEnabled(self.pageNo + 1);\n self.waitIncreasePageNo = null;\n if (again) log.debug(`Again doing save page${self.page_id_max}`);\n\n const data = {\n id: lr.id,\n type: lr.type,\n attributes: {\n questions_answered: lr.attributes.questions_answered,\n page_id_max: lr.attributes.page_id_max,\n data: JSON.stringify({ pages: lr.attributes.pages.toJSON(), questions: lr.attributes.questions.toJSON() })\n }\n };\n\n try {\n // TODO: Save lesson_result to the backend\n const result = yield self.lmsApi.patchpost(data);\n applySnapshot(self.lesson_result, result);\n // yield timeout(5);\n // data = JSON.stringify(processLessonResult(getSnapshot(lr)));\n // localStorage.setItem('lessonResult', data);\n // applySnapshot(self.lesson_result, JSON.parse(data));\n log.debug(`After saving page ${self.page_id_max}`);\n } catch (e) {\n if (e.status === '422') {\n log.error(e);\n self.store.showToast({ message: window.i18next.t('widgetErrorHelpDesk'), variant: 'error' });\n throw e;\n }\n if (!again) {\n log.error('Error during updating page status');\n self.savePageStatus(true); // try one more time\n } else {\n if (self.canPageBeCompleted(self.pageNo)) lr.attributes.pages[self.pageNo - 1].completed = false;\n self.pageNo = self.getValidPage(self.pageNo);\n log.error('Cannot increase page in lesson result on the server', e); // Mismatch with the backend if it went wrong twice\n }\n self.store.showToast({ message: window.i18next.t('widgetError'), variant: 'error' });\n log.error(e);\n throw e;\n }\n }),\n\n resetLessonResult: flow(function* resetLessonResult(page) {\n if (!self.store.canEditCourse) return;\n try {\n const result = yield self.lmsApi.resetLessonResult(self.lesson_result.attributes.drupal_internal__id, page);\n const lessonResult = result.data.lesson_result;\n // Initialize data (preProcessSnapshot does not process it otherwise)\n lessonResult.attributes.data = JSON.stringify({\n pages: self.lesson_content.attributes.pages.toJSON().map((value, idx) => ({\n completed: idx < lessonResult.attributes.page_id_max\n })),\n questions: []\n });\n applySnapshot(self.lesson_result, lessonResult);\n self.store.showToast({\n message: 'The results have been resetted!',\n variant: 'success'\n });\n } catch (e) {\n self.store.showToast({\n message: 'Oops! Something went wrong with resetting your results.',\n variant: 'error'\n });\n log.error('Cannot reset lesson result on the server', e);\n }\n }),\n\n resetLessonToPage: flow(function* resetLessonToPage(newPageNo = 1) {\n const { store } = self;\n self.pageNo = newPageNo;\n const { product, courseId, lessonId, productName, packageId } = store.routerStore.routerState.params;\n store.routerStore.goTo('lessonPlay', {\n params: { product, courseId, lessonId, productName, packageId, pageNo: newPageNo.toString() }\n });\n if (newPageNo === 0) {\n self.lesson.attributes.free_flow = 'Full';\n return;\n }\n const lr = self.lesson_result;\n const data = {\n id: lr.id,\n type: lr.type,\n attributes: {\n questions: [],\n page_id_max: 2,\n pages: [],\n questions_answered: 0\n }\n };\n try {\n self.lesson_result.attributes.page_id_max = newPageNo;\n // TODO: talk to jsonApi\n const result = yield self.lmsApi.patchpost(data);\n applySnapshot(self.lesson_result, result);\n // yield timeout(5);\n // data = JSON.stringify(processLessonResult(getSnapshot(lr)));\n // localStorage.setItem('lessonResult', data);\n // applySnapshot(self.lesson_result, JSON.parse(data));\n\n self.pageList = buildLessonPages(self); // Cache pages\n self.checkPagesCompleted();\n self.isNextPageEnabled = self.isPageEnabled(newPageNo + 1);\n } catch (e) {\n log.error('Cannot reset lesson to page on the server', e);\n }\n }),\n\n // Only used for Cypress testing\n setTest: flow(function* setTest({ freeFlow, resetToPage }) {\n try {\n if (resetToPage && resetToPage !== self.page_id_max) {\n yield self.jsonApi.self.resetLessonToPage(resetToPage);\n }\n if (freeFlow && freeFlow !== self.freeFlow) {\n self.lesson.attributes.free_flow = freeFlow;\n const lessonData = cloneDeep(getSnapshot(self.lesson));\n // TODO: talk to json Api\n yield self.lmsApi.patchpost(lessonData);\n applySnapshot(self.lesson, lessonData);\n }\n } catch (e) {\n log.error('Cannot reset lesson to page on the server', e);\n }\n }),\n postAskQuestion: flow(function* postAskQuestion(userQuestion) {\n const professionId = self.store.profession.uuid;\n const { course, city, houseNumber, mobilePhone, question, street, zipcode } = userQuestion;\n const questionData = {\n data: {\n type: 'user_question',\n attributes: {\n title: course.name,\n city,\n destination: null,\n housenumber: houseNumber,\n mobile_phone: mobilePhone,\n question,\n street,\n zipcode\n },\n\n relationships: {\n about_course: {\n data: {\n type: 'course',\n id: course.id\n }\n },\n profession: {\n data: {\n type: 'profession',\n id: professionId\n }\n }\n }\n }\n };\n return yield self.lmsApi.postAskQuestion(questionData);\n }),\n // This will push the reflection widget to an array\n setReflectionList(widgetCode) {\n // Check if widgetCode is not already in the array\n if (!self.reflectionList.includes(widgetCode)) {\n // If not, push it into the array\n self.reflectionList.push(widgetCode);\n }\n // Return the updated array\n return self.reflectionList;\n },\n setIsSaving(saving) {\n self.isSaving = saving;\n }\n }));\n\n// eslint-disable-next-line no-unused-vars\nexport async function getLessonPlay(store, courseId, lessonId) {\n //\n if (store.lessonPlay && store.lessonState !== 'init') return store.lessonPlay;\n log.debug(`Running fetchLesson. State: ${store.lessonState}`);\n //\n if (store.lessonState === 'pending' || store.lessonState === 'done') return null; // wait for running fetch\n // set state to pending\n store.setLessonState('pending');\n // Check if the course is failed\n const isFailed = isCourseFailed(store?.lesson_results, store?.courseResults, Number(courseId));\n\n try {\n const play = isFailed\n ? await store.lmsApi.restartLessonPlay(courseId, lessonId) // /start?restart=true (restartLessonPlay)\n : await store.lmsApi.fetchLessonPlay(courseId, lessonId); // /start\n\n if (play.errorCode !== undefined && play.errorCode !== null) {\n store.setLessonState('error', play);\n if (play.errorCode === 'dependingCourse') {\n store.setLessonDependsOnCourse(play);\n }\n return null;\n }\n\n /**\n * Workaround for the toc\n * This workaround prevents mobx errors as it expects the toc to be an array\n */\n // Check if the toc is an array || if not, make it an empty array\n if (!Array.isArray(play?.lesson_content?.attributes?.toc)) {\n play.lesson_content.attributes.toc = [];\n }\n\n log.debug('After fetch');\n\n // Create LessonPlay store\n try {\n store.setLessonPlay(LessonPlay.create(play, { store }));\n store.setLessonState('done');\n // CMI5 client\n if (process.env.REACT_APP_CMI5_ENABLED === 'true') {\n store.lessonPlay.createCmi5Client();\n }\n store.lessonPlay.setNewArray(play.question_widgets);\n return null;\n } catch (err) {\n log.debug(err);\n Sentry.captureException(`MobX error: Something went wrong with course: ${courseId} lesson: ${lessonId}`);\n Sentry.captureException(err);\n store.setLessonState('pending');\n return null;\n }\n } catch (e) {\n store.setLessonState('error', e);\n if (e.modelErrors) {\n e.modelErrors.forEach(log.warn);\n }\n if (e.status === 401 || e.status === 403) {\n log.info('No access to this lesson');\n store.gotoErrorPage({ title: 'Error loading lesson', message: 'No access', statuscode: e.status.toString() });\n return null;\n }\n throw e;\n }\n}\n","// shuffle questions that have same widget code based on a seed\nexport function shuffledQuestionWidgetsArray(array, seed) {\n const groupMap = {};\n\n array.forEach((obj) => {\n const { widget_code: widgetCode } = obj.attributes;\n\n if (!groupMap[widgetCode]) {\n groupMap[widgetCode] = [];\n }\n groupMap[widgetCode].push(obj);\n });\n const shuffledArray = [];\n\n Object.keys(groupMap).forEach((widgetCode) => {\n const group = groupMap[widgetCode];\n const seededRandom = () => {\n const max = 1;\n const min = 0;\n seed = (seed * 9301 + 49297) % 233280;\n const rnd = seed / 233280;\n return min + rnd * (max - min);\n };\n\n for (let i = group.length - 1; i > 0; i--) {\n const j = Math.floor(seededRandom(seed) * (i + 1));\n [group[i], group[j]] = [group[j], group[i]];\n }\n shuffledArray.push(group[0]);\n });\n return shuffledArray;\n}\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getLessonPlay } from 'state/models/LessonPlay';\nimport { getSpecialAccessCourses, ewiseUserHasPrefBaseproduct, specialAccessGetPackages } from 'state/RoutesActions';\n\n// EXPORTS 3 ROUTES\n// - specialAccessRoute\n// - specialAccessLessonPlayRoute\n\n/**\n * SPECIAL ACCESS ROUTE\n *\n * This route is used for displaying the courssoverview.\n *\n * @type {{\n * name: string,\n * title: string,\n * pattern: string,\n * beforeEnter: (function(*, *, *): Promise),\n * onEnter: (function(*, *, *): Promise)}}\n */\nexport const specialAccessRoute = {\n name: 'specialAccess',\n title: `Special Access | ${ThemeBrandTitle}`,\n pattern: '/special-access/courseoverview',\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n // validation checks\n if (!store?.login?.hasSpecialAccess) return store.routerStore.goTo('home');\n // continue\n await specialAccessGetPackages(fromState, toState, routerStore);\n if (fromState.routeName === '__initial__' || !fromState.routeName.includes('specialAccess')) {\n await getSpecialAccessCourses(fromState, toState, routerStore);\n }\n return null;\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.setStoreValue('courseHeaderTabs', 'All');\n store.setSelectedPackage(parseInt(0));\n }\n};\n\n// SPECIAL ACCESS ROUTE - COURSE INTRODUCTION\nexport const SpecialAccessCourseIntroductionRoute = {\n name: 'specialAccessCourseIntroduction',\n pattern: '/:sa/:productName/:product/:packageId/course/:courseId/:title',\n altPatterns: ['/:sa/:productName/:product/:packageId/course/:courseId'],\n title: `Course introduction`,\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { productName, product } = toState.params;\n // validation checks\n ewiseUserHasPrefBaseproduct(routerStore);\n if (!store?.login?.hasSpecialAccess) return store.routerStore.goTo('home');\n if (productName !== 'special' || product !== 'access') return store.routerStore.goTo('notFound');\n // continue\n if (store.hasSubscriptions === 'init') {\n await specialAccessGetPackages(fromState, toState, routerStore);\n }\n if (fromState.routeName === '__initial__' || !fromState.routeName.includes('specialAccess') || !store.specialAccess) {\n await getSpecialAccessCourses(fromState, toState, routerStore);\n }\n return null;\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseId } = toState.params;\n store.setSelectedPackage(parseInt(0));\n store.courseResults?.updateCourseResultbyNid(Number(courseId));\n // eslint-disable-next-line no-unused-expressions\n store.courseResults?.isCourseFinished(Number(courseId)) && !store.isEwiseUser && store.subscriptions.updateSubscription();\n }\n};\n\n/**\n * SPECIAL ACCESS LESSONPLAY ROUTE\n *\n * @type {{\n * name: string,\n * title: string,\n * pattern: string,\n * beforeEnter: (function(*, *, *): Promise),\n * onEnter: (function(*, *, *): Promise)}}\n */\nexport const specialAccessLessonPlayRoute = {\n name: 'specialAccessLessonPlay',\n // pattern: '/special-access/course/:courseId/lesson/:lessonId/page/:pageNo',\n pattern: '/sp/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/page/:pageNo',\n title: `Lesson | ${ThemeBrandTitle}`,\n beforeEnter: async (fromState, toState, routerStore) => {\n if (fromState.routeName === '__initial__') {\n getSpecialAccessCourses(fromState, toState, routerStore);\n }\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n if (store.lessonState === 'pending') return; // Fix for being called twice\n const pageNo = parseInt(toState.params.pageNo);\n try {\n //\n await getLessonPlay(store, toState.params.courseId, toState.params.lessonId);\n //\n const newPageNo = pageNo === 0 ? 0 : store.lessonPlay.getValidPage(pageNo);\n //\n if (newPageNo !== pageNo) {\n routerStore.goTo('specialAccessLessonPlay', {\n params: {\n product: toState.params.product,\n productName: toState.params.productName,\n // packageId: toState.params.packageId,\n courseId: toState.params.courseId,\n lessonId: toState.params.lessonId,\n pageNo: newPageNo.toString()\n }\n });\n } else {\n store.lessonPlay.setMoveNewPage(pageNo);\n }\n } catch (e) {\n store.gotoErrorPage({ title: 'Error loading content', message: 'Click here to go Back to the home page' });\n }\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\n\nexport const adminDashboardViewRoute = {\n name: 'adminDashboardCourses',\n pattern: '/admin/:package/:packageNid/:containerNid/dashboard',\n title: `Dashboard Courses | ${ThemeBrandTitle()}`,\n meta: { title: `Dashboard Courses | ${ThemeBrandTitle()}` },\n // beforeEnter: createEditStore,\n beforeEnter: async (fromState, toState, routerStore) => {\n await createEditStore(fromState, toState, routerStore);\n const { store } = routerStore.options;\n const { params } = toState;\n const { courseEdit } = store;\n await courseEdit.fetchCourseContainer(params.containerNid);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseEdit } = store;\n courseEdit.setStoreValue('drawerOpen', true);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\n\n/*\nIt's important to note that the actual behavior of this route depends on the application's routing system.\nThe beforeEnter and onEnter functions may be used for various purposes, such as data loading, route guards, or view initialization.\nThe route allows navigation to a view for viewing online courses within an admin interface.\n*/\nexport const onlineCoursesViewRoute = {\n name: 'adminOnlineCourses',\n pattern: '/admin/:package/:packageNid/:containerNid/online',\n title: `View online Courses | ${ThemeBrandTitle()}`,\n meta: { title: `View online Courses | ${ThemeBrandTitle()}` },\n beforeEnter: createEditStore,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.courseEdit.setStoreValue('drawerOpen', false);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\n\n/*\nIn summary, offlineCoursesViewRoute is a route configuration object that defines a route for viewing offline courses in a web application.\nIt specifies the URL pattern, title, and functions to execute before entering and when entering the route.\nThis route object can be used with a routing library or framework to navigate to the \"View Offline Courses\" page.\n*/\nexport const offlineCoursesViewRoute = {\n name: 'adminOfflineCourses',\n pattern: '/admin/:package/:packageNid/:containerNid/offline',\n title: `View Offline Courses | ${ThemeBrandTitle()}`,\n meta: { title: `View Offline Courses | ${ThemeBrandTitle()}` },\n beforeEnter: createEditStore,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.courseEdit.setStoreValue('drawerOpen', false);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\nimport { getSpecialAccessMenu, setTab, showToastRouteError, getProfile, logError } from 'state/RoutesActionsAdminCourse';\nimport { createRouterState } from 'mobx-state-router';\n\nexport const editCourseViewRoute = {\n name: 'editCourse',\n pattern: '/admin/:package/:packageNid/:containerNid/:courseuuid/edit',\n title: `Edit| ${ThemeBrandTitle()}`,\n meta: { title: `Edit | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n //\n getProfile(fromState, toState, routerStore);\n createEditStore(fromState, toState, routerStore);\n //\n try {\n await store.courseEdit.fetchCourseContainer(toState.params.containerNid);\n await store.courseEdit.fetchCourseEditData(toState.params.courseuuid);\n await getSpecialAccessMenu(fromState, toState, routerStore);\n } catch (error) {\n logError(error);\n showToastRouteError(fromState, toState, routerStore);\n throw error;\n }\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.courseEdit.setStoreValue('drawerOpen', false);\n setTab(fromState, toState, routerStore);\n }\n};\n\nexport const defEditCourseViewRoute = {\n name: 'defEditCourse',\n pattern: '/admin/:def/:package/:packageNid/:containerNid/:courseuuid/edit',\n title: `Edit| ${ThemeBrandTitle()}`,\n beforeEnter: async (fromState, toState, routerStore) => {\n createEditStore(fromState, toState, routerStore);\n const { store } = routerStore.options;\n //\n const responds = await store.courseEdit.lmsApi.fetchAdminMenu(store.label);\n const menuItem = responds.data.packages.find((item) => item.package_id.toString() === toState.params.packageNid);\n return createRouterState('editCourse', {\n params: {\n package: menuItem.package_title,\n packageNid: toState.params.packageNid,\n containerNid: menuItem.course_container_id.toString(),\n courseuuid: toState.params.courseuuid\n },\n queryParams: { tab: 'Lessons' }\n });\n }\n};\n","/**\n * ROUTE ACTIONS FOR COURSE ADMIN PART OF THE APP\n * These are the actions that are called when a route is entered\n */\n\n// GET PROFILE -------------------------------------------------------\nexport const getProfile = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n if (store?.user) return;\n store.fetchUser().catch(() => {\n store.setState('error');\n routerStore.goTo('errorPage');\n });\n};\n\n// GET SPECIAL_ACCESS ITEMS ------------------------------------------\nexport const getSpecialAccessMenu = async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n if (store?.courseEdit?.specialAccessMenu?.length > 0) return;\n try {\n const { data: responds } = await store.courseEdit.lmsApi.fetchIt('special_access');\n const menu = responds.data.map((item) => ({ type: item.type, id: item.id, name: item.attributes.name }));\n store.courseEdit.setStoreValue('specialAccessMenu', menu);\n } catch (e) {\n throw new Error('getSpecialAccessMenu error', e);\n }\n};\n\n// Goto selected tab --------------------------------------------------\nexport const setTab = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { queryParams } = toState;\n const isFromStateRouteLessonPlay = fromState.routeName === 'lessonPlay' && 'Lessons';\n const hasQueryParamsTab = queryParams?.tab;\n const selectedTab = isFromStateRouteLessonPlay || hasQueryParamsTab || 'Introduction';\n store.courseEdit.setEditTab(selectedTab);\n};\n\n// Default route error message ----------------------------------------\nexport const showToastRouteError = (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.courseEdit.setToasts({\n title: 'Error',\n content: 'Er is iets misgegaan bij het ophalen van de cursusgegevens',\n type: 'error',\n timeOut: 4000,\n variant: 'outlined'\n });\n};\n\nexport const logError = (error) => {\n console.error(error);\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapiForEditors } from 'state/RoutesActions';\n\n/**\n * COURSE ADMIN LESSONPLAY ROUTE\n *\n * @type {{\n * name: string,\n * title: string,\n * pattern: string,\n * beforeEnter: (function(*, *, *): Promise),\n * onEnter: (function(*, *, *): Promise)}}\n */\nexport const adminCourseLessonPlayRoute = {\n name: 'adminCourseLessonPlay',\n pattern: '/pre/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/page/:pageNo',\n title: `LessonPlay | ${ThemeBrandTitle}`,\n meta: { title: `Edit | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n /**\n * POST PROCESSING OF THE ROUTE\n * when a user click on the play button @ tab lessons\n * 1. check if store is filled with ewapi data else get ewapi data\n * 2. get the current course from course edit\n * 3. convert current course from json -> ewapi model\n * 4. add the ewapi course to the store\n * 5. goto the real lesson play route\n */\n const { store } = routerStore.options;\n // 1. check if store is filled with ewapi data else get ewapi data\n if (!store?.courses?.courses) await getEwapiForEditors(fromState, toState, routerStore);\n // 2 + 3 convert json course model to ewapi course model\n const ewapiCourse = store.courseEdit.convertJsonCourseToEwapiCourse(store.courseEdit.currentCourse);\n // 4. add the ewapi course to the store\n store.courses.addNewCourse(ewapiCourse);\n // 5. goto the real lesson play route\n routerStore.goTo('lessonPlay', {\n params: {\n productName: toState.params.productName,\n product: toState.params.product,\n packageId: toState.params.packageId,\n courseId: toState.params.courseId,\n lessonId: toState.params.lessonId,\n pageNo: toState.params.pageNo.toString()\n }\n });\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\n\n// route for viewing courses\nexport const viewCoursesRoute = {\n name: 'adminViewCourses',\n pattern: '/admin/courses',\n title: `View Courses | ${ThemeBrandTitle()}`,\n meta: { title: `View Courses | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n createEditStore(fromState, toState, routerStore);\n const { store } = routerStore.options;\n // get localstorage saved dashboard preferences\n const isSaved = localStorage.getItem('prefDashboard');\n //\n const prefDashboard = isSaved ? JSON.parse(isSaved) : false;\n if (prefDashboard) {\n const routerParams = {\n params: { package: prefDashboard.package, packageNid: prefDashboard.packageNid, containerNid: prefDashboard.containerNid }\n };\n return store.routerStore.goTo('adminDashboardCourses', routerParams);\n }\n return null;\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n store.courseEdit.setStoreValue('drawerOpen', true);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createEditStore } from 'state/RoutesActions';\n\nexport const courseSearchBarViewRoute = {\n name: 'courseSearchBar',\n pattern: '/admin/courses/search',\n title: `View search results | ${ThemeBrandTitle}`,\n meta: { title: `View search results | ${ThemeBrandTitle()}` },\n beforeEnter: createEditStore\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { checkUserSignedIn } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\n// route for the subscriptions page\n\nexport const subscriptionsRoute = {\n name: 'subscription',\n pattern: '/account/subscription',\n meta: { title: `%%account.subscription.title%% | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { params } = toState;\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n // Check if the user is an Ewise user and has not selected a base product\n if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n return createRouterState('selectProduct', { params: { user: store.login.userName } });\n }\n try {\n if (store.hasSubscriptions === 'init') await checkUserSignedIn(fromState, toState, routerStore, params.product);\n } catch (e) {\n return e;\n }\n return null;\n }\n // beforeEnter: async (fromState, toState, routerStore) => prepareCourseView(fromState, toState, routerStore)\n};\n","import { prepareCourseView } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\n// route for the settings page\n// This code gets the settings for a user.\n\nexport const settingsRoute = {\n name: 'settings',\n pattern: '/account/settings',\n meta: { title: `%%account.settings.title%% | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => prepareCourseView(fromState, toState, routerStore)\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getProfile, checkUserSignedIn } from 'state/RoutesActions';\n\nexport const profileRoute = {\n name: 'profile',\n pattern: '/account/profile',\n meta: { title: `%%account.profile.title%% | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { params } = toState;\n getProfile(fromState, toState, routerStore);\n // Empty the search params\n store.clearSearchParam();\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n // Check if the user is an Ewise user and has not selected a base product\n if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n return createRouterState('selectProduct', { params: { user: store.login.userName } });\n }\n try {\n if (store.hasSubscriptions === 'init') {\n await checkUserSignedIn(fromState, toState, routerStore, params.product);\n }\n } catch (e) {\n return e;\n }\n return null;\n }\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getCertificates, checkUserSignedIn } from 'state/RoutesActions';\n\n// This code gets the certificates for a user.\n// It also checks whether the user is signed in.\n// If the user is not signed in, it returns an error.\n// If the user is signed in, it returns the certificates.\n\nexport const certificateRoute = {\n name: 'certificates',\n pattern: '/account/certificates',\n meta: { title: `%%account.certificate.title%% | ${ThemeBrandTitle()}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { params } = toState;\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n // Check if the user is an Ewise user and has not selected a base product\n if (store.isEwiseUser && !store.hasPreferredBaseproduct) {\n return createRouterState('selectProduct', { params: { user: store.login.userName } });\n }\n try {\n if (store.hasSubscriptions === 'init') await checkUserSignedIn(fromState, toState, routerStore, params.product);\n } catch (e) {\n return e;\n }\n return null;\n },\n onEnter: async (fromState, toState, routerStore) => getCertificates(fromState, toState, routerStore)\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\n\nconst BrandTitle = ThemeBrandTitle();\n\nexport const loginRoute = {\n name: 'logout',\n title: `Uitloggen | ${BrandTitle}`,\n pattern: '/logout'\n};\n\nexport const switchBackRoute = {\n name: 'switchback',\n title: `Switch back | ${BrandTitle}`,\n pattern: '/switch-back'\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getLessonPlay } from 'state/models/LessonPlay';\nimport { getEwapi, getSpecialAccessCourses, reloadAdminLesson } from 'state/RoutesActions';\n\nconst BrandTitle = ThemeBrandTitle();\n\nexport const lessonPlayRoutes = {\n name: 'lessonPlay',\n pattern: '/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/page/:pageNo',\n meta: { title: `%%introduction.metatitle%% | ${BrandTitle}` },\n //\n beforeEnter: async (fromState, toState, routerStore) => {\n const { productName } = toState.params;\n const { store } = routerStore.options;\n\n //\n if (productName.includes('special-access')) {\n return getSpecialAccessCourses(fromState, toState, routerStore);\n }\n\n if (productName === 'redactie') return reloadAdminLesson(fromState, toState, routerStore);\n //\n await getEwapi(fromState, toState, routerStore);\n if (!store?.login?.hasSpecialAccess && store?.courses?.isCourseExpired(Number(toState.params.courseId))) {\n return store.routerStore.goTo('home');\n }\n return null;\n },\n //\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n //\n if (store.lessonState === 'pending') return; // Fix for being called twice\n //\n const pageNo = toState.params.pageNo !== undefined ? parseInt(toState.params.pageNo) : 1;\n //\n if (pageNo === 0 && !store.canEditCourse && !store.login.hasSpecialAccess) {\n routerStore.goTo('lessonPlay', {\n params: {\n product: toState.params.product,\n productName: toState.params.productName,\n packageId: toState.params.packageId,\n courseId: toState.params.courseId,\n lessonId: toState.params.lessonId,\n pageNo: '1'\n }\n });\n return;\n }\n try {\n //\n await getLessonPlay(store, toState.params.courseId, toState.params.lessonId);\n //\n const newPageNo = pageNo === 0 ? 0 : store.lessonPlay.getValidPage(pageNo);\n //\n const isLti = store.login.X4gJ2Kq === 1 ?? false;\n if (isLti) {\n store.setLtiSession();\n }\n //\n if (newPageNo !== pageNo) {\n routerStore.goTo('lessonPlay', {\n params: {\n product: toState.params.product,\n productName: toState.params.productName,\n packageId: toState.params.packageId,\n courseId: toState.params.courseId,\n lessonId: toState.params.lessonId,\n pageNo: newPageNo.toString()\n }\n });\n } else {\n store.lessonPlay.setMoveNewPage(pageNo);\n }\n } catch (e) {\n store.gotoErrorPage({ title: 'Error loading content', message: 'Click here to go Back to the home page' });\n }\n }\n};\n\nexport const defLessonPlayRoutes = {\n name: 'defLessonPlay',\n pattern: '/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/page/:pageNo',\n meta: { title: `%%introduction.metatitle%% | ${BrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n const lastLesson = window.store?.lesson_results?.findLessonByCourseNid(Number(window.store?.params?.courseId));\n const lastLessonPage = lastLesson ? lastLesson[0]?.page_id_max.toString() : '1';\n const goToPage = lastLesson[0]?.status === '2' || lastLesson[0]?.status === '3' ? '1' : lastLessonPage;\n routerStore.goTo('lessonPlay', {\n params: {\n product: toState.params.product,\n productName: toState.params.productName,\n packageId: toState.params.packageId,\n courseId: toState.params.courseId,\n lessonId: toState.params.lessonId,\n pageNo: goToPage ?? '1'\n }\n });\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapi } from 'state/RoutesActions';\nimport { getLessonPlay } from 'state/models/LessonPlay';\n\nconst BrandTitle = ThemeBrandTitle();\n\nexport const evaluationLesRoute = {\n name: 'evaluation',\n pattern: '/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/evaluation',\n meta: { title: `%%introduction.metatitle%% | ${BrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n await getEwapi(fromState, toState, routerStore);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseId } = toState.params;\n store.courseResults?.updateCourseResultbyNid(Number(courseId));\n await getLessonPlay(store, toState.params.courseId, toState.params.lessonId);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapi, getProfile } from 'state/RoutesActions';\nimport { getLessonPlay } from 'state/models/LessonPlay';\n\nconst BrandTitle = ThemeBrandTitle();\n\nexport const termsLesRoute = {\n name: 'terms',\n pattern: '/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/evaluation/terms',\n meta: { title: `%%introduction.metatitle%% | ${BrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n await getEwapi(fromState, toState, routerStore);\n getProfile(fromState, toState, routerStore);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { courseId } = toState.params;\n store.courseResults.updateCourseResultbyNid(Number(courseId));\n await getLessonPlay(store, toState.params.courseId, toState.params.lessonId);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { getEwapi } from 'state/RoutesActions';\nimport { getLessonPlay } from 'state/models/LessonPlay';\n\nconst BrandTitle = ThemeBrandTitle();\n\nexport const feedbackLesRoute = {\n name: 'feedback',\n pattern: '/:productName/:product/:packageId/course/:courseId/lesson/:lessonId/feedback/:courseFeeback',\n meta: { title: `%%introduction.metatitle%% | ${BrandTitle}` },\n beforeEnter: async (fromState, toState, routerStore) => {\n await getEwapi(fromState, toState, routerStore);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n await getLessonPlay(store, toState.params.courseId, toState.params.lessonId);\n }\n};\n","import { ThemeBrandTitle } from '../../helpers/Helpers';\nimport { checkUserSignedIn } from '../../state/RoutesActions';\n\nexport const assistantManagementRoute = {\n name: 'assistantManagement',\n meta: { title: `%%assistant.title%% | ${ThemeBrandTitle()}` },\n pattern: '/assistant-management',\n beforeEnter: checkUserSignedIn\n};\n","import { format, isValid, parseISO, set } from 'date-fns';\nimport { checkUserSignedIn } from 'state/RoutesActions';\n\nfunction setQueryParams(queryParams, isEwiseLabel) {\n if (\n isValid(parseISO(queryParams.startdate)) &&\n isValid(parseISO(queryParams.enddate)) &&\n new Date(queryParams.startdate) <= new Date(queryParams.enddate) &&\n new Date(queryParams.enddate) < new Date()\n ) {\n return;\n }\n const currentDate = new Date();\n const currentYear = new Date().getFullYear();\n if (isEwiseLabel) {\n const startDate =\n currentDate.getMonth() < 7\n ? set(currentDate, { year: currentYear - 1, month: 7, date: 1 })\n : set(currentDate, { year: currentYear, month: 7, date: 1 });\n\n queryParams.startdate = format(startDate, 'yyyy-MM-dd');\n } else {\n queryParams.startdate = format(set(currentDate, { year: currentYear, month: 0, date: 1 }), 'yyyy-MM-dd');\n }\n queryParams.enddate = format(currentDate, 'yyyy-MM-dd');\n}\n\nexport async function lmsBeforeEnter(fromState, toState, routerStore) {\n await checkUserSignedIn(fromState, toState, routerStore);\n const { store } = routerStore.options;\n await store.fetchLmsAccess();\n // eslint-disable-next-line camelcase\n const { enddate, org_id, profession, startdate } = fromState.queryParams;\n toState.queryParams = {\n enddate,\n org_id,\n profession,\n startdate,\n ...toState.queryParams\n };\n toState.params = {\n ...fromState.params,\n ...toState.params\n };\n const isEwiseLabel = store?.label === 'ewise';\n if (isEwiseLabel || store.showMenuItemLms) {\n setQueryParams(toState.queryParams, isEwiseLabel);\n } else {\n store.routerStore.goTo('home');\n }\n}\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsDashboardRoute = [\n {\n name: 'LmsDashboardOverview',\n pattern: '/lms/dashboard/overview',\n meta: { title: `%%lms.navbar.dashboard%% | ${ThemeBrandTitle()}` },\n beforeEnter,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { queryParams } = toState;\n if (!['isLoading', 'hasNoOrganisations'].includes(store.LmsDashboard.chart.status)) {\n store.LmsDashboard.fetchLmsChart(queryParams);\n }\n }\n },\n {\n name: 'LmsDashboardProfessions',\n pattern: '/lms/dashboard/professions',\n meta: { title: `%%lms.navbar.dashboard%% | ${ThemeBrandTitle()}` },\n beforeEnter,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { queryParams } = toState;\n if (!['isLoading', 'hasNoOrganisations'].includes(store.LmsDashboard.professions.status)) {\n store.LmsDashboard.fetchLmsProfessions?.(queryParams);\n }\n }\n },\n {\n name: 'LmsDashboardProducts',\n pattern: '/lms/dashboard/products',\n meta: { title: `%%lms.navbar.dashboard%% | ${ThemeBrandTitle()}` },\n beforeEnter,\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { queryParams } = toState;\n if (!['isLoading', 'hasNoOrganisations'].includes(store.LmsDashboard.products.status)) {\n store.LmsDashboard.fetchLmsProducts(queryParams);\n }\n }\n }\n];\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsStudentsRoute = [\n {\n name: 'LmsStudents',\n pattern: '/lms/students',\n meta: { title: `%%lms.navbar.students1%% | ${ThemeBrandTitle()}` },\n beforeEnter\n },\n {\n name: 'LmsStudentsOpen',\n pattern: '/lms/students/open',\n meta: { title: `%%lms.navbar.students1%% | ${ThemeBrandTitle()}` },\n beforeEnter\n },\n {\n name: 'LmsStudentsCompleted',\n pattern: '/lms/students/completed',\n meta: { title: `%%lms.navbar.students1%% | ${ThemeBrandTitle()}` },\n beforeEnter\n }\n];\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsStudentDetailRoute = {\n name: 'LmsStudentDetail',\n pattern: '/lms/students/:id',\n meta: { title: `%%lms.navbar.students%% | ${ThemeBrandTitle()}` },\n beforeEnter,\n onEnter: async (fromState, toState, routerStore) => {\n // load student detail on entry\n const { store } = routerStore.options;\n const startdate = toState?.queryParams?.startdate || '';\n const enddate = toState?.queryParams?.enddate || '';\n await store.fetchStudentDetail(toState.params.id, startdate, enddate);\n },\n onExit: async (fromState, toState, routerStore) => {\n // clear student detail on exit\n const { store } = routerStore.options;\n store.clearStudentDetail();\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsCoursesRoute = [\n {\n name: 'LmsCourses',\n pattern: '/lms/courses',\n meta: { title: `%%lms.navbar.allCourses%% | ${ThemeBrandTitle()}` },\n beforeEnter\n },\n {\n name: 'LmsCoursesCompleted',\n pattern: '/lms/courses/completed',\n meta: { title: `%%lms.navbar.completedCourses%% | ${ThemeBrandTitle()}` },\n beforeEnter\n },\n {\n name: 'LmsCoursesOpenList',\n pattern: '/lms/courses/open',\n meta: { title: `%%lms.navbar.openCourses%% | ${ThemeBrandTitle()}` },\n beforeEnter\n }\n];\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsCourseDetailRoute = {\n name: 'LmsCourseDetail',\n pattern: '/lms/courses/:title/:id',\n meta: { title: `%%lms.navbar.courses%% | ${ThemeBrandTitle()}` },\n beforeEnter,\n onEnter: async (fromState, toState, routerStore) => {\n // load student detail on entry\n const { store } = routerStore.options;\n await store.fetchCourseDetail(toState.params.id);\n },\n onExit: async (fromState, toState, routerStore) => {\n // clear student detail on exit\n const { store } = routerStore.options;\n store.clearCourseDetail();\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { lmsBeforeEnter as beforeEnter } from 'pages/lms/LmsRouteActions';\n\nexport const lmsOrganisationsRoute = {\n name: 'LmsOrganisations',\n pattern: '/lms/organisations',\n meta: { title: `%%lms.navbar.organisation%% | ${ThemeBrandTitle()}` },\n beforeEnter\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { checkUserSignedIn } from 'state/RoutesActions';\n\nexport const errorPageRoute = {\n name: 'errorPage',\n pattern: '/error-status',\n title: `Foutmelding | ${ThemeBrandTitle}`,\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n if (store.state !== 'done') await checkUserSignedIn(fromState, toState, routerStore);\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { checkUserSignedIn } from 'state/RoutesActions';\n\nexport const notFoundPageRoute = {\n name: 'notFound',\n pattern: '/not-found',\n title: `Pagina niet gevonden | ${ThemeBrandTitle}`,\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n\n if (store.state !== 'done') await checkUserSignedIn(fromState, toState, routerStore);\n }\n // onEnter: async (fromState, toState, routerStore) => {\n //\n // const { store } = routerStore.options;\n //\n // if (store.state !== 'done') await checkUserSignedIn(fromState, toState, routerStore);\n // }\n};\n","import { checkUserSignedIn } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const vtbRoute = {\n name: 'vtb',\n meta: { title: `%%vtb.maintitle%% | ${ThemeBrandTitle()}` },\n pattern: '/vtb',\n beforeEnter: checkUserSignedIn\n};\n","import { checkUserSignedIn } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const attendanceSheetVtbRoute = {\n name: 'attendanceSheet',\n meta: { title: `%%attendance.title%% | ${ThemeBrandTitle()}` },\n pattern: '/vtb/attendance-register-e3474fe4',\n beforeEnter: checkUserSignedIn\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { checkUserSignedIn, checkSubscription } from 'state/RoutesActions';\n\nexport const curriculumDashboardRoute = {\n name: 'curriculumDashboard',\n meta: { title: `%%curriculum.title%% | ${ThemeBrandTitle()}` },\n pattern: '/portfolio/dashboard/:type',\n beforeEnter: async (fromState, toState, routerStore) => {\n try {\n await checkUserSignedIn(fromState, toState, routerStore);\n } catch (e) {\n return e;\n }\n return checkSubscription(fromState, toState, routerStore, ['accountant', 'ewise accountant']);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const offset = 0;\n const isArchive = toState.params.type === 'archive';\n try {\n const params = {\n offset,\n limit: 10,\n is_deleted: isArchive ? 1 : 0\n };\n await store.fetchCurriculums(params);\n } catch (e) {\n return e;\n }\n return null;\n }\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\nimport { createRouterState } from 'mobx-state-router';\nimport { checkUserSignedIn, checkSubscription } from 'state/RoutesActions';\n\nexport const curriculumStagesRoute = {\n name: 'curriculumStages',\n meta: { title: `%%curriculum.title%% | ${ThemeBrandTitle()}` },\n pattern: '/portfolio/:uid/stages/:stageId',\n beforeEnter: async (fromState, toState, routerStore) => {\n await checkUserSignedIn(fromState, toState, routerStore);\n return checkSubscription(fromState, toState, routerStore, ['accountant', 'ewise accountant']);\n },\n onEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { uid } = toState.params;\n\n store.startLoadCurriculum(fromState);\n await store.fetchCurriculum(uid);\n\n if (!store.curriculum?.data?.id) {\n store.stopLoadCurriculum(fromState);\n return createRouterState('curriculumDashboard');\n }\n\n if (store.curriculum?.data?.attributes?.is_finished) {\n store.stopLoadCurriculum(fromState);\n return createRouterState('curriculumDashboard');\n }\n\n await store.fetchCurriculumFunctionExamples();\n await store.fetchCurriculumLearningGoalExamples();\n await store.fetchCurriculumLearningGoalActivityExamples();\n store.stopLoadCurriculum(fromState);\n\n return null;\n }\n};\n","import { checkUserSignedIn } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const faqRoute = {\n name: 'faq',\n meta: { title: `%%faq.title%% | ${ThemeBrandTitle()}` },\n pattern: '/:productName/:product/:packageId/faq',\n beforeEnter: checkUserSignedIn\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const faq2Route = {\n name: 'faq2',\n title: `Faq2 | ${ThemeBrandTitle}`,\n pattern: '/faq2'\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const faq3Route = {\n name: 'faq3',\n title: `Faq3 | ${ThemeBrandTitle}`,\n pattern: '/faq3'\n};\n","import { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const articleRoute = {\n name: 'article',\n title: `Article | ${ThemeBrandTitle}`,\n pattern: '/article'\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { checkUserSignedIn } from 'state/RoutesActions';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\nexport const colophonRoute = {\n name: 'colophonOverview',\n meta: { title: `%%colophon.title%% | ${ThemeBrandTitle()}` },\n pattern: '/:productName/:product/:packageId/colophon',\n beforeEnter: async (fromState, toState, routerStore) => {\n const { store } = routerStore.options;\n const { params } = toState;\n // Check if the user is LTI and trying to reach this page\n if (store.getLtiSession() === 1 || store.getLtiSession() === '1') {\n return createRouterState('errorPage');\n }\n try {\n if (store.hasSubscriptions === 'init') await checkUserSignedIn(fromState, toState, routerStore, params.product);\n } catch (e) {\n return e;\n }\n return null;\n }\n};\n","import { createRouterState } from 'mobx-state-router';\nimport { ThemeBrandTitle, convertUrlEncodedString } from 'helpers/Helpers';\nimport { getEwapiSearch } from 'state/RoutesActions';\n\n/**\n * CourseOverviewRoute\n * @type {{name: string, pattern: string, title: string, beforeEnter: (function(*, *, *): Promise)}}\n */\nexport const searchOverviewRoute = {\n name: 'searchOverview',\n pattern: '/search/:baseProductId/:searchParam/:searchAttempt',\n meta: { title: `%%searchoverview.title%% | ${ThemeBrandTitle()}` },\n // eslint-disable-next-line consistent-return\n beforeEnter: async (fromState, toState, routerStore) => {\n const searchParam = toState.params.searchParam.toString();\n const baseProductId = toState.params.baseProductId.toString();\n const { store } = routerStore.options;\n if (searchParam !== '' && searchParam !== undefined && searchParam !== null\n && baseProductId !== '' && baseProductId !== undefined && baseProductId !== null) {\n store.setSearchParam(convertUrlEncodedString(searchParam));\n store.setSearchBaseProductParam(baseProductId);\n try {\n const response = getEwapiSearch(fromState, toState, routerStore);\n if (response?.data?.error) {\n return createRouterState('home');\n }\n } catch (error) {\n // Handle error if necessary\n console.error('Error fetching search data:', error);\n }\n }\n }\n};\n","import * as logger from 'loglevel';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n// HOME ROUTE (DEFAULT ENTRY ROUTE)\nimport { homeRoute } from 'pages/home/HomeRoute';\n// COURSE\nimport { CourseIntroductionRoute, defCourseIntroductionRoute } from 'pages/course/CourseIntroductionViewRoute';\nimport { courseOverviewRoute } from 'pages/course/CourseOverviewRoute';\nimport { defCourseOverviewRoute } from 'pages/course/DefCourseOverviewRoute';\nimport { teachersOverviewRoute, teacherDetailRoute } from 'pages/teachersOverview';\n// SPECIAL ACCESS\nimport {\n specialAccessRoute,\n SpecialAccessCourseIntroductionRoute,\n specialAccessLessonPlayRoute\n} from 'pages/specialAccess/SpecialAccessRoute';\n// ADMIN COURSES\nimport {\n onlineCourses,\n offlineCourses,\n dashboard,\n editCourse,\n defEditCourse,\n viewCourses,\n courseSearchBar,\n adminCourseLessonPlay\n} from 'pages/adminCourses';\n// PROFILE\nimport { subscriptions, settings, profile, certificates } from 'pages/account';\n// LOGIN\nimport { loginRoute, switchBackRoute } from 'pages/login/loginRoute/LoginRoute';\n// LESSON PLAY\nimport { lessonPlayRoutes, defLessonPlayRoutes } from 'pages/play/lessonPlayRoutes/LessonPlayRoute';\nimport { evaluation, feedback, terms } from 'pages/play';\n// ASSISTANT\nimport { assistantManagementRoute } from 'pages/assistentManagment/assistantManagementRoute';\n// LMS\nimport {\n lmsDashboardRoute,\n lmsStudentsRoute,\n lmsStudentDetailRoute,\n lmsCoursesRoute,\n lmsCourseDetailRoute,\n lmsOrganisationsRoute\n} from 'pages/lms';\n// ERROR PAGES\nimport { errorPageRoute } from 'pages/misc/miscRoutes/ErrorPageRoute';\nimport { notFoundPageRoute } from 'pages/misc/miscRoutes/NotFoundPageRoute';\n// VTB\nimport { vtbRoute } from 'pages/vtbDashboard/vtbRoutes/VtbRoute';\nimport { attendanceSheetVtbRoute } from 'pages/vtbDashboard/vtbRoutes/AttendanceSheetVtbRoute';\n// Curriculum\nimport { curriculumDashboardRoute } from 'pages/curriculum/curriculumDashboard/curriculumDashboardRoute';\nimport { curriculumStagesRoute } from 'pages/curriculum/curriculumStages/curriculumStagesRoute';\n// OTHER PAGES\nimport { faq, faq2, faq3, article } from 'pages/faq';\nimport { colophonRoute } from 'pages/colophon/colophonRoutes/ColophonRoute';\n// E-WISE SELECT PRODUCT\nimport { selectProductRoute } from 'pages/ewiseUserSelectProduct/SelectProductRoute';\n// SEARCH\nimport { searchOverviewRoute } from 'pages/search/SearchOverviewRoute';\n\nconst log = logger.getLogger('Routes');\nconst BrandTitle = ThemeBrandTitle();\nlog.setDefaultLevel('info');\n\n// Be aware: Sequence is important! Routes are matched from top to bottom.\n// Make sure they are sequenced specific to general.\nexport const routes = [\n // HOME\n { ...homeRoute },\n {\n name: 'gotoadmin',\n title: `Admin panel | ${BrandTitle}`,\n pattern: '/go-to-admin'\n },\n // COURSE\n { ...courseOverviewRoute },\n { ...defCourseOverviewRoute },\n { ...defCourseIntroductionRoute },\n { ...CourseIntroductionRoute },\n { ...teachersOverviewRoute },\n { ...teacherDetailRoute },\n\n // SPECIAL ACCESS\n { ...specialAccessRoute },\n { ...SpecialAccessCourseIntroductionRoute },\n { ...specialAccessLessonPlayRoute },\n // LOGIN\n { ...loginRoute },\n { ...switchBackRoute },\n // OTHER\n { ...selectProductRoute },\n\n // ADMIN\n { ...editCourse },\n { ...defEditCourse },\n { ...viewCourses },\n { ...dashboard },\n { ...onlineCourses },\n { ...offlineCourses },\n { ...courseSearchBar },\n { ...adminCourseLessonPlay },\n\n // MY ACCOUNT\n { ...subscriptions },\n { ...certificates },\n { ...settings },\n { ...profile },\n\n // LOADING\n {\n name: 'loading',\n title: `Loading... | ${BrandTitle}`,\n meta: {\n title: `Loading... | ${BrandTitle}`\n },\n pattern: '/loading'\n },\n\n // LESSONPLAY ROUTES\n { ...lessonPlayRoutes },\n { ...defLessonPlayRoutes },\n { ...evaluation },\n { ...terms },\n { ...feedback },\n\n // ERROR PAGES\n { ...errorPageRoute },\n { ...notFoundPageRoute },\n\n // ASSISTANT\n { ...assistantManagementRoute },\n\n // LMS\n ...lmsDashboardRoute,\n ...lmsCoursesRoute,\n ...lmsStudentsRoute,\n { ...lmsStudentDetailRoute },\n { ...lmsCourseDetailRoute },\n { ...lmsOrganisationsRoute },\n\n // VTB\n { ...vtbRoute },\n { ...attendanceSheetVtbRoute },\n\n // Curriculum\n { ...curriculumDashboardRoute },\n { ...curriculumStagesRoute },\n\n // OTHER PAGES\n { ...faq },\n { ...faq2 },\n { ...faq3 },\n { ...article },\n { ...colophonRoute },\n\n // SEARCH\n { ...searchOverviewRoute }\n];\n","export const selectProductRoute = {\n name: 'selectProduct',\n pattern: '/select-product',\n title: `Selecteer je product`\n};\n","import { useContext, useState, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\n\n// This code uses the useEwapi hook to fetch information about a product or package.\n// It also sets the value of loading to true while the fetch is in progress.\n\nconst useEwapi = (product = 0, _package = 0) => {\n const [response, setResponse] = useState(null);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const store = useContext(Store);\n const { pattern } = store.routerStore.getCurrentRoute();\n const isAdmin = pattern.includes('/admin/');\n\n useEffect(() => {\n const doFetch = async () => {\n setLoading(true);\n const urlCourses = `${process.env.REACT_APP_JSONAPI}/ewapi/product/${product}/package/${_package}/json`;\n const urlSelectProduct = `${process.env.REACT_APP_JSONAPI}/ewapi/products/json`;\n const url = store.isEwiseUser ? urlSelectProduct : urlCourses;\n try {\n const res = await window.authedClient.get(url);\n\n setResponse(res.data);\n // if (isAdmin) store.courseEdit.setStoreValue('ewapi', json.data);\n // if (!isAdmin) store.setStoreValue('ewapi', json.data);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n };\n doFetch();\n }, [_package, isAdmin, product, store]);\n return { response, error, loading };\n};\nexport default useEwapi;\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport CheckIcon from '@mui/icons-material/Check';\nimport { Box } from '@mui/material';\n\n// HOOKS\nimport useEwapi from '../../hooks/useEwapi';\n// CUSTOM CSS\nimport '../../theme/selectProduct/selectProduct.scss';\n\nconst cssCheckIcon = { position: 'absolute', right: '35px' };\n\nconst SelectProduct = () => {\n const store = useContext(Store);\n const { t } = useTranslation('ewiseProductSelection');\n\n const { response, loading, error } = useEwapi();\n const [expanded, setExpanded] = useState(false);\n const [save, setSave] = useState(false);\n // header title\n const title = t('titleSelectProduct', 'Select product');\n // EVENTHANDLERS\n const handleChange = (panel) => (event, isExpanded) => {\n setExpanded(isExpanded ? panel : false);\n };\n\n const handleSaveChange = (event) => {\n setSave(event.target.checked);\n };\n // CUSTOM FUNCTIONS\n const getPatchUser = (uuid) => ({\n type: 'user',\n id: store.ewiseUserUuid,\n relationships: {\n field_preferred_product: { data: { type: 'base_product', id: uuid } }\n }\n });\n\n // ==== SET / SAVE PRODUCT ====\n // eslint-disable-next-line consistent-return\n const setProduct = (nid, uuid, name = '', products = []) => {\n const productName = name.toLowerCase().trim().replace(/\\s/g, '-');\n store.login.prefBaseProduct = nid;\n store.setPrefProduct(nid);\n store.setEwiseBannerProducts(products);\n if (save) {\n (async () => {\n await store.lmsApi.patchpost(getPatchUser(uuid));\n store.routerStore.goTo('courseOverview', { params: { productName, product: nid.toString(), packageId: '0' } });\n store.showToast({ message: t('account.profile.productChoice', 'Your choice has been saved!'), variant: 'success' });\n })();\n } else {\n return store.routerStore.goTo('courseOverview', {\n params: { productName, product: nid.toString(), packageId: '0' }\n });\n }\n };\n\n const getLabel = () => {\n const hostname = window.location.host;\n if (hostname.includes('e-wise')) return 'ewise';\n if (hostname.includes('pe-academy')) return 'pe';\n if (hostname.includes('po-online')) return 'po';\n if (hostname.includes('cme-online')) return 'cme';\n return 'pe';\n };\n\n const getCurrentProduct = (profs) => {\n if (!store.login.prefBaseProduct) return {};\n const mergedData = profs.map((item) => {\n const baseProductId = item.tid;\n return item.base_product.map((i) => ({ bpId: baseProductId, ...i }));\n });\n const curProduct = mergedData.flat().find((item) => item.nid === Number(store.login.prefBaseProduct));\n return curProduct ? { check: , ...curProduct } : {};\n };\n\n const Products = (professions) => {\n const label = getLabel();\n const products = professions.professions.label.filter((p) => p.label === label);\n const profs = products[0].profession;\n\n const currentProduct = getCurrentProduct(profs);\n\n return profs.map((prof) => (\n \n }\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n {prof.name}\n \n \n {prof.base_product.map((bp) => (\n setProduct(bp.nid, bp.uuid, bp.unique_name, bp.products)}\n >\n {bp.title} {currentProduct?.nid === bp.nid && currentProduct?.check}\n \n ))}\n \n \n ));\n };\n\n return (\n \n

{title}

\n \n {loading &&

Loading...

}\n {error &&

Something went wrong...

}\n {response && (\n \n \n \n }\n label={t('savePrefProduct', 'Save as preferred product')}\n />\n \n \n \n \n )}\n
\n
\n );\n};\n\nexport default observer(SelectProduct);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport SelectProduct from './SelectProduct';\n\nconst selectProductViewMap = {\n selectProduct: (\n \n \n \n )\n};\n\nexport default selectProductViewMap;\n","import { SvgIcon } from '@mui/material';\n\nconst SubscribeTab = (props) => (\n \n \n \n \n);\n\nexport default SubscribeTab;\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/* Custom components */\nimport { Paper, Typography, Box, SvgIcon } from '@mui/material';\nimport { TabComponent } from 'components';\nimport { useBreakpoint } from 'hooks';\nimport PersonIcon from '@mui/icons-material/Person';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport CertificateTab from 'components/icons/CertificateTab';\nimport SubscribeTab from 'components/icons/SubscribeTab';\n\n/*\nIn summary, the AccountSidebar component is used for rendering a sidebar navigation menu with tabs. \nThe tabs are configured based on the user's role (with administrators having access to an additional \"Settings\" tab). \nThe component also handles internationalization for text content and adjusts the orientation of the tabs based on the screen size. \nIt appears to be part of a user account or profile section of a web application.\n*/\nconst AccountSidebar = () => {\n const store = useContext(Store);\n const mobileBreakpoint = useBreakpoint();\n const orientationChange = mobileBreakpoint === 'sm' || mobileBreakpoint === 'xs' || (mobileBreakpoint === 'md' && !store.minDrawer);\n const { t } = useTranslation();\n const tabItems = [\n {\n id: 'profile',\n label: (\n \n {t('account.profile.title')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('profile');\n }\n },\n {\n id: 'certificates',\n label: (\n \n \n {t('account.certificate.tab')}\n \n ),\n nestedTable: true,\n callback: () => {\n store.routerStore.goTo('certificates');\n }\n },\n {\n id: 'subscription',\n label: (\n \n \n {t('account.subscription.title')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('subscription');\n }\n }\n ];\n const tabSettings = {\n id: 'settings',\n label: (\n \n {t('account.settings.title')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('settings');\n }\n };\n // SETTINGS TAB IS VISABLE FOR ADMINISTRATORS ONLY\n if (store.isAdministrator) tabItems.push(tabSettings);\n\n return (\n \n \n {t('account.title')}\n \n \n \n );\n};\n\nexport default observer(AccountSidebar);\n","/* Core */\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\n/* Custom styling */\nimport 'theme/account/Account.scss';\n\n/* MUI */\nimport { Grid, Paper } from '@mui/material';\n\n/* Custom components */\nimport { useBreakpoint } from 'hooks';\nimport AccountSidebar from './AccountSidebar';\n\n// This component is responsible for the account page. It renders a sidebar and the main content.\n\nconst AccountV2 = (props) => {\n const { children } = props;\n const store = useContext(Store);\n const mobileBreakpoint = useBreakpoint();\n\n const orientationChange = mobileBreakpoint === 'sm' || mobileBreakpoint === 'xs' || (mobileBreakpoint === 'md' && !store.minDrawer);\n\n return (\n \n \n \n \n \n \n {children}\n \n \n \n );\n};\n\nAccountV2.propTypes = {\n children: PropTypes.element\n};\nexport default observer(AccountV2);\n","/* eslint-disable camelcase */\n/* Core */\nimport { useState, useContext, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport {\n Box,\n Card,\n Grid,\n CardContent,\n Typography,\n FormControl,\n InputLabel,\n SvgIcon,\n Select,\n MenuItem,\n Pagination,\n CircularProgress,\n Divider\n} from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\n\nimport DownloadIcon from '@mui/icons-material/Download';\nimport CertificateTab from 'components/icons/CertificateTab';\nimport { translatePoints, GetTimeLabel } from 'helpers/Helpers';\nimport { startLmsApiClient } from 'state/api/LmsApi';\n\nfunction getLastEightYears() {\n const currentYear = new Date().getFullYear();\n const years = [];\n\n for (let i = 0; i < 8; i++) {\n years.push(currentYear - i);\n }\n\n return years;\n}\n\nfunction getYearTimestamps(year) {\n // First moment of the year\n const startOfYear = new Date(year, 0, 1, 0, 0, 0, 0);\n const startTimestamp = startOfYear.getTime();\n\n // Last moment of the year\n const endOfYear = new Date(year + 1, 0, 1, 0, 0, 0, 0);\n const endTimestamp = endOfYear.getTime() - 1;\n\n return { startTimestamp, endTimestamp };\n}\n\n/*\nThe component renders a list of certificates earned by the user.\nIt displays the name of the course, the number of points earned,\nthe duration of the course in hours,\nthe date the certificate was earned,\nand a button to download the certificate.\nThe list can be filtered by year using a dropdown menu.\n*/\n\nconst limit = 10;\nconst Certificates = () => {\n const { t } = useTranslation();\n const store = useContext(Store);\n const [loading, setLoading] = useState([]);\n const [certificates, setCertificates] = useState(null);\n const [certificatesLoading, setCertificatesLoading] = useState(false);\n const [selectedYear, setSelectedYear] = useState(t('account.certificate.filter.all'));\n const [page, setPage] = useState(0);\n\n useEffect(() => {\n const init = async () => {\n setCertificatesLoading(true);\n const { startTimestamp, endTimestamp } =\n selectedYear === t('account.certificate.filter.all')\n ? { startTimestamp: 0, endTimestamp: new Date().getTime() }\n : getYearTimestamps(selectedYear);\n\n const result = await startLmsApiClient().fetchCourseResults(store.login.uuid, {\n page: { offset: page * limit, limit },\n sort: '-certificate',\n filter: {\n completedDate: {\n condition: {\n value: startTimestamp / 1000,\n path: 'certificate',\n operator: '>'\n }\n },\n completedDateEnd: {\n condition: {\n value: endTimestamp / 1000,\n path: 'certificate',\n operator: '<'\n }\n }\n }\n });\n\n if (result?.data) {\n setCertificates(result.data);\n }\n\n setCertificatesLoading(false);\n };\n\n init();\n }, [page, selectedYear, store.login.uuid, t]);\n\n const possibleFilterYears = [t('account.certificate.filter.all'), ...getLastEightYears()];\n\n const handleDownload = async (id, index) => {\n setLoading((prevLoading) => {\n const newLoading = [...prevLoading];\n newLoading[index] = true;\n return newLoading;\n });\n try {\n const code = await store.lmsApi.downloadCertificate(id);\n window.open(`${window.clientInstance.authorizationDomain}/course-result/${id}/${code}/certificate`, '_blank');\n } catch (error) {\n store.showToast({ message: t('introduction.sidebar.certificateError'), variant: 'error' });\n }\n setLoading((prevLoading) => {\n const newLoading = [...prevLoading];\n newLoading[index] = false;\n return newLoading;\n });\n };\n\n const options = { day: 'numeric', month: 'long', year: 'numeric' };\n\n if (certificatesLoading || !certificates) {\n return (\n \n \n \n );\n }\n\n if (certificates?.meta?.count === 0 && selectedYear === t('account.certificate.filter.all')) {\n return (\n \n \n \n \n {t('account.certificate.noCertificates', 'No certificates earned yet')}\n \n \n \n );\n }\n\n return (\n \n \n \n \n {t('account.certificate.title')}\n \n \n \n \n {t('account.certificate.filter.label')}\n {\n setSelectedYear(e.target.value);\n setPage(0);\n }}\n >\n {possibleFilterYears.map((item) => (\n \n {item}\n \n ))}\n \n \n \n \n {certificates?.meta?.count === 0 && (\n \n \n \n {t('account.certificate.noCertificatesSelectedYear', 'No certifications achieved for the chosen year')}\n \n \n )}\n \n \n {certificates.data?.map((c, index) => {\n const { name, points, certificate, accreditation_unit_singular, accreditation_unit_plural } = c.attributes;\n\n const date = new Date(certificate).toLocaleDateString('nl-NL', options);\n const accrSingular = accreditation_unit_singular || 'uur';\n const accrPlural = accreditation_unit_plural || 'uren';\n const accr = points <= 1 ? accrSingular : accrPlural;\n\n const defPoints =\n parseFloat(points) > 1 && parseFloat(points).toString().includes('.') ? parseFloat(points).toFixed(1) : parseFloat(points);\n const getPoints = `${defPoints} ${translatePoints(accr, t)}`;\n const splitPoints = getPoints.split(' ');\n const getHours = parseFloat(splitPoints[0]);\n const isMinutes = getHours < 1 && splitPoints[1].includes('ur');\n const duration = isMinutes ? GetTimeLabel(getHours, true) : getPoints;\n\n return (\n \n \n \n \n \n \n {name}\n \n \n \n \n \n \n \n \n {date}\n \n \n \n \n {t('account.certificate.points')}\n \n \n {name.includes(\"met baby's [module 4]\") ? '22 uur' : duration}\n \n \n \n \n \n \n \n handleDownload(c.id, index)}\n endIcon={}\n loading={loading[index]}\n loadingPosition=\"end\"\n variant=\"contained\"\n >\n Download\n \n \n \n \n \n \n \n );\n })}\n {certificates?.meta?.count !== 0 && (\n \n setPage(value - 1)}\n />\n \n )}\n \n \n \n );\n};\n\nexport default observer(Certificates);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Accountv2 from '../Accountv2';\nimport Certificates from '../components/Certificates';\n\nconst CertificatesViewMap = {\n certificates: (\n \n \n \n \n \n )\n};\n\nexport default CertificatesViewMap;\n","import { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef } from 'react';\nimport { TextField } from '@mui/material';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { DesktopDatePicker } from '@mui/x-date-pickers/DesktopDatePicker';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport dayjs from 'dayjs';\n\n// renders a DatePicker\nconst MyDatePicker = forwardRef(\n ({ name, control, textFieldProps = {}, ...otherProps }, ref) =>\n control && (\n (\n \n (\n \n )}\n />\n \n )}\n />\n )\n);\n\nMyDatePicker.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n textFieldProps: PropTypes.object\n};\n\nexport default MyDatePicker;\n","export default __webpack_public_path__ + \"static/media/Mail.697309d4.svg\";","import { SvgIcon } from '@mui/material';\n\nconst DateIcon = (props) => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default DateIcon;\n","import { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef, useState } from 'react';\nimport { Avatar } from '@mui/material';\n\nconst ImageUploader = forwardRef(({ name, control, onChange: onChangeProp, src, editMode, ...otherProps }, ref) => {\n const [files, setFiles] = useState(src);\n\n return (\n (\n \n )}\n />\n );\n});\n\nImageUploader.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n onChange: PropTypes.func,\n src: PropTypes.string,\n editMode: PropTypes.bool\n};\n\nexport default ImageUploader;\n","/* Core */\nimport { Controller } from 'react-hook-form';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { TextField, Chip, Autocomplete, FormControl, FormHelperText } from '@mui/material';\n\n/*\nIn summary, the MyAutocomplete component is a controlled multiple selection autocomplete input field. \nIt's designed for use in forms and leverages the react-hook-form library for controlled form handling. \nUsers can select multiple options, including custom entries not present in the provided options array. \nThe selected options are displayed as colorful Chip components within the input field. \nThe component allows for flexible and customized autocomplete functionality in a React application.\n*/\nconst MyAutocomplete = (props) => {\n const { control, name, label, helperText, ...otherProps } = props;\n return (\n (\n \n onChange(data)}\n freeSolo\n {...otherProps}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n \n ))\n }\n renderInput={(params) => }\n />\n {helperText}\n \n )}\n />\n );\n};\n\nMyAutocomplete.propTypes = {\n control: PropTypes.object,\n name: PropTypes.string,\n label: PropTypes.string,\n helperText: PropTypes.string\n};\n\nexport default observer(MyAutocomplete);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { MySelect, MyTextField, MyCheckbox } from 'components/form/RHF';\nimport MyAutocomplete from 'components/form/RHF/Autocomplete/MyAutocomplete';\n\nconst ProfileFields = ({ type, ...props }) => {\n if (type === 'select') {\n const { margin, ...rest } = props;\n return ;\n }\n if (type === 'checkbox') {\n const { margin, fullWidth, ...rest } = props;\n return ;\n }\n if (type === 'autocomplete') {\n const { margin, ...rest } = props;\n return ;\n }\n return ;\n};\n\nProfileFields.propTypes = {\n type: PropTypes.string,\n margin: PropTypes.string,\n fullWidth: PropTypes.any\n};\n\nexport default observer(ProfileFields);\n","import * as Yup from 'yup';\nimport { useTranslation } from 'react-i18next';\n\nconst FormProfileValidation = (initialValues) => {\n const { t } = useTranslation();\n\n // Reusable transform function\n const transformNullable = (value, originalValue) => (originalValue === '' ? null : value);\n\n return Yup.object().shape({\n mail: Yup.string().email(t('account.validation.email')),\n field_gender: Yup.string().nullable(),\n field_birthdate: Yup.date()\n .nullable()\n .transform((value, originalValue) => {\n try {\n // Parse the date string manually\n originalValue = String(originalValue);\n\n const parts = originalValue.split(' ');\n const monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const monthIndex = monthNames.indexOf(parts[1]);\n const day = parseInt(parts[2]);\n const year = parseInt(parts[3]);\n const hours = parseInt(parts[4]?.split(':')[0]);\n const minutes = parseInt(parts[4]?.split(':')[1]);\n const seconds = parseInt(parts[4]?.split(':')[2]);\n\n // Create a Date object using the parsed components\n // +1 is import for hours or the backend thinks it is the day before\n const date = new Date(year, monthIndex, day, (hours + 2), minutes, seconds);\n\n // Check if the parsed date is valid\n if (Number.isNaN(date.getTime())) {\n window.console.log(`Invalid date: ${originalValue}`);\n return null;\n }\n\n return date;\n } catch (error) {\n window.console.log('date:', originalValue);\n window.console.error(\"Error parsing birthdate:\", error);\n return null; // Handle invalid date gracefully\n }\n }),\n field_bignr: Yup.string()\n .changedValueMatches(/^\\d{10,11}$/, {\n message: t('account.validation.bignr'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_bignr\n }),\n field_rbnr: Yup.string()\n .changedValueMatches(/^\\d{4,6}$/, {\n message: t('account.validation.rbnr'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_rbnr\n }),\n /* @todo field_kngfnr = deprecated? */\n field_kngfnr: Yup.string()\n .nullable()\n .transform(transformNullable)\n .matches(/^\\d+$/, t('account.validation.digits'))\n .max(11, t('account.validation.digitsMax')),\n field_krmnr: Yup.string()\n .changedValueMatches(/^\\d{4,}$/, {\n message: t('account.validation.krmnr'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_krmnr\n }),\n field_kabiznr: Yup.string()\n .changedValueMatches(/^\\d{10,11}$/, {\n message: t('account.validation.kabiznr'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_kabiznr\n }),\n field_nirv_number: Yup.string()\n .changedValueMatches(/^\\d{1,5}$/, {\n message: t('account.validation.nirv_number'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_nirv_number\n }),\n field_vvn_nr: Yup.string()\n .changedValueMatches(/^\\d{4,}$/, {\n message: t('account.validation.vvn_nr'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_vvn_nr\n }),\n field_slpo_id: Yup.string()\n .changedValueMatches(/^[(2|3]\\d{7}/, {\n message: t('account.validation.slpo_id'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_slpo_id\n }),\n field_nova_number: Yup.string()\n .changedValueMatches(/^[A-Z]\\d{5}$/, {\n message: t('account.validation.nova_number'),\n excludeEmptyString: true,\n initialValue: initialValues?.field_nova_number\n }),\n preferred_langcode: Yup.string()\n });\n};\n\n// Perform regex test only on changed values.\nYup.addMethod(Yup.string, 'changedValueMatches', function changedValueMatches(regex, options) {\n let optionsObj = {\n excludeEmptyString: false,\n // eslint-disable-next-line no-template-curly-in-string\n message: '${path} is invalid',\n name: 'changedValueMatches',\n initialValue: ''\n };\n\n if (options) {\n if (typeof options === 'object') {\n optionsObj = {...optionsObj, ...options}\n }\n else {\n optionsObj.message = options;\n }\n }\n\n return this.test('changedValueMatches', optionsObj.message, (value) => {\n const { excludeEmptyString, initialValue } = optionsObj;\n\n if (excludeEmptyString && !value) {\n return true;\n }\n\n if (initialValue && initialValue === value) {\n return true;\n }\n\n const matchOptions = { ...optionsObj };\n delete matchOptions.initialValue;\n\n return this.matches(regex, matchOptions).validate(value).catch(() => {\n // nothing.\n });\n });\n});\n\nexport default FormProfileValidation;\n","export const conditionalFields = {\n Advocaat: [\n {\n name: 'field_nova_number',\n label: 'BAR nummer',\n type: 'text',\n required: true,\n helperText: 'Gelieve uw NOvA / BAR registratienummer in te vullen. Dit nummer staat op uw advocatenpas. Indien u geen NOvA / BAR registratienummer heeft, kunt u dat hieronder aangeven.',\n msg: window.i18next.t('account.conditionalFields.advocaat')\n },\n {\n name: 'field_rechtsgebieden[]',\n label: 'Rechtsgebied(en)',\n type: 'select',\n multiple: true,\n required: true,\n items: [\n { name: 'Aanbestedingsrecht', value: 'Aanbestedingsrecht' },\n { name: 'Agrarisch recht', value: 'Agrarisch recht' },\n { name: 'Algemene praktijk', value: 'Algemene praktijk' },\n { name: 'Ambtenarenrecht', value: 'Ambtenarenrecht' },\n { name: 'Arbeidsrecht', value: 'Arbeidsrecht' },\n { name: 'Asiel- en vluchtelingenrecht', value: 'Asiel- en vluchtelingenrecht' },\n { name: 'Belastingrecht', value: 'Belastingrecht' },\n { name: 'Bestuursrecht', value: 'Bestuursrecht' },\n { name: 'Burgerlijk procesrecht', value: 'Burgerlijk procesrecht' },\n { name: 'Cassatie', value: 'Cassatie' },\n { name: 'Economisch ordeningsrecht', value: 'Economisch ordeningsrecht' },\n { name: 'Erfrecht', value: 'Erfrecht' },\n { name: 'Financieel recht a. Bankrecht', value: 'Financieel recht a. Bankrecht' },\n { name: 'Gezondheidsrecht', value: 'Gezondheidsrecht' },\n { name: 'Huurrecht', value: 'Huurrecht' },\n { name: 'Informatierecht', value: 'Informatierecht' },\n { name: 'Insolventierecht', value: 'Insolventierecht' },\n { name: 'Intellectueel eigendomsrecht', value: 'Intellectueel eigendomsrecht' },\n { name: 'Letselschaderecht', value: 'Letselschaderecht' },\n { name: 'Omgevingsrecht', value: 'Omgevingsrecht' },\n { name: 'Ondernemingsrecht', value: 'Ondernemingsrecht' },\n { name: 'Onderwijsrecht', value: 'Onderwijsrecht' },\n { name: 'Onteigeningsrecht', value: 'Onteigeningsrecht' },\n { name: 'Personen- en Familierecht', value: 'Personen- en Familierecht' },\n { name: 'Privacy recht', value: 'Privacy recht' },\n { name: 'Psychiatrisch patiëntenrecht', value: 'Psychiatrisch patiëntenrecht' },\n { name: 'Slachtofferrecht', value: 'Slachtofferrecht' },\n { name: 'Sociaal-zekerheidsrecht', value: 'Sociaal-zekerheidsrecht' },\n { name: 'Sportrecht', value: 'Sportrecht' },\n { name: 'Strafrecht', value: 'Strafrecht' },\n { name: 'Transport- en handelsrecht', value: 'Transport- en handelsrecht' },\n { name: 'Tuchtrecht', value: 'Tuchtrecht' },\n { name: 'Vastgoedrecht', value: 'Vastgoedrecht' },\n { name: 'Verbintenissenrecht', value: 'Verbintenissenrecht' },\n { name: 'Verzekeringsrecht', value: 'Verzekeringsrecht' },\n { name: 'Vreemdelingenrecht', value: 'Vreemdelingenrecht' },\n { name: 'Overig', value: 'Overig' }\n ],\n helperText:\n 'Om u een volledig cursusaanbod te kunnen blijven aanbieden vragen wij u naar uw geregistreerde rechtsgebieden. Indien u geen rechtsgebieden heeft geregistreerd bij de NOvA, kunt u dat hieronder aangeven.',\n msg: window.i18next.t('account.conditionalFields.advocaat')\n }\n ],\n Accountant: [\n {\n name: 'field_rbnr',\n label: 'RB nummer',\n type: 'text',\n required: true,\n helperText:\n 'Bent u lid van het RB (Register Belastingadviseurs), dan graag hierboven uw RB-lidmaatschapsnummer invullen. Wij hebben dit nummer nodig om uw behaalde PE-punten automatisch door te geven aan het RB.'\n },\n {\n name: 'field_nirv_number',\n label: 'NIRV registratienummer',\n type: 'text',\n required: true\n },\n {\n name: 'field_accountants_type',\n label: 'Type accountant',\n type: 'select',\n multiple: null,\n required: true,\n items: [\n {\n name: 'Geen accountant',\n value: 'geen_accountant'\n },\n {\n name: 'Openbaar accountant',\n value: 'openbaar_accountant'\n },\n {\n name: 'Intern accountant',\n value: 'intern_accountant'\n },\n {\n name: 'Overheidsaccountant',\n value: 'overheidsaccountant'\n },\n {\n name: 'Accountant in business',\n value: 'accountants_in_business'\n },\n {\n name: 'Assistent accountant',\n value: 'assistent_accountant'\n }\n ],\n helperText: 'Om u een volledig aanbod te kunnen blijven aanbieden willen wij u vragen dit veld in te vullen.',\n msg: window.i18next.t('account.conditionalFields.accountant')\n }\n ],\n Fiscalist: [\n {\n name: 'field_rbnr',\n label: 'RB nummer',\n type: 'text',\n required: true,\n helperText:\n 'Bent u lid van het RB (Register Belastingadviseurs), dan graag hierboven uw RB-lidmaatschapsnummer invullen. Wij hebben dit nummer nodig om uw behaalde PE-punten automatisch door te geven aan het RB.',\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Notaris: [\n {\n name: 'field_function',\n label: 'Functie',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Notarieel medewerker': [\n {\n name: 'field_somn_member',\n label: 'Lid van het SOMN register?',\n type: 'checkbox',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Huisarts: [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Specialist ouderengeneeskunde': [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Verpleegkundig specialist': [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Apotheker: [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Tandarts: [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Apotheekhoudend huisarts': [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Arts voor verstandelijk gehandicapten': [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Fysiotherapeut: [\n {\n name: 'field_bignr',\n label: 'Big nr',\n type: 'text',\n required: true\n },\n {\n name: 'field_fysio_deelregister[]',\n label: 'Deelregister',\n type: 'select',\n multiple: true,\n required: true,\n items: [\n {\n name: 'Algemene fysiotherapie',\n value: 'algemene_fysiotherapie'\n },\n {\n name: 'Arbeidsfysiotherapie',\n value: 'arbeidsfysiotherapie'\n },\n {\n name: 'Bekkenfysiotherapie',\n value: 'bekkenfysiotherapie'\n },\n {\n name: 'Geriatriefysiotherapie',\n value: 'geriatriefysiotherapie'\n },\n {\n name: 'Hartfysiotherapie',\n value: 'hartfysiotherapie'\n },\n {\n name: 'Kinderfysiotherapie',\n value: 'kinderfysiotherapie'\n },\n {\n name: 'Longfysiotherapie',\n value: 'longfysiotherapie'\n },\n {\n name: 'Manueeltherapie',\n value: 'manueeltherapie'\n },\n {\n name: 'Oedeemfysiotherapie',\n value: 'oedeemfysiotherapie'\n },\n {\n name: 'Oncologiefysiotherapie',\n value: 'oncologiefysiotherapie'\n },\n {\n name: 'Orofaciaal fysiotherapie',\n value: 'orofaciaal_fysiotherapie'\n },\n {\n name: 'Psychosomatische fysiotherapie',\n value: 'psychosomatische_fysiotherapie'\n },\n {\n name: 'Sportfysiotherapie',\n value: 'sportfysiotherapie'\n },\n {\n name: 'Vaatfysiotherapie',\n value: 'vaatfysiotherapie'\n }\n ],\n helperText: 'Om u een volledig aanbod te kunnen blijven aanbieden willen wij u vragen dit veld in te vullen.',\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Mondhygiënist: [\n {\n name: 'field_krmnr',\n label: 'Krm nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Apothekersassistent: [\n {\n name: 'field_kabiznr',\n label: 'Kabiz nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Farmaceutisch consulent': [\n {\n name: 'field_kabiznr',\n label: 'Kabiz nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Begeleider Gehandicaptenzorg': [\n {\n name: 'field_vvn_nr',\n label: 'V&VN nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'VIG / Verpleegkundige': [\n {\n name: 'field_vvn_nr',\n label: 'V&VN nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Helpende plus / Verzorgende': [\n {\n name: 'field_vvn_nr',\n label: 'V&VN nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Wijkverpleegkundige: [\n {\n name: 'field_vvn_nr',\n label: 'V&VN nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n 'Schoolleider PO': [\n {\n name: 'field_slpo_id',\n label: 'Schoolleidersregister PO nr',\n type: 'text',\n required: true,\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ],\n Default: [\n {\n msg: window.i18next.t('account.conditionalFields.default')\n }\n ]\n};\n\nexport const languages = [\n { name: 'English', value: 'en' },\n { name: 'Nederlands', value: 'nl' }\n];\n","import { Box } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { conditionalFields } from '../forms/beans/profileData';\n\nconst AccreditationFieldsMsg = ({ professions }) => (\n \n {professions?.map((profession) => {\n const msgArray = conditionalFields[profession.attributes.name]?.filter((fields) => fields.msg !== '').map((fields) => fields.msg);\n\n return (\n \n {msgArray?.map((msg) => (\n
\n {msg}\n
\n ))}\n
\n );\n })}\n
\n);\n\nAccreditationFieldsMsg.propTypes = {\n professions: PropTypes.any\n};\n\nexport default AccreditationFieldsMsg;\n","/* eslint-disable camelcase */\n/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Alert, AlertTitle, Box, Button, Grid, Typography, InputAdornment, Badge, Divider, LinearProgress } from '@mui/material';\n\n/* Custom components */\nimport { Form } from 'components/form';\nimport { MySelect, MyTextField, MyCheckbox } from 'components/form/RHF';\nimport MyDatePicker from 'components/form/RHF/DatePicker/MyDatepicker';\nimport { getdirtyValues, changeLanguageMeta, addUserFields, ThemeBrandTitle } from 'helpers/Helpers';\nimport Mail from 'components/icons/Mail.svg';\nimport Calendar from 'components/icons/Calendar';\nimport ImageUploader from 'components/form/RHF/ImageUpload/ImageUploader';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { debounce } from 'lodash';\nimport ProfileFields from './ProfileFields';\nimport formProfileValidation from './beans/Profile.ValidationSchema';\nimport { conditionalFields, languages } from './beans/profileData';\nimport AccreditationFieldsMsg from '../components/AccreditationFieldsMsg';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\n/*\nThe component returns a form that displays the user's profile data. The form fields are populated with the initial values and can be edited if the user clicks the edit button. \nIf the user clicks the cancel button, the form fields are reset to their initial values. If the user clicks the save button, the handleSubmit function is called. \nThe component also displays the user's profile picture, if it exists, and allows the user to upload a new one.\n*/\nconst Profile = () => {\n const store = useContext(Store);\n const { t, i18n } = useTranslation();\n const [alertMsg, setAlertMsg] = useState('');\n const [checked, setChecked] = useState(false);\n const [profileLoading, setProfileLoading] = useState(false);\n\n const {\n attributes: {\n field_first_name,\n field_gender,\n mail,\n field_birthdate,\n field_last_name,\n field_bignr,\n field_rbnr,\n field_kngfnr,\n field_krmnr,\n field_kabiznr,\n field_initials,\n field_receive_email_notification,\n field_accountants_type,\n field_rechtsgebieden,\n field_fysio_deelregister,\n field_nirv_number,\n field_no_registration_numbers,\n field_slpo_id,\n field_function,\n preferred_langcode,\n field_somn_member,\n field_vvn_nr,\n field_nova_number\n },\n relationships: { user_picture }\n } = store.profile;\n\n const userPicture = user_picture?.data && `${drupalBaseUrl}${user_picture.data.attributes.uri.url}`;\n const professions = store.profile?.userProfessions;\n\n const initialValues = {\n mail,\n field_birthdate,\n photo: !userPicture ? '' : userPicture,\n field_gender: field_gender === null ? '' : field_gender,\n field_bignr: field_bignr === null ? '' : field_bignr,\n field_last_name,\n field_rbnr: field_rbnr === null ? '' : field_rbnr,\n field_kngfnr: field_kngfnr === null ? '' : field_kngfnr,\n field_krmnr: field_krmnr === null ? '' : field_krmnr,\n field_kabiznr: field_kabiznr === null ? '' : field_kabiznr,\n field_initials: field_initials === null ? '' : field_initials,\n field_first_name: field_first_name === null ? '' : field_first_name,\n field_receive_email_notification: field_receive_email_notification === null ? false : field_receive_email_notification,\n field_accountants_type: field_accountants_type === null ? '' : field_accountants_type,\n field_nirv_number: field_nirv_number === null ? '' : field_nirv_number,\n field_no_registration_numbers: field_no_registration_numbers === null ? '' : field_no_registration_numbers,\n field_somn_member: field_somn_member === null ? '' : field_somn_member,\n field_slpo_id: field_slpo_id === null ? '' : field_slpo_id,\n field_function: field_function === null ? '' : field_function,\n field_vvn_nr: field_vvn_nr === null ? '' : field_vvn_nr,\n field_nova_number: field_nova_number === null ? '' : field_nova_number,\n field_rechtsgebieden:\n field_rechtsgebieden === null || field_rechtsgebieden[0] === 'Geen rechtsgebieden geregistreerd' ? [] : field_rechtsgebieden,\n field_fysio_deelregister:\n field_fysio_deelregister === null\n ? [\n {\n name: 'Algemene fysiotherapie',\n value: 'algemene_fysiotherapie'\n }\n ]\n : field_fysio_deelregister,\n preferred_langcode\n };\n const gender = [\n { name: t('account.profile.genderOptions.male'), value: 'male' },\n { name: t('account.profile.genderOptions.female'), value: 'female' },\n { name: t('account.profile.genderOptions.other'), value: 'others' }\n ];\n\n const validationSchema = formProfileValidation(initialValues);\n\n const zohoId = store?.profile?.attributes?.zoho_id;\n const hasZohoId = zohoId !== undefined && zohoId !== null && zohoId !== '';\n const initialsCheck = hasZohoId;\n // This is to determine which extra fields to show\n const currentProfession = (professions && professions.find((profession) => profession.attributes.name === 'Notaris')) || false; //\n const noRegistrationLabel = currentProfession ? t('account.profile.noregistration1') : t('account.profile.noregistration');\n const hasConditionalFields = professions?.some((profession) => conditionalFields[profession.attributes.name]?.length > 0);\n const extraFields = addUserFields(store, conditionalFields);\n const editModeVal = true;\n const brandTitle = ThemeBrandTitle();\n\n // This is to determine the text to show in the accreditation fields\n const { uw } = brandTitle !== 'E-WISE' ? { uw: 'uw' } : { uw: 'je' };\n const { u } = brandTitle !== 'E-WISE' ? { u: 'u' } : { u: 'je' };\n const { U } = brandTitle !== 'E-WISE' ? { U: 'U' } : { U: 'Je' };\n\n // This function is called when the user clicks the checkbox not registered\n const handleChange = (event) => {\n setChecked(event.target.checked);\n };\n\n // fix for the scroll issue, when the user navigates to the profile page\n useEffect(() => {\n window.scrollTo(0, 0);\n }, []);\n\n // This function is called when the component is mounted\n useEffect(() => {\n const urlParams = new URLSearchParams(window.location.search);\n const status = urlParams.get('status');\n const msg = ;\n if (status && status === '1') {\n setAlertMsg(msg);\n }\n if (field_no_registration_numbers) {\n setChecked(true);\n }\n // cleanup\n return () => setAlertMsg('');\n }, [store, field_no_registration_numbers, professions]);\n\n // This function is called when the user clicks the save button\n const handleSubmit = async (values) => {\n const dirtyFields = getdirtyValues(values, initialValues);\n setProfileLoading(true);\n if (dirtyFields.photo) {\n await store.profile.patchPicture(store.profile, dirtyFields.photo, 'user_picture').then(() => {\n store.login.profilePicture = `${drupalBaseUrl}${user_picture.data.attributes.uri.url}`;\n store.user?.updatePicture(`${drupalBaseUrl}${user_picture.data.attributes.uri.url}`);\n delete dirtyFields.photo;\n });\n }\n try {\n await store.patchData(store.profile, {\n attributes: dirtyFields,\n id: store.profile.id,\n type: store.profile.type\n });\n i18n.changeLanguage(values.preferred_langcode);\n changeLanguageMeta(values.preferred_langcode);\n store.showToast({ message: t('account.profile.updated', 'Profile updated'), variant: 'success' });\n } catch (error) {\n store.showToast({ message: t('account.profile.error', 'Something went wrong'), variant: 'error' });\n }\n setProfileLoading(false);\n };\n\n // This function renders the extra fields based on the profession\n const renderProfileFields = (control, errors, profession, fields, trigger) =>\n fields.map((fieldName) => {\n const fieldDetails = conditionalFields[profession]?.find((profField) => profField.name === fieldName);\n const errorField = errors[fieldName];\n\n return fieldDetails ? (\n \n {\n trigger(fieldDetails.name);\n }, 1000, { leading: false, trailing: true }) : null}\n />\n \n ) : null;\n });\n\n return (\n \n {profileLoading && }\n {store.profile && (\n <>\n \n \n \n {t('account.profile.title')}\n \n {alertMsg && (\n \n Info\n {alertMsg}\n \n )}\n \n \n
\n {({ control, errors, dirty, trigger }) => (\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 \"mail\"\n \n )\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {hasConditionalFields && (\n \n \n {t('account.profile.accreditation')}\n \n {t('account.profile.accreditationText', { U, u, uw })}\n \n )}\n {hasConditionalFields &&\n Object.entries(extraFields).map(([profession, fields]) => (\n \n {renderProfileFields(control, errors, profession, fields, trigger)}\n \n ))}\n {hasConditionalFields && extraFields && (\n \n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n
\n \n )}\n
\n \n )}\n \n );\n};\n\nexport default observer(Profile);\n","import * as Yup from 'yup';\n\nconst passwordResetValidation = Yup.object().shape({\n current_password: Yup.string().required(window.i18next.t('passwordold')),\n new_password: Yup.string()\n .matches(\n /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{12,})/, // sonarclound is showing this as a security hotspot, but it is a false positive\n window.i18next.t('passwordreset')\n )\n .required(),\n repeat_password: Yup.string().oneOf([Yup.ref('new_password'), null], window.i18next.t('passwordmatch'))\n});\n\nexport { passwordResetValidation };\n","import { Box, Grid, Button, Dialog, DialogTitle, DialogActions, Stack, Typography, InputAdornment, IconButton } from '@mui/material';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\nimport { useState, useContext } from 'react';\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\nimport { getdirtyValues, ThemeBrandTitle } from 'helpers/Helpers';\nimport Visibility from '@mui/icons-material/Visibility';\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport PropTypes from 'prop-types';\nimport { passwordResetValidation } from './beans/PasswordReset.ValidationSchema';\n\n/*\n\nThe ProfileExtras component is a React functional component that provides a user interface for resetting a password. \nIt manages the visibility of a password reset dialog, allows users to input their current and new passwords, and evaluates the strength of the new password. \nThe component handles form submission, sending an API request to reset the password and displaying success or error messages accordingly. \nUsers can also toggle the visibility of their passwords. Additionally, it features custom styling, including a colored strength indicator for the new password. \nThe primary functionality includes password reset and password strength evaluation.\n*/\nconst ProfileExtras = (props) => {\n const store = useContext(Store);\n const { t } = useTranslation();\n const { forced } = props;\n // Initial state is forced if provided, otherwise default to false\n const [open, setOpen] = useState(forced || false);\n const [showCurrent, setShowCurrent] = useState(false);\n const [showNew, setShowNew] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n const brandTitle = ThemeBrandTitle();\n const { u, uw } = brandTitle !== 'E-WISE' ? { u: 'u', uw: 'uw' } : { u: 'je', uw: 'jouw' };\n\n const onClick = () => {\n setOpen(true);\n };\n // sonarcloud is showing security hotspot isues on regular expressions below. there is no risk here.\n const handleStrength = (value) => {\n if (value) {\n let strength = 'Weak';\n const strong = /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{12,})/;\n const medium = /((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{6,}))|((?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?=.{6,}))/;\n if (value.match(strong)) {\n strength = 'Strong';\n } else if (value.match(medium)) {\n strength = 'Medium';\n }\n return strength;\n }\n return null;\n };\n\n const initialValues = {\n current_password: '',\n new_password: '',\n repeat_password: ''\n };\n\n const request = async (data) => {\n const response = await store.lmsApi.ResetPassword(data);\n const hasError = response.data?.errors?.length > 0;\n if (hasError && response.data?.errors?.[0]?.title !== '') {\n store.showToast({ message: response.data?.errors[0]?.title, variant: 'error' });\n return null;\n }\n store.showToast({ message: t('account.password.changed', 'Password changed'), variant: 'success' });\n setOpen(false);\n // Just remove the session token and force the user to login again\n store.setResetPasswordForced();\n return response;\n };\n const handleSubmit = (values) => {\n const dirtyFields = getdirtyValues(values, initialValues);\n request(dirtyFields);\n };\n\n return (\n <>\n \n \n \n \n \n \n \n {t('account.password.resetPassword', 'Reset password')}\n \n\n {store.getPasswordForced() === '1' && (\n \n \n {t('account.password.resetForcePasswordText', 'Please reset your password.')}\n \n \n )}\n\n \n \n {t('account.password.resetPasswordTextLogout', { u, uw })}\n \n \n\n
\n {({ control, errors, reset, watch }) => {\n const newValue = watch('new_password');\n return (\n <>\n \n \n \n {\n setShowCurrent(!showCurrent);\n }}\n edge=\"end\"\n >\n {showCurrent ? : }\n \n \n )\n }}\n />\n \n \n \n {\n setShowNew(!showNew);\n }}\n edge=\"end\"\n >\n {showNew ? : }\n \n \n )\n }}\n />\n \n \n \n \n \n \n \n {handleStrength(newValue)}\n \n \n \n \n \n {\n setShowConfirm(!showConfirm);\n }}\n edge=\"end\"\n >\n {showConfirm ? : }\n \n \n )\n }}\n />\n \n \n \n \n {store.getPasswordForced() !== '1' && (\n {\n reset();\n setOpen(false);\n }}\n >\n {t('account.password.cancel', 'Cancel')}\n \n )}\n \n \n );\n }}\n
\n \n
\n \n \n \n \n );\n};\n\nProfileExtras.propTypes = {\n forced: PropTypes.any\n};\n\nexport default ProfileExtras;\n","import { Box, Button, Grid } from '@mui/material';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\nimport { useContext, useEffect, useState } from 'react';\nimport useAPI from '../../../hooks/useAPI';\n\nexport const ResetOnboarding = () => {\n const { t } = useTranslation('onboarding');\n const store = useContext(Store);\n const userUUID = store?.user?.uuid || store?.login?.uuid || null;\n const { response } = useAPI(`/jsonapi/user/${userUUID}`, undefined);\n const setOnboarding = response?.data?.attributes?.field_skip_tour || false;\n const [showResetOnboarding, setShowResetOnboarding] = useState(false);\n\n useEffect(() => {\n setShowResetOnboarding(setOnboarding);\n }, [setOnboarding]);\n\n const resetOnboarding = async () => {\n await window.authedClient.patch(`/jsonapi/user/${userUUID}`, {\n data: {\n type: 'user',\n id: userUUID,\n attributes: {\n field_skip_tour: false\n }\n }\n });\n\n store.showToast({ message: t('resetSuccess'), variant: 'success' });\n setShowResetOnboarding(false);\n };\n\n if (!showResetOnboarding) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n","import { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport { useStore } from 'hooks';\nimport { Box, CircularProgress } from '@mui/material';\nimport Profile from '../forms/Profile';\nimport ProfileExtras from '../forms/ProfileExtras';\nimport { ResetOnboarding } from '../forms/ResetOnboarding';\n\nconst ProfileContainer = () => {\n const store = useStore();\n const [loading, setLoading] = useState(false);\n const [forced, setForced] = useState(false);\n\n useEffect(() => {\n const urlParams = new URLSearchParams(window.location.search);\n const status = urlParams.get('status');\n\n if (store.profile) {\n setLoading(true);\n }\n\n // If the user is forced to change their password, we need to show the password change modal\n if (status === '2' || store.getPasswordForced() === '1') {\n setForced(true);\n store.setPasswordForced();\n }\n }, [store, store.profile]);\n if (!loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default observer(ProfileContainer);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Accountv2 from '../Accountv2';\nimport ProfileContainer from '../components/ProfileContainer';\n\nconst ProfileViewMap = {\n profile: (\n \n \n \n \n \n )\n};\n\nexport default ProfileViewMap;\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Box, Card, CardContent, Grid, Typography } from '@mui/material';\n\n/* Custom components */\nimport { ToggleColorMode } from 'components';\n\nconst Settings = () => {\n const { t } = useTranslation();\n\n return (\n \n \n {t('account.settings.title')}\n \n \n \n \n \n \n \n \n \n {t('account.settings.theme')}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default observer(Settings);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Accountv2 from '../Accountv2';\nimport Settings from '../components/Settings';\n\nconst SettingsViewMap = {\n settings: (\n \n \n \n \n \n )\n};\n\nexport default SettingsViewMap;\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Box, Card, Grid, CardContent, Typography, SvgIcon } from '@mui/material';\nimport SubscribeTab from 'components/icons/SubscribeTab';\n\n/*\nEach subscription card contains \nthe product title, \nmaximum points, \nand valid period.\n The valid period is displayed as a formatted date using the toLocaleDateString method.\n*/\nconst Subscriptions = () => {\n const store = useContext(Store);\n const { subscriptions } = store;\n const { t } = useTranslation();\n const options = { day: 'numeric', month: 'long', year: 'numeric' };\n\n return (\n \n \n {t('account.subscription.title')}\n \n \n \n {subscriptions?.subscriptions ? (\n subscriptions.subscriptions.map((subscription, index) => (\n \n \n \n \n \n \n {subscription?.product_title || subscription?.base_product_title}\n \n \n \n \n {t('account.subscription.points')}\n \n \n {subscription?.maximum_points === 1000 ? 'Unlimited' : subscription?.maximum_points}\n \n \n \n \n {t('account.subscription.valid')}\n \n \n {new Date(subscription?.valid_period[0].end_value).toLocaleDateString('nl-NL', options) || '12 November 2022'}\n \n \n \n \n \n \n ))\n ) : (\n \n \n \n \n {t('account.subscription.none')}\n \n \n \n )}\n \n \n \n );\n};\n\nexport default observer(Subscriptions);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Accountv2 from '../Accountv2';\nimport Subscriptions from '../components/Subscriptions';\n\nconst SubscriptionViewMap = {\n subscription: (\n \n \n \n \n \n )\n};\n\nexport default SubscriptionViewMap;\n","import { observer } from 'mobx-react';\nimport { Typography, AppBar, Toolbar } from '@mui/material';\nimport { useStore } from 'hooks';\nimport { makeStyles } from '@mui/styles';\nimport Logo from 'components/common/Logo';\n\nconst useStyles = makeStyles(() => ({\n toolbar: {\n padding: '0',\n maxHeight: '68px'\n },\n overflowHidden: {\n overflow: 'hidden'\n },\n grow: {\n flexGrow: 1\n },\n logoWrapper: {\n marginLeft: '40px'\n },\n logoBackground: {\n backgroundColor: 'rgba(255, 255, 255, 0.85)',\n height: '280px',\n outline: '5px solid rgba(255, 255, 255, 0.4)',\n position: 'absolute',\n right: '-110px',\n top: '-165px',\n transform: 'rotate(-47deg)',\n width: '250px',\n zIndex: '-1'\n }\n}));\n\nconst Header = () => {\n const store = useStore();\n const classes = useStyles();\n\n const courseNid = store.routerStore.routerState.params.courseId;\n const courseUuid = store.findCourseByNid(Number(courseNid));\n return (\n \n \n \n {courseUuid && courseUuid.course_title}\n \n
\n
\n \n
\n
\n \n \n );\n};\n\nexport default observer(Header);\n","import * as Yup from 'yup';\n\nconst formEvaluationValidation = Yup.object().shape({\n evaluation_question_1: Yup.string().required('This field is required'),\n evaluation_question_1b: Yup.string().when('evaluation_question_1', {\n is: (value) => value && value !== 'uitstekend' && value !== 'goed',\n then: Yup.string().required('Field is required'),\n otherwise: Yup.string()\n }),\n evaluation_question_2: Yup.string().required('This field is required'),\n evaluation_question_2b: Yup.string().when('evaluation_question_2', {\n is: (value) => value && value !== 'uitstekend' && value !== 'goed',\n then: Yup.string().required('Field is required'),\n otherwise: Yup.string()\n }),\n evaluation_question_3: Yup.string().required('This field is required'),\n evaluation_question_4: Yup.string().required('This field is required'),\n evaluation_remarks_1: Yup.string(),\n evaluation_remarks_2: Yup.string(),\n evaluation_question_slpo_1: Yup.string(),\n evaluation_question_slpo_2: Yup.string(),\n evaluation_question_slpo_3: Yup.string(),\n evaluation_question_slpo_4: Yup.string()\n});\n\nexport { formEvaluationValidation };\n","export const rating = [{ name: 'uitstekend' }, { name: 'goed' }, { name: 'voldoende' }, { name: 'matig' }, { name: 'slecht' }];\nexport const numberRating = [\n { name: '10' },\n { name: '9' },\n { name: '8' },\n { name: '7' },\n { name: '6' },\n { name: '5' },\n { name: '4' },\n { name: '3' },\n { name: '2' },\n { name: '1' }\n];\nexport const hoursSelect = [\n { name: '8 uur of meer', value: '8_uur_of_meer' },\n { name: '15 min', value: 'kwartier' },\n { name: 'half uur', value: 'half_uur' },\n { name: '1 uur', value: '1_uur' },\n { name: '1,5 uur', value: '1,5_uur' },\n { name: '2 uur', value: '2_uur' },\n { name: '2,5 uur', value: '2,5_uur' },\n { name: '3 uur', value: '3_uur' },\n { name: '3,5 uur', value: '3,5_uur' },\n { name: '4 uur', value: '4_uur' },\n { name: '4,5 uur', value: '4,5_uur' },\n { name: '5 uur', value: '5_uur' },\n { name: '5,5 uur', value: '5,5_uur' },\n { name: '6 uur', value: '6_uur' },\n { name: '6,5 uur', value: '6,5_uur' },\n { name: '7 uur', value: '7_uur' },\n { name: '7,5 uur', value: '7,5_uur' }\n];\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Typography, Grid, Button, Box, Card, CardContent } from '@mui/material';\nimport { Form } from 'components/form';\nimport { MyRadioGroup, MySelect, MyTextField } from 'components/form/RHF/index';\nimport { makeStyles } from '@mui/styles';\nimport { urlify } from 'state/Utils';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport Header from '../components/Header';\nimport { formEvaluationValidation } from './beans/Evaluation.ValidationSchema';\nimport { rating, numberRating, hoursSelect } from './beans/dataFile';\n\nconst useStyles = makeStyles(() => ({\n formContainer: {\n '& .MuiInputBase-root': {\n borderRadius: '18px'\n }\n },\n radioGroup: {\n '& label': {\n color: '#2b3674',\n fontSize: '17px',\n fontWeight: '500'\n }\n }\n}));\n\nconst EvaluationForm = () => {\n const store = useContext(Store);\n const { t } = useTranslation('evaluation');\n\n const classes = useStyles();\n const { routerStore, lessonPlay, profession, postData } = store;\n\n // Find course Result uuid\n const courseResultsId = lessonPlay && lessonPlay.lesson_result?.attributes?.course_result;\n const courseResultUuid = store.courseResults?.findCourseResultByNid(courseResultsId).uuid;\n const courseTitle = store.findCourseByNid(Number(store.params.courseId)).course_title;\n\n const brandTitle = ThemeBrandTitle();\n\n // Check if evaluation is already filled in\n const evaluation = useCallback(async () => {\n // This check is only after course result is updated in the completed step\n const courseResultEvalBck = store.courseResults?.findCourseResultByNid(courseResultsId).has_evaluation || false;\n // First check for sesssion, if user did not finish completion step yet, we clear the session on logout\n const courseResultEvaluation = store.getEvaluation() === courseResultUuid || courseResultEvalBck;\n return courseResultEvaluation;\n }, [courseResultUuid, courseResultsId, store]);\n\n useEffect(() => {\n evaluation().then((res) => {\n if (res) {\n store.setLessonState('init');\n store.routerStore.goTo('defCourseIntroduction', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n title: urlify(courseTitle)\n }\n });\n }\n });\n });\n\n const handleSubmit = async (values) => {\n const { courseId, lessonId, product, productName, packageId } = routerStore.routerState.params;\n\n const {\n id,\n relationships: { course }\n } = lessonPlay.courseResult;\n\n // Find proffesion uuid\n const professionUuid = profession.uuid;\n\n postData({\n attributes: { ...values, course_result_uuid: id, title: 'evaluation' },\n type: 'evaluation',\n relationships: {\n course: {\n data: {\n type: 'course',\n id: course.data.id\n }\n },\n profession: {\n data: {\n type: 'profession',\n id: professionUuid\n }\n }\n }\n });\n // This will save the course_result_uuid in the browser local session\n store.setEvaluation(courseResultUuid);\n // Did you answer all the questions yourself?\n routerStore.goTo('terms', {\n params: {\n product,\n productName,\n packageId,\n lessonId,\n courseId\n }\n });\n };\n const initialValues = {\n evaluation_question_1: '',\n evaluation_question_1b: '',\n evaluation_question_2: '',\n evaluation_question_2b: '',\n evaluation_question_3: '',\n evaluation_question_4: '',\n evaluation_remarks_1: '',\n evaluation_remarks_2: '',\n evaluation_question_slpo_1: '',\n evaluation_question_slpo_2: '',\n evaluation_question_slpo_3: '',\n evaluation_question_slpo_4: ''\n };\n\n // eslint-disable-next-line react/destructuring-assignment\n const isSchoolleiders = store.profession.name === 'Schoolleider PO';\n const score = lessonPlay?.lesson_result?.attributes?.score;\n const { uw, u, beoordeel, geeft, heeft, Heeft, heeftHebt, vind } =\n brandTitle !== 'E-WISE'\n ? {\n uw: 'uw',\n u: 'u',\n beoordeel: 'beoordeelt u',\n geeft: 'geeft u',\n heeft: 'heeft u',\n Heeft: 'Heeft u',\n heeftHebt: 'heeft',\n vind: 'vindt'\n }\n : {\n uw: 'je',\n u: 'je',\n beoordeel: 'beoordeel je',\n geeft: 'geef je',\n heeft: 'heb je',\n Heeft: 'Heb je',\n heeftHebt: 'hebt',\n vind: 'vind'\n };\n\n return (\n <>\n \n
\n \n \n \n \n \n \n \n \n {t('congratulations')}\n \n {t('form.score', { uw, score })}\n \n \n \n \n \n \n
\n {({ control, errors, dirty, watch }) => (\n \n \n \n \n {watch().evaluation_question_1 &&\n watch().evaluation_question_1 !== 'uitstekend' &&\n watch().evaluation_question_1 !== 'goed' && (\n \n \n \n )}\n {isSchoolleiders && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n\n {watch().evaluation_question_2 &&\n watch().evaluation_question_2 !== 'uitstekend' &&\n watch().evaluation_question_2 !== 'goed' && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n
\n
\n
\n
\n \n \n );\n};\n\nexport default observer(EvaluationForm);\n","import { Lazy } from 'components';\nimport EvaluationForm from '../evaluation/forms/EvaluationForm';\n\nconst EvaluationViewMap = {\n evaluation: (\n \n \n \n )\n};\n\nexport default EvaluationViewMap;\n","import { SvgIcon } from '@mui/material';\n\nconst download = (props) => (\n \n \n \n \n);\n\nexport default download;\n","/* eslint-disable camelcase */\nimport {\n Dialog,\n DialogTitle,\n DialogContentText,\n DialogContent,\n DialogActions,\n Grid,\n Box,\n Divider\n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { Form } from 'components/form';\nimport { MyCheckbox, MySelect, MyTextField } from 'components/form/RHF';\nimport MyDatePicker from 'components/form/RHF/DatePicker/MyDatepicker';\nimport { useStore } from 'hooks';\nimport formProfileValidation from 'pages/account/forms/beans/Profile.ValidationSchema';\nimport { useTranslation } from 'react-i18next';\nimport Calendar from 'components/icons/Calendar';\nimport { addUserFields, getdirtyValues } from 'helpers/Helpers';\nimport { useEffect, useState } from 'react';\nimport { LoadingButton } from '@mui/lab';\nimport { observer } from 'mobx-react';\nimport { conditionalFields } from 'pages/account/forms/beans/profileData';\nimport ProfileFields from 'pages/account/forms/ProfileFields';\n\nconst LtiUserForm = ({ open, handleClose }) => {\n const [noRegistrationNumbers, setNoRegistrationNumbers] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const { t } = useTranslation();\n const store = useStore();\n\n const validationSchema = formProfileValidation();\n\n const userFields = addUserFields(store, conditionalFields);\n\n const {\n field_first_name,\n field_gender,\n mail,\n field_birthdate,\n field_last_name,\n field_bignr,\n field_rbnr,\n field_kngfnr,\n field_krmnr,\n field_kabiznr,\n field_initials,\n field_receive_email_notification,\n field_accountants_type,\n field_rechtsgebieden,\n field_fysio_deelregister,\n field_nirv_number,\n field_no_registration_numbers,\n field_slpo_id,\n field_function,\n preferred_langcode,\n field_somn_member,\n field_vvn_nr,\n field_nova_number\n } = store?.profile?.attributes || {};\n\n const initialValues = {\n mail,\n field_birthdate,\n field_gender: field_gender === null ? '' : field_gender,\n field_bignr: field_bignr === null ? '' : field_bignr,\n field_last_name,\n field_rbnr: field_rbnr === null ? '' : field_rbnr,\n field_kngfnr: field_kngfnr === null ? '' : field_kngfnr,\n field_krmnr: field_krmnr === null ? '' : field_krmnr,\n field_kabiznr: field_kabiznr === null ? '' : field_kabiznr,\n field_initials: field_initials === null ? '' : field_initials,\n field_first_name: field_first_name === null ? '' : field_first_name,\n field_receive_email_notification: field_receive_email_notification === null ? false : field_receive_email_notification,\n field_accountants_type: field_accountants_type === null ? '' : field_accountants_type,\n field_nirv_number: field_nirv_number === null ? '' : field_nirv_number,\n field_no_registration_numbers: field_no_registration_numbers === null ? '' : field_no_registration_numbers,\n field_somn_member: field_somn_member === null ? '' : field_somn_member,\n field_slpo_id: field_slpo_id === null ? '' : field_slpo_id,\n field_function: field_function === null ? '' : field_function,\n field_vvn_nr: field_vvn_nr === null ? '' : field_vvn_nr,\n field_nova_number: field_nova_number === null ? '' : field_nova_number,\n field_rechtsgebieden:\n field_rechtsgebieden === null || field_rechtsgebieden?.[0] === 'Geen rechtsgebieden geregistreerd' ? [] : field_rechtsgebieden,\n field_fysio_deelregister:\n field_fysio_deelregister === null\n ? [\n {\n name: 'Algemene fysiotherapie',\n value: 'algemene_fysiotherapie'\n }\n ]\n : field_fysio_deelregister,\n preferred_langcode\n };\n\n const gender = [\n { name: t('account.profile.genderOptions.male'), value: 'male' },\n { name: t('account.profile.genderOptions.female'), value: 'female' },\n { name: t('account.profile.genderOptions.other'), value: 'others' }\n ];\n\n const handleSubmit = async (values) => {\n // Form is not altered.\n // Only trigger HTML5 validation when not touched.\n if (!values?.isDirty) {\n setIsSubmitting(true);\n handleClose();\n return;\n }\n\n // Delete fake field value.\n delete values.isDirty;\n\n // Form is altered.\n // Trigger full validation and submit actions.\n const dirtyFields = getdirtyValues(values, initialValues);\n setIsSubmitting(true);\n\n try {\n await store.patchData(store.profile, {\n attributes: dirtyFields,\n id: store.profile.id,\n type: store.profile.type\n });\n\n store.showToast({ message: t('account.profile.updated', 'Profile updated'), variant: 'success' });\n handleClose();\n } catch (error) {\n store.showToast({ message: t('account.profile.error', 'Something went wrong'), variant: 'error' });\n }\n setIsSubmitting(false);\n };\n\n const showEwiseTitle = ['ewise', 'cme'].includes(store.label);\n\n // This is to determine which extra fields to show\n const professions = store.profile?.userProfessions;\n const hasConditionalFields = professions?.some((profession) => conditionalFields[profession.attributes.name]?.length > 0);\n\n useEffect(() => {\n if (field_no_registration_numbers) {\n setNoRegistrationNumbers(true);\n }\n }, [field_no_registration_numbers, store]);\n\n if (!store.profile) return null;\n\n return (\n \n
\n {({ control, dirty, errors, setValue }) => {\n // Append dirty / clean state to form values for better validation.\n setValue('isDirty', dirty);\n\n return (\n <>\n {showEwiseTitle ? t('lti.confirmForm.titleEwise') : t('lti.confirmForm.title')}\n \n {t('lti.confirmForm.content')}\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n {t('account.profile.gender')}
}\n items={gender}\n control={control}\n fullWidth\n size=\"small\"\n />\n \n {Object.entries(userFields).map(([profession, fields]) =>\n fields.map((field) => {\n const fieldDetails = conditionalFields[profession]?.find((profField) => profField.name === field);\n const errorField = errors[field];\n return fieldDetails ? (\n \n {fieldDetails.label}
\n ) : (\n fieldDetails.label\n )\n }\n type={fieldDetails.type}\n fullWidth\n control={control}\n items={fieldDetails.items}\n multiple={fieldDetails.multiple}\n required={!noRegistrationNumbers && fieldDetails.required}\n error={Boolean(errorField)}\n helperText={errorField?.message}\n size=\"small\"\n />\n \n ) : null;\n })\n )}\n {hasConditionalFields && (\n \n \n \n \n \n {\n setNoRegistrationNumbers(event.target.checked);\n }}\n name=\"field_no_registration_numbers\"\n label={t('account.profile.noregistration')}\n control={control}\n />\n \n \n )}\n \n \n \n \n {dirty ? t('account.profile.save') : t('lti.button.confirm')}\n \n \n \n )\n }}\n \n \n );\n};\n\nLtiUserForm.propTypes = {\n handleClose: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired\n};\n\nexport default observer(LtiUserForm);\n","import ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Box, Button, Card, CardActions, CardContent, Divider, Grid, SvgIcon, Typography } from '@mui/material';\nimport download from 'components/icons/download';\nimport { differenceInMinutes, isValid } from 'date-fns';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport CoursePointsAlert from 'pages/course/components/CourseIntroduction/CoursePointsAlert';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { urlify } from 'state/Utils';\nimport Header from './components/Header';\nimport LtiUserForm from './forms/LtiUserForm';\n\nconst isCourseCompletedInLessThan30Minutes = (date1, date2) => {\n if (!isValid(date1) || !isValid(date2)) {\n return false;\n }\n\n const diff = differenceInMinutes(date2, date1);\n return diff < 30;\n};\n\nconst LastStep = () => {\n const store = useStore();\n const { t } = useTranslation('evaluation');\n const [link, setLink] = useState('');\n const [disabled, setDisabled] = useState(true);\n const { courseId } = store.routerStore.routerState.params;\n const courseTitle = store.findCourseByNid(Number(courseId)).course_title;\n const courseResultsId = store.lessonPlay?.lesson_result?.attributes?.course_result;\n const brandTitle = ThemeBrandTitle();\n const { u, uw, kunt } = brandTitle !== 'E-WISE' ? { u: 'U', uw: 'uw', kunt: 'kunt' } : { u: 'Je', uw: 'je', kunt: 'kan' };\n // const score = store.lessonPlay?.lesson_result?.attributes?.score;\n const [answersPdf, setAnswersPdf] = useState('');\n const isLti = store.getLtiSession() === 1 || store.getLtiSession() === '1';\n const isAccredited = store.selectedPackage?.accredited === 1;\n const isNotariaatPackage = store.selectedPackageTitle.toLowerCase().includes('notariaat');\n const hasRbNumberField = store.profile?.attributes && 'field_rbnr' in store.profile?.attributes;\n const isMicrolearning = store.selectedPackage?.microlearning;\n\n // show popup if course is completed in less than 30 minutes only for notariaat package\n const [showPopup, setShowPopup] = useState(() => {\n if (\n isNotariaatPackage &&\n isAccredited &&\n isCourseCompletedInLessThan30Minutes(\n new Date(store.lessonPlay?.lesson_result?.attributes.created),\n new Date(store.lessonPlay?.lesson_result?.attributes.changed)\n )\n ) {\n return true;\n }\n return false;\n });\n\n const [openLtiForm, setOpenLtiForm] = useState(false);\n\n const handleCloseLtiForm = () => {\n setOpenLtiForm(false);\n };\n\n const loadCompleted = () => {\n store.setLessonState('init');\n if (!isLti && !isMicrolearning) {\n setTimeout(() => {\n store.setLessonPlay(null);\n }, 1450);\n store.routerStore.goTo('defCourseIntroduction', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n title: urlify(courseTitle)\n }\n });\n }\n if (!isLti && isMicrolearning) {\n setTimeout(() => {\n store.setLessonPlay(null);\n }, 1450);\n store.routerStore.goTo('courseOverview', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId\n }\n });\n }\n };\n\n useEffect(() => {\n if (!link) {\n const fetchCertificate = async () => {\n try {\n const completedCourse = await store.lessonPlay.finishCourse(courseResultsId);\n const courseResultUuid = store.lessonPlay.courseResult.id;\n const code = await store.lmsApi.downloadCertificate(courseResultUuid);\n const getAnswerPdf = completedCourse?.data?.answers_pdf?.url || '';\n if (getAnswerPdf) {\n setAnswersPdf(getAnswerPdf);\n }\n setLink(`${process.env.REACT_APP_JSONAPI}/course-result/${courseResultUuid}/${code}/certificate`);\n setDisabled(null);\n } catch (error) {\n console.error('Er is een fout opgetreden bij het ophalen van het certificaat:', error);\n }\n };\n fetchCertificate();\n }\n }, [courseResultsId, link, store.lessonPlay, store.lessonPlay.courseResult.id, store.lmsApi]);\n\n const showLtiForm = isAccredited && isLti && hasRbNumberField;\n\n useEffect(() => {\n if (showLtiForm) {\n setOpenLtiForm(true);\n }\n }, [showLtiForm]);\n\n return (\n <>\n \n \n
\n \n \n \n \n \n \n {t('scorePage.completed', { courseTitle })}\n \n \n\n \n {t('scorePage.downloadCertificate', { u, uw, kunt })}\n \n \n \n \n \n \n \n {t('accreditated.question', { courseTitle })}\n \n \n \n \n {answersPdf && (\n \n )}\n \n \n {!isLti && (\n \n }\n sx={{ textTransform: 'inherit' }}\n >\n {t('scorePage.GoBack')}\n \n \n )}\n \n \n \n setShowPopup(false)} showConfirm btnBackCaption={t('ok')} />\n \n );\n};\n\nexport default observer(LastStep);\n","import { Lazy } from 'components';\nimport LastStep from '../evaluation/LastStep';\n\nconst TermsViewMap = {\n terms: (\n \n \n \n )\n};\n\nexport default TermsViewMap;\n","/* eslint-disable camelcase */\nimport { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport { Typography, Box, Card, CardContent, Grid, CardActions, Button, SvgIcon } from '@mui/material';\nimport { urlify } from 'state/Utils';\nimport download from 'components/icons/download';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport CoursePointsAlert from 'pages/course/components/CourseIntroduction/CoursePointsAlert';\nimport { differenceInMinutes, isValid } from 'date-fns';\nimport Header from './components/Header';\n\nconst isCourseCompletedInLessThan30Minutes = (date1, date2) => {\n if (!isValid(date1) || !isValid(date2)) {\n return false;\n }\n\n const diff = differenceInMinutes(date2, date1);\n return diff < 30;\n};\n\nconst ScorePage = () => {\n const store = useStore();\n const { t } = useTranslation('evaluation');\n\n const { courseId, courseFeeback, lessonId } = store.routerStore.routerState.params;\n const { lesson_result } = store.lessonPlay;\n\n const success = courseFeeback === '1';\n const fail = courseFeeback === '0';\n const isMicrolearning = store.selectedPackage?.microlearning;\n\n const [link, setLink] = useState('');\n const [disabled, setDisabled] = useState(true);\n const [answersPdf, setAnswersPdf] = useState('');\n\n // show popup if course is completed in less than 30 minutes only for notariaat package\n const [showPopup, setShowPopup] = useState(() => {\n const isNotariaatPackage = store.selectedPackageTitle.toLowerCase().includes('notariaat');\n const isAccredited = store.selectedPackage?.accredited === 1;\n if (\n isNotariaatPackage &&\n isAccredited &&\n success &&\n isCourseCompletedInLessThan30Minutes(\n new Date(store.lessonPlay?.lesson_result?.attributes.created),\n new Date(store.lessonPlay?.lesson_result?.attributes.changed)\n )\n ) {\n return true;\n }\n return false;\n });\n\n const brandTitle = ThemeBrandTitle();\n const score = lesson_result?.attributes?.score;\n const courseTitle = store.findCourseByNid(Number(courseId)).course_title;\n const courseUuid = store.findCourseByNid(Number(courseId));\n\n // check if we have more than one lesson\n const lessonLength = courseUuid.lessons.length;\n const lastLesson = courseUuid.lessons[lessonLength - 1].nid === Number(lessonId);\n\n // Find course Result id\n const courseResultsId = store?.lessonPlay?.lesson_result?.attributes?.course_result;\n const courseResultUuid = store?.lessonPlay?.courseResult?.id;\n\n // Check if user is LTI user\n const isLti = store.getLtiSession() === 1 || store.getLtiSession() === '1';\n\n // Check if user can do another attempt\n const maxAttempts = store?.lessonPlay?.lesson?.attributes?.max_attempts;\n const sequenceNo = store?.lessonPlay?.lesson_result?.attributes?.sequence_no;\n const cantDoAnotherAttempt = maxAttempts && parseInt(sequenceNo) + 1 > parseInt(maxAttempts - 1);\n\n const { u, uw, kunt, ww } =\n brandTitle !== 'E-WISE' ? { u: 'U', uw: 'uw', kunt: 'kunt', ww: 'heeft' } : { u: 'Je', uw: 'je', kunt: 'kan', ww: 'hebt' };\n const minimumScore = store.lessonPlay.lesson.attributes.minimum_score;\n\n const loadCompleted = async () => {\n store.setLessonState('init');\n if (!isLti && !isMicrolearning) {\n setTimeout(() => {\n store.setLessonPlay(null);\n }, 1450);\n store.routerStore.goTo('defCourseIntroduction', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n title: urlify(courseTitle)\n }\n });\n }\n if (!isLti && isMicrolearning) {\n setTimeout(() => {\n store.setLessonPlay(null);\n }, 1450);\n store.routerStore.goTo('courseOverview', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId\n }\n });\n }\n };\n\n // Restart course for LTI users\n const restartCourse = async () => {\n store.setLessonState('init');\n await store.courseResults.updateCourseResultbyNid(Number(store.params.courseId));\n store.courseResults.isCourseFinished(Number(store.params.courseId));\n store.routerStore.goTo('lessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: store.params.lessonId,\n pageNo: '1'\n }\n });\n };\n\n const handleSucces = async () => {\n try {\n if (courseResultsId && courseResultUuid) {\n const completedCourse = await store.lessonPlay.finishCourse(courseResultsId);\n const code = await store.lmsApi.downloadCertificate(courseResultUuid);\n const getAnswerPdf = completedCourse?.data?.answers_pdf?.url || '';\n if (getAnswerPdf) {\n setAnswersPdf(getAnswerPdf);\n }\n setLink(`${process.env.REACT_APP_JSONAPI}/course-result/${courseResultUuid}/${code}/certificate`);\n setDisabled(null);\n }\n } catch (error) {\n store.showToast({ message: t('scorePage.error', 'Something went wrong'), variant: 'error' });\n }\n };\n\n const nextLesson = async () => {\n store.setLessonState('init');\n const nextLessonId =\n courseUuid.lessons[lessonLength - 1].nid === Number(lessonId) ? courseUuid.lessons[0].nid : courseUuid.lessons[lessonLength - 1].nid;\n store.routerStore.goTo('lessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: nextLessonId,\n pageNo: '1'\n }\n });\n };\n\n useEffect(() => {\n if (!link && success) {\n handleSucces();\n }\n });\n\n return (\n <>\n \n
\n \n \n \n \n {success && (\n \n \n \n {t('scorePage.completed', { courseTitle })}\n \n \n {/* \n {t('congratulations')}\n */}\n {/* \n {t('scorePage.completed', { courseTitle })}\n {t('scorePage.score', { score })}\n */}\n \n {t('scorePage.downloadCertificate', { u, uw, kunt })}\n \n \n )}\n {fail && (\n \n \n \n {t('helaas')}\n \n \n \n {t('scorePage.fail')}\n {t('scorePage.failScore', { ww, u, uw, kunt, score, minimumScore })}\n \n {!cantDoAnotherAttempt && (\n \n {t('scorePage.retake', { u, uw, kunt })}\n \n )}\n \n )}\n \n \n \n {success && (\n <>\n {answersPdf && (\n \n )}\n \n {t('scorePage.downloadButton')}\n \n \n {isLti && lessonLength > 1 && !lastLesson && (\n \n )}\n \n )}\n {fail && !isLti && (\n \n )}\n {fail && isLti && !cantDoAnotherAttempt && (\n \n )}\n \n {success && !isLti && (\n \n }\n sx={{ textTransform: 'inherit' }}\n >\n {t('scorePage.GoBack')}\n \n \n )}\n \n \n \n setShowPopup(false)} showConfirm btnBackCaption={t('ok')} />\n \n );\n};\n\nexport default observer(ScorePage);\n","import { Lazy } from 'components';\nimport ScorePage from '../evaluation/ScorePage';\n\nconst FeedbackViewMap = {\n feedback: (\n \n \n \n )\n};\n\nexport default FeedbackViewMap;\n","import { useCustomTheme } from '../../../../hooks';\n\nconst Logo = () => {\n const { labelLogo, customLogo } = useCustomTheme();\n\n return (\n \n );\n};\n\nexport default Logo;\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Box, LinearProgress } from '@mui/material';\n\n// renders a loading bar\nconst LoadingContent = ({ loading = false }) => {\n if (!loading) return false;\n return (\n \n \n \n );\n};\nLoadingContent.propTypes = {\n loading: PropTypes.bool\n};\nexport default observer(LoadingContent);\n","export const isDisabled = (item, subMenu, routeName) => {\n if (subMenu.name !== 'Edit') return false;\n const isEditRoute = subMenu.name === 'Edit' && item.name === 'Edit' && routeName.includes('edit');\n return !isEditRoute;\n};\n\nexport const setColorMenuIcon = (item, params, theme) => {\n const isSelected = item.package_id.toString() === params?.packageNid;\n if (!isSelected) return ['#eef2fa', 'inherit'];\n return isSelected && [theme.palette.primary.main, '#fff'];\n};\n\nexport const isSelected = (item, open) => {\n const isOpen = item.package_id.toString() === open;\n return isOpen ? 'selected' : '';\n};\n\nexport const isCurrentRoute = (item, params) => {\n const isCurRoute = item.package_id.toString() === params?.packageNid && item.course_container_id.toString() === params?.containerNid;\n return isCurRoute ? 'current_route' : '';\n};\n\nexport const isActive = (mainMenu, subMenu, params, routeName) => {\n const pId = mainMenu.package_id.toString();\n const subMenuName = subMenu.routeName;\n const isSubmenu = pId === params?.packageNid && subMenuName === routeName;\n return isSubmenu;\n};\n\nexport const sxPackageList = (theme) => ({\n '.package__list.current_route': {\n background: 'white',\n '.list_header_text': { color: 'white' },\n '.MuiListItemText-primary': { color: theme.palette.primary.main },\n '.subMenu_true': {\n '.MuiListItemText-primary': { color: 'white' }\n }\n },\n '.package__list.selected .list_header_text .MuiListItemText-primary': { color: 'white' },\n '.package__list.selected': {\n background: theme.palette.primary.light,\n '.MuiListItemText-primary': { color: '#dfdfdfd4' }\n }\n});\n","import { useContext, useState, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\n\n/**\n * Make a request to a custom api endpoint AKA an EWAPI.\n *\n * @param url\n * @param type\n * @returns {{response: unknown, error: unknown, loading: boolean}}\n */\nconst useEwapi = (url, type) => {\n const [response, setResponse] = useState(null);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(true);\n\n const store = useContext(Store);\n const { pattern } = store.routerStore.getCurrentRoute();\n const isAdmin = pattern.includes('/admin/');\n\n useEffect(() => {\n const doFetch = async () => {\n setLoading(true);\n const urlEwapi = `ewapi/${url}`;\n try {\n const resp = await window.authedClient.get(urlEwapi);\n setResponse(resp.data);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n };\n doFetch();\n }, [isAdmin, store, type, url]);\n return { response, error, loading };\n};\nexport default useEwapi;\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { urlify } from 'state/Utils';\nimport { useTheme } from '@emotion/react';\n/* MUI */\nimport List from '@mui/material/List';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Collapse from '@mui/material/Collapse';\nimport { Box, IconButton, Avatar, Tooltip } from '@mui/material';\n/* ICONS */\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\nimport CheckIcon from '@mui/icons-material/Check';\nimport EditIcon from '@mui/icons-material/Edit';\nimport PlaylistAddIcon from '@mui/icons-material/PlaylistAdd';\nimport AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings';\n/* CUSTOM components */\nimport LoadingContent from '../loading/LoadingContent';\nimport { isDisabled, isActive, setColorMenuIcon, isCurrentRoute, isSelected, sxPackageList } from './menuList.helper';\n/* SCSS */\nimport '../../scss/MenuList.scss';\n// HOOKS\nimport useEwapi from '../../hooks/useEwapi';\n\n/*\nIn summary, the MenuList component provides dynamic navigation for packages and their related submenus. \nUsers can filter, search, and interact with various submenus, and the component ensures a visually engaging and functional menu system. \nIt's part of a larger application that manages packages and their associated actions.\n*/\nconst MenuList = () => {\n const store = useContext(Store);\n const { isMarketing } = store;\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n const { params, routeName } = store.routerStore.routerState;\n const [open, setOpen] = useState(params?.packageNid);\n // Hook fetch package list\n const url = `editor-package-list/${0}/${store.label}/json`;\n const { response, loading, error } = useEwapi(url, 'packages');\n\n // useEffect change route\n useEffect(() => {\n setOpen(params?.packageNid);\n }, [params?.packageNid]);\n\n const prefPackage = 1;\n const defaultSubMenus = [\n { id: 1, name: 'Dashboard', class: 'draft', icon: , routeName: 'adminDashboardCourses' },\n { id: 2, name: 'Online', class: 'online', icon: , routeName: 'adminOnlineCourses' },\n { id: 3, name: 'Offline', class: 'offline', icon: , routeName: 'adminOfflineCourses' },\n { id: 4, name: 'Edit', class: 'offline', icon: , routeName: 'editCourse' }\n ];\n const marketingSubMenus = [\n { id: 2, name: 'Online', class: 'online', icon: , routeName: 'adminOnlineCourses' },\n { id: 3, name: 'Offline', class: 'offline', icon: , routeName: 'adminOfflineCourses' }\n ];\n\n const subMenus = isMarketing ? marketingSubMenus : defaultSubMenus;\n // EVENT HANDLERS\n const handleClick = (item) => setOpen(item.package_id.toString());\n //\n const handleMenuSelect = (_package, subMenu) => () => {\n store.courseEdit.setStoreValue('currentPackage', _package);\n const routerParams = {\n params: {\n package: urlify(_package.package_title.toLowerCase()),\n packageNid: _package.package_id.toString(),\n containerNid: _package.course_container_id.toString()\n }\n };\n store.routerStore.goTo(subMenu.routeName, routerParams);\n };\n\n // HOOK LOADING / ERROR\n if (loading) return ;\n // ON ERROR\n if (error) return

error...

;\n //\n if (response?.data) {\n store.courseEdit.setStoreValue('packageMenuList', response?.data?.packages);\n }\n const menuListItems = response?.data?.packages.sort((a, b) => a.package_title.localeCompare(b.package_title));\n const selectedPackage = menuListItems?.filter((item) => item.package_id.toString() === params?.packageNid);\n const filteredPackageData = response.data.packages.filter(\n (item) => item.preferred_package === prefPackage && !item.package_title.includes('not acc') && !item.package_title.includes('niet ge')\n );\n const trialCourses = response.data.packages.filter((item) => item.package_title.includes('proef'));\n //\n const showList = isMarketing ? trialCourses : [...new Set([...selectedPackage, ...filteredPackageData])];\n\n return (\n \n \n \n {t('packagesMenu.preferredPackages')}\n \n \n store.courseEdit.setStoreValue('dialogMenuList', !store.courseEdit.dialogmenulist)}\n aria-label=\"show\"\n size=\"small\"\n >\n \n \n \n \n \n \n {menuListItems &&\n showList.map((item) => (\n \n handleClick(item)}>\n \n \n {item.package_title.substring(0, 2).toUpperCase()}\n \n \n \n {open === item.course_container_id.toString() ? : }\n \n \n \n {subMenus.map((_subMenu) => (\n \n \n \n {_subMenu.icon}\n \n \n \n \n ))}\n \n \n \n ))}\n \n \n \n );\n};\n\nexport default observer(MenuList);\n\nconst sxListItemText = {\n whiteSpace: 'break-spaces',\n fontWeight: '600',\n fontSize: '15px',\n '.MuiListItemText-primary': { fontSize: '15px', fontWeight: '500', color: 'white' }\n};\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Divider, Avatar, IconButton, Popover, MenuItem, Link } from '@mui/material';\nimport { isStaging } from 'helpers/Helpers';\n\nconst ToolbarAccount = () => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const { canGotoAdminPanel, isAdministrator } = store;\n // popover\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n /* EVENTS */\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n const handleMenuSelect = (link) => () => {\n store.routerStore.goTo(link.routeName, { params: link.params, queryParams: link.queryParams });\n };\n\n return (\n <>\n \n \n \n \n \n {t('appBar.accountMenu.myAccount')}\n \n \n {isAdministrator && (\n \n \n {t('appBar.accountMenu.backendAdmin')}\n \n \n \n )}\n {canGotoAdminPanel && (\n \n \n \n Admin panel\n \n \n \n \n )}\n \n {t('appBar.accountMenu.logout')}\n \n \n \n );\n};\n\nexport default observer(ToolbarAccount);\n\nconst paperDrops = {\n elevation: 0,\n sx: {\n overflow: 'visible',\n filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',\n mt: 1.5,\n '&:before': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n top: 0,\n right: '50px',\n width: 10,\n height: 10,\n bgcolor: 'background.paper',\n transform: 'translateY(-50%) rotate(45deg)',\n zIndex: 0\n }\n }\n};\n\nconst iconButton = {\n sx: { padding: '0px' },\n size: 'small',\n 'aria-label': 'account of current user',\n 'aria-controls': 'menu-appbar',\n 'aria-haspopup': 'true',\n color: 'inherit'\n};\n","/* eslint-disable react/prop-types */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useEffect } from 'react';\n/* MUI */\nimport { Alert, AlertTitle } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\n/*\nIn summary, the Toast component provides a way to display toast notifications with varying types, content, and timeout durations. \nUsers can dismiss the toast notifications manually, or they will automatically disappear after a specified time. \nIt's a common UI element for providing feedback and information to users in an application.\n*/\n// severity => info, warning, error, success\nconst Toast = ({ toast, close }) => {\n const toastType = toast?.type || 'info';\n const bgColor = toast.variant === 'outlined' ? '#ffffffeb' : null;\n /* close toast after x sec */\n useEffect(() => {\n setTimeout(() => {\n close(toast.id);\n }, toast.timeOut);\n }, [close, toast.id, toast.timeOut]);\n\n return (\n close(toast.id)}>\n close(toast.id)}>\n \n \n }\n >\n {toast.title}\n {toast.content}\n \n \n );\n};\n\nToast.propTypes = {\n toast: PropTypes.object,\n close: PropTypes.func\n};\n\nexport default observer(Toast);\n","import { Box } from '@mui/material';\nimport { useContext } from 'react';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\n//\nimport Toast from './Toast';\n\n// renders the toast container to be displayed in the application\nconst ToastContainer = () => {\n const store = useContext(Store);\n const { courseEdit } = store;\n const { toasts } = courseEdit;\n\n const close = (id) => courseEdit.deleteToast(id);\n //\n const sxToastContainer = { position: 'fixed', top: '100px', right: '20px', zIndex: '9999' };\n\n return (\n \n \n {toasts.map((toast) => (\n \n ))}\n \n \n );\n};\n\nexport default observer(ToastContainer);\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useRef, useEffect, useContext, forwardRef } from 'react';\nimport { urlify } from 'state/Utils';\nimport { useTranslation } from 'react-i18next';\n\nimport { Button, Box, Slide } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nconst Transition = forwardRef((props, ref) => );\n\nconst PackageListDialog = () => {\n const { t } = useTranslation('adminCourses');\n const store = useContext(Store);\n const { courseEdit } = store;\n //\n const scroll = 'paper';\n const open = courseEdit.dialogMenuList;\n const descriptionElementRef = useRef(null);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n if (!open) return null;\n\n // EVENT HANDLERS: select package\n const handleMenuSelect = (item) => () => {\n const { package_title: title, package_id: packageNid, course_container_id: containerNid } = item;\n courseEdit.setStoreValue('currentPackage', item);\n const routerParams = {\n params: { package: urlify(title.toLowerCase()), packageNid: packageNid.toString(), containerNid: containerNid.toString() }\n };\n courseEdit.setStoreValue('dialogMenuList', !open);\n store.routerStore.goTo('adminDashboardCourses', routerParams);\n };\n\n // FILTER PACKAGES\n const packageMenu = courseEdit?.packageMenuList.filter(\n (item) => !item.package_title.includes('not acc') && !item.package_title.includes('niet')\n );\n //\n return (\n courseEdit.setStoreValue('dialogMenuList', !open)}\n scroll={scroll}\n aria-labelledby=\"scroll-package-menu-title\"\n aria-describedby=\"scroll-package-menu-description\"\n >\n \n {t('packagesMenu.selectPackages')}\n \n \n \n {packageMenu.map((item) => (\n \n \n {item.package_title}\n \n \n {item.profession_name.toLowerCase()}\n \n \n ))}\n \n \n \n \n \n \n );\n};\n\nexport default observer(PackageListDialog);\n\nconst sxMenuItem = {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '0px 5px',\n ' span': { padding: '5px 0px', transition: 'padding .3s' },\n '&:hover': {\n background: '#c0c0c02e',\n cursor: 'pointer',\n transition: 'background .1s',\n '& span:first-of-type': { padding: '3px 20px', fontWeight: 500, color: 'primary', transition: 'padding .3s' }\n }\n};\n","// /* eslint-disable no-unused-vars */\n/* eslint-disable react/function-component-definition */\n/* eslint-disable prettier/prettier */\n/* CORE */\nimport { Store } from 'state/ContextStore';\nimport { useContext, useEffect, useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { useTheme } from '@emotion/react';\n/* MUI */\nimport { styled } from '@mui/material/styles';\nimport MuiDrawer from '@mui/material/Drawer';\nimport MuiAppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport { Box, Typography, IconButton, Stack } from '@mui/material';\n/* ICONS */\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n/* CUSTOM COMP */\nimport Logo from './components/layout/Logo';\nimport MenuList from './components/layout/MenuList';\nimport ToolbarAccount from './components/toolbar/ToolbarAccount';\nimport ToastContainer from './components/Toasts/ToastContainer';\nimport PackageListDialog from './components/layout/PackageListDialog';\n\nconst drawerWidth = 290;\n/*\n In summary, the AdminCourseLayout component defines the layout for an admin section of a web application, \n including a sidebar, a top app bar, and the main content area. \n The sidebar's open/closed state can be toggled, and the layout provides navigation, page titles, language selection, and user account management. \n The children prop allows different content to be displayed within this layout, making it versatile for various admin-related pages or sections of the application.\n*/\nconst AdminCourseLayout = ({ menu, title, children }) => {\n const store = useContext(Store);\n const { i18n } = useTranslation();\n const { routerState, params } = store;\n const [open, setOpen] = useState(store?.courseEdit?.drawerOpen || false);\n const theme = useTheme();\n //\n const packageTabTitle = params.package;\n const profession = store?.courseEdit?.currentPackage?.profession_name || '';\n const isEdit = routerState.routeName.includes('edit');\n const action = isEdit ? 'edit' : '';\n const pageTitle = (isEdit && store?.courseEdit?.currentCourse?.attributes?.title) || title;\n const breadCrumbTitle = isEdit ? `${action}/course/${pageTitle}` : pageTitle;\n const headerTitle = `${pageTitle}`;\n\n useEffect(() => {\n if (open !== store.courseEdit.drawerOpen) setOpen(store.courseEdit.drawerOpen);\n }, [open, store.courseEdit.drawerOpen]);\n\n const toggleDrawer = () => {\n setOpen(!open);\n store.courseEdit.setStoreValue('drawerOpen', !open);\n };\n\n /* Return to homepage */\n const goHome = (event) => {\n event.preventDefault();\n window.location.href = '/';\n };\n const adminLeftmenu = {\n ' .MuiDrawer-paper': { background: theme.palette.primary.main }\n };\n\n return (\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n {!open ? : }\n \n \n \n \n Admin/\n \n {profession ? profession.toLowerCase() : ''}\n \n /{packageTabTitle}/{breadCrumbTitle}\n \n \n \n {`${headerTitle} ${(!isEdit && packageTabTitle) || ''} `}\n \n \n \n \n \n \n i18n.changeLanguage('en')} sx={sxLanguageBox}>\n \"EN\"\n \n i18n.changeLanguage('nl')} sx={sxLanguageBox}>\n \"NL\"\n \n \n \n \n \n \n \n \n {children}\n \n \n \n \n );\n};\n\nexport default observer(AdminCourseLayout);\nAdminCourseLayout.propTypes = {\n children: PropTypes.element,\n title: PropTypes.any,\n menu: PropTypes.any\n};\n\nconst flagsPath = `/assets/icons`;\n\nconst openedMixin = (theme) => ({\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen\n }),\n overflowX: 'hidden'\n});\n\nconst closedMixin = (theme) => ({\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen\n }),\n overflowX: 'hidden',\n width: `calc(${theme.spacing(7)} + 1px)`,\n [theme.breakpoints.up('sm')]: {\n width: `calc(${theme.spacing(8)} + 1px)`\n }\n});\n\nconst DrawerHeader = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar\n}));\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== 'open'\n})(({ theme, open }) => ({\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n duration: theme.transitions.duration.leavingScreen\n }),\n ...(open && {\n // marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create(['width', 'margin'], {\n duration: theme.transitions.duration.enteringScreen\n })\n })\n}));\n\nconst Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n ...(open && {\n ...openedMixin(theme),\n '& .MuiDrawer-paper': openedMixin(theme)\n }),\n ...(!open && {\n ...closedMixin(theme),\n '& .MuiDrawer-paper': closedMixin(theme)\n })\n}));\n\n/* INLINE CSS */\nconst cssMain = {\n maxWidth: 'calc(100% - 290px)',\n padding: '15px',\n minHeight: '100vh',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n overflowX: 'hidden'\n};\nconst cssHeaderBar = { background: '#EEF2FA', boxShadow: 'none', padding: '10px' };\nconst cssToolBarLeft = { display: 'flex', alignItems: 'center', marginLeft: '-21px' };\nconst cssToolBarTools = {\n display: 'flex',\n border: '10px solid',\n background: 'white',\n borderRadius: '40px',\n justifyContent: 'end'\n};\nconst cssBreadCrumbs = { color: '#232427cf', fontSize: '11px', fontWeight: '400' };\nconst cssHeaderTitle = { color: '#232427cf', fontSize: 'calc(0.75em + 1vw)', fontWeight: '600' };\nconst sxLanguageBox = { cursor: 'pointer', width: '40px', height: '40px', fontSize: '30px' };\nconst sxFlags = { width: '28px', height: '20px', borderRadius: '0px' };\n//\nconst sxImageHover = { '&:hover img': { transform: 'scale(1.4)', position: 'absolute', transition: 'all .2s' } };\nconst sxLogoContainer = {\n cursor: 'pointer',\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n padding: '15px',\n width: '100%',\n height: '100%',\n minHeight: '90px',\n maxHeight: '90px',\n textAlign: 'center',\n ...{ img: { height: '100%!important', maxHeight: '60px!important', maxWidth: '75px' } },\n ...sxImageHover\n};\n","import { observer } from 'mobx-react';\nimport { Box, Button, Typography } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nconst NotFound = () => {\n const { t } = useTranslation();\n const PRIMARY_MAIN = 'rgb(0, 121, 107)';\n const PRIMARY_DARKER = 'rgb(0, 105, 92)';\n\n return (\n
\n

{t('notFoundPage.title')}

\n \n

{t('notFoundPage.message')}

\n \n \n {/* */}\n {/* SUN */}\n \n \n \n \n \n \n {/* CLOUDS */}\n \n {/* HAND */}\n \n \n \n \n {/* 43 */}\n \n \n \n
\n );\n};\n\nexport default observer(NotFound);\n","/* eslint-disable camelcase */\nimport { useTranslation } from 'react-i18next';\nimport dayjs from 'dayjs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getSnapshot } from 'mobx-state-tree';\n\nexport const convertIsoDate2Date = (isoDate, format = 'YYYY-MM-DD') => {\n const date = new Date(isoDate);\n return dayjs(date).format(format);\n};\nexport const convertEpochTimestamp = (epochTime, format = 'YYYY-MM-DD') => dayjs.unix(epochTime).format(format);\n\n// ___ DASHBOARD ____________________________________________________\n// Draft courses: toasts with translations\nexport const ToastDraftCourses = () => {\n const { t } = useTranslation('adminCourses');\n return {\n success: { title: t('draftCourses.delete.success.title'), content: t('draftCourses.delete.success.message'), type: 'success' },\n error: { title: t('draftCourses.delete.error.title'), content: t('draftCourses.delete.error.message'), type: 'error' },\n default: { timeOut: 4000, variant: 'filled' }\n };\n};\n// Linked courses: toasts with translations\nexport const ToastLinkedCourses = () => {\n const { t } = useTranslation('adminCourses');\n return {\n success: { title: t('linkedCourses.delete.success.title'), content: t('linkedCourses.delete.success.message'), type: 'success' },\n error: { title: t('linkedCourses.delete.error.title'), content: t('linkedCourses.delete.error.message'), type: 'error' },\n default: { timeOut: 4000, variant: 'filled' }\n };\n};\n\n// ___ TAB INTRODUCTION/IMAGES/SHARING _____________________________________________\nexport const EditCourseDefaultValues = (store) => {\n const { courseEdit } = store;\n const { currentCourse, dependentCourse } = courseEdit;\n\n const {\n attributes: {\n title,\n status,\n online,\n allow_dry_run,\n field_points,\n field_extra_points,\n field_accreditation_code,\n field_valid_period,\n course_status,\n field_extra_points_desc,\n expected,\n field_skip_evaluation\n },\n categories,\n categories2,\n specialAccess,\n type: courseType,\n id: courseId,\n relationships: { lesson_container }\n } = currentCourse;\n\n const defaultValues = {\n course: {\n type: courseType,\n id: courseId,\n attributes: {\n status,\n title: title || '',\n online: online ? '1' : '0',\n expected,\n allow_dry_run: allow_dry_run || false,\n course_status: course_status || 'Default',\n field_points: field_points || '',\n field_extra_points: field_extra_points || '',\n field_extra_points_desc: field_extra_points_desc || '',\n field_valid_period: {\n value: field_valid_period?.value || null,\n end_value: field_valid_period?.end_value || null\n },\n field_accreditation_code: field_accreditation_code || '',\n field_skip_evaluation\n },\n relationships: {\n special_access: specialAccess,\n course_category: categories,\n course_category2: categories2\n }\n },\n\n lessonContainer: {\n type: lesson_container?.data?.id?.type,\n id: lesson_container?.data?.id?.id,\n attributes: {\n field_goals: lesson_container?.data?.id?.attributes?.field_goals?.value || '',\n field_extra_label: lesson_container?.data?.id?.attributes?.field_extra_label || '',\n field_information: lesson_container?.data?.id?.attributes?.field_information?.value || '',\n field_podcast_html: lesson_container?.data?.id?.attributes?.field_podcast_html?.value || '',\n podcast_title: lesson_container?.data?.id?.attributes?.podcast_title || '',\n field_preview_video: lesson_container?.data?.id?.attributes?.field_preview_video?.value || '',\n field_keywords: lesson_container?.data?.id?.attributes?.field_keywords?.split(',') || [],\n field_sharing_info: lesson_container?.data?.id?.attributes?.field_sharing_info || ''\n },\n relationships: {\n dependent_courses: dependentCourse,\n field_authors: lesson_container?.data?.id?.authors,\n field_reviewers: lesson_container?.data?.id?.reviewers,\n field_course_image_extern: lesson_container?.data?.id?.field_course_image_extern,\n field_course_header_photo: lesson_container?.data?.id?.field_course_header_photo,\n field_coursephoto: lesson_container?.data?.id?.field_coursephoto\n }\n }\n };\n\n return defaultValues;\n};\n\nexport function editCourseModel(values) {\n return {\n course: {\n ...values.course,\n attributes: {\n ...values.course.attributes,\n field_valid_period: {\n value:\n values.course.attributes.field_valid_period?.value && convertIsoDate2Date(values.course.attributes.field_valid_period.value),\n end_value:\n values.course.attributes.field_valid_period?.end_value &&\n convertIsoDate2Date(values.course.attributes.field_valid_period.end_value)\n }\n },\n relationships: {\n ...values.course.relationships,\n course_category: {\n data: values.course.relationships.course_category\n },\n course_category2: {\n data: values.course.relationships.course_category2\n },\n special_access: {\n data: values.course.relationships.special_access\n }\n }\n },\n lessonContainer: {\n ...values.lessonContainer,\n attributes: {\n ...values.lessonContainer.attributes,\n field_keywords: values.lessonContainer.attributes.field_keywords.toString()\n },\n relationships: {\n ...values.lessonContainer.relationships,\n field_authors: {\n data: values.lessonContainer.relationships.field_authors\n },\n field_reviewers: {\n data: values.lessonContainer.relationships.field_reviewers\n },\n dependent_courses: {\n data:\n !Object.is(values.lessonContainer.relationships.dependent_courses, null) &&\n Object.keys(values.lessonContainer.relationships.dependent_courses).length > 0\n ? [values.lessonContainer.relationships.dependent_courses]\n : []\n },\n field_course_image_extern: {\n data: values.lessonContainer.relationships.field_course_image_extern\n },\n field_course_header_photo: {\n data: values.lessonContainer.relationships.field_course_header_photo\n },\n field_coursephoto: {\n data: values.lessonContainer.relationships.field_coursephoto\n }\n }\n }\n };\n}\n// TAB INTRODUCTION/IMAGES/SHARING > FORM SAVE\n// toast messages with translation\nexport const Toast = () => {\n const { t } = useTranslation('editCourseForm');\n const toast = {\n success: { title: t('editCourse.updated.success.title'), content: t('editCourse.updated.success.message'), type: 'success' },\n error: { title: t('editCourse.updated.fail.title'), content: t('editCourse.updated.fail.message'), type: 'error' },\n default: { timeOut: 4000, variant: 'filled' }\n };\n return toast;\n};\n\n// ___ TAB LESSON ___________________________________________________________________\n// helper function to get the lesson content from the lesson\nexport const getLessonContent = (lesson, included) => {\n const lessonContentId = lesson.relationships.lesson_content?.data?.id;\n if (!lessonContentId) return false;\n const lessonContent = included.find((item) => item.id === lessonContentId);\n return lessonContent || false;\n};\n// helper function to get total widgets from the lesson\nexport const getTotalWidgets = (lesson, included, lessonWidgets) => {\n const lessonContent = getLessonContent(lesson, included);\n if (!lessonContent) return 0;\n const widgets = lessonWidgets?.[lessonContent.id] || lessonContent.relationships.lesson_content_widgets.data.length;\n return widgets;\n};\n// helper function returns if the lesson has a tagdoc\nexport const isOdtFile = (lesson, included) => {\n const lessonContent = getLessonContent(lesson, included);\n const _lessonContent = JSON.parse(JSON.stringify(lessonContent));\n if (!lessonContent) return false;\n return _lessonContent.relationships.tagdoc?.data?.id;\n};\n\n// TAB LESSON > ADD/EDIT LESSON DIALOG ________________________________________________\n// -- FORM\n// -- helper to create the initial values for the lesson form\nexport const getSelectedLesson = (store) => {\n // Destructering\n const { courseEdit } = store;\n const { dialogLesson } = courseEdit;\n const { lessonId } = dialogLesson;\n const {\n currentCourse: { included }\n } = courseEdit;\n\n // FIND SELECTED LESSON in included\n return (lessonId && included.find((item) => item.id === lessonId)) || false;\n};\n// -- helper to create the initial values for the lesson form\nexport const getSelectedLessonContent = (currentCourse, selectedLesson) => {\n const defaultLessonContent = {\n type: 'lesson_content',\n attributes: { title: `LC ${currentCourse.attributes.title}` },\n relationships: { lesson_content_widgets: { data: null }, tagdoc: { data: null } }\n };\n // Does the lesson have a lesson_content?\n const isLessonContentId = selectedLesson?.relationships?.lesson_content?.data?.id;\n // FIND LESSON CONTENT in included\n const isLessonContent = (isLessonContentId && currentCourse.included.find((item) => item.id === isLessonContentId)) || false;\n // LESSON CONTENT = FOUND LESSON_CONTENT or else defaultLessonContent\n return (isLessonContent && JSON.parse(JSON.stringify(isLessonContent))) || defaultLessonContent;\n};\n// -- FORM INITIAL VALUES: returns the initial values for the lesson form\nexport const getSelectedLessonInitialFormValues = (currentCourse, selectedLesson, lessonDefaultValues, selectedLessonContent) => {\n // SET INITIAL VALUES\n let initialValues = (selectedLesson && cloneDeep(getSnapshot(selectedLesson))) || lessonDefaultValues;\n\n // CONVERT null to 0 @ fields: max_attempts & minimum_score_2nd_try\n const setAttributes = {\n ...initialValues.attributes,\n ...{\n '1answer_nofeedback': initialValues.attributes['1answer_nofeedback'] || false,\n '1answer_visualfeedback': initialValues.attributes['1answer_visualfeedback'] || false,\n rotating_answers: initialValues.attributes.rotating_answers || false,\n title: initialValues.attributes.title || `lesson ${currentCourse.attributes.title}`,\n max_attempts: initialValues.attributes.max_attempts || 0,\n minimum_score_2nd_try: initialValues.attributes.minimum_score_2nd_try || 0\n }\n };\n //\n selectedLessonContent.attributes.title = selectedLessonContent?.id ? initialValues.attributes.title : `LC ${setAttributes.title}`;\n //\n initialValues = { ...initialValues, ...{ attributes: setAttributes }, ...{ selectedLessonContent } };\n //\n return initialValues;\n};\n// -- FORM FIELD LABELS with translations\nexport const LessonFormLabels = () => {\n const { t } = useTranslation('editCourseForm');\n return {\n title: t('lesEditForm.title'),\n lessonType: t('lesEditForm.lessonType'),\n freeFlow: t('lesEditForm.freeFlow'),\n rotatingAnswers: t('lesEditForm.rotatingAnswers'),\n firstAnswerNofeedback: t('lesEditForm.firstAnswerNoFeedback'),\n firstAnswerVisualfeedback: t('lesEditForm.firstAnswerVisualFeedback'),\n minimumScore: t('lesEditForm.minimScore'),\n minimumScore2ndTry: t('lesEditForm.minimumScore2ndTry'),\n maxAttempts: t('lesEditForm.maxAttempts')\n };\n};\n// -- FORM SAVE RESULT TOAST with translations\nexport const LessonToast = () => {\n const { t } = useTranslation('editCourseForm');\n const toast = {\n success: { title: t('lesEditForm.save.success.title'), content: t('lesEditForm.save.success.message'), type: 'success' },\n error: { title: t('lesEditForm.save.error.title'), content: t('lesEditForm.save.error.message'), type: 'error' },\n default: { timeOut: 100000, variant: 'filled' }\n };\n return toast;\n};\n\n// -- QUESTION WIDGETS TABLE\n// -- helper function: returns all button placeholders from lesson html (for example [[widgetcode]] )\nexport const getPlaceHoldersFromLesson = (str) => {\n if (!str) return [];\n const regex = /\\[.*?\\]]/gm;\n if (!str.match(regex)) return [];\n // get placeholders from the html\n const buttons = str.match(regex).filter((item) => !item.includes('pagebreak'));\n const qButtons = buttons.map((item) => ({\n type: 'question_widget',\n attributes: {\n status: true,\n title: '',\n weight: 1,\n widget_code: item.replace('[[', '').replace(']]', ''),\n widget_data: '{}',\n widget_type: ''\n }\n }));\n return qButtons;\n};\n// -- helper\nexport const restButtonsInLesson = (widgets, buttonsInLesson) => {\n const widgetsCodes = widgets.map((item) => item.attributes.widget_code);\n // FILTER the QuestionButtons array to exclude any buttons that are already in the widgets array\n const restButtons = buttonsInLesson.filter((item) => !widgetsCodes.includes(item.attributes.widget_code));\n return restButtons;\n};\n// -- QUESTION WIDGETS TABLE CONFIG: returns the table config (options + columns)\nexport const lessonTableQuestionWidgets = {\n options: {\n grouping: true,\n searchFieldVariant: 'outlined',\n pageSize: 25,\n emptyRowsWhenPaging: false,\n search: true,\n showTitle: true,\n header: true,\n toolbar: true,\n dense: true,\n detailPanelType: 'single',\n pageSizeOptions: [5, 10, 25, 50, 100]\n },\n columns: [\n { title: 'nid', field: 'attributes.drupal_internal__nid' },\n { title: 'type', field: 'attributes.widget_type', cellStyle: { whiteSpace: 'nowrap' } },\n { title: 'code', field: 'attributes.widget_code', defaultSort: 'asc', cellStyle: { whiteSpace: 'nowrap' } },\n { title: 'title', field: 'attributes.title', cellStyle: { width: '100%', whiteSpace: 'nowrap' } },\n { title: 'weight', field: 'attributes.weight' },\n { title: 'status', field: 'attributes.status' }\n ]\n};\n\n// TAB FEEDBACK ___________________________________________________________________\nexport const feedbackTableOptions = {\n toolbar: false,\n debounceInterval: 1000,\n emptyRowsWhenPaging: false,\n filtering: true,\n isLoading: true,\n padding: 'dense',\n pageSize: 20,\n pageSizeOptions: [5, 10, 20, 50],\n paginationType: 'stepped',\n selection: false,\n maxColumnSort: 1,\n rowStyle: { fontSize: '14px', '&:hover': { background: 'silver' } }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\n/* MUI components */\nimport Typography from '@mui/material/Typography';\n\n/* COMP: Section Title */\nconst SectionTitle = ({ title, align = 'left' }) => {\n const cssDiv = { color: '#505055', fontSize: '20px', fontWeight: '500', lineHeight: '40px' };\n\n return (\n \n {title}\n \n );\n};\nSectionTitle.propTypes = {\n title: PropTypes.string,\n align: PropTypes.string\n};\n\nexport default observer(SectionTitle);\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Backdrop, CircularProgress } from '@mui/material';\n\n// renders a loader with a backdrop\nconst LoaderWithBackdrop = ({ open }) => (\n theme.zIndex.drawer + 1 }} open={open}>\n \n \n);\n\nLoaderWithBackdrop.propTypes = {\n open: PropTypes.bool\n};\n\nexport default observer(LoaderWithBackdrop);\n","/**\n * HELPER FUNCTIONS FOR ONLINE/OFFLINE EWAPITABLE\n */\n\nexport const tl = (str) => window.i18next.t(`adminCourses:${str}`);\n\nexport const dateDiff = (tillDate) => {\n const _MS_PER_DAY = 1000 * 60 * 60 * 24;\n // Discard the time and time-zone information.\n const a = new Date();\n const b = new Date(tillDate);\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.floor((utc2 - utc1) / _MS_PER_DAY) + 1;\n};\n\nexport const convertDate = (date) => new Date(date).toJSON().slice(0, 10).split('-').reverse().join('-');\n\nexport const addMonths = (months) => {\n const today = new Date();\n const currentDate = convertDate(today);\n const newEndDate = new Date(today.setMonth(today.getMonth() + months));\n const endDate = convertDate(newEndDate);\n return { currentDate, endDate };\n};\n\nexport const mapData2TableData = (courses) => {\n const courseMap = courses.map((course) => ({\n id: course.course_nid,\n course_nid: course.course_nid,\n course_uuid: course.course_uuid,\n course_title: course.course_title,\n course_status: course.course_status,\n course_categories: course.course_categories.map((category) => category.name).join(', ') || '',\n course_categories_total: course.course_categories.length || '',\n course_categories2: course.course_categories2.map((category) => category.name.charAt(0)).join(', ') || '',\n course_competences: course.course_categories2.map((category) => category.name).join(', ') || '',\n course_online: course.course_online,\n course_validFrom: course.valid_period,\n course_validEnd: course.valid_period_end,\n course_validDiff: course.valid_period_end,\n course_points: course.course_points,\n course_container: course.course_container.map((container) => container.course_container_title).join(', ') || '',\n course_container_total: course.course_container.length || '',\n course_reUsed: course.course_profession !== course.lesson_container_profession,\n course_course_status: !['Default', 'None', 'New'].includes(course.course_course_status) ? course.course_course_status : '',\n course_expected: course.course_expected,\n special_access: course.special_access.map((access) => access.name).join(', ') || '',\n special_access_short: course.special_access.map((access) => access.name.charAt(0)).join(', ') || ''\n }));\n return courseMap;\n};\n\nexport const filterStatus = (tableData) => {\n const filter = {};\n tableData.forEach((course) => {\n filter[course.course_course_status] = course.course_course_status;\n });\n return filter;\n};\n\nexport const openNewEditWindow = (rowData) => {\n const pathName = window.location.pathname.split('/');\n const url = `${window.location.origin}/${pathName[1]}/${pathName[2]}/${pathName[3]}/${pathName[4]}/${rowData.course_uuid}/edit`;\n window.open(url, '_blank', 'noopener,noreferrer');\n};\n\nexport const addTooltipsToData = (rowData, column) => {\n const data = {\n // categories\n course_categories: { tooltip: rowData.course_categories, data: rowData.course_categories },\n course_categories_total: { tooltip: rowData.course_categories, data: rowData.course_categories_total },\n // competences\n course_categories2: { tooltip: rowData.course_competences, data: rowData.course_categories2 },\n course_competences: { tooltip: rowData.course_competences, data: rowData.course_competences },\n // linked in package\n course_container: { tooltip: rowData.course_container, data: rowData.course_container },\n course_container_total: { tooltip: rowData.course_container, data: rowData.course_container_total },\n // special access\n special_access: { tooltip: rowData.special_access, data: rowData.special_access },\n special_access_short: { tooltip: rowData.special_access, data: rowData.special_access_short }\n };\n return (\n // eslint-disable-next-line react/jsx-filename-extension\n
\n {data[column].data}\n
\n );\n};\n\nexport const addLabelsToTitle = (rowData) => {\n const { course_title: title, course_status: status, course_validFrom: courseStartDate } = rowData;\n const startDate = courseStartDate ? new Date(courseStartDate) : new Date();\n // eslint-disable-next-line react/jsx-filename-extension\n const labelUpComing =\n startDate > new Date() ? (\n \n {tl('dashboard.soon.label')}\n \n ) : (\n ''\n );\n // eslint-disable-next-line react/jsx-filename-extension\n const labelDraft = !status ? draft : '';\n return (\n
\n
{title}
\n {labelUpComing} {labelDraft}\n
\n );\n};\n\nexport const sxEllipse = {\n width: '150px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '&:hover': { whiteSpace: 'initial', overflow: 'unset' }\n};\n\n// DEFAULT TABLE COLUMNS __________________________________________________________\nexport const DataColumns = (tableData, t) => [\n { title: 'id', field: 'id', cellStyle: { width: '50px' }, grouping: false },\n {\n title: t('dashboard.course'),\n field: 'course_title',\n cellStyle: { minWidth: '300px', width: '100%' },\n grouping: false,\n hidden: false,\n render: (rowData) => addLabelsToTitle(rowData)\n },\n { title: 'pnt', field: 'course_points', cellStyle: { width: '100px', maxWidth: '100px' } },\n {\n title: t('dashboard.categories'),\n field: 'course_categories',\n cellStyle: { width: '150px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_categories')\n },\n {\n title: t('dashboard.totalCat'),\n field: 'course_categories_total',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_categories_total')\n },\n {\n title: t('dashboard.comp'),\n field: 'course_categories2',\n cellStyle: { width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_categories2')\n },\n {\n title: t('dashboard.competences'),\n field: 'course_competences',\n render: (rowData) => addTooltipsToData(rowData, 'course_competences')\n },\n {\n title: t('dashboard.start'),\n field: 'course_validFrom',\n cellStyle: { whiteSpace: 'nowrap' },\n render: (rowData) => convertDate(rowData.course_validFrom),\n hidden: true,\n grouping: false,\n filtering: false\n },\n {\n title: t('dashboard.end'),\n field: 'course_validEnd',\n cellStyle: { whiteSpace: 'nowrap' },\n render: (rowData) => convertDate(rowData.course_validEnd),\n grouping: false,\n filtering: false\n },\n {\n title: t('dashboard.daysLeft'),\n field: 'course_validDiff',\n render: (rowData) => dateDiff(rowData.course_validDiff),\n grouping: false,\n filtering: false,\n hidden: true\n },\n {\n title: t('dashboard.linked'),\n field: 'course_container',\n grouping: false,\n filtering: false\n },\n {\n title: t('dashboard.totLinked'),\n field: 'course_container_total',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n grouping: false,\n filtering: false,\n render: (rowData) => addTooltipsToData(rowData, 'course_container_total')\n },\n {\n title: t('dashboard.expected'),\n field: 'course_expected',\n render: (rowData) => (rowData.course_expected ? tl('yes') : tl('no')),\n grouping: true,\n filtering: true,\n hidden: false\n },\n {\n title: 'Special Access',\n field: 'special_access',\n grouping: true,\n filtering: true,\n hidden: true\n },\n {\n title: '*Acc',\n field: 'special_access_short',\n grouping: true,\n filtering: true,\n hidden: false,\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'special_access_short')\n },\n {\n title: 'Published',\n field: 'course_status',\n render: (rowData) => (rowData.course_status ? 'published' : 'draft'),\n grouping: true,\n filtering: true,\n hidden: true\n },\n {\n title: t('dashboard.status'),\n field: 'course_course_status',\n grouping: true,\n filtering: true,\n lookup: filterStatus(tableData)\n }\n];\n\n// column render functions are not saved in local storage, they need to be added to the columns\nexport const renderMap = [\n {\n field: 'course_validFrom',\n render: (rowData) => convertDate(rowData.course_validFrom)\n },\n {\n field: 'course_validEnd',\n render: (rowData) => convertDate(rowData.course_validEnd)\n },\n {\n field: 'course_validDiff',\n render: (rowData) => dateDiff(rowData.course_validEnd)\n },\n {\n field: 'course_expected',\n render: (rowData) => (rowData.course_expected ? tl('yes') : tl('no'))\n },\n {\n field: 'course_status',\n render: (rowData) => (rowData.course_status ? 'published' : 'draft')\n },\n {\n field: 'course_title',\n cellStyle: { minWidth: '300px', width: '100%' },\n render: (rowData) => addLabelsToTitle(rowData)\n },\n {\n field: 'course_categories',\n render: (rowData) => addTooltipsToData(rowData, 'course_categories')\n },\n {\n field: 'course_categories_total',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_categories_total')\n },\n {\n field: 'course_categories2',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_categories2')\n },\n {\n field: 'special_access_short',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'special_access_short')\n },\n {\n field: 'course_container_total',\n cellStyle: { minWidth: '100px', maxWidth: '100px', width: '100px' },\n render: (rowData) => addTooltipsToData(rowData, 'course_container_total')\n }\n];\n\n// add render functions to columns\nexport const addRenderFunctionsToColumns = (a, b, prop) =>\n Object.values(\n [...a, ...b].reduce((acc, v) => {\n if (v[prop]) acc[v[prop]] = acc[v[prop]] ? { ...acc[v[prop]], ...v } : { ...v };\n return acc;\n }, {})\n );\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport MaterialTable from '@material-table/core';\nimport { useTranslation } from 'react-i18next';\nimport { useContext, useState } from 'react';\n/* MUI */\nimport { Box, Chip, Popper, Typography, Button, Tooltip } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogTitle from '@mui/material/DialogTitle';\n// helper\nimport { ToastLinkedCourses } from 'pages/adminCourses/addCourse/EditCourse.helper';\n/* CUSTOM components */\nimport SectionTitle from './SectionTitle';\nimport LoaderWithBackdrop from '../loading/LoaderWithBackdrop';\n/* HELPERS */\nimport { convertDate } from '../../helpers/utils';\n\n/*\nThis component is responsible for displaying a table of linked courses within the dashboard view. \nUsers can click on a course to navigate to its details. \nThe table provides essential information about each linked course.\n*/\nconst DashboardTable = ({ courses }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const [loading, setLoading] = useState(false);\n const [anchorEl, setAnchorEl] = useState(null);\n const [linkCourse, setLinkCourse] = useState({});\n //\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popper' : undefined;\n\n const toast = ToastLinkedCourses();\n // POPPER DIALOG: TRANSLATIONS ____________________________\n const unlinkDialog = {\n title: t('linkedCourses.unlinkDialog.title'),\n message: t('linkedCourses.unlinkDialog.message'),\n btnDelete: t('linkedCourses.unlinkDialog.delete'),\n btnCancel: t('linkedCourses.unlinkDialog.cancel')\n };\n // POPPER DIALOG: OPEN _________________________________\n const handleOpenDialogLinkedCourse = (event, links) => {\n setLinkCourse(links);\n setAnchorEl(anchorEl ? null : event.currentTarget);\n };\n // POPPER DIALOG: CLOSE _________________________________\n const handleCloseDialog = () => setAnchorEl(null);\n\n // POPPER DIALOG: DELETE btn ____________________________\n const handleDeleteLinked = async (event, links) => {\n setLoading(true);\n try {\n await store.courseEdit.unlinkCourse(links);\n const indexCourse = courses.findIndex((item) => item.course_nid === links.courseNid);\n if (links.links.course_container.length > 1) {\n const indexCourseContainer = links.links.course_container.findIndex(\n (item) => item.course_container_nid === links.link.course_container_nid\n );\n courses[indexCourse].course_container.splice(indexCourseContainer, 1);\n } else {\n courses.splice(indexCourse, 1);\n }\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n }\n setLoading(false);\n setAnchorEl(anchorEl ? null : event.currentTarget);\n };\n\n // TABLE: OPTIONS _______________________________________\n const tableOptions = {\n pageSize: 10,\n emptyRowsWhenPaging: false,\n search: false,\n showTitle: false,\n header: true,\n toolbar: false,\n dense: true\n };\n\n // TABLE: ON CLICK row _______________________________________\n const handleClickRowCourse = (course) => {\n setLoading(true);\n const { package: _package, containerNid } = store.routerStore.routerState.params;\n const routerParams = {\n params: {\n package: _package.toString(),\n packageNid: store.params.packageNid.toString(),\n containerNid,\n courseuuid: course.course_uuid\n },\n queryParams: { type: 'linked' }\n };\n store.routerStore.goTo('editCourse', routerParams);\n };\n\n // TABLE: render linked courses as chip _______________________________________\n const linkedCourses = (links) =>\n links.course_container.map((link) => (\n \n \n handleOpenDialogLinkedCourse(event, {\n links,\n link,\n title: links.course_title,\n courseNid: links.course_nid,\n courseUuid: links.course_uuid\n })\n }\n key={link.course_container_nid}\n label={`${link.course_container_title.slice(0, 15)}`}\n sx={{\n fontSize: '11px',\n marginRight: '5px',\n height: '24px',\n border: `2px solid white`,\n ' .MuiChip-deleteIcon': { fontSize: '18px' }\n }}\n />\n \n ));\n\n return (\n \n \n {/* POPPER DIALOG */}\n \n \n \n \n {unlinkDialog.title}\n \n \n \n \n \n {linkCourse?.title || ''}\n \n \n \n \n \n \n \n \n {/* POPPER DIALOG */}\n \n \n handleClickRowCourse(rowData)}\n style={{ padding: '13px 5px' }}\n data={courses}\n options={tableOptions}\n columns={[\n {\n title: t('dashboard.course'),\n field: 'course_title',\n cellStyle: { width: '100%', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\n },\n { title: 'Online', field: 'course_online' },\n { title: 'Pnt', field: 'course_points' },\n {\n title: t('dashboard.till'),\n field: 'valid_period_end',\n cellStyle: { width: '100px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' },\n render: (rowData) => convertDate(rowData.valid_period_end)\n },\n {\n title: t('dashboard.linked'),\n field: 'course_container',\n cellStyle: { lineHeight: '11px', textAlign: 'right' },\n render: (rowData) => linkedCourses(rowData)\n }\n ]}\n />\n \n \n );\n};\n\nDashboardTable.propTypes = {\n courses: PropTypes.array\n};\n\nexport default observer(DashboardTable);\n\nconst sxLinkedCourses = {\n background: 'white',\n padding: '10px',\n borderRadius: '5px',\n '.MuiTableRow-head': { height: '50px' },\n '.MuiTableCell-root': { padding: '8px!important', fontSize: '14px' },\n '.MuiPaper-root': { backgroundColor: 'transparent', boxShadow: 'none' },\n '.MuiTablePagination-root': { border: 'none', background: 'white', borderRadius: '5px', marginTop: '15px', padding: '0px' }\n};\n\nconst sxPopper = {\n zIndex: '10',\n ' .popper_box': { bgcolor: 'background.paper', borderRadius: '4px', boxShadow: '1px 2px 15px black', minWidth: '400px' },\n ' .popper_title': { fontSize: '18px', display: 'flex', justifyContent: 'space-between' },\n ' .popper_chip': { height: '24px', fontSize: '11px', marginRight: '5px', border: `2px solid white` }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport Typography from '@mui/material/Typography';\nimport PropTypes from 'prop-types';\nimport CardContent from '@mui/material/CardContent';\n\nconst InfoCardText = (props) => {\n const { title, text } = props;\n\n return (\n <>\n \n \n {title}\n \n \n {text}\n \n \n \n );\n};\n\nInfoCardText.propTypes = {\n title: PropTypes.string,\n text: PropTypes.string\n};\n\nexport default observer(InfoCardText);\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useState, useEffect, useContext } from 'react';\nimport isEqual from 'lodash/isEqual';\nimport { Typography, Box, CardContent } from '@mui/material';\nimport StarIcon from '@mui/icons-material/Star';\n\nconst InfoCardFavo = () => {\n const store = useContext(Store);\n const [prefDashboard, setPrefDashboard] = useState(() => {\n // getting stored value\n const saved = localStorage.getItem('prefDashboard');\n const initialValue = JSON.parse(saved);\n return initialValue || '';\n });\n const isPrefDashboard = isEqual(prefDashboard, store.params);\n //\n const sxPrefDashboard = { fontSize: 40, color: !isPrefDashboard && '#e8e8e8' };\n const handleClickFavoDashboard = () => {\n setPrefDashboard(isPrefDashboard ? '' : store.params);\n };\n\n useEffect(() => {\n // storing pref dshboard in localstorage\n localStorage.setItem('prefDashboard', JSON.stringify(prefDashboard));\n }, [prefDashboard]);\n\n return (\n handleClickFavoDashboard()}>\n \n \n Dashboard\n \n \n \n \n \n \n );\n};\n\nexport default observer(InfoCardFavo);\n","export const sxInfoCard = (theme) => ({\n margin: '0px',\n display: 'flex',\n flex: '1',\n background: '#fafafa',\n cursor: 'pointer',\n color: '#717171',\n textTransform: 'uppercase',\n minWidth: '100px',\n borderRadius: '10px',\n boxShadow: 'none',\n transition: 'all .5s',\n // '&:hover': { background: '#006847b8', color: 'white', boxShadow: 'rgb(0 0 0 / 34%) 2px 1px 9px 0px', transition: 'all .5s' }\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white',\n boxShadow: 'rgb(0 0 0 / 34%) 2px 1px 9px 0px',\n transition: 'all .5s'\n }\n});\n\nexport const sxInfoCardPointer = { '&:hover': sxInfoCard['&:hover'], ...{ cursor: 'pointer' } };\nexport const sxInfoCardFavo = {\n '&:hover': { ...sxInfoCard['&:hover'], ...{ background: 'white', color: '#717171' } }\n};\n","/* Core */\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { useTheme } from '@emotion/react';\n\n/* MUI components */\nimport { Box, Grid, Card, Stack } from '@mui/material';\n/* INFO CARDS */\nimport InfoCardText from '../infoCards/InfoCardText';\nimport InfoCardFavo from '../infoCards/infoCardFavo';\n/* CUSTOM CARD STYLING */\nimport { sxInfoCard, sxInfoCardPointer, sxInfoCardFavo } from './sxInfoCards';\n/*\n This component provides a visual summary of different course categories, \n making it easy for users to see the number of courses in various states or categories within the application.\n Users can click on specific cards to access more detailed information or related views in the application.\n*/\nconst InfoCards = ({ courses }) => {\n const store = useStore();\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n /* sx custom styling */\n const sxGridContainer = { background: 'white', padding: '15px', borderRadius: '20px' };\n const sxGridItem = { marginTop: '0px', marginBottom: '0px' };\n const sxInfoCardText = { background: theme.palette.primary.main, color: 'white', boxShadow: 'rgb(0 0 0 / 34%) 2px 1px 9px 0px' };\n\n const draftCourses = courses.filter((item) => item.course_status === 0);\n const onlineCourses = courses.filter((item) => item.course_online === 1);\n const offlineCourses = courses.filter((item) => item.course_online === 0);\n const linkedCourses = courses.filter((item) => item.course_online === 1 && item.course_container.length > 0);\n const expectedCourses = courses.filter((item) => item.course_online === 1 && item.course_expected === 1);\n const newCourses = courses.filter((item) => item.course_online === 1 && item.course_course_status.includes('New'));\n const updateCourses = courses.filter((item) => item.course_online === 1 && item.course_course_status.includes('Update'));\n // redirect to courses view\n const redirectCoursesClick = (routeName) => {\n const { package: _package, containerNid, packageNid } = store.routerStore.routerState.params;\n const routerParams = {\n params: { package: _package.toString(), containerNid, packageNid }\n };\n store.routerStore.goTo(routeName, routerParams);\n };\n\n return (\n \n \n \n \n redirectCoursesClick('adminOnlineCourses')}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n redirectCoursesClick('adminOfflineCourses')}>\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nInfoCards.propTypes = {\n courses: PropTypes.array.isRequired\n};\n\nexport default observer(InfoCards);\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState, useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n/* MUI */\nimport { Box, Divider, TextField, List } from '@mui/material';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Avatar from '@mui/material/Avatar';\n//\nimport LoaderWithBackdrop from '../loading/LoaderWithBackdrop';\n/* HOOKS */\nimport { dateDiff } from '../../helpers/utils';\n\n// Renders a list of courses that are ending soon\nconst ListEndingCourses = ({ courses }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n const [days, setDays] = useState(100);\n const [loading, setLoading] = useState(false);\n\n const endingCourses = courses.filter((item) => dateDiff(item.valid_period_end) < days);\n const endingCoursesInDays = endingCourses.map((item) => ({ ...item, days: dateDiff(item.valid_period_end) }));\n endingCoursesInDays.sort((a, b) => a.days - b.days);\n\n /* styling */\n const sxListItems = {\n rowGap: '4px',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n position: 'absolute',\n top: '100px',\n bottom: '0px',\n paddingRight: '10px'\n };\n const sxListText = { span: { fontSize: '.9rem' } };\n const sxFlex = { display: 'flex', justifyContent: 'space-between', alignItems: 'center' };\n const sxBtn = { justifyContent: 'space-between', gap: '10px 10px', padding: '5px' };\n const sxAvatar = {\n color: 'white',\n background: theme.palette.primary.light,\n width: '30px',\n height: '30px',\n fontSize: '14px',\n lineHeight: '14px'\n };\n const sxTextField = {\n width: '50px',\n height: '15px',\n padding: '0',\n margin: '0 10px',\n '& .MuiInputBase-input': {\n padding: '0',\n textAlign: 'center',\n justifyContent: 'center'\n }\n };\n\n const handleClickCourse = (course) => {\n setLoading(true);\n const { package: _package, containerNid } = store.routerStore.routerState.params;\n const routerParams = {\n params: { package: _package.toString(), packageNid: store.params.packageNid.toString(), containerNid, courseuuid: course.course_uuid }\n };\n store.routerStore.goTo('editCourse', routerParams);\n };\n\n const handleChange = (e) => {\n if (Number.isNaN(e.target.value)) return;\n const newValue = Number(e.target.value) || 0;\n const newDays = parseInt(newValue);\n setDays(newDays);\n };\n\n return (\n \n \n \n {t('dashboard.endingIn')}\n {' '}\n {t('dashboard.days')}\n \n \n {t('dashboard.course')}\n {t('dashboard.days')}\n \n \n {endingCoursesInDays.map((course) => (\n handleClickCourse(course)} disablePadding>\n \n \n \n {course.days}\n \n \n \n ))}\n \n \n );\n};\n\nListEndingCourses.propTypes = {\n courses: PropTypes.array\n};\n\nexport default observer(ListEndingCourses);\n","/* eslint-disable no-prototype-builtins */\nimport { observer } from 'mobx-react';\n// import { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport Box from '@mui/material/Box';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\n// import ListSubheader from '@mui/material/ListSubheader';\nimport StarIcon from '@mui/icons-material/Star';\n\n// renders a list of courses that are linked to a package\nconst ListLinkedCourses = ({ courses }) => {\n // const store = useContext(Store);\n // const endingCourses = courses.filter((item) => dateDiff(item.valid_period_end) < 30);\n // eslint-disable-next-line no-undef\n const uniqueCourses = [...new Map(courses.map((c) => [c.course_nid, c])).values()];\n\n return (\n \n \n \n );\n};\n\nListLinkedCourses.propTypes = {\n courses: PropTypes.array\n};\n\nexport default observer(ListLinkedCourses);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n/* Custom components */\nimport MaterialTable from '@material-table/core';\nimport { Box, Chip, Popper, Typography, Button } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogTitle from '@mui/material/DialogTitle';\n// helper\nimport { ToastDraftCourses, convertEpochTimestamp } from 'pages/adminCourses/addCourse/EditCourse.helper';\nimport LoaderWithBackdrop from '../loading/LoaderWithBackdrop';\n\n// renders a table of draft courses\nconst MyDraftCourses = ({ courses }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const [loading, setLoading] = useState(false);\n const [anchorPopper, setAnchorPopper] = useState(null);\n const [deleteCourse, setDeleteCourse] = useState({});\n //\n const open = Boolean(anchorPopper);\n const id = open ? 'simple-popper' : undefined;\n\n const toast = ToastDraftCourses();\n\n // POPPER DIALOG: TRANSLATIONS ____________________________\n const unlinkDialog = {\n title: t('draftCourses.deleteDraftDialog.title'),\n message: t('draftCourses.deleteDraftDialog.message'),\n btnDelete: t('draftCourses.deleteDraftDialog.delete'),\n btnCancel: t('draftCourses.deleteDraftDialog.cancel')\n };\n // POPPER DIALOG: OPEN _________________________________\n const handleOpenDialogDeleteCourse = (event, course) => {\n setDeleteCourse(course);\n setAnchorPopper(anchorPopper ? null : event.currentTarget);\n };\n // POPPER DIALOG: CLOSE _________________________________\n const handleCloseDialog = () => setAnchorPopper(null);\n\n // POPPER DIALOG: DELETE btn ____________________________\n const handleDeleteLinked = async (event, course) => {\n setLoading(true);\n try {\n await store.courseEdit.deleteDraftCourse(course.course_uuid);\n const index = courses.findIndex((item) => item.course_uuid === course.course_uuid);\n courses.splice(index, 1);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n }\n setLoading(false);\n setAnchorPopper(anchorPopper ? null : event.currentTarget);\n };\n\n const tableOptions = {\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 100],\n emptyRowsWhenPaging: false,\n search: false,\n showTitle: false,\n header: true,\n toolbar: false,\n dense: true,\n thirdSortClick: false\n };\n\n const tableColumns = [\n { title: 'id', field: 'course_nid' },\n {\n title: t('dashboard.course'),\n field: 'course_title',\n cellStyle: { width: '100%', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\n },\n { title: 'Pnt', field: 'course_points' },\n {\n title: 'Created',\n field: 'course_created',\n cellStyle: { width: '100px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' },\n render: (rowData) => convertEpochTimestamp(rowData.course_created, 'DD-MM-YYYY')\n },\n {\n title: 'Changed',\n field: 'lesson_container_changed',\n cellStyle: { width: '100px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' },\n render: (rowData) => convertEpochTimestamp(rowData.lesson_container_changed, 'DD-MM-YYYY'),\n defaultSort: 'desc'\n },\n {\n title: t('dashboard.status'),\n field: 'course_status',\n cellStyle: { width: '100px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' },\n render: (rowData) => (\n handleOpenDialogDeleteCourse(event, rowData)}\n sx={{\n marginRight: '5px',\n border: `3px solid white`,\n height: '24px',\n color: 'white',\n '.MuiChip-deleteIcon': { fontSize: '20px' }\n }}\n />\n )\n }\n ];\n\n const handleClickCourse = (course) => {\n setLoading(true);\n const { package: _package, containerNid } = store.routerStore.routerState.params;\n const routerParams = {\n params: { package: _package.toString(), packageNid: store.params.packageNid.toString(), containerNid, courseuuid: course.course_uuid }\n };\n store.routerStore.goTo('editCourse', routerParams);\n };\n\n // NO DRAFT COURSES VIEW\n if (courses.length === 0) {\n return No draft courses ;\n }\n // DRAFT COURSES VIEW\n // const tableData = courses.map((course) => ({ ...course, id: course.course_nid }));\n return (\n \n \n \n {/* POPPER DIALOG */}\n \n \n \n \n {unlinkDialog.title}\n \n \n \n \n \n {deleteCourse?.course_title || ''}\n \n \n \n \n \n \n \n \n {/* POPPER DIALOG */}\n handleClickCourse(rowData)}\n columns={tableColumns}\n />\n \n \n );\n};\n\nMyDraftCourses.propTypes = {\n courses: PropTypes.array\n};\n\nexport default observer(MyDraftCourses);\n\nconst sxBoxContainer = {\n ' .MuiPaper-root': { borderRadius: '0 0 5px 5px' },\n borderRadius: '0 0 5px 5px',\n ' table tfoot td': { border: 'none !important' },\n display: 'block',\n gap: '10px 10px',\n marginBottom: '15px',\n position: 'relative',\n '>div': {\n boxShadow: 'none'\n },\n '.MuiTableCell-root': { padding: '8px', fontSize: '14px' }\n};\n\nconst sxPopper = {\n zIndex: '10',\n ' .popper_box': { bgcolor: 'background.paper', borderRadius: '4px', boxShadow: '1px 2px 15px black', minWidth: '400px' },\n ' .popper_title': { fontSize: '18px', display: 'flex', justifyContent: 'space-between' },\n ' .popper_chip': { height: '24px', fontSize: '11px', marginRight: '5px', border: `2px solid white` }\n};\n\nconst noCourses = {\n background: '#dbdbdb82',\n display: 'flex',\n height: '100px',\n borderRadius: '5px',\n justifyContent: 'center',\n alignItems: 'center',\n marginBottom: '15px'\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n\n/* MUI */\nimport { Button } from '@mui/material';\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\n\nconst BtnNewCourse = ({ handleNewCourseModal }) => {\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n const sxNewCourseBtn = {\n border: `4px solid ${theme.palette.primary.main}`,\n borderRadius: '20px',\n '&:hover': { border: `4px solid ${theme.palette.primary.light}` }\n };\n\n return (\n \n );\n};\n\nBtnNewCourse.propTypes = {\n handleNewCourseModal: PropTypes.func\n};\n\nexport default observer(BtnNewCourse);\n","/* eslint-disable camelcase */\n/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useCallback, useState, useEffect, forwardRef } from 'react';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Autocomplete, Chip, CircularProgress, TextField } from '@mui/material';\n\nconst MyAutocompleteTaxonomy = forwardRef(({ name, control, label, ...otherProps }, fRef) => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n const [objOptions, setOptions] = useState([]);\n const [isSearching, setIsSearching] = useState(false);\n\n const { professionParentId, professionParentId2 } = store.courseEdit.courseContainer;\n\n const node = 'category';\n //\n const cat1 = name.endsWith('category');\n const cat2 = name.endsWith('category2');\n const nid = cat1 ? professionParentId : cat2 && professionParentId2;\n //\n const parentId = nid;\n\n const correctTag = (tag, options) => (options.find((item) => item.id === tag.id) ? 'primary' : 'error');\n\n // CALLBACK FUNCTION TO FETCH DATA FROM API\n const fetchData = useCallback(async () => {\n try {\n const newFilter = `filter[parent.meta.drupal_internal__target_id][value]=${parentId}`;\n const { data: result } = await store.lmsApi.fetchIt(node, newFilter);\n const output = result.data.map((item) => ({ type: 'category', title: item.attributes.name, id: item.id }));\n setOptions(output);\n setIsSearching(false);\n } catch (error) {\n setIsSearching(false);\n const toastMsg = {\n title: t('serverTimeOut.title', 'Geen data gevonden'),\n content: t('serverTimeOut.message', 'Er zijn geen resultaten gevonden'),\n type: 'error',\n timeOut: 6000,\n variant: 'filled'\n };\n store.courseEdit.setToasts(toastMsg);\n }\n }, [parentId, store.courseEdit, store.lmsApi, t]);\n\n useEffect(() => {\n if (!parentId) return;\n setIsSearching(true);\n fetchData();\n }, [fetchData, parentId]);\n\n return (\n (\n onChange(data)}\n options={objOptions.sort((a, b) => -b.title.localeCompare(a.title))}\n isOptionEqualToValue={(option, value) => option.id === value.id}\n getOptionLabel={(option) => option.title}\n filterSelectedOptions\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n \n ))\n }\n renderInput={(params) => (\n \n {isSearching ? : null}\n {params.InputProps.endAdornment}\n \n )\n }}\n />\n )}\n />\n )}\n />\n );\n});\n\nMyAutocompleteTaxonomy.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n label: PropTypes.string,\n otherProps: PropTypes.object\n};\n\nexport default observer(MyAutocompleteTaxonomy);\n","import * as Yup from 'yup';\n\nconst newCourseValidation = Yup.object().shape({\n attributes: Yup.object({\n title: Yup.string().required('Title is required'),\n field_points: Yup.string().nullable(),\n field_extra_points: Yup.string().nullable(),\n field_valid_period: Yup.object({\n value: Yup.date().nullable(),\n end_value: Yup.date().nullable()\n })\n }),\n field_course_category: Yup.array().min(1, 'Category is required')\n});\n\nexport { newCourseValidation };\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, DialogActions, Box, Button, Backdrop, CircularProgress } from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\n/* ICONS */\nimport UndoIcon from '@mui/icons-material/Undo';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport ClearIcon from '@mui/icons-material/Clear';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\nimport MyAutocompleteTaxonomy from '../../RHF/MyAutocompleteTaxonomy';\nimport { newCourseValidation } from './beans/NewCourse.ValidationSchema';\n\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n\nconst defaultValues = {\n attributes: {\n title: '',\n field_points: '',\n field_extra_points: '',\n field_valid_period: { value: null, end_value: null }\n },\n field_course_category: []\n};\n\nconst NewCourseForm = ({ handleNewCourseModal }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n const [saving, setSaving] = useState(false);\n\n const toast = {\n success: { title: t('addCourse.success.title'), content: t('addCourse.success.message'), type: 'success' },\n fail: { title: t('addCourse.fail.title'), content: t('addCourse.fail.message'), type: 'error' },\n default: { timeOut: 5000, variant: 'filled' }\n };\n\n /* ON SUBMIT / HANDLE SUBMIT */\n const handleSubmit = async (values) => {\n setSaving(true);\n const courseCategory = values.field_course_category.length > 0 ? values.field_course_category.map(({ title, ...rest }) => rest) : null;\n //\n const newCourse = {\n type: 'course',\n attributes: {\n ...values.attributes,\n field_valid_period: {\n value: values.attributes.field_valid_period.value?.toISOString()?.split('T')[0],\n end_value: values.attributes.field_valid_period.end_value?.toISOString()?.split('T')[0]\n },\n status: false,\n course_status: 'New',\n expected: false,\n online: false,\n field_skip_evaluation: store?.courseEdit?.currentPackage?.microlearning\n },\n relationships: {\n course_category: {\n data: courseCategory\n }\n }\n };\n try {\n await store.courseEdit.postCourse(newCourse);\n //\n const { package: _package, containerNid, packageNid } = store.params;\n const { newCourseId } = store.courseEdit;\n const routerParams = { params: { package: _package.toString(), packageNid, containerNid, courseuuid: newCourseId } };\n // show succes toast\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n // close new course modal\n handleNewCourseModal();\n // redirect to edit course\n store.routerStore.goTo('editCourse', routerParams);\n setSaving(false);\n } catch (error) {\n handleNewCourseModal();\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.fail, ...toast.default });\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n reset();\n handleNewCourseModal();\n }}\n disableElevation\n variant=\"contained\"\n endIcon={}\n sx={{ background: '#607d8b' }}\n >\n {t('addCourse.form.close')}\n \n }\n loading={saving}\n loadingPosition=\"end\"\n disabled={!dirty}\n >\n {t('addCourse.form.save')}\n \n \n \n \n )}\n
\n );\n};\n\nNewCourseForm.propTypes = {\n handleNewCourseModal: PropTypes.func\n};\n\nexport default observer(NewCourseForm);\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Box, Dialog, DialogTitle, Chip } from '@mui/material';\n/* Custom components */\nimport NewCourseForm from './form/NewCourseForm';\n/*\n In summary, the NewCourseDialog component is a user interface element that presents a dialog for adding a new course in an administrative or dashboard context. \n It includes a title, likely indicating the package name, and a form for inputting course details. \n It is built to be accessible and may be part of a larger application that includes translation support. \n The dialog is displayed when open is true and is controlled by the handleNewCourseModal callback.\n*/\nconst NewCourseDialog = (props) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n\n const { open, handleNewCourseModal } = props;\n\n const radioGroupRef = useRef(null);\n\n const handleEntering = () => {\n if (radioGroupRef.current != null) {\n radioGroupRef.current.focus();\n }\n };\n\n return (\n \n \n {`${t('dashboard.addCourse')}`}\n \n \n \n \n );\n};\n\nNewCourseDialog.propTypes = {\n open: PropTypes.bool,\n handleNewCourseModal: PropTypes.func\n};\n\nexport default observer(NewCourseDialog);\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Chip } from '@mui/material';\nimport KeyboardDoubleArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nimport KeyboardDoubleArrowLeftIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\n\nconst BtnShowSidebar = ({ right = '-141px', rightHover = '-55px' }) => {\n const store = useContext(Store);\n const storageKey = store.routerState.routeName.includes('Dashboard') ? 'showSidebarDashboard' : 'showSidebarEdit';\n const showSidebar = store.courseEdit[storageKey];\n //\n const sxToggleBtn = {\n boxShadow: '1px 2px 4px #0000007d',\n paddingRight: '10px',\n position: 'absolute',\n right,\n transition: 'right .3s',\n zIndex: '100',\n '&:hover': { right: rightHover }\n };\n const handleToggleSidebar = () => {\n store.courseEdit.setStoreValue(storageKey, !showSidebar);\n localStorage.setItem(storageKey, !showSidebar);\n };\n return (\n \n ) : (\n \n )\n }\n onClick={() => handleToggleSidebar()}\n />\n );\n};\n\nBtnShowSidebar.propTypes = {\n right: PropTypes.string,\n rightHover: PropTypes.string\n};\n\nexport default observer(BtnShowSidebar);\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useState, useContext, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Box, Grid, Divider } from '@mui/material';\n/* CUSTOM components */\nimport NotFound from 'pages/misc/NotFound';\nimport { InfoCards, MyDraftCourses, DashboardTable, SectionTitle, ListEndingCourses, BtnNewCourse } from '../components/dashboard';\nimport NewCourseDialog from '../components/dialog/NewCourseDialog';\nimport LoadingContent from '../components/loading/LoadingContent';\nimport BtnShowSidebar from '../components/layout/BtnShowSidebar';\n/* HOOKS */\nimport useEwapi from '../hooks/useEwapi';\n/* SCSS */\nimport './Dashboard.scss';\n\n/*\n In summary, the Dashboard component serves as an administrative dashboard for managing courses. \n It retrieves and displays course data, provides options to filter and add new courses, \n and integrates with the store to display notifications when necessary.\n*/\nconst Dashboard = () => {\n const store = useContext(Store);\n const { courseEdit } = store;\n const { t } = useTranslation('adminCourses');\n const [open, setOpen] = useState(false);\n const ewapiCourseList = `editor-course-list/${store.params.containerNid}/0/json`;\n const { response, loading, error } = useEwapi(ewapiCourseList, 'courses');\n //\n const showSidebar = courseEdit.showSidebarDashboard;\n const setDisplay = showSidebar ? 'flex' : 'none';\n // OPEN/CLOSE NEW COURSE DIALOG\n const handleNewCourseModal = () => setOpen(!open);\n\n useEffect(() => {\n if (!response) return;\n if (response?.data.result?.message) {\n const toastMsg = { content: response.data.result.message, title: 'Information', type: 'error', timeOut: 6000, variant: 'filled' };\n store.courseEdit.setToasts(toastMsg);\n }\n }, [store.courseEdit, response, response?.result]);\n\n // waiting response from ewapi\n if (loading) return ;\n if (error) return ;\n\n // RESPONSE FROM EWAPI\n const { courses, result } = response.data;\n if (!loading && result) {\n courseEdit.setStoreValue('selectedContainer', result);\n }\n /* FILTERING */\n const tableData = courses.map((course) => ({ ...course, id: course.course_nid }));\n const draftCourses = tableData.filter((item) => item.course_status === 0);\n const onlineCourses = tableData.filter((item) => item.course_online === 1);\n const linkedCourses = tableData.filter((item) => item.course_online === 1 && item.course_container.length > 0);\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 \n\n \n \n );\n};\n\nexport default observer(Dashboard);\n\nconst sxBoxMain = {\n paddingRight: '24px',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n 'table thead': { textTransform: 'capitalize' }\n};\nconst sxJustifyContent = {\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '0px',\n borderRadius: '5px 5px 0 0 ',\n background: 'white',\n padding: '15px'\n};\nconst sxBoxEnding = {\n position: 'relative',\n width: `100%`,\n background: 'white',\n borderRadius: '10px',\n padding: '10px',\n boxShadow: '-4px 2px 7px #0000001a',\n zIndex: 10\n};\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport Dashboard from './Dashboard';\n\nconst adminDashboardViewMap = {\n adminDashboardCourses: (\n \n \n \n )\n};\n\nexport default adminDashboardViewMap;\n","import useStore from 'hooks/useStore';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { InputLabel, Box } from '@mui/material';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport ListSubheader from '@mui/material/ListSubheader';\n\nconst AdvancedSelectLabel = ({ menuList, setLabelFilter }) => {\n const store = useStore();\n const { t } = useTranslation('adminCourses');\n const [label, setLabel] = useState(store.label);\n const uniqueLabels = [...new Set(menuList.map((item) => item.label))].filter((item) => item !== store.label);\n const labelFullName = { po: 'PO-Online', pe: 'PE-Academy', ewise: 'E-WISE', cme: 'CME-Online' };\n\n const handleChange = (event) => {\n setLabel(event.target.value);\n setLabelFilter(event.target.value);\n };\n\n return (\n \n \n Label\n \n \n \n );\n};\n\nAdvancedSelectLabel.propTypes = {\n setLabelFilter: PropTypes.func,\n // copyValues: PropTypes.object,\n menuList: PropTypes.array\n};\n\nexport default AdvancedSelectLabel;\n","// set color\nexport const setColor = (item, copyValues) => {\n const isSelected = item.package_id === copyValues.subMenuId;\n if (!isSelected) return ['#eef2fa', 'inherit'];\n return isSelected && ['#006847', '#fff'];\n};\n// menu item selected\nexport const isSelected = (item, open) => {\n const isOpen = item.package_id === open;\n return isOpen ? 'selected' : '';\n};\n// submenu active\nexport const isActive = (mainMenu, _subMenu, copyValues) => {\n const ccId = mainMenu.package_id;\n const subMenuName = _subMenu.name;\n const isSubmenu = ccId === copyValues.subMenuId && subMenuName === copyValues.subMenuItem;\n return isSubmenu;\n};\n\nexport const defaultCopyValues = (store) => ({\n containerNid: store.params.containerNid,\n course_container_uuid: '',\n fromContainerNid: '',\n packageNid: 0,\n package: 'onbekend',\n course: 'onbekend',\n courseUuid: '',\n courseNid: '',\n action: '',\n actionId: 0,\n subMenuId: 0,\n subMenuItem: '',\n listType: 1,\n profession_id: '',\n profession_uuid: '',\n categoryUuid: ''\n});\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n\n/* MUI */\nimport List from '@mui/material/List';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Collapse from '@mui/material/Collapse';\nimport { LinearProgress, ToggleButtonGroup, ToggleButton, Box, Avatar, FormControl, OutlinedInput, InputAdornment } from '@mui/material';\n/* ICONS */\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\nimport CheckIcon from '@mui/icons-material/Check';\nimport SearchIcon from '@mui/icons-material/Search';\n//\nimport AdvancedSelectLabel from './AdvancedSelectLabel';\n/** import { CopyCourseContext } from './context'; */\nimport { isSelected, isActive } from './advancedCourse.helper';\n\n// eslint-disable-next-line import/no-cycle\n\n/* SCSS */\nimport '../../scss/MenuList.scss';\n// HOOKS\nimport useEwapi from '../../hooks/useEwapi';\n\n/*\nThe primary purpose of this component is to provide users with the ability to select a package and\nsubmenu for various actions (reusing, duplicating, or linking courses).\nIt offers filtering options and handles package and submenu selection events.\n*/\nconst AdvancedCourseMenuList = ({ handleCopyActions, copyValues, profId }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n // Hook fetch package list\n const url = `editor-package-list/${0}/${0}/json`;\n const { response, loading, error } = useEwapi(url, 'packages');\n\n // FILTERING\n // - search filter\n const [search, setSearch] = useState('');\n // - packageStatus => 0 = all, 1 = main\n const [prefPackage, setPrefPackage] = useState(1);\n const [filtered, setFiltered] = useState([]);\n const [open, setOpen] = useState(copyValues.packageNid);\n const [labelFilter, setLabelFilter] = useState(store.label);\n const { containerNid, packageNid } = store.routerStore.routerState.params;\n\n useEffect(() => {\n if (!response?.data) return;\n let filteredData = [];\n if (search.length) {\n filteredData = response.data.packages.filter((item) => item.package_title.toLowerCase().includes(search));\n }\n setFiltered(filteredData);\n }, [response?.data, search]);\n\n // SUBMENU ITEMS\n const subMenus = [\n { id: 2, name: 'Online', value: 1, class: 'online', icon: , routeName: 'adminOnlineCourses' },\n { id: 3, name: 'Offline', value: 2, class: 'offline', icon: , routeName: 'adminOfflineCourses' }\n ];\n\n // EVENT HANDLERS\n const handleClickOpen = (item) => setOpen(item);\n\n const handlePrefPackages = (event, value) => setPrefPackage(value);\n\n const isCurrentCid = (value) => (value.toString() === containerNid.toString() ? 'current' : '');\n\n const handleMenuSelect = (_package, _subMenu) => () => {\n // EVENTS\n handleCopyActions({\n ...copyValues,\n package: _package.package_title,\n fromContainerNid: _package.course_container_id,\n categoryUuid: '',\n course: 'onbekend',\n courseNid: '',\n courseUuid: '',\n subMenuId: _package.package_id,\n subMenuItem: _subMenu.name,\n listType: _subMenu.value,\n course_nid: 0\n });\n };\n\n // TRANSLATIONS\n const txtNoSelAction = t('copyDialog.selPackage.noAction');\n const btnMain = t('copyDialog.selPackage.main');\n const btnAll = t('copyDialog.selPackage.all');\n const filterPlaceholder = t('copyDialog.selPackage.filter');\n\n const sxBtnGroup = {\n m: 1,\n display: 'flex',\n '.MuiToggleButton-root': { lineHeight: '15px', textTransform: 'capitalize', flexGrow: 1 },\n '.Mui-selected': { background: theme.palette.primary.main, color: 'white' }\n };\n const sxCurCid = { '.current .MuiListItemText-primary': { fontStyle: 'italic' } };\n\n // RENDERING\n if (!copyValues.action) return

{txtNoSelAction}

;\n // - based on hook response\n if (loading) {\n return (\n \n \n \n );\n }\n if (error) return

error...

;\n\n /*\n Action Id:\n 1 = Reuse\n 2 = Duplicate\n 3 = Link\n */\n\n // if current package is\n // - microlearning: then only show other microlearning packages (excluded the current package)\n // - non microlearning package: show all packages (excluded the current package)\n // To check if the current package is a microlearning package, we need to get the current package from the response.\n const curPackageIsMicroLearning = response?.data?.packages.find((item) => item.package_id === +packageNid).microlearning;\n // - filter the packages based on the current package microlearning status\n const menuList = curPackageIsMicroLearning\n ? response?.data?.packages.filter((item) => item.microlearning === curPackageIsMicroLearning)\n : response?.data?.packages;\n\n const menuListItems = menuList.filter((item) => item.label === labelFilter);\n const showList = search.length ? filtered : menuListItems;\n\n let otherContainers;\n if (copyValues.actionId === 3) {\n otherContainers = showList.filter(\n (item) =>\n item.profession_id === profId &&\n item.course_container_id.toString() !== containerNid.toString() &&\n !item.package_title.includes('(not') &&\n item.preferred_package === prefPackage\n );\n } else {\n otherContainers = showList.filter(\n (item) =>\n item.course_container_id.toString() !== containerNid.toString() &&\n item.preferred_package === prefPackage &&\n !item.package_title.includes('(not')\n );\n }\n\n otherContainers.sort((a, b) => a.package_title.localeCompare(b.package_title));\n\n return (\n \n \n \n \n {btnMain}\n {btnAll}\n \n \n setSearch(e.target.value)}\n startAdornment={\n \n \n \n }\n />\n \n \n {/* Showing: {search ? filtered.length : menuListItems.length} item(s) */}\n Showing: {otherContainers.length} item(s)\n \n \n \n \n {menuListItems &&\n otherContainers.map((item) => (\n \n handleClickOpen(item.package_id)}>\n \n \n {item.package_title.substring(0, 2).toUpperCase()}\n \n \n \n {open === item.package_id ? : }\n \n \n \n {subMenus.map((subMenuItem) => (\n \n {subMenuItem.icon} \n \n \n ))}\n \n \n \n ))}\n \n \n \n );\n};\n\nAdvancedCourseMenuList.propTypes = {\n handleCopyActions: PropTypes.func,\n copyValues: PropTypes.object,\n profId: PropTypes.number\n};\n\nexport default observer(AdvancedCourseMenuList);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport Avatar from '@mui/material/Avatar';\nimport { Chip, Box, LinearProgress } from '@mui/material';\n/* MATERIAL TABLE */\nimport MaterialTable, { MTableToolbar } from '@material-table/core';\n/* ICONS */\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\nimport CheckIcon from '@mui/icons-material/Check';\n/* Custom */\nimport useEwapi from '../../hooks/useEwapi';\nimport { dateDiff, convertDate } from '../../helpers/utils';\n\n/*\nThe primary purpose of this component is to provide users with a table of courses within a selected package, \nallowing them to choose a course for advanced actions like reuse, duplication, or linking. \nUsers can click on a course to select it, and the selected course is highlighted in the table.\n*/\nconst AdvancedCourseTables = ({ handleCopyActions, containerNid, title, copyValues }) => {\n const store = useStore();\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n\n const listType = copyValues?.listType || 1;\n // test\n const ewapiCourseList = `editor-course-list/${containerNid}/${listType}/json`;\n // HOOK\n const { response, loading, error } = useEwapi(ewapiCourseList, 'courses');\n // STATE\n // const [selectedRow, setSelectedRow] = useState(null);\n // Table options\n const options = {\n actionsColumnIndex: -1,\n selection: false,\n filtering: false,\n grouping: false,\n searchFieldVariant: 'outlined',\n columnsButton: true,\n padding: 'dense',\n debounceInterval: 500,\n pageSize: 10,\n pageSizeOptions: [5, 10, 25, 50, 100],\n emptyRowsWhenPaging: false\n };\n\n // EVENTS\n const handleClick = (event, rowData) => {\n handleCopyActions({\n ...copyValues,\n courseUuid: rowData.course_uuid,\n course_nid: rowData.course_nid,\n course: rowData.course_title\n });\n };\n\n const isPublished = {\n 0: (\n \n ),\n 1: (\n \n ),\n Default: ''\n };\n const sxAvatar = { width: 22, height: 22, color: 'white', borderRadius: '50%' };\n const isOnline = {\n 0: (\n \n \n \n ),\n 1: (\n \n \n \n ),\n Default: ''\n };\n\n const linked = (courseContainers) => {\n if (courseContainers.length === 0) return null;\n const containers = courseContainers.map((container) => (\n \n ));\n return containers;\n };\n\n // RENDERING\n if (loading) {\n return (\n \n \n \n );\n }\n if (error) return 'error loading courses...';\n\n let courseCount = 'Retrieving';\n let tableData = [];\n\n const { courses } = response?.data || [];\n // filter courses that are not in the current course_container\n const filteredCourses = courses?.filter(\n (course) => !course.course_container?.find((container) => container.course_container_nid === +store.params.containerNid)\n );\n\n tableData = filteredCourses.map((course) => ({\n id: course.course_nid,\n course_nid: course.course_nid,\n course_uuid: course.course_uuid,\n course_title: course.course_title,\n course_status: course.course_status,\n course_online: course.course_online,\n course_validFrom: course.valid_period,\n course_validEnd: course.valid_period_end,\n course_points: course.course_points,\n course_container: course.course_container\n }));\n courseCount = tableData.length;\n\n return (\n \n \n convertDate(rowData.course_validEnd) },\n { title: t('dashboard.daysLeft'), field: 'course_validEnd', render: (rowData) => dateDiff(rowData.course_validEnd) },\n { title: 'linked', field: 'course_container', render: (rowData) => linked(rowData.course_container) },\n { title: 'status', field: 'course_status', render: (rowData) => isPublished[rowData.course_status] },\n { title: 'online', field: 'course_online', render: (rowData) => isOnline[rowData.course_online] }\n ]}\n data={tableData}\n // eslint-disable-next-line no-shadow\n onRowClick={(evt, selectedRow) => handleClick(evt, selectedRow)}\n options={{\n ...options,\n ...{\n rowStyle: (rowData) => ({\n backgroundColor: copyValues.course_nid === rowData.course_nid ? theme.palette.primary.light : 'transparent',\n color: copyValues.course_nid === rowData.course_nid ? 'white' : 'black'\n })\n }\n }}\n localization={{ toolbar: { searchPlaceholder: t('dashboard.search') } }}\n components={{\n Toolbar: (props) => (\n
\n \n
\n )\n }}\n />\n
\n
\n );\n};\n\nAdvancedCourseTables.propTypes = {\n containerNid: PropTypes.any,\n title: PropTypes.any,\n handleCopyActions: PropTypes.func,\n copyValues: PropTypes.object\n};\n\nexport default observer(AdvancedCourseTables);\n","import PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n// MATERIAL UI\nimport { Box, Avatar, Divider } from '@mui/material';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemButton from '@mui/material/ListItemButton';\n// ICONS\nimport LinkIcon from '@mui/icons-material/Link';\n// import LinkOffIcon from '@mui/icons-material/LinkOff';\n// import MoveDownIcon from '@mui/icons-material/MoveDown';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport AutoAwesomeMotionIcon from '@mui/icons-material/AutoAwesomeMotion';\n\n/*\nThe component is used to provide users with a menu of advanced course actions, \nallowing them to select an action and potentially perform operations on courses based on their selection.\n*/\nconst AdvancedCourseActions = ({ handleCopyActions, copyValues, defaultValues }) => {\n const store = useContext(Store);\n const { isMarketing } = store;\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n\n /**\n * \"selAction\": {\n \"title\": \"Selecteer actie\",\n \"copy\": \"Copy\",\n \"paste\": \"Paste\",\n \"1\": {\n \"title\": \"Hergebruik\",\n \"info\": \"Maak een kopie van alleen de cursus. Je kan de o.a punten, titel, catagorieën en geldigheid aanpassen maar niet de les inhoud.\",\n \"toast\": \"Kopie van de cursus is als draft versie opgeslagen en kan herbruikt worden.\"\n },\n \"2\": {\n \"title\": \"Dupliceren\",\n \"info\": \"Maak een kopie van de volledige cursus inclusief lessen en widgets. Je kan alles aanpassen.\",\n \"toast\": \"Duplicaat van de volledige cursus is als draft opgeslagen en kan worden aangepast\"\n },\n \"3\": {\n \"title\": \"Link\",\n \"info\": \"Link naar een cursus uit een ander pakket. Er kan niks aangepast worden\",\n \"toast\": \"In het huidige pakket is een link naar een cursus uit een ander pakket toegevoegd\"\n }\n },\n */\n\n const defaultActionMenu = [\n {\n id: 3,\n name: t('copyDialog.selAction.3.title'),\n value: 3,\n class: 'duplicate',\n color: { background: '#93c4dc', color: 'white' },\n icon: ,\n title: t('copyDialog.selAction.3.title'),\n info: t('copyDialog.selAction.3.info')\n },\n {\n id: 1,\n name: t('copyDialog.selAction.1.title'),\n value: 1,\n class: 'link',\n color: { background: 'green', color: 'white' },\n icon: ,\n title: t('copyDialog.selAction.1.title', 'Linken'),\n info: t('copyDialog.selAction.1.info', 'Vanuit proefpakket een cursus linken')\n },\n {\n id: 2,\n name: t('copyDialog.selAction.2.title'),\n value: 2,\n class: 'duplicate',\n color: { background: 'red', color: 'white' },\n icon: ,\n title: t('copyDialog.selAction.2.title', 'Dupliceren'),\n info: t('copyDialog.selAction.2.info', 'Er wordt een complete kopie gemaakt van de cursus en kan alles aanpassen')\n }\n ];\n const marketingActionMenu = [\n {\n id: 3,\n name: t('copyDialog.selAction.3.title'),\n value: 3,\n class: 'duplicate',\n color: { background: '#93c4dc', color: 'white' },\n icon: ,\n title: t('copyDialog.selAction.3.title'),\n info: t('copyDialog.selAction.3.info')\n }\n ];\n\n const actionMenu = isMarketing ? marketingActionMenu : defaultActionMenu;\n\n const isActive = (action) => (copyValues.action === action ? 'isActive' : '');\n\n const sxLiActive = {\n '&.isActive': {\n background: theme.palette.primary.light,\n ' p': { color: 'white!important' }\n }\n };\n\n return (\n \n \n \n );\n};\n\nAdvancedCourseActions.propTypes = {\n handleCopyActions: PropTypes.func,\n copyValues: PropTypes.object,\n defaultValues: PropTypes.object\n};\n\nexport default observer(AdvancedCourseActions);\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport { Box } from '@mui/material';\n\n/* SCSS */\nimport '../../scss/MenuList.scss';\n\n/*\nThe component's primary purpose is to provide users with the ability to select a category for a course, based on the given context and data fetched asynchronously.\nIt is often used in scenarios where categorization of courses is required.\n*/\nconst AdvancedCourseCategories = ({ handleCopyActions, copyValues }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const { courseEdit } = store;\n const { courseUuid, categoryUuid } = copyValues;\n const [catOptions, setOptions] = useState([]);\n\n // declare the async data fetching function\n const fetchData = useCallback(async () => {\n const categories = await courseEdit.advGetCategoriesByContainerNid();\n const catOptionsObj = categories.data.map((cat) => ({ label: cat.attributes.name, id: cat.id }));\n setOptions(catOptionsObj);\n }, [courseEdit]);\n\n useEffect(() => {\n fetchData().catch(console.error);\n }, [fetchData]);\n\n const setValue = (categoryValue) => {\n handleCopyActions({\n ...copyValues,\n categoryUuid: categoryValue?.id || ''\n });\n };\n\n // TRANSLATIONS\n const txtNoSelectedCourse = t('copyDialog.selCategory.noCategory');\n const txtNoCategoryMandatory = t('copyDialog.selCategory.noCategoryMandatory');\n\n if (copyValues.actionId === 3) return

{txtNoCategoryMandatory}

;\n if (!courseUuid && !categoryUuid) return

{txtNoSelectedCourse}

;\n\n return (\n \n
\n -b.label.localeCompare(a.label))}\n onChange={(event, newValue) => {\n setValue(newValue);\n }}\n getOptionLabel={(option) => option.label || ''}\n isOptionEqualToValue={(option, value) => option.id === value.id}\n disablePortal\n id=\"combo-box-demo\"\n sx={{ width: 300 }}\n renderInput={(params) => }\n />\n
\n
\n );\n};\n\nAdvancedCourseCategories.propTypes = {\n handleCopyActions: PropTypes.func,\n copyValues: PropTypes.object\n};\n\nexport default observer(AdvancedCourseCategories);\n","import { createContext } from 'react';\n\nexport const CopyCourseContext = createContext();\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useState, useEffect, useContext, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI components */\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport { Divider, Box, Grid, Avatar, Stack, Backdrop, CircularProgress } from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport LinearProgress from '@mui/material/LinearProgress';\n// ICONS\nimport UndoIcon from '@mui/icons-material/Undo';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Slide from '@mui/material/Slide';\n/* CUSTOM components */\n// eslint-disable-next-line import/no-cycle\nimport AdvancedCourseMenuList from './AdvancedCourseMenuList';\nimport AdvancedCourseTables from './AdvancedCourseTables';\nimport AdvancedCourseActions from './AdvancedCourseActions';\nimport AdvancedCourseCategories from './AdvancedCourseCategories';\nimport { CopyCourseContext } from './context';\nimport { defaultCopyValues } from './advancedCourse.helper';\n\nconst Transition = forwardRef((props, ref) => );\n\n/*\nThe primary purpose of this component is to provide an interface for advanced course actions, offering users the ability to select actions, packages, courses, and categories. \nUsers can then perform the selected actions and receive feedback through success or error messages.\n*/\nconst AdvancedCourseScreen = ({ open, toggleAdvancedScreen, summary }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const [isDisabled, setDisabled] = useState(true);\n const [isSaving, setSaving] = useState(false);\n const defaultCopyAction = defaultCopyValues(store);\n const [copyAction, setCopyAction] = useState(defaultCopyAction);\n //\n const { actionId, course_nid: courseId, categoryUuid } = copyAction;\n const { course_container_profession: profIdCourseContainer } = summary;\n /** */\n //\n const toast = {\n success1: { title: t('saveResponse.success.title'), content: t('copyDialog.selAction.1.toast'), type: 'success' },\n success2: { title: t('saveResponse.success.title'), content: t('saveResponse.success.message'), type: 'success' },\n success3: { title: t('saveResponse.success.title'), content: t('saveResponse.success.message'), type: 'success' },\n copyError: { title: t('saveResponse.error.title'), content: t('saveResponse.error.message'), type: 'error' },\n duplError: { title: t('saveResponse.error.title'), content: t('saveResponse.error.message'), type: 'error' },\n defaultError: { title: t('saveResponse.error.title'), content: t('saveResponse.error.message'), type: 'error' },\n default: { timeOut: 6000, variant: 'filled' }\n };\n //\n // EVENTS\n const handleCopyActions = (actionType) => {\n setCopyAction({ ...defaultCopyAction, ...actionType });\n };\n\n const handleSubmitAction = async () => {\n /** */\n setSaving(true);\n\n // RE USE COURSE\n if (copyAction.actionId === 1) {\n try {\n await store.courseEdit.copyExternalCourseInContainer(copyAction.courseUuid, copyAction.categoryUuid);\n store.courseEdit.setToasts({ ...toast.success1, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.defaultError, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n }\n }\n // DUPLICATE COURSE\n if (copyAction.actionId === 2) {\n try {\n await store.courseEdit.duplicateExternalCourseInContainer(copyAction.courseUuid, copyAction.categoryUuid);\n /** await store.courseEdit.advGetCategoryforCurrentCourseContainer(copyAction.containerNid); */\n store.courseEdit.setToasts({ ...toast.success2, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.defaultError, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n }\n }\n // Link course\n if (copyAction.actionId === 3) {\n try {\n await store.courseEdit.linkExternalCourseInContainer(copyAction.courseUuid);\n store.courseEdit.setToasts({ ...toast.success3, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.defaultError, ...toast.default });\n setSaving(false);\n toggleAdvancedScreen();\n }\n }\n };\n\n useEffect(() => {\n if (actionId && courseId && (categoryUuid || actionId === 3)) {\n setDisabled(false);\n } else {\n setDisabled(true);\n }\n }, [actionId, categoryUuid, copyAction, courseId]);\n\n // TRANSLATIONS\n const dialogTitle = `${t('copyDialog.subtitle')}`;\n const selActionTitle = t('copyDialog.selAction.title');\n const selPackageTitle = t('copyDialog.selPackage.title');\n const selCourseTitle = t('copyDialog.selCourse.title');\n const noCourse = t('copyDialog.selCourse.noCourse');\n\n return (\n \n \n \n \n \n \n \n \n {dialogTitle}\n \n \n \n \n theme.zIndex.drawer + 1 }} open={isSaving}>\n \n \n \n \n \n \n 1\n {selActionTitle}\n \n \n \n \n \n\n \n \n \n \n 2\n {selPackageTitle}\n \n \n \n \n \n \n\n \n \n \n 3\n {selCourseTitle}\n \n \n \n {!copyAction.fromContainerNid && {noCourse}}\n {copyAction.fromContainerNid && (\n \n )}\n \n \n \n \n \n \n 4\n {t('copyDialog.selCategory.title')}\n \n \n \n \n \n {/* */}\n {isSaving && }\n \n \n \n \n {`${t('copyDialog.saveInfo.what')}: `}\n {`${copyAction.action} `}\n {`${t('copyDialog.saveInfo.from')} `}\n {`${copyAction.package}`} \n {`${t('copyDialog.saveInfo.course')} `}\n {`${copyAction.course}`} \n {`${t('copyDialog.saveInfo.to')} `}\n {`${t('copyDialog.saveInfo.currentPackage')}`}\n \n \n \n \n \n \n \n \n \n );\n};\n\nAdvancedCourseScreen.propTypes = {\n open: PropTypes.bool,\n toggleAdvancedScreen: PropTypes.func,\n summary: PropTypes.object\n};\n\n// TODO: remove this sx styling\nconst sxMenuContainer = { position: 'absolute', top: '17px', left: '10px', right: '0px', bottom: '0px', overflow: 'auto' };\nconst sxBoxTitle = { display: 'flex', alignSelf: 'center' };\nconst noCourses = { display: 'flex', alignSelf: 'center', justifyContent: 'center', width: '100%' };\nconst sxGridItem = { display: 'flex', flex: 1, flexDirection: 'column', padding: '16px' };\nconst sxAppBar = { position: 'relative', background: 'primary' };\nconst sxDialogtitle = { ml: 2, flex: 1 };\nconst sxMainContent = { display: 'flex', flex: '1', flexDirection: 'column' };\nconst sxGridContainer = { margin: '0px', width: '100%', flex: '1' };\nconst sxAvatar1 = { background: '#57707d', color: 'white' };\nconst sxAvatar2 = { background: '#9eb1bb', color: 'white' };\nconst sxAvatar3 = { background: '#7d97a5', color: 'white' };\n\nexport default observer(AdvancedCourseScreen);\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useState, useContext, forwardRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\n\nimport { Box, LinearProgress, Slide } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport FormControl from '@mui/material/FormControl';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport IconButton from '@mui/material/IconButton';\nimport SaveIcon from '@mui/icons-material/Save';\nimport LoadingButton from '@mui/lab/LoadingButton';\n\nconst Transition = forwardRef((props, ref) => );\n\n/*\nThis component is responsible for allowing users to choose the action they want to perform on a course and then confirming and executing that action. \nIt provides a user-friendly interface for reusing or duplicating courses within the application.\n*/\nconst CopyCourseDialog = ({ open, toggleCopyDialog }) => {\n const store = useContext(Store);\n const { courseEdit } = store;\n const { t } = useTranslation('adminCourses');\n //\n const [value, setValue] = useState(1);\n const [formats, setFormats] = useState([1]);\n const [saving, setSaving] = useState(false);\n //\n if (!open) return <>;\n // toast messages\n const toast = {\n copySuccess: { title: t('saveResponse.success.title'), content: t('saveResponse.success.message'), type: 'success' },\n duplSuccess: { title: t('saveResponse.success.title'), content: t('saveResponse.success.message'), type: 'success' },\n copyError: { title: t('saveResponse.error.title'), content: t('saveResponse.error.message'), type: 'error' },\n duplError: { title: t('saveResponse.error.title'), content: t('saveResponse.error.message'), type: 'error' },\n default: { timeOut: 6000, variant: 'filled' }\n };\n\n const handleFormat = (event, newFormats) => setFormats(newFormats);\n\n const handleChange = (event, newValue) => {\n const val = +newValue;\n if (val === 1) setFormats([1]);\n if (val === 2) setFormats([1, 2, 3]);\n setValue(val);\n };\n\n const handleCloseDialog = () => toggleCopyDialog({});\n\n const handleSubmitAction = async () => {\n setSaving(true);\n if (value === 1) {\n try {\n await store.courseEdit.reuseCourseInContainer(courseEdit.setCopyCourse.course_uuid);\n store.courseEdit.setToasts({ ...toast.copySuccess, ...toast.default });\n setSaving(false);\n setFormats([1]);\n toggleCopyDialog();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.copyError, ...toast.default });\n setSaving(false);\n }\n }\n if (value === 2) {\n try {\n await store.courseEdit.duplicateCourseInContainer(courseEdit.setCopyCourse.course_uuid);\n store.courseEdit.setToasts({ ...toast.duplSuccess, ...toast.default });\n setSaving(false);\n setFormats([1]);\n toggleCopyDialog();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.duplError, ...toast.default });\n setSaving(false);\n }\n }\n };\n\n return (\n \n \n {courseEdit.setCopyCourse.course_title || ''}\n \n \n \n \n \n {t('copyCourseDialog.actionTitle')}\n \n \n \n }\n label={`${t('copyCourseDialog.radioReuse.action')}: ${t('copyCourseDialog.radioReuse.info')}`}\n />\n }\n label={`${t('copyCourseDialog.radioDuplicate.action')}: ${t('copyCourseDialog.radioDuplicate.info')}`}\n />\n \n \n \n \n \n \n {t('copyCourseDialog.course')}\n \n \n {t('copyCourseDialog.lessonContainer')}\n \n \n {t('copyCourseDialog.lesson')}\n \n \n {t('copyCourseDialog.lessonContent')}\n \n \n {t('copyCourseDialog.questionWidgets')}\n \n \n \n \n \n {saving && }\n \n } loading={saving} loadingPosition=\"end\" variant=\"contained\">\n {t('save')}\n \n \n \n );\n};\n\nCopyCourseDialog.propTypes = {\n open: PropTypes.bool,\n toggleCopyDialog: PropTypes.func\n};\nexport default observer(CopyCourseDialog);\n\nconst sxDialog = {\n iconBtn: { position: 'absolute', right: 8, top: 8, color: (theme) => theme.palette.grey[500] },\n toggleBtnGroup: { display: 'flex', '.MuiToggleButton-root': { flexBasis: '100%' } },\n toggleBtnGroup2: { display: 'flex', '.MuiToggleButton-root': { flexBasis: '100%' } },\n dialogActions: { justifyContent: 'space-between', position: 'relative' },\n dialogActionsBox: { width: '100%', height: '4px', position: 'absolute', top: '0px', left: '0px' }\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box, FormControlLabel, Switch } from '@mui/material';\nimport { useTheme } from '@emotion/react';\n\n// TABLE FILTERS COMPONENT\n// - renders the table filters to be displayed in the table toolbar\nconst TableFilterItems = ({ options, clickHandler }) => {\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n\n // SX: custom ___________________________________\n const sxFilters = {\n background: '#ffffffa8',\n padding: '7px 10px!important',\n border: `2px solid ${theme.palette.primary.light}`,\n borderRadius: '20px'\n };\n\n return (\n \n clickHandler('filtering')} size=\"small\" />}\n label={t('dashboard.filtering')}\n />\n clickHandler('grouping')} size=\"small\" />}\n label={t('dashboard.grouping')}\n />\n clickHandler('padding')} size=\"small\" />}\n label={t('dashboard.dense')}\n />\n \n );\n};\n\nTableFilterItems.propTypes = {\n options: PropTypes.object,\n clickHandler: PropTypes.func\n};\nexport default observer(TableFilterItems);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { MenuItem, Select } from '@mui/material';\n\n// TABLE FILTERS COMPONENT\nconst TableSelectFilter = ({ columnDef, onFilterChanged, items }) => {\n const [selectedVal, setSelectedVal] = useState(columnDef.defaultFilter);\n\n function handleChange(e) {\n const val = e.target.value;\n setSelectedVal(val);\n onFilterChanged(columnDef.tableData.id, val);\n }\n return (\n \n {items.length > 0\n ? items.map((item) => (\n \n {item.label}\n \n ))\n : []}\n \n );\n};\n\nTableSelectFilter.propTypes = {\n columnDef: PropTypes.object,\n onFilterChanged: PropTypes.func,\n items: PropTypes.array\n};\nexport default observer(TableSelectFilter);\n","import PropTypes from 'prop-types';\nimport { Box } from '@mui/material';\nimport { Shortcut } from '@mui/icons-material';\nimport { useTheme } from '@emotion/react';\nimport { openNewEditWindow } from '../../helpers/utils';\n\nconst OpenNewEditWindow = ({ rowData }) => {\n const theme = useTheme();\n // SX: custom ___________________________________\n const sxCourseNid = {\n '&:hover': { cursor: 'pointer', color: theme.palette.primary.main },\n '&:hover .course_shortcut': { display: 'block', position: 'absolute', top: 0, right: '-10px' },\n '.course_shortcut': { display: 'none' }\n };\n\n return (\n openNewEditWindow(rowData)} sx={sxCourseNid}>\n {rowData.course_nid}\n \n \n \n \n );\n};\n\nOpenNewEditWindow.propTypes = {\n rowData: PropTypes.object\n};\nexport default OpenNewEditWindow;\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useState, useEffect, useContext, useMemo, useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n/* MATERIAL TABLE */\nimport MaterialTable, { MTableToolbar, MTableGroupbar } from '@material-table/core';\n/* MUI */\nimport { Box } from '@mui/material';\n/* ICONS */\n\nimport { AutoFixHigh, ContentCopy } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\n/* CUSTOM COMP */\nimport LoaderWithBackdrop from '../loading/LoaderWithBackdrop';\nimport AdvancedCourseScreen from '../advancedCourseActions/AdvancedCourseScreen';\nimport CopyCourseDialog from '../advancedCourseDialog/CopyCourseDialog';\nimport TableFilterItems from './TableFilterItems';\nimport TableSelectFilter from './TableSelectFilter';\nimport OpenNewEditWindow from './OpenNewEditWindow';\n//\nimport { addRenderFunctionsToColumns } from '../../helpers/utils';\n\nconst EwapiTable = ({ loading, title, summary, initialTableData, initialTableColumns }) => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const theme = useTheme();\n const { routeName } = store.routerState;\n\n const tableRef = useRef(null);\n\n // STATE\n const [showBackDrop, setShowBackDrop] = useState(false);\n const [openAdvancedScreen, setOpenAdvancedScreen] = useState(false);\n const [openCopyDialog, setOpenCopyDialog] = useState(false);\n // table columns\n const [tableColumns, setTableColumns] = useState(initialTableColumns);\n\n const stripedTable = false;\n\n // On change of tableColumns, save to localStorage\n useEffect(() => {\n localStorage.setItem(routeName, JSON.stringify(tableColumns));\n }, [tableColumns, routeName]);\n\n // default options\n const defaultOptions = {\n actionsColumnIndex: 0,\n columnsButton: true,\n debounceInterval: 500,\n emptyRowsWhenPaging: false,\n filtering: false,\n grouping: false,\n padding: 'dense',\n pageSize: 25,\n pageSizeOptions: [5, 10, 25, 50, 100, 200],\n paginationType: 'stepped',\n numberOfPagesAround: 1,\n searchFieldStyle: { border: `2px solid ${theme.palette.primary.light}` },\n searchFieldVariant: 'outlined',\n selection: false,\n showGroupingCount: true,\n doubleHorizontalScroll: true\n };\n\n // TABLE OPTIONS: some options are updatable by switch buttons\n const [options, setOptions] = useState(defaultOptions);\n\n // ON CLICK EXTERNAL ACTIONS ICON: TOGGLE OPEN/CLOSE DIALOG FOR EXTERNAL COURSE ACTIONS\n const togggleAdvancedScreen = useCallback(() => setOpenAdvancedScreen(!openAdvancedScreen), [openAdvancedScreen]);\n\n // ON CLICK ROW ACTION ICON: TOGGLE DIALOG FOR INTERNAL COURSE ACTIONS\n const togggleCopyDialog = useCallback(\n (value) => {\n setOpenCopyDialog(!openCopyDialog);\n store.courseEdit.setStoreValue('setCopyCourse', value || {});\n },\n [openCopyDialog, store.courseEdit]\n );\n\n // ON CLICK ROW: goto edit course\n const handleEditCourse = (event, course) => {\n if (event.target.attributes.class.value.includes('course_nid')) {\n event.stopPropagation();\n return;\n }\n const { course_uuid: courseUuid, course_container: linked } = course;\n const isLinked = linked.length > 0;\n setShowBackDrop(true);\n const { package: _package, containerNid, packageNid } = store.routerStore.routerState.params;\n let routerParams = {\n params: { package: _package.toString(), packageNid, containerNid, courseuuid: courseUuid }\n };\n if (isLinked) routerParams = { ...routerParams, queryParams: { type: 'linked' } };\n store.routerStore.goTo('editCourse', routerParams);\n };\n\n // ON CLICK SWITCHES: update table options\n const clickHandler = (optionKey) => {\n const currentValue = options[optionKey];\n\n if (optionKey === 'padding') {\n const newValue = currentValue === 'dense' ? 'normal' : 'dense';\n setOptions((prev) => ({ ...prev, [optionKey]: newValue }));\n return;\n }\n\n // when we disable filtering, clear values in all filter cells...\n if (tableRef.current && optionKey === 'filtering' && currentValue) {\n tableRef.current.dataManager.columns.forEach((item) => {\n tableRef.current.onFilterChange(item.tableData.id, '');\n });\n }\n\n setOptions({ ...options, [optionKey]: !currentValue });\n };\n\n // TABLE ACTIONS __________________________________________________________\n const actions = useMemo(\n () => [\n {\n icon: () => ,\n tooltip: t('dashboard.extraCourseActions'),\n onClick: (event, rowData) => togggleCopyDialog(rowData),\n title: 't'\n },\n {\n icon: () => ,\n tooltip: 'Delete localStorage',\n isFreeAction: true,\n onClick: () => localStorage.removeItem(routeName)\n },\n {\n icon: () => ,\n tooltip: t('dashboard.extraCourseActions'),\n isFreeAction: true,\n onClick: togggleAdvancedScreen\n }\n ],\n [routeName, t, togggleAdvancedScreen, togggleCopyDialog]\n );\n\n // ADD RENDER FUNCTIONS TO COLUMNS _____________________________________________\n const selectStatus = [\n { label: 'select', value: '' },\n { label: 'published', value: '1' },\n { label: 'draft', value: '0' }\n ];\n\n const selectExpected = [\n { label: 'select', value: '' },\n { label: t('yes'), value: '1' },\n { label: t('no'), value: '0' }\n ];\n\n const renderMap = [\n {\n field: 'id',\n render: (rowData) => \n },\n {\n field: 'course_expected',\n defaultFilter: '',\n filterComponent: (props) => \n },\n {\n field: 'course_status',\n defaultFilter: '1',\n filterComponent: (props) => \n }\n ];\n // add render functions to columns\n const renderedTableColumns = addRenderFunctionsToColumns(tableColumns, renderMap, 'field');\n\n // ADD CUSTOM ROW STYLE TO MATERIAL TABLE____________________________________________\n const rowStyle = (rowData, index) => {\n const startDate = rowData.course_validFrom ? new Date(rowData.course_validFrom) : new Date();\n const upcomingStartDate = startDate > new Date() ? { color: '#10a799fc', fontWeight: '400' } : {};\n const stripedBody = stripedTable ? { background: index % 2 ? 'rgba(0,0,0,0.04)' : 'rgba(0,0,0,0.0)' } : {};\n return { ...upcomingStartDate, ...stripedBody };\n };\n\n // ADD CUSTOM HEADER STYLE TO MATERIAL TABLE____________________________________________\n const tabelHeaderStyle = {\n headerStyle: {\n textTransform: 'capitalize',\n color: 'rgb(58 69 74)',\n paddingLeft: '6px',\n height: '60px',\n '&:hover': { backgroundColor: 'silver' }\n }\n };\n\n const courseCount = initialTableData.length;\n\n return (\n \n \n \n handleEditCourse(event, rowData)}\n isLoading={loading}\n title={`${title} ${t('dashboard.courses')}: ${courseCount} `}\n data={initialTableData}\n columns={renderedTableColumns}\n options={{ ...options, ...tabelHeaderStyle, rowStyle: (rowData, index) => rowStyle(rowData, index) }}\n localization={{\n toolbar: { searchPlaceholder: t('dashboard.search') },\n header: {\n actions: \n },\n grouping: {\n placeholder: t('dashboard.groubByDescription')\n }\n }}\n actions={actions}\n components={{\n Container: (props) => ,\n Toolbar: (props) => (\n \n \n \n \n \n \n ),\n Groupbar: (props) => (\n \n \n \n )\n }}\n onColumnDragged={(sourceIndex, destinationIndex) => {\n const newColumns = [...renderedTableColumns];\n const [removed] = newColumns.splice(sourceIndex, 1);\n newColumns.splice(destinationIndex, 0, removed);\n setTableColumns(newColumns);\n }}\n onChangeColumnHidden={(columnChange) => {\n const newColumns = renderedTableColumns.map((col) => {\n if (col.field === columnChange.field) {\n return { ...col, hidden: columnChange.hidden };\n }\n return col;\n });\n setTableColumns(newColumns);\n }}\n />\n \n \n \n \n );\n};\n\nEwapiTable.propTypes = {\n loading: PropTypes.any,\n title: PropTypes.string,\n summary: PropTypes.object,\n initialTableData: PropTypes.array,\n initialTableColumns: PropTypes.array\n};\n\nexport default observer(EwapiTable);\n\n// CUSTOM SX ___________________________________________________________\nconst sxFilters = {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '15px 0px',\n marginBottom: '-10px',\n label: { flexDirection: 'row' }\n};\n\nconst sxAdminEwpaiTables = (theme) => ({\n paddingTop: '10px',\n flexGrow: 1,\n display: 'flex',\n '& .ewapi-table-container': { width: '100%', [`table thead tr th:last-of-type`]: { paddingRight: '15px' } },\n h6: { textTransform: 'capitalize' },\n table: { background: 'white' },\n 'table tbody': { background: '#bdbdbd17' },\n 'table tbody tr td': { position: 'relative' },\n '.table_cat:before': {\n opacity: 0,\n transition: 'opacity 1s ease-in-out'\n },\n '.table_cat:hover:before': {\n content: 'attr(data-tooltip)',\n display: 'block',\n position: 'absolute',\n marginTop: '25px',\n background: '#7f7777',\n color: 'white',\n padding: '5px',\n borderRadius: '5px',\n maxWidth: '200px',\n whiteSpace: 'pre-line',\n fontSize: '13px',\n opacity: 1,\n transition: 'opacity 1s ease-in-out',\n zIndex: 1\n },\n 'tbody tr#m--table--filter--row ': { background: `${theme.palette.primary.light}!important` },\n '.mtoolbar__groupbar .MuiToolbar-root > div': {\n boxSizing: 'border-box',\n borderRadius: '20px',\n // padding: '0px!important',\n background: 'white!important',\n border: '3px solid silver!important'\n },\n '.table__container > div:not(.mtoolbar__container, .mtoolbar__groupbar)': {\n border: '1px solid black',\n borderRadius: '10px',\n marginTop: '10px',\n ' table thead tr th:hover': { backgroundColor: '#607d8b26' }\n },\n 'span.label_title': {\n '&.label_upcoming': { background: theme.palette.primary.main },\n '&.label_draft': { background: theme.palette.warning.main },\n padding: '0px 5px',\n fontSize: '12px',\n color: '#ffffff',\n borderRadius: '10px',\n top: '5px',\n right: '4px',\n marginLeft: '6px',\n position: 'absolute'\n }\n});\n","import { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n/* Custom components */\nimport { Box } from '@mui/material';\n// eslint-disable-next-line prettier/prettier\nimport { renderMap, addRenderFunctionsToColumns, mapData2TableData, DataColumns } from '../helpers/utils';\n\nimport useEwapi from '../hooks/useEwapi';\nimport EwapiTable from '../components/tables/EwapiTables';\nimport LoadingContent from '../components/loading/LoadingContent';\n//\nimport '../scss/AdminTables.scss';\n/*\nIn summary, the OnlineCourses component fetches online course data from an API, \ndisplays a loading indicator while the data is being fetched, and renders a table (likely displaying course information) when the data is available. \nThis component is part of an admin interface for managing courses and appears to be part of a larger web application.\n*/\nconst OnlineCourses = () => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const ewapiCourseList = `editor-course-list/${store.params.containerNid}/1/json`;\n const { response, loading, error } = useEwapi(ewapiCourseList, 'courses');\n //\n const title = 'online';\n\n if (error) return

Something went wrong: {error.message}

;\n if (loading) return ;\n // map response to table data\n const tableData = mapData2TableData(response.data.courses);\n // get columns from local storage\n const isLocalStorageColumns = localStorage.getItem(store.routerState.routeName);\n // get initial columns\n const initialColumns = isLocalStorageColumns ? JSON.parse(isLocalStorageColumns) : DataColumns(tableData, t);\n // const storedColumns = initialColumns.map(({ tableData, ...rest }) => rest);\n\n const tableColumns = isLocalStorageColumns ? addRenderFunctionsToColumns(initialColumns, renderMap, 'field') : initialColumns;\n\n return (\n \n \n {error &&

Something went wrong...

}\n {!error && response && (\n \n )}\n
\n
\n );\n};\n\nexport default observer(OnlineCourses);\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport OnlineCourses from './OnlineCourses';\n\nconst OnlineCoursesViewMap = {\n adminOnlineCourses: (\n \n \n \n )\n};\n\nexport default OnlineCoursesViewMap;\n// adminOnlineCourses: (\n// \n// \n// \n// ),\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\n// eslint-disable-next-line prettier/prettier\n/* HELPERS */\nimport { renderMap, addRenderFunctionsToColumns, mapData2TableData, DataColumns } from '../helpers/utils';\nimport useEwapi from '../hooks/useEwapi';\nimport EwapiTable from '../components/tables/EwapiTables';\nimport LoadingContent from '../components/loading/LoadingContent';\n\nimport '../scss/AdminTables.scss';\n\n/*\nIn summary, the OfflineCourses component fetches a list of offline courses using the useEwapi hook, \ndisplays a loading indicator during data retrieval, handles errors, and renders the list of offline courses in a tabular format using the EwapiTable component. \nThe component is designed to work within a larger application context and provides a way to view offline courses.\n*/\nconst OfflineCourses = () => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n const ewapiCourseList = `editor-course-list/${store.params.containerNid}/2/json`;\n const { response, loading, error } = useEwapi(ewapiCourseList, 'courses');\n\n const title = 'offline';\n\n if (loading) return ;\n // map response to table data\n const tableData = mapData2TableData(response.data.courses);\n // get columns from local storage\n const isLocalStorageColumns = localStorage.getItem(store.routerState.routeName);\n // get initial columns\n const initialColumns = isLocalStorageColumns ? JSON.parse(isLocalStorageColumns) : DataColumns(tableData, t);\n // const storedColumns = initialColumns.map(({ tableData, ...rest }) => rest);\n\n const tableColumns = isLocalStorageColumns ? addRenderFunctionsToColumns(initialColumns, renderMap, 'field') : initialColumns;\n\n return (\n \n \n {error &&

Something went wrong...

}\n {response && (\n \n )}\n
\n
\n );\n};\n\nexport default observer(OfflineCourses);\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport OfflineCourses from './OfflineCourses';\n\nconst OfflineCoursesViewMap = {\n adminOfflineCourses: (\n \n \n \n )\n};\n\nexport default OfflineCoursesViewMap;\n","import { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef } from 'react';\nimport { Autocomplete, TextField, Chip } from '@mui/material';\n\nconst MyMultiSelect = forwardRef(({ items, name, control, label, ...otherProps }, fRef) => {\n const isSearching = false;\n\n return (\n (\n onChange(data)}\n options={items.sort((a, b) => -b.name.localeCompare(a.name))}\n isOptionEqualToValue={(option, value) => option.id === value.id}\n getOptionLabel={(option) => option.name}\n filterSelectedOptions\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n \n ))\n }\n renderInput={(params) => (\n \n {isSearching ? 'hoi' : null}\n {params.InputProps.endAdornment}\n \n )\n }}\n />\n )}\n />\n )}\n />\n );\n});\n\nMyMultiSelect.propTypes = {\n items: PropTypes.array,\n name: PropTypes.string,\n control: PropTypes.object,\n label: PropTypes.string,\n otherProps: PropTypes.object\n};\n\nexport default MyMultiSelect;\n","import { TextField } from '@mui/material';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef } from 'react';\n\n/*\nIn summary, the MyTextField component is a flexible text input component that can operate in both controlled and uncontrolled modes. \nIt allows users to enter text values and can handle numeric input when necessary. \nThis component is commonly used in forms and can be easily integrated with libraries like react-hook-form for controlled form handling.\n*/\n// eslint-disable-next-line react/prop-types\nconst MyTextField = forwardRef(({ name, control, onChange: onChangeProp, type = 'text', ...otherProps }, ref) => {\n const configTextfield = {\n size: 'small',\n fullWidth: true,\n variant: 'outlined',\n type,\n ...otherProps\n };\n\n return control ? (\n (\n {\n const val = e.target.value.match(/^\\d*\\.?\\d*$/);\n if (!val) return;\n field.onChange(val[0]);\n }}\n {...configTextfield}\n />\n )}\n />\n ) : (\n \n );\n});\n\nMyTextField.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n onChange: PropTypes.func,\n type: PropTypes.string\n};\n\nexport default MyTextField;\n","import { useStore } from 'hooks';\nimport { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport InputLabel from '@mui/material/InputLabel';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nconst UploadButton = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n const [loading, setLoading] = useState(true);\n const [uploading, setUploading] = useState(false);\n const [pdfTitle, setPdfTitle] = useState('');\n\n const url = `ewapi/editor-get-answers-pdf/json?courseUuid=${store.courseEdit.currentCourse.id}`;\n\n const toast = {\n success: { title: 'Success', content: 'Upload succesvol', type: 'success' },\n error: { title: 'Error', content: 'Er is iets mis gegaan', type: 'error' },\n default: { timeOut: 4000, variant: 'filled' }\n };\n\n useEffect(() => {\n (async () => {\n const { data } = await window.authedClient.post(url);\n if (data?.data?.result?.filename) {\n setPdfTitle(data?.data?.result?.filename);\n }\n setLoading(false);\n })();\n }, [url]);\n\n const handleDeletePdf = async () => {\n setUploading(true);\n try {\n const deleteUrl = `ewapi/editor-update-answers-pdf/json?courseUuid=${store.params.courseuuid}`;\n const response = await window.authedClient.post(deleteUrl);\n if (!response?.data?.data?.result?.filename) {\n setPdfTitle('');\n }\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n }\n setUploading(false);\n };\n\n const handleFileUpload = async (event) => {\n setUploading(true);\n const file = event.target.files[0];\n try {\n const upload = await window.authedClient.post('jsonapi/media/free_upload/field_media_file', file, {\n headers: {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/octet-stream',\n 'Content-Disposition': `file; filename=\"${file.name}\"`,\n 'Cache-Control': 'no-cache'\n }\n });\n\n const uploadUrl = `ewapi/editor-update-answers-pdf/json?courseUuid=${store.params.courseuuid}&fileUuid=${upload.data.data.id}`;\n const response = await window.authedClient.post(uploadUrl);\n if (response?.data?.data?.result?.filename) {\n setPdfTitle(response?.data?.data?.result?.filename);\n }\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n }\n setUploading(false);\n };\n\n if (loading) return
Loading...
;\n\n return (\n \n {uploading && uploading pdf ...}\n {!uploading && (\n \n {(pdfTitle && (\n \n {pdfTitle}\n {\n handleDeletePdf();\n }}\n >\n \n \n \n )) ||\n 'Geen pdf aanwezig'}\n \n )}\n\n \n \n \n \n \n );\n};\n\nexport default UploadButton;\n","/* eslint-disable consistent-return */\n/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useWatch } from 'react-hook-form';\nimport { useEffect } from 'react';\nimport { useStore } from 'hooks';\n\n// MUI\nimport { Grid, Divider, Box, Chip, Typography } from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport CheckIcon from '@mui/icons-material/Check';\n/* Custom RHF components */\nimport { MyCheckbox, MySelect, MyTextField } from 'components/form/RHF';\nimport MyDatePicker from 'components/form/RHF/DatePicker/MyDatepicker';\nimport MyAutocompleteTaxonomy from 'pages/adminCourses/components/RHF/MyAutocompleteTaxonomy';\nimport MyMultiSelect from 'pages/adminCourses/components/RHF/MyMultiSelect';\nimport MyNumberfield from 'pages/adminCourses/components/RHF/MyNumberfield';\nimport MyAutocomplete from 'components/form/RHF/Autocomplete/MyAutocomplete';\nimport UploadButton from 'pages/adminCourses/components/editCourse/UploadButton';\n\n/*\nIn summary, the CourseEditForm component is used to create an admin-friendly form for editing course details, \nincluding online/offline status, course status, points, validity period, accreditation code, categories, competences, and keywords. \nIt uses a controlled form approach and displays localized labels for various form elements.\n*/\nconst CourseEditForm = ({ control, isDisabled, ...restProps }) => {\n const { t } = useTranslation('editCourseForm');\n const store = useStore();\n const { errors, setError, clearErrors } = restProps;\n\n const status = [\n { name: t('editCourseForm.status.new'), value: 'New' },\n { name: t('editCourseForm.status.default'), value: 'Default' },\n { name: t('editCourseForm.status.update'), value: 'Update' },\n { name: 'Update (manual)', value: 'Update (manual)' },\n { name: 'None', value: 'None' }\n ];\n const fieldExtraPointsDesc = ['accountancy'];\n\n const sxNoPM = { margin: '0px', padding: '0px 10px' };\n //\n const watchStartDate = !!useWatch({ control, name: 'course.attributes.field_valid_period.value' });\n const watchEndDate = !!useWatch({ control, name: 'course.attributes.field_valid_period.end_value' });\n const watchStatus = useWatch({ control, name: 'course.attributes.status' });\n const watchOnline = useWatch({ control, name: 'course.attributes.online' }) === '1';\n const isPublished = watchStatus && watchOnline;\n const areDatesSet = watchStartDate && watchEndDate;\n const is1daySet = (watchStartDate && !watchEndDate) || (!watchStartDate && watchEndDate);\n\n useEffect(() => {\n const setRequired = { types: { required: 'This is required' } };\n if (isPublished && !areDatesSet) {\n setError('course.attributes.field_valid_period.end_value', setRequired);\n setError('course.attributes.field_valid_period.value', setRequired);\n } else if (isPublished && areDatesSet) {\n clearErrors(['course.attributes.field_valid_period.end_value', 'course.attributes.field_valid_period.value']);\n }\n if (!isPublished && is1daySet) {\n if (watchStartDate && !watchEndDate) setError('course.attributes.field_valid_period.end_value', setRequired);\n if (!watchStartDate && watchEndDate) setError('course.attributes.field_valid_period.value', setRequired);\n }\n if (!isPublished && !is1daySet) {\n clearErrors(['course.attributes.field_valid_period.end_value', 'course.attributes.field_valid_period.value']);\n }\n }, [watchStartDate, watchEndDate, setError, errors, clearErrors, watchStatus, watchOnline, isPublished, areDatesSet, is1daySet]);\n\n return (\n \n \n \n \n \n \n \n \n }\n sx={{ width: '100%', height: '30px', color: 'white' }}\n label={t('editCourseForm.online')}\n color=\"success\"\n />\n ),\n value: '1'\n },\n {\n name: (\n } sx={{ width: '100%', height: '30px' }} label={t('editCourseForm.offline')} color=\"error\" />\n ),\n value: '0'\n }\n ]}\n />\n \n \n \n \n \n \n \n \n {t('editCourseForm.expectedInfo')}\n \n \n \n \n \n {t('editCourseForm.dryRunInfo')}\n \n \n \n \n \n \n Special access\n \n {t('sidebar.points')}\n \n \n \n \n \n {store.courseEdit?.accreditation?.attributes?.extra_points_unit && (\n \n )}\n \n \n {fieldExtraPointsDesc.includes(store?.params?.package) ? (\n \n ) : (\n ''\n )}\n \n \n {t('sidebar.dateValid')}\n \n\n \n \n \n \n \n \n \n {t('sidebar.accreditation')}\n \n \n \n \n \n \n\n {t('sidebar.catComp')}\n \n \n \n \n \n \n {t('sidebar.searchTags')}\n \n \n \n {store.canAddAnswerPdfToCourse && (\n <>\n {t('sidebar.uploadPdf')}\n \n \n \n \n )}\n \n // \n );\n};\n\nCourseEditForm.propTypes = {\n control: PropTypes.any,\n errors: PropTypes.any,\n isDisabled: PropTypes.func,\n setError: PropTypes.func,\n clearErrors: PropTypes.func\n};\n\nexport default observer(CourseEditForm);\n","export const convertBlobString2File = (blobString) => {\n //\n const d = blobString;\n const l = d.length;\n const array = new Uint8Array(l);\n for (let i = 0; i < l; i++) {\n array[i] = d.charCodeAt(i);\n }\n const b = new Blob([array], { type: 'image/jpeg' });\n //\n const image = new Image();\n image.src = URL.createObjectURL(b);\n return image.src;\n};\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { Controller, useWatch } from 'react-hook-form';\nimport { forwardRef, useState, useEffect } from 'react';\nimport { convertBlobString2File } from 'helpers/image.helper';\n/* MUI */\nimport { Box, Button } from '@mui/material';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\n\n/**\n * ImageUploader component\n *\n * Works => need refactoring\n */\nconst ImageUploader = forwardRef(\n (\n {\n name,\n resetField,\n control,\n index,\n onChange: onChangeProp,\n src,\n avatar,\n buttonName,\n editMode,\n reset,\n maxWidth = 0,\n maxHeight = 0,\n setValue,\n ...otherProps\n },\n ref\n ) => {\n const store = useStore();\n const { courseEdit } = store;\n const [files, setFiles] = useState([src]);\n //\n const watchImg = useWatch({ control, name });\n //\n const isSetImgWH = maxWidth > 0 && maxHeight > 0;\n //\n\n const onPaste = (event) => {\n const clipboardData = event.clipboardData || window.clipboardData;\n const { items } = clipboardData;\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.indexOf('image') !== -1) {\n const imageFile = items[i].getAsFile();\n processImage(imageFile);\n }\n }\n };\n\n const processImage = (imageFile) => {\n const fileDetails = {\n filename: imageFile.name,\n size: imageFile.size\n };\n //\n const reader1 = new FileReader();\n reader1.readAsBinaryString(imageFile);\n reader1.onloadend = () => {\n const data = reader1.result;\n fileDetails.data = data;\n setValue(name, fileDetails, { shouldDirty: true });\n };\n };\n //\n\n const setImageSize = {\n headerPhoto: { type: 'Cursusinleiding banner', maxWidth: 900, maxHeight: 300, class: 'headerPhoto' },\n coursePhoto: { type: 'Image intern', maxWidth: 480, maxHeight: 270, class: 'coursePhoto' },\n imageExtern: { type: 'image extern', maxWidth: 360, maxHeight: 270, class: 'imageExtern' },\n getSize: (image) => {\n if (image.includes('field_course_header_photo')) return setImageSize.headerPhoto;\n if (image.includes('field_coursephoto')) return setImageSize.coursePhoto;\n if (image.includes('field_course_image_extern')) return setImageSize.imageExtern;\n return { maxWidth: 0, maxHeight: 0 };\n }\n };\n\n const toastMsg = () => {\n let mediaLibraryImage = false;\n mediaLibraryImage = name.includes('field_course_header_photo') ? 'Cursusinleiding' : mediaLibraryImage;\n mediaLibraryImage = name.includes('field_coursephoto') ? 'Image intern' : mediaLibraryImage;\n mediaLibraryImage = name.includes('field_course_image_extern') ? 'Image extern' : mediaLibraryImage;\n const toast = {\n title: `${mediaLibraryImage} afbeelding incorrect`,\n content: `Download uit de media bibliotheek de afbeelding: ${mediaLibraryImage}`,\n type: 'warning',\n timeOut: 6000,\n variant: 'filled'\n };\n courseEdit.setToasts(toast);\n };\n\n useEffect(() => {\n if (!watchImg?.filename) {\n setFiles([src]);\n }\n }, [watchImg?.filename, src]);\n\n return (\n (\n \n \n\n \n {watchImg?.data && (\n \n )}\n {!watchImg?.data && src && (\n \n )}\n\n {\n if (ref2) {\n ref2.addEventListener('paste', onPaste);\n }\n }}\n sx={{\n display: 'flex',\n textAlign: 'center',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '20px',\n background: `${watchImg.data ? 'transparent' : '#c0c0c057'}`,\n width: `${watchImg.data ? '100%' : `${setImageSize.getSize(name).maxWidth}px`}`,\n height: `${watchImg.data ? '100%' : `${setImageSize.getSize(name).maxHeight}px`}`,\n position: 'absolute',\n top: '0px',\n left: '0x',\n 'h2, span': { color: '#fff', textShadow: '0px 0px 3px #000', fontWeight: '900' },\n span: { fontSize: '20px' }\n }}\n >\n

{`${setImageSize.getSize(name).type} : ${maxWidth} x ${maxHeight}`}

\n Upload or paste image here\n
\n\n {/* {imageDataURL && \"Pasted\"} */}\n
\n
\n )}\n />\n );\n }\n);\n\nImageUploader.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n reset: PropTypes.any,\n resetField: PropTypes.any,\n setValue: PropTypes.func,\n onChange: PropTypes.func,\n src: PropTypes.string,\n editMode: PropTypes.bool,\n avatar: PropTypes.bool,\n buttonName: PropTypes.string,\n index: PropTypes.number,\n maxWidth: PropTypes.number,\n maxHeight: PropTypes.number\n};\n\nexport default observer(ImageUploader);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useWatch } from 'react-hook-form';\n// MUI\nimport { Button, Grid, Divider, Box } from '@mui/material';\n// CUSTOM COMPONENTS\nimport ImageUploader from 'pages/adminCourses/components/RHF/ImageUploader';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport { useEffect, useState } from 'react';\n\n/*\n Overall, this component is responsible for allowing the user to edit or upload images associated with a course,\n specifically for the course header, course photo, and external image. \n The ImageUploader component is used to manage the image selection and uploading process.\n*/\nconst ImageEditForm = ({ control, isDisabled, ...restProps }) => {\n const { t } = useTranslation('editCourseForm');\n const { values: initialValues, resetField, setValue, setError, clearErrors } = restProps;\n const [isImgExtRequired, setIsImgExtRequired] = useState(false);\n const [isImgIntRequired, setIsImgIntRequired] = useState(false);\n\n const watchImgInt = useWatch({ control, name: 'lessonContainer.relationships.field_coursephoto' });\n const watchImgExt = useWatch({ control, name: 'lessonContainer.relationships.field_course_image_extern' });\n const watchStatus = useWatch({ control, name: 'course.attributes.status' });\n const watchOnline = useWatch({ control, name: 'course.attributes.online' }) === '1';\n const isPublished = watchStatus && watchOnline;\n\n // image extern\n useEffect(() => {\n const setRequired = { types: { required: 'This is required' } };\n if (isPublished && !watchImgExt?.filename && !watchImgExt) {\n setError('lessonContainer.relationships.field_course_image_extern', setRequired);\n setIsImgExtRequired(true);\n } else {\n clearErrors('lessonContainer.relationships.field_course_image_extern');\n setIsImgExtRequired(false);\n }\n }, [clearErrors, isPublished, setError, watchImgExt]);\n\n // image intern = coursephoto\n useEffect(() => {\n const setRequired = { types: { required: 'This is required' } };\n if (isPublished && !watchImgInt?.filename && !watchImgInt) {\n setError('lessonContainer.relationships.field_coursephoto', setRequired);\n setIsImgIntRequired(true);\n } else {\n clearErrors('lessonContainer.relationships.field_coursephoto');\n setIsImgIntRequired(false);\n }\n }, [clearErrors, isPublished, setError, watchImgInt]);\n\n const imgSize = {\n headerPhoto: { maxWidth: 1920, maxHeight: 640 },\n coursePhoto: { maxWidth: 480, maxHeight: 270 },\n imageExtern: { maxWidth: 720, maxHeight: 540 }\n };\n\n return (\n \n \n \n }\n >\n Open medialibrary\n \n \n \n \n {t('imageEditForm.courseHeader')}: {`${imgSize.headerPhoto.maxWidth} x ${imgSize.headerPhoto.maxHeight}`}\n \n\n \n \n \n \n \n \n \n \n {t('imageEditForm.coursePhoto')} : {`${imgSize.coursePhoto.maxWidth} x ${imgSize.coursePhoto.maxHeight}`}\n \n \n \n \n \n \n \n {t('imageEditForm.imageExtern')}: {`${imgSize.imageExtern.maxWidth} x ${imgSize.imageExtern.maxHeight}`}\n \n \n \n \n \n \n \n );\n};\nImageEditForm.propTypes = {\n control: PropTypes.any,\n resetField: PropTypes.any,\n setValue: PropTypes.func,\n getValues: PropTypes.func,\n isDisabled: PropTypes.func\n};\nexport default observer(ImageEditForm);\n\nconst sxTabImages = {\n '& .mediaButtonGrid': { display: 'flex', justifyContent: 'flex-end', padding: '0', margin: '0' },\n '& .headerPhoto img': { width: '100%', height: 'auto', maxHeight: '300px', maxWidth: '1920px' },\n '& .coursePhoto img': { width: '100%', height: 'auto', maxHeight: '270px', maxWidth: '480px' },\n '& .imageExtern img': { width: '100%', height: 'auto', maxHeight: '540px', maxWidth: '360px' },\n '& .headerPhoto div': { maxHeight: '300px', maxWidth: '100%' },\n '& .coursePhoto div': { maxHeight: '270px', maxWidth: '100%' },\n '& .imageExtern div': { maxHeight: '540px', maxWidth: '100%' }\n};\n","import { observer } from 'mobx-react';\nimport { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactPlayer from 'react-player/vimeo';\nimport { useWatch } from 'react-hook-form';\n/* Helpers */\nimport { matchNumbersInString } from 'helpers/Helpers';\n/* MUI */\nimport { Alert, Box, Grid } from '@mui/material';\n/* RHF */\nimport { MyTextField } from 'components/form/RHF';\n/* HOOKS */\nimport useDebounce from '../../../hooks/useDebounce';\n\nconst VideoPlayer = ({ control, name, label, helperText, getValue, ...otherProps }) => {\n const watchVimeo = useWatch({ control, name: 'lessonContainer.attributes.field_preview_video' });\n const stringHasNumbers = matchNumbersInString(watchVimeo);\n //\n const [vimeoUrl, setUrl] = useState('');\n const [isErrorPlayer, setErrorPlayer] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [urlVideo, setUrlVideo] = useState(getValue(name));\n //\n const debouncedSearchTerm = useDebounce(searchTerm, 500);\n\n useEffect(() => {\n if (debouncedSearchTerm) {\n setUrlVideo(debouncedSearchTerm);\n }\n }, [debouncedSearchTerm]);\n\n useEffect(() => {\n setUrl(stringHasNumbers ? `https://vimeo.com/${stringHasNumbers[0]}` : false);\n }, [stringHasNumbers]);\n\n return (\n <>\n \n \n setSearchTerm(e.target.value)}\n helperText={helperText}\n label={label}\n name={name}\n control={control}\n />\n \n \n {urlVideo && (\n \n setErrorPlayer(error.message)}\n onReady={() => setErrorPlayer(false)}\n />\n \n )}\n \n \n \n {isErrorPlayer && {`Error from the react player component: ${isErrorPlayer}`}}\n \n \n );\n};\n\nVideoPlayer.propTypes = {\n control: PropTypes.any,\n name: PropTypes.string,\n label: PropTypes.string,\n getValue: PropTypes.func,\n helperText: PropTypes.string,\n otherProps: PropTypes.object\n};\n\nexport default observer(VideoPlayer);\n","import { Controller } from 'react-hook-form';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useCallback, useState, useEffect, forwardRef, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport useDebounce from '../../../hooks/useDebounce';\n\nconst MyAutocompleteTaxonomy = forwardRef(({ name, control, label, node, multiSelect = true, includeNid = false, ...otherProps }, fRef) => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n\n const [objOptions, setOptions] = useState([]);\n const [searchTerm, setSearchTerm] = useState('');\n const [isSearching, setIsSearching] = useState(false);\n const debouncedSearchTerm = useDebounce(searchTerm, 500);\n\n const errorSearchTxt = 'type 3 characters or more';\n const errorNoData = 'Geen data gevonden';\n\n const toast = {\n search: { title: 'search', content: 'minimal 3 characters are needed for the search', type: 'info' },\n empty: { title: t('serverEmptyResponse.title'), content: t('serverEmptyResponse.message'), type: 'info' },\n fail: { title: t('serverTimeOut.title'), content: t('serverTimeOut.message'), type: 'error' },\n default: { timeOut: 4000, variant: 'outlined' }\n };\n const searchMsg = useMemo(\n () => ({\n title: toast.search.title,\n content: toast.search.content,\n type: 'info',\n timeOut: 3000,\n variant: 'outlined'\n }),\n [toast.search.content, toast.search.title]\n );\n\n const fetchData = useCallback(\n async (search) => {\n try {\n const newQuery = `filter[name][condition][path]=title&filter[name][condition][value]=${search}&filter[name][condition][operator]=CONTAINS`;\n const { data: result } = await store.lmsApi.fetchIt(node, newQuery);\n const items = result.data;\n if (!items.length) {\n store.courseEdit.setToasts({\n title: t('serverEmptyResponse.title', 'Geen data gevonden'),\n content: t('serverEmptyResponse.message', 'Er zijn geen resultaten gevonden'),\n type: 'info',\n timeOut: 4000,\n variant: 'outlined'\n });\n }\n const newOptionsData = items.map((item) => ({\n title: item.attributes.title,\n id: item.id,\n type: node,\n ...(includeNid ? { nid: item.attributes.drupal_internal__nid } : {})\n }));\n setOptions(newOptionsData);\n setIsSearching(false);\n } catch (error) {\n setIsSearching(false);\n store.courseEdit.setToasts({\n title: t('serverTimeOut.title', 'Geen data gevonden'),\n content: t('serverTimeOut.message', 'Er zijn geen resultaten gevonden'),\n type: 'info',\n timeOut: 6000,\n variant: 'filled'\n });\n }\n },\n [store.lmsApi, store.courseEdit, node, t, includeNid]\n );\n\n useEffect(() => {\n if (debouncedSearchTerm.length > 0 && debouncedSearchTerm.length < 3) return setOptions([]);\n if (debouncedSearchTerm) {\n setIsSearching(true);\n setOptions([]);\n fetchData(debouncedSearchTerm);\n }\n return () => setOptions([]);\n }, [debouncedSearchTerm, fetchData, searchMsg, store.courseEdit]);\n\n return (\n (\n -b.title.localeCompare(a.title))}\n onChange={(_, data) => onChange(data)}\n // eslint-disable-next-line no-shadow\n isOptionEqualToValue={(option, value) => option.id === value.id}\n getOptionLabel={(option) => (option?.title ? `${option.title}${includeNid ? ` (${option.nid})` : ''}` : '')}\n getOptionKey={(option) => option?.id || ''}\n defaultValue={[]}\n loading={isSearching && objOptions.length === 0}\n loadingText={t('retrieveData', 'Retrieving data')}\n autoComplete\n filterSelectedOptions\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n \n ))\n }\n renderInput={(params) => (\n 0 && debouncedSearchTerm.length < 3) ||\n (debouncedSearchTerm.length > 2 && !objOptions.length) ||\n false\n }\n {...params}\n {...field}\n label={label}\n onChange={(e) => setSearchTerm(e.target.value)}\n inputRef={ref}\n helperText={\n // eslint-disable-next-line no-nested-ternary\n debouncedSearchTerm.length > 0 && debouncedSearchTerm.length < 3\n ? errorSearchTxt\n : debouncedSearchTerm.length > 2 && !objOptions.length\n ? errorNoData\n : error?.message\n }\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {isSearching ? : null}\n {params.InputProps.endAdornment}\n \n )\n }}\n />\n )}\n />\n )}\n />\n );\n});\n\nMyAutocompleteTaxonomy.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n label: PropTypes.string,\n node: PropTypes.string,\n otherProps: PropTypes.object,\n multiSelect: PropTypes.bool,\n includeNid: PropTypes.bool\n};\n\nexport default observer(MyAutocompleteTaxonomy);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useState, useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\n// MUI\nimport { Grid, Box, Divider, Typography, FormControlLabel, Switch, Collapse, FormControl } from '@mui/material';\nimport { rawHTML, isValidPodcast } from 'helpers/Helpers';\n/* Custom RHF components */\nimport { MyTextField, Editor } from 'components/form/RHF';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport VideoPlayer from 'pages/adminCourses/components/VideoPlayer';\nimport AutocompleteTags2 from 'pages/adminCourses/components/AutocompleteTags2';\n\n/*\nOverall, this component serves as an extensive form for editing various attributes and details of a lesson container within a course,\nincluding title, extra label, information, goals, authors, reviewers, podcasts, video, and sharing information.\nThe control prop is used to manage form controls, and translations are provided for various labels and messages.\n*/\nconst LessonContainerEditForm = ({ control, isDisabled, ...restProps }) => {\n const { t } = useTranslation('editCourseForm');\n const { errors, setError, clearErrors, setValue, getValues } = restProps;\n //\n const [showPodcast, setShowPodcast] = useState(!!getValues('lessonContainer.attributes.field_podcast_html'));\n const watchPodcast = useWatch({ control, name: 'lessonContainer.attributes.field_podcast_html' });\n //\n const handleShowPodcast = () => {\n setShowPodcast(!showPodcast);\n };\n\n const sxQuillEditor = {\n ' .ql-toolbar.ql-snow': { borderRadius: '4px 4px 0 0' },\n ' .ql-container.ql-snow': { borderRadius: '0 0 4px 4px' }\n };\n\n useEffect(() => {\n const setRequired = { types: { required: 'This is required' } };\n if (watchPodcast && !isValidPodcast(watchPodcast)) {\n setError('lessonContainer.attributes.field_podcast_html', setRequired);\n }\n if (!watchPodcast || (watchPodcast && isValidPodcast(watchPodcast))) {\n clearErrors('lessonContainer.attributes.field_podcast_html');\n }\n }, [setError, errors, watchPodcast, clearErrors]);\n\n return (\n \n \n {/* start grid */}\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 label={t('lessonEditForm.showPodcast')}\n labelPlacement=\"start\"\n />\n \n \n \n \n {watchPodcast && !isValidPodcast(watchPodcast) && (\n Geen geldige html voor een podcast\n )}\n {watchPodcast && isValidPodcast(watchPodcast) && (\n \n

{t('lessonEditForm.podcastPreview', 'Podcast preview')}

\n {rawHTML(watchPodcast)}\n
\n )}\n
\n
\n
\n
\n {/* \n\n */}\n \n \n \n \n \n \n \n \n \n \n {t('lessonEditForm.dependentCourses')}\n \n \n {/* end grid */}\n
\n
\n );\n};\n\nLessonContainerEditForm.propTypes = {\n control: PropTypes.object,\n setValue: PropTypes.func,\n getValues: PropTypes.func,\n isDisabled: PropTypes.func,\n setError: PropTypes.func,\n clearErrors: PropTypes.func\n};\n\nexport default observer(LessonContainerEditForm);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Box } from '@mui/material';\n/* Custom RHF components */\nimport { Editor } from 'components/form/RHF';\nimport { useEffect } from 'react';\n\n/*\nOverall, this component serves as an extensive form for editing various attributes and details of a lesson container within a course, \nincluding title, extra label, information, goals, authors, reviewers, podcasts, video, and sharing information. \nThe control prop is used to manage form controls, and translations are provided for various labels and messages.\n*/\nconst LessonContainerSharingEditForm = ({ dirty, control, isDisabled, ...restProps }) => {\n const { t } = useTranslation('editCourseForm');\n const { errors, setValue, getFieldState, resetField } = restProps;\n\n useEffect(() => {\n if (!getFieldState('lessonContainer.attributes.field_sharing_info').isDirty) {\n resetField('lessonContainer.attributes.field_sharing_info');\n }\n }, [getFieldState, resetField]);\n //\n return (\n \n \n \n \n \n \n \n );\n};\n\nLessonContainerSharingEditForm.propTypes = {\n control: PropTypes.object,\n isDisabled: PropTypes.func,\n dirty: PropTypes.bool\n};\n\nexport default observer(LessonContainerSharingEditForm);\n","import { useEffect, useRef } from 'react';\n\nconst useIsComponentMounted = () => {\n const isComponentMounted = useRef(false);\n\n useEffect(() => {\n isComponentMounted.current = true;\n return () => {\n isComponentMounted.current = false;\n };\n }, []);\n\n return isComponentMounted;\n};\n\nexport default useIsComponentMounted;\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { IconButton, Button } from '@mui/material';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport PlayCircleIcon from '@mui/icons-material/PlayCircle';\nimport useIsComponentMounted from '../../hooks/useIsComponentMounted';\n\nconst MenuShowInPlayer = ({ url, disabled }) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n //\n const isComponentMounted = useIsComponentMounted();\n //\n const handleClick = (event) => {\n if (isComponentMounted.current) setAnchorEl(event.currentTarget);\n };\n //\n const handleClose = () => {\n if (isComponentMounted.current) setAnchorEl(null);\n };\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nMenuShowInPlayer.propTypes = {\n disabled: PropTypes.bool,\n url: PropTypes.string\n};\n\nexport default observer(MenuShowInPlayer);\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext, useState, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Box, IconButton, Button, Tooltip } from '@mui/material';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\n/* Dialog */\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Slide from '@mui/material/Slide';\n\n/* ICONS */\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport BlockIcon from '@mui/icons-material/Block';\nimport MenuShowInPlayer from 'pages/adminCourses/components/lesson/MenuShowInPlayer';\n/* HELPERS */\nimport LoaderWithBackdrop from '../../components/loading/LoaderWithBackdrop';\nimport { getTotalWidgets, isOdtFile } from '../EditCourse.helper';\n\nconst Transition = forwardRef((props, ref) => );\n\n/*\n In summary, this component primarily focuses on rendering a list of lessons associated with a course. \n It provides options to add new lessons, displays various details about each lesson, and allows users to play or edit individual lessons. \n Additionally, it checks for the presence of ODT files and displays appropriate icons for each lesson.\n*/\n\nconst LessonsEditForm = ({ isDisabled }) => {\n const { t } = useTranslation('editCourseForm');\n const store = useContext(Store);\n // states\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [deleteLesson, setDeleteLesson] = useState({});\n // objectdestructuring\n const { courseEdit } = store;\n const { included } = courseEdit.currentCourse;\n const { lessonWidgets } = courseEdit;\n\n // workaround to always have a prefBaseProduct when opening a course\n localStorage.setItem('latestPrefBaseProduct', store?.login?.prefBaseProduct || '');\n\n const lessons = courseEdit.currentLessonContainer.relationships.lessons.data.map((item) => item.id);\n const courseId = courseEdit.currentCourse.attributes.drupal_internal__nid.toString();\n const url = `/redactie/${store.params.packageNid}/${courseEdit.currentCourse.id}/course/${courseId}`;\n\n const isOnline = courseEdit.currentCourse.attributes.online;\n const isExpected = courseEdit.currentCourse.attributes.expected;\n const hasMoreThanOneLesson = lessons.length > 1;\n\n // disable delete lesson button\n // disable if the course is online and has only one lesson\n const disableLessonDelete = isOnline || (!isOnline && !hasMoreThanOneLesson);\n\n // delete lesson toast\n const toast = {\n success: {\n title: t('deleteLesson.toast.success.title'),\n content: t('deleteLesson.toast.success.message'),\n type: 'success'\n },\n error: {\n title: t('deleteLesson.toast.error.title'),\n content: t('deleteLesson.toast.error.message'),\n type: 'error'\n },\n default: { timeOut: 4000, variant: 'filled' }\n };\n\n // workaround to update the table when a widget is added or removed\n const { currentLessonWidgets } = store.courseEdit;\n const tableUpdate = currentLessonWidgets !== 'test' ? `updated: ${currentLessonWidgets}` : '';\n\n // Open delete dialog ___________________________________________________\n const handleClickOpen = (courseDetails) => {\n setDeleteLesson(courseDetails);\n setOpen(true);\n };\n // Close delete dialog ___________________________________________________\n const handleClose = () => {\n setDeleteLesson({});\n setOpen(false);\n };\n // EVENT: Delete Lesson ___________________________________________________\n const handleDeleteLesson = async () => {\n setOpen(false);\n setLoading(true);\n try {\n await courseEdit.deleteLessonFromLessonContainer(deleteLesson);\n courseEdit.setToasts({ ...toast.success, ...toast.default });\n } catch (error) {\n courseEdit.setToasts({ ...toast.error, ...toast.default });\n } finally {\n setLoading(false);\n }\n };\n\n // EVENT: GotoPLay ________________________________________________________\n const handleGotoPlay = (lesson, pageNr) => {\n const lessonId = lesson.attributes.drupal_internal__nid.toString();\n //\n store.routerStore.goTo('adminCourseLessonPlay', {\n params: {\n productName: 'redactie',\n product: store.params.packageNid,\n packageId: courseEdit.currentCourse.id,\n courseId,\n lessonId,\n pageNo: pageNr.toString()\n }\n });\n };\n\n // TRANSLATION labels ____________________________________________________\n const labels = {\n play: t('lesEditForm.play'),\n widgets: t('lesEditForm.widgets'),\n title: t('lesEditForm.title'),\n lessonType: t('lesEditForm.lessonType'),\n freeFlow: t('lesEditForm.freeFlow'),\n rotatingAnswers: t('lesEditForm.rotatingAnswers'),\n firstAnswerNofeedback: t('lesEditForm.firstAnswerNoFeedback'),\n firstAnswerVisualfeedback: t('lesEditForm.firstAnswerVisualFeedback'),\n minimumScore: t('lesEditForm.minimScore'),\n minimumScore2ndTry: t('lesEditForm.minimumScore2ndTry'),\n OdtUploaded: t('lesEditForm.odtUploaded'),\n maxAttempts: t('lesEditForm.maxAttempts')\n };\n\n return (\n \n \n \n {tableUpdate}\n \n courseEdit.setDialogLesson()}\n sx={sxNewCourseBtn}\n startIcon={}\n variant=\"outlined\"\n color=\"primary\"\n >\n {t('lesEditForm.btnNew')}\n \n \n \n \n \n \n \n \n {labels.title}\n {labels.lessonType}\n {labels.freeFlow}\n {labels.maxAttempts}\n {labels.minimumScore}\n {labels.minimumScore2ndTry}\n {labels.OdtUploaded}\n {labels.widgets}\n {labels.play}\n Edit\n \n \n \n {lessons.length === 0 && (\n \n \n {t('lesEditForm.noLessons')}\n \n \n )}\n {lessons.length > 0 &&\n lessons.map((row) => (\n \n \n \n \n handleClickOpen(row)}\n aria-label=\"delete\"\n size=\"small\"\n color=\"error\"\n disabled={disableLessonDelete || !!isOdtFile(row, included)}\n >\n \n \n \n \n \n \n {row.attributes.title}\n \n {row.attributes.lesson_type}\n {row.attributes.free_flow}\n {row.attributes.max_attempts}\n {row.attributes.minimum_score}\n {row.attributes.minimum_score_2nd_try}\n \n {isOdtFile(row, included) ? : }\n \n {getTotalWidgets(row, included, lessonWidgets)}\n \n \n \n \n courseEdit.setDialogLesson(row.id)}\n color=\"warning\"\n aria-label=\"Edit Lesson\"\n >\n \n \n \n \n ))}\n \n
\n
\n {/* --- delete lesson dialog --- */}\n \n {t('deleteLesson.title')}\n \n \n {t('deleteLesson.message')}\n {deleteLesson?.attributes?.title || 'Subscribe'}\n \n \n \n \n \n \n \n {/* dialog */}\n
\n );\n};\n\nLessonsEditForm.propTypes = {\n isDisabled: PropTypes.func\n};\n\nexport default observer(LessonsEditForm);\n\n// CUSTOM sx _________________________________________________________________\nconst sxNewCourseBtn = {\n marginTop: '10px',\n alignSelf: 'end',\n border: '7px solid #eef2fa',\n borderRadius: '20px',\n '&:hover': { border: '7px solid #eef2fa' }\n};\nconst sxTable = { marginTop: '20px', '.MuiTableCell-head': { background: '#607d8b40', border: '3px solid white', padding: '16px' } };\n","import { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MaterialTable from '@material-table/core';\nimport { Grid, Box, Paper, Autocomplete } from '@mui/material';\nimport dayjs from 'dayjs';\nimport { downloadExcel } from 'react-export-table-to-excel';\nimport PropTypes from 'prop-types';\nimport TextField from '@mui/material/TextField';\n\nasync function getData(query, courseId) {\n const searchParams = new URLSearchParams();\n const filters = query.filters.filter((filter) => ['is_trial', 'can_finish']\n .filter(Boolean).includes(filter.column.field))\n .reduce((acc, item) => ({ ...acc, [item.column.field]: item.value }), {});\n const sorting = query.orderByCollection.find((item) => item.sortOrder === 1);\n\n searchParams.set('amount', query.pageSize);\n searchParams.set('page', (query.page + 1));\n\n searchParams.set('sort_by', sorting?.orderByField);\n searchParams.set('sort_direction', sorting?.orderDirection);\n\n Object.entries(filters).forEach(([key, value]) => searchParams.set(key, value));\n\n const { data } = await window.authedClient.get(`/ewapi/course-result/course/${courseId}/active/json?${searchParams.toString()}`);\n\n return {\n data: data?.data || [],\n page: query.page,\n totalCount: data.meta.totalRecords\n };\n}\n\nconst LessonTabStudents = () => {\n const [usersCount, setUsersCount] = useState(0);\n const { t } = useTranslation('editCourseForm');\n const store = useContext(Store);\n const courseId = store.courseEdit.currentCourse.attributes.drupal_internal__nid;\n\n const [columnFilters, setColumnFilters] = useState({});\n\n const exportFileName = `course-active-students-${courseId}-${dayjs().format('YYYYMMDDhhmmss')}`;\n\n const filterSelectOptions = {\n 'false': t('tabStudents.no'),\n 'true': t('tabStudents.yes')\n };\n\n const readableBoolean = (boolean = false) => boolean ? t('tabStudents.yes') : t('tabStudents.no')\n const readableDate = (timestamp = '') => timestamp ? dayjs(timestamp * 1000).format('DD-MM-YYYY') : ''\n\n const tableSingleFilter = (props) => (\n \n );\n\n const tableOptions = {\n maxColumnSort: 1,\n pageSize: 20,\n pageSizeOptions: [5, 10, 20, 100],\n emptyRowsWhenPaging: false,\n search: false,\n showTitle: false,\n header: true,\n dense: true,\n thirdSortClick: false,\n rowStyle: { fontSize: '14px', '&:hover': { background: 'silver' } },\n defaultOrderByCollection: [{\n orderBy: 4,\n orderByField: 'start_date',\n orderDirection: 'desc',\n sortOrder: 1\n }],\n draggable: false,\n filtering: true,\n exportMenu: [\n {\n label: t('tabStudents.export.asExcel'),\n exportFunc: (cols, data) => {\n downloadExcel({\n fileName: exportFileName,\n sheet: exportFileName,\n tablePayload: {\n header: cols.map((col) => col.title),\n body: data\n }\n });\n }\n }\n ],\n };\n\n const tableColumns = [\n {\n title: t('tabStudents.firstName'),\n field: 'user_first_name',\n sorting: false,\n filtering: false\n },\n {\n title: t('tabStudents.lastName'),\n field: 'user_last_name',\n sorting: false,\n filtering: false\n },\n {\n title: t('tabStudents.email'),\n field: 'user_email',\n sorting: false,\n filtering: false\n },\n {\n title: t('tabStudents.productTitle'),\n field: 'subscription_product_title',\n sorting: false,\n filtering: false\n },\n {\n title: t('tabStudents.courseStarted'),\n field: 'start_date',\n render: (rowData) => (readableDate(rowData?.start_date)),\n customExport: (rowData) => (readableDate(rowData?.start_date)),\n sorting: true,\n filtering: false,\n },\n {\n title: t('tabStudents.canFinishCourse'),\n field: 'can_finish',\n render: (rowData) => (readableBoolean(rowData?.can_finish)),\n customExport: (rowData) => (readableBoolean(rowData?.can_finish)),\n sorting: false,\n lookup: filterSelectOptions,\n filterComponent: tableSingleFilter,\n defaultFilter: columnFilters?.can_finish\n },\n {\n title: t('tabStudents.trialStudent'),\n field: 'is_trial',\n render: (rowData) => (readableBoolean(rowData?.is_trial)),\n customExport: (rowData) => (readableBoolean(rowData?.is_trial)),\n sorting: false,\n lookup: filterSelectOptions,\n filterComponent: tableSingleFilter,\n defaultFilter: columnFilters?.is_trial\n }\n ];\n\n return (\n \n \n \n Studenten bezig met deze cursus: {usersCount}\n \n \n \n new Promise((resolve, reject) => {\n getData(query, courseId)\n .then((result) => {\n setUsersCount(result.totalCount);\n resolve(result);\n })\n .catch((error) => {\n reject(error);\n });\n })\n }\n options={tableOptions}\n columns={tableColumns}\n components={{\n Container: (props) => \n }}\n localization={{ body: { emptyDataSourceMessage: 'No students found' } }}\n onFilterChange={(newFilters) => {\n setColumnFilters(\n Object.fromEntries(\n newFilters.map((filter) => [\n filter.column.field,\n filter?.value || ''\n ])\n )\n );\n }}\n />\n \n \n \n );\n};\n\nexport default observer(LessonTabStudents);\n\nconst sxTableCourseUsersInprogress = {\n margin: '0px',\n 'tbody td': { padding: '8px' },\n 'tbody tr.MuiTableRow-root:hover': { background: '#c0c0c04d' }\n};\n\nconst SingleValueFilter = ({columnDef, onFilterChanged}) => {\n const handleChange = (event, value) => {\n onFilterChanged(columnDef.tableData.id, value);\n }\n\n return (\n `${columnDef.lookup[option] || ''}`}\n defaultValue={columnDef.defaultFilter}\n onChange={handleChange}\n isOptionEqualToValue={(compareOption, compareValue) => compareOption === compareValue}\n renderInput={(params) => (\n \n )}\n style={{ width: 120 }}\n />\n );\n};\n\nSingleValueFilter.propTypes = {\n columnDef: PropTypes.object.isRequired,\n onFilterChanged: PropTypes.func.isRequired\n};\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\n\nconst TableTotal = () => {\n const { t } = useTranslation('editCourseForm');\n const store = useStore();\n const title = `${t('tabFeedback.total')} ${t('tabFeedback.evaluations')}: ${store.courseEdit.tableTotal}`;\n return (\n \n {title}\n \n );\n};\n\nexport default observer(TableTotal);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\n\nconst FeedbackTableDetail = ({ rowData }) => {\n const { rowData: details } = rowData;\n const { t: r } = useTranslation('editCourseForm');\n const { t: e } = useTranslation('evaluation');\n\n const propsDetail = {\n header: { component: 'h3', mb: 0, mt: 1 },\n feedback: { component: 'p', mb: 0 }\n };\n\n const detailPanelItems = [\n { title: e('form.evaluation_question_1b'), field: 'evaluation_question_1b', preTitle: r('tabFeedback.quality') },\n { title: e('form.evaluation_question_2b'), field: 'evaluation_question_2b', preTitle: r('tabFeedback.applicable') },\n { title: e('form.evaluation_remarks_2'), field: 'evaluation_remarks_2' },\n { title: e('form.evaluation_remarks_1'), field: 'evaluation_remarks_1' }\n ];\n return (\n \n {detailPanelItems.map((item) => {\n const { title, field } = item;\n const question = item?.preTitle ? `${item.preTitle}: ${title}` : title;\n return (\n \n {question}\n {details[field]}\n \n );\n })}\n \n );\n};\n\nFeedbackTableDetail.propTypes = {\n rowData: PropTypes.object.isRequired\n};\n\nexport default observer(FeedbackTableDetail);\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport dayjs from 'dayjs';\nimport MaterialTable from '@material-table/core';\nimport { Grid, Box, Paper } from '@mui/material';\n// hook\nimport { buildQuerySearch, BuildQueryFilters } from 'pages/adminCourses/helpers/jsonApiRemoteFilter.helper';\nimport { feedbackTableOptions } from '../EditCourse.helper';\nimport TableTotal from './TableTotal';\nimport FeedbackTableDetail from './FeedbackTableDetail';\n\n/**\n * Tab Feedback courses\n * shows evaluation data as datatable\n */\n\nconst mapFields = {\n mail: 'uid.mail',\n name: 'uid.name',\n created: 'created',\n evaluation_question_1: 'evaluation_question_1',\n evaluation_question_2: 'evaluation_question_2',\n evaluation_question_3: 'evaluation_question_3',\n evaluation_question_4: 'evaluation_question_4',\n evaluation_question_1b: 'evaluation_question_1b'\n};\n// email, name,\nconst orderByCollection = [{ orderBy: 1, orderDirection: 'asc', sortOrder: 1 }];\n\nconst CourseTabFeedback = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n\n const courseId = store.courseEdit.currentCourse.attributes.drupal_internal__nid;\n const defaultFilter = `filter[course.meta.drupal_internal__target_id][value]=${courseId}`;\n\n // Fetching remote table data\n const getData = async (query) => {\n const { page, filters, search, pageSize } = query;\n // create query params\n const querySearch = buildQuerySearch(search);\n const queryFilters = BuildQueryFilters(filters, store.login.uuid);\n const paging = `&page[limit]=${pageSize}&page[offset]=${page * pageSize}`;\n const includes = '&include=uid';\n //\n const orderBy = query.orderByCollection.find((item) => item.sortOrder === 1);\n const sort = `&sort=${orderBy.orderDirection === 'asc' ? '-' : ''}${mapFields[orderBy.orderByField]}`;\n const filterStart = search ? `&${querySearch}&${queryFilters}` : `&${queryFilters}`;\n //\n const queryParams = defaultFilter + filterStart + sort + includes + paging;\n // fetch data\n const { data: result } = await store.lmsApi.fetchIt('evaluation', queryParams);\n const { data, included } = result;\n store.courseEdit.setStoreValue('tableTotal', result.meta.count);\n\n const tableData = data.map((item) => {\n const { attributes, relationships } = item;\n const { evaluation_question_1b: q1b, evaluation_question_2b: q2b, evaluation_remarks_1: r1, evaluation_remarks_2: r2 } = attributes;\n const { uid } = relationships;\n const user = included.find((i) => i.id === uid.data.id);\n const { name, mail } = user.attributes;\n const hasComments = q1b || q2b || r1 || r2 ? t('tabFeedback.commentTrue') : t('tabFeedback.commentFalse');\n return {\n id: item.attributes.drupal_internal__nid,\n ...attributes,\n hasComments,\n name,\n mail\n };\n });\n\n return {\n data: tableData,\n page,\n totalCount: result.meta.count\n };\n };\n\n const tableOptions = { ...feedbackTableOptions, ...{ defaultOrderByCollection: orderByCollection } };\n\n // const hasSlpo = tableData.some((item) => item.slpo1);\n // const hasSlpo = tableData?.[0]?.slpo1;\n const hasSlpo = false;\n\n const tableColumnsDefault = [\n { title: 'Email', field: 'mail', operator: 'CONTAINS', relationPath: 'uid.mail' },\n { title: t('tabFeedback.studentName'), field: 'name', operator: 'CONTAINS', relationPath: 'uid.name' },\n { title: t('tabFeedback.quality'), field: 'evaluation_question_1', operator: 'CONTAINS', cellStyle: { width: '100px!important' } },\n { title: t('tabFeedback.applicable'), field: 'evaluation_question_2', operator: 'CONTAINS', cellStyle: { width: '130px!important' } },\n { title: t('tabFeedback.timeSpend'), field: 'evaluation_question_4', operator: 'CONTAINS', cellStyle: { width: '150px!important' } }\n ];\n const tableColumnsSlpo = [\n { title: t('tabFeedback.contents'), field: 'slpo1', operator: 'CONTAINS' },\n { title: t('tabFeedback.teacher'), field: 'slpo2', operator: 'CONTAINS' },\n { title: t('tabFeedback.levelCourse'), field: 'slpo3', operator: 'CONTAINS' },\n { title: t('tabFeedback.levelTeacher'), field: 'slpo4', operator: 'CONTAINS' }\n ];\n const tableColumnsEnd = [\n { title: t('tabFeedback.comments'), field: 'hasComments', sorting: false, filtering: false, cellStyle: { width: '100px!important' } },\n { title: 'score', field: 'evaluation_question_3', operator: 'CONTAINS', specialOp: true, cellStyle: { width: '50px!important' } },\n {\n title: 'created',\n field: 'created',\n cellStyle: { width: '100px!important' },\n filtering: false,\n render: (rowData) => dayjs(rowData.created).toJSON().slice(0, 10).split('-').reverse().join('-')\n }\n ];\n\n const tableColumns = hasSlpo\n ? [...tableColumnsDefault, ...tableColumnsSlpo, ...tableColumnsEnd]\n : [...tableColumnsDefault, ...tableColumnsEnd];\n\n return (\n \n \n \n \n \n \n \n \n }}\n localization={{ body: { emptyDataSourceMessage: 'No feedback found' } }}\n onRowClick={(_event, _rowData, togglePanel) => togglePanel()}\n detailPanel={(rowData) => }\n />\n \n \n \n \n );\n};\n\nexport default observer(CourseTabFeedback);\n\nconst sxTableCourseUsersInprogress = {\n margin: '0px',\n 'tbody td': { padding: '8px' },\n 'tbody tr.MuiTableRow-root:hover': { background: '#c0c0c04d' }\n};\n\nconst sxTableFeedback = {\n width: '100%',\n 'thead tr th:nth-of-type(1)': { width: '50px!important' },\n 'thead tr th:nth-of-type(4)': { maxWidth: '100px' },\n 'thead tr th:nth-of-type(5)': { maxWidth: '100px' },\n 'thead tr th:nth-of-type(6)': { maxWidth: '100px' },\n 'thead tr th:nth-of-type(7)': { maxWidth: '100px' },\n 'thead tr th:nth-of-type(8)': { maxWidth: '75px' },\n 'thead tr th:nth-of-type(9)': { maxWidth: '100px' },\n 'tbody tr:nth-of-type(odd)': { background: '#c0c0c01f' },\n 'tbody tr: nth-of-type(1) .material-icons': { display: 'none' },\n 'tbody td .MuiInputBase-root.MuiOutlinedInput-root': { paddingLeft: '4px' },\n 'tbody td input.MuiInputBase-input': { padding: '6px 7px', marginLeft: '-12px' },\n 'tbody td .MuiFormControl-root': { width: '100%' }\n};\n","import { useTranslation } from 'react-i18next';\n\n// Linked courses: toasts with translations\nexport const ToastSearch = () => {\n const { t } = useTranslation('editCourseForm');\n return {\n search: { title: 'too little', content: 'put in more than 5 characters', type: 'info' },\n success: { title: t('editCourse.updated.success.title'), content: t('editCourse.updated.success.message'), type: 'success' },\n error: { title: t('editCourse.updated.fail.title'), content: t('editCourse.updated.fail.message'), type: 'error' },\n default: { timeOut: 4000, variant: 'filled' }\n };\n};\n\nexport const getTypeOf = (value) => {\n if (typeof value === 'string') return 'string';\n if (Array.isArray(value)) return 'array';\n return 'object';\n};\n\nexport const convertFilterValue = (value) => {\n if (value?.[0] === 'true') return 1;\n if (value?.[0] === 'false') return 0;\n return value;\n};\nexport const jsonApiOperators = [\n '=',\n '<>',\n '>',\n '>=',\n '<',\n '<=',\n 'STARTS_WITH',\n 'CONTAINS',\n 'ENDS_WITH',\n 'IN',\n 'NOT IN',\n 'BETWEEN',\n 'NOT BETWEEN',\n 'IS NULL',\n 'IS NOT NULL'\n];\nexport const buildSpecialFilter = (value, title, path) => {\n const valueArray = value.split(' ');\n const op = valueArray.length === 1 ? '=' : valueArray[0];\n const number = valueArray.length === 1 ? valueArray[0] : valueArray[1];\n return `filter[${title}][condition][path]=${path}&filter[${title}][condition][value]=${number}&filter[${title}][condition][operator]=${op}`;\n};\n\n// CREATE SEARCHPARAMS FOR EACH FILTER\nexport const BuildQueryFilters = (filters, uuid) => {\n const filterItems = filters.map((item) => {\n const {\n value,\n column: { title, field, operator = '=', specialOp = false, currentUser = false, relationPath = false }\n } = item;\n const path = relationPath || field;\n // path = field === 'profName' ? 'profession.name' : path;\n // path = field === 'userName' ? 'uid.name' : path;\n\n if (!value.length) return '';\n if (specialOp) return buildSpecialFilter(value, title, path);\n if (operator === '=') return `filter[${field}][value]=${convertFilterValue(value)}`;\n if (currentUser && value === 'me') return `filter[uid.id][value]=${uuid}`;\n return `filter[${title}][condition][path]=${path}&filter[${title}][condition][value]=${value}&filter[${title}][condition][operator]=${operator}`;\n });\n return filterItems.join('&');\n};\n\nexport const buildQuerySearch = (search) => {\n const querySearch = search\n ? `filter[title][condition][path]=title&filter[title][condition][value]=${search}&filter[title][condition][operator]=CONTAINS`\n : '';\n return querySearch;\n};\n","export const defaultValues = {\n type: 'lesson',\n attributes: {\n title: '',\n minimum_score: 70,\n minimum_score_2nd_try: 0,\n max_attempts: 0,\n lesson_type: 'Cursus',\n free_flow: 'Normal',\n rotating_answers: false,\n '1answer_nofeedback': false,\n '1answer_visualfeedback': false\n },\n relationships: {\n lesson_content: {\n data: null\n }\n }\n};\n\nexport const lessonTypes = [\n { name: 'Cursus', value: 'Cursus' },\n { name: 'Eindtoets', value: 'Eindtoets' },\n { name: 'Praktijktoets', value: 'Praktijktoets' },\n { name: 'Kennistoets', value: 'Kennistoets' },\n { name: 'Module', value: 'Module' },\n { name: 'Module 1', value: 'Module 1' },\n { name: 'Module 2', value: 'Module 2' },\n { name: 'Module 3', value: 'Module 3' },\n { name: 'Module 4', value: 'Module 4' },\n { name: 'Module 5', value: 'Module 5' },\n { name: 'Final module', value: 'Final module' },\n { name: 'Lesson', value: 'Lesson' }\n];\n\nexport const freeFlow = [\n { name: 'Normal', value: 'Normal' },\n { name: 'Off', value: 'Off' }\n];\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport { Grid, Checkbox, FormControlLabel } from '@mui/material';\n\n/*\nOverall, this component is responsible for allowing the user to edit or upload images associated with a course,\nspecifically for the course header, course photo, and external image. \nThe ImageUploader component is used to manage the image selection and uploading process.\n*/\nconst OneAnswerGroup = ({ initialValues, setValue, labels }) => {\n const [state, setState] = useState({\n noFeedback: initialValues.attributes['1answer_nofeedback'],\n visualFeedback: initialValues.attributes['1answer_visualfeedback']\n });\n\n const handleChange = (event) => {\n if (!event.target.checked) {\n setState({ ...state, [event.target.name]: event.target.checked, noFeedback: false });\n }\n if (event.target.name === 'noFeedback' && event.target.checked) {\n setState({ ...state, [event.target.name]: event.target.checked, visualFeedback: false });\n }\n if (event.target.name === 'visualFeedback' && event.target.checked) {\n setState({ ...state, [event.target.name]: event.target.checked, noFeedback: false });\n }\n };\n\n useEffect(() => {\n setValue('attributes.1answer_nofeedback', state.noFeedback, { shouldDirty: true });\n setValue('attributes.1answer_visualfeedback', state.visualFeedback, { shouldDirty: true });\n }, [setValue, state]);\n\n return (\n \n \n }\n label={labels.firstAnswerNofeedback}\n labelPlacement=\"bottom\"\n />\n \n \n }\n label={labels.firstAnswerVisualfeedback}\n labelPlacement=\"bottom\"\n />\n \n \n );\n};\n\nOneAnswerGroup.propTypes = {\n initialValues: PropTypes.object,\n labels: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(OneAnswerGroup);\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Box, LinearProgress } from '@mui/material';\n\n// renders a loading bar\nconst LoadingLinearProgress = ({ loading = false }) => {\n if (!loading) return false;\n return (\n \n \n \n );\n};\nLoadingLinearProgress.propTypes = {\n loading: PropTypes.bool\n};\nexport default observer(LoadingLinearProgress);\n","import { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nexport const sxCustomQuickEditor = {\n '& .MuiDialog-paper': { borderRadius: '15px' },\n ' .ql-toolbar.ql-snow': { borderRadius: '4px 4px 0 0', padding: '0', background: '#9e9e9e29' },\n ' .ql-container.ql-snow': { borderRadius: '0 0 4px 4px' },\n ' .container-editor': { margin: '-5px' }\n};\n\n// _____ BUTTONS TO CREATE QUICK WIDGETS __________________________________\nexport const widgetButtons = {\n available: [\n { type: 'radio question', label: 'Radio' },\n { type: 'check question', label: 'Check' },\n { type: 'video widget', label: 'Video' },\n { type: 'open question', label: 'Open' },\n { type: 'html widget', label: 'Html' },\n { type: 'sort question', label: 'Sort' },\n { type: 'match question', label: 'Match' },\n { type: 'numerical question', label: 'Numerical' },\n { type: 'poll widget', label: 'Poll' },\n { type: 'wordcloud widget', label: 'Wordcloud' }\n ],\n disabled: ['scorm'],\n props: { color: 'primary', variant: 'contained', size: 'small', disableElevation: true }\n};\n\n// _____ TOGGLE DIALOG EDIT WIDGET _________________________________\nexport const toggleDialogEditWidget = (store) => {\n store.courseEdit.setStoreValue('toggleDialogEditWidget', false);\n};\n\n// _____ TOAST MESSAGES FOR SAVE RESULT WIDGETS ___________________\nexport const ToastWidgetSubmit = () => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n return {\n success: { title: t('save.success.title'), content: t('save.success.message'), type: 'success' },\n error: { title: t('save.error.title'), content: t('save.error.message'), type: 'error' },\n default: { timeOut: 5000, variant: 'filled' }\n };\n};\n\n// DEFAULT FORM FIELDS PROPS\nexport const numericalProps = {\n fullWidth: true,\n margin: 'normal',\n type: 'number',\n inputProps: { inputMode: 'numeric', pattern: '[0-9]*' },\n InputLabelProps: { shrink: true }\n};\nexport const textFieldProps = { fullWidth: true, margin: 'normal', type: 'text', InputLabelProps: { shrink: true } };\n\n// _______ DEFAULT WIDGET_DATA (stringify when saving) for each widget __________\nexport const defaultVideoQuestionWidgetData = {\n question: '',\n feedback: '',\n options: { url: '' }\n};\n// DEFAULT WIDGET_DATA (stringify when saving)\nexport const defaultHtmlQuestionWidgetData = {\n question: '',\n feedback: '',\n options: { htmlData: '' }\n};\n// RADIO QUESTION\nexport const defaultRadioQuestionWidgetData = {\n question: '',\n feedback: '',\n feedbackCorrect: '',\n feedbackFalse: '',\n options: [\n { value: '1', label: 'antwoord 1', feedback: '', correct: true },\n { value: '2', label: 'antwoord 2', feedback: '', correct: false }\n ]\n};\n// MATCH QUESTION\nexport const defaultMatchQuestionWidgetData = {\n question: 'Match',\n feedbackCorrect: '',\n feedbackFalse: '',\n options: [\n {\n label: 'Container 1',\n nr: 1,\n matches: [{ answer: 'item in container 1', nr: '1' }]\n },\n {\n label: 'Container 2',\n nr: 2,\n matches: [{ answer: 'item in container 2', nr: '2' }]\n }\n ]\n};\n// SORT QUESTION\nexport const defaultSortQuestionWidgetData = {\n question: 'Sort',\n feedbackCorrect: '',\n feedbackFalse: '',\n options: [\n { label: 'label1', value: '2', startposition: 1 },\n { label: 'label2', value: '1', startposition: 2 },\n { label: 'label3', value: '3', startposition: 3 }\n ]\n};\n// OPEN QUESTION\nexport const defaultOpenQuestionWidgetData = {\n question: '',\n feedback: '',\n options: { type: 'Open' }\n};\n\nexport const defaultNumericalQuestionWidgetData = {\n question: 'numerical question',\n feedback: '',\n options: {\n value: 2,\n valueEnd: 2,\n feedbackCorrect: 'correct',\n feedbackLess: 'less',\n feedbackMore: 'more',\n sliderMin: 50,\n sliderMax: 149,\n sliderStep: 1,\n unit: '',\n type: 'slider'\n }\n};\n\n// OPEN QUESTION\nexport const defaultPollWidgetData = {\n question: '',\n feedback: ''\n};\n\n// ========== WORD CLOUD WIDGETS ==========\n// A question widget of type wordcloud has 2 parts:\n// - the question_widget (with a relationship to the wordcloud_widget)\n// - the wordcloud_widget\n\n// _________ DEFAULT Yup validation schemas for all quick edit widgets ___________\nexport const PollSchema = Yup.object().shape({\n question: Yup.object({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Title should be longer than 5 characters').required('Title is required')\n })\n }),\n poll: Yup.object({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Title should be longer than 5 characters').required('Title is required'),\n body: Yup.object({\n value: Yup.string().min(5, 'Question should be longer than 5 characters').required('Question is required')\n })\n })\n })\n});\n\nexport const WordcloudSchema = Yup.object().shape({\n question: Yup.object({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Question title should be longer than 5 characters').required('Title is required')\n })\n }),\n wordcloud: Yup.object({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Wordcloud title should be longer than 5 characters').required('Title is required'),\n body: Yup.object({\n value: Yup.string().min(15, 'Wordcloud question should be longer than 15 characters').required('Question is required')\n })\n })\n })\n});\n\nexport const RadioSchema = Yup.object().shape({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Title should be longer than 5 characters').required('Title is required')\n })\n});\n\n// use for poll question\nexport const newPollQuestion = {\n question: {\n type: 'question_widget',\n attributes: {\n status: true,\n title: '',\n weight: 0,\n widget_code: '',\n widget_data: '[]',\n widget_type: 'Poll widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'poll_widget',\n id: '',\n meta: {\n target_type: 'node',\n drupal_internal__target_id: 0\n }\n }\n }\n }\n },\n poll: {\n type: 'poll_widget',\n attributes: {\n status: true,\n title: '',\n body: {\n value: ''\n },\n poll_options: []\n },\n relationships: {\n profession: {\n data: {\n type: 'profession',\n id: '',\n meta: {\n drupal_internal__target_id: 0\n }\n }\n }\n }\n }\n};\n\n// new poll widget node\nexport const newPollWidget = {\n type: 'poll_widget',\n attributes: {\n status: true,\n title: '',\n body: {\n value: ''\n },\n poll_options: []\n },\n relationships: {\n profession: {\n data: {\n type: 'profession',\n id: '',\n meta: {\n drupal_internal__target_id: 0\n }\n }\n }\n }\n};\n\nexport const newWordcloudWidget = {\n type: 'wordcloud_widget',\n attributes: {\n status: true,\n title: '',\n body: {\n value: ''\n },\n input_required: false,\n show_fields: 2\n },\n relationships: {\n profession: {\n data: {\n type: 'profession',\n id: '',\n meta: {\n drupal_internal__target_id: 0\n }\n }\n }\n }\n};\n\n// used for wordcloud question\nexport const newWordCloudQuestion = {\n question: {\n type: 'question_widget',\n attributes: {\n status: true,\n title: '',\n weight: 0,\n widget_code: '',\n widget_data: '[]',\n widget_type: 'Wordcloud Widget'\n },\n relationships: {\n widget_link: {\n data: {\n type: 'wordcloud_widget',\n id: '',\n meta: {\n target_type: 'node',\n drupal_internal__target_id: 0\n }\n }\n }\n }\n },\n wordcloud: {\n type: 'wordcloud_widget',\n attributes: {\n status: true,\n title: '',\n body: {\n value: ''\n },\n input_required: false,\n show_fields: 2\n },\n relationships: {\n profession: {\n data: {\n type: 'profession',\n id: '',\n meta: {\n drupal_internal__target_id: 0\n }\n }\n }\n }\n }\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Button } from '@mui/material';\nimport { widgetButtons } from '../dialog/formWidgets/formWidgets.helper';\n\nconst DialogWidgetsTabelDetailPanel = ({ data, openWidgetDialog }) => {\n const { rowData } = data;\n const { t } = useTranslation('editCourseForm');\n // Create a deep clone of data as rowData to prevent mutation\n const clonedRowData = JSON.parse(JSON.stringify(rowData));\n\n const widgetCode = clonedRowData.attributes.widget_code;\n\n // If rowData has an id, it is an existing widget resulting in creating a new rotating question based on the existing widget\n if (rowData?.id) {\n clonedRowData.attributes.title = `COPY of ${rowData.attributes.title}`;\n // Remove properties preventing it from updating the widget instead of creating a new widget\n ['id', 'links', 'relationships'].map((item) => delete clonedRowData[item]);\n ['drupal_internal__nid'].map((item) => delete clonedRowData.attributes[item]);\n }\n\n // Disable buttons based on new widget || rotating question\n const isDisabled = (widgetType) => {\n if (!clonedRowData?.attributes?.widget_type) return false;\n return widgetType.toLowerCase() !== clonedRowData.attributes.widget_type.toLowerCase();\n };\n\n // TRANSLATIONS _________________________________________________________\n const detailPanelTitle = t(`lesEditForm.easyWidgetcreator.${rowData?.id ? 'rotatingTitle' : 'title'}`);\n const detailPanelSubText = t(`lesEditForm.easyWidgetcreator.${rowData?.id ? 'rotatingDescription' : 'description'}`);\n\n // BUTTONS ______________________________________________________________\n const buttons = widgetButtons;\n\n return (\n \n \n {`${widgetCode}: ${detailPanelTitle}`}\n {`${detailPanelSubText}`}\n \n \n {`Widget type: `}\n {buttons.available.map((btn, index) => (\n openWidgetDialog(clonedRowData, false, btn.type)}\n >\n {btn.label}\n \n ))}\n {buttons.disabled.map((btn) => (\n \n ))}\n \n \n );\n};\n\nDialogWidgetsTabelDetailPanel.propTypes = {\n data: PropTypes.object,\n openWidgetDialog: PropTypes.func\n};\n\nexport default observer(DialogWidgetsTabelDetailPanel);\n\n// CUSTOM SX ______________________________________________________________\nconst sxDetailPanel = {\n padding: '20px',\n background: '#c0c0c033',\n '.detailPanel_container': { paddingBottom: '20px' },\n ' .detailPanel__title': { color: '#000000ab', fontSize: '16px', fontWeight: 500, lineHeight: '30px' },\n ' .detailPanel_subtext': { color: '#000000ab', fontSize: '13px', fontWeight: 400, lineHeight: '13px' },\n ' .detailPanel_buttons': { display: 'flex', gap: '8px' },\n ' .detailPanel_buttons_type': { fontWeight: 500, lineHeight: '30px', alignItens: 'center', color: '#474242' }\n};\n","import { observer } from 'mobx-react';\n/* MUI */\nimport { Box } from '@mui/material';\nimport DoNotDisturbAltIcon from '@mui/icons-material/DoNotDisturbAlt';\n\n/*\nIn summary, the DialogWidgetsTable component fetches and displays widgets related to a specific lesson content. \nIt provides users with a searchable and expandable table view of widget data, making it easy to navigate and review the available widgets. \nThe component also offers a high level of customization for styling the Material Table and its components.\n*/\nconst DialogWidgetsTabelNoOdt = () => (\n \n \n \n Er is geen odt\n \n \n);\n\nexport default observer(DialogWidgetsTabelNoOdt);\n\n// CUSTOM SX _______________________________________________________________________________________\nconst sxFlexColumn = { display: 'flex', flexDirection: 'column', flex: 1, justifyContent: 'center', alignItems: 'center' };\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useState, useEffect } from 'react';\n/* MUI */\nimport { Box, Divider, Checkbox } from '@mui/material';\nimport ArrowCircleUpIcon from '@mui/icons-material/ArrowCircleUp';\nimport ArrowCircleDownIcon from '@mui/icons-material/ArrowCircleDown';\n/* MATERIAL TABLE COMPONENT */\nimport MaterialTable, { MTableToolbar } from '@material-table/core';\n/* HELPERS */\nimport { getPlaceHoldersFromLesson, lessonTableQuestionWidgets, restButtonsInLesson } from 'pages/adminCourses/addCourse/EditCourse.helper';\n// HOOKS\nimport useJsonApi from 'hooks/useJsonApi';\nimport LoadingLinearProgress from '../loading/LoadingLinearProgress';\nimport DialogWidgetsTableDetailPanel from './DialogWidgetsTableDetailPanel';\nimport DialogWidgetsTableNoOdt from './DialogWidgetsTableNoOdt';\n\n/*\nIn summary, the DialogWidgetsTable component fetches and displays widgets related to a specific lesson content. \nIt provides users with a searchable and expandable table view of widget data, making it easy to navigate and review the available widgets. \nThe component also offers a high level of customization for styling the Material Table and its components.\n*/\nconst DialogWidgetsTabel = ({ lessonContentId, showLessonItems }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n // HOOK\n const fetchUrl = `lesson_content/${lessonContentId}`;\n const fetchQuery = `include=tagdoc,lesson_content_widgets`;\n const { response, loading, error } = useJsonApi(fetchUrl, fetchQuery);\n // STATES\n const [checked, setChecked] = useState(false);\n const [buttonsInLesson, setButtons] = useState([]);\n\n // workaround to update the table when a widget is added or removed\n const { currentLessonWidgets } = store.courseEdit;\n\n // THE WIDGETS\n // lessonContentWidgets: filter widgets from currentLesson.included\n const widgets = store?.courseEdit?.currentLesson?.included ? store?.courseEdit.lessonContentWidgets() : [];\n //\n useEffect(() => {\n if (!response?.data?.attributes?.lessontext?.value) return;\n store.courseEdit.setStoreValue('currentLesson', { lessonContent: response.data, included: response.included });\n //\n const file = response?.included?.filter((item) => item.type.includes('file'));\n const setFile = {\n fileName: file?.[0]?.attributes?.filename || '',\n fileUri: `${process.env.REACT_APP_JSONAPI}${file?.[0]?.attributes?.uri?.url}` || ''\n };\n store.courseEdit.setStoreValue('currentFilename', setFile);\n //\n const lessonHTML = response?.data?.attributes?.lessontext?.value;\n const lessonButtons = getPlaceHoldersFromLesson(lessonHTML);\n setButtons(lessonButtons);\n }, [response, store.courseEdit]);\n\n // ___ EVENT: TOGGLE QUESTION WIDGET TABLE UP/DOWN ___________________________________\n const toggleUpDown = (event) => {\n setChecked(event.target.checked);\n showLessonItems(event.target.checked ? 'none' : 'flex');\n };\n\n // ___ EVENT: OPEN EDIT WIDGET DIALOG _______________________________________________\n const openEditWidgetDialog = (widgetData, togglePanel, widgetType = false, copy = false) => {\n // store.courseEdit.setStoreValue('setEditWidget', {});\n if ((!widgetData.attributes.widget_type && !widgetType) || copy) {\n togglePanel();\n } else {\n if (widgetType) widgetData.attributes.widget_type = widgetType;\n store.courseEdit.setStoreValue('setEditWidget', widgetData);\n store.courseEdit.setStoreValue('toggleDialogEditWidget', true);\n }\n };\n\n // ___ RENDERING: LOADING / ERROR / RESPONSE _________________________________________\n if (loading) {\n return (\n \n \n Loading widgets...\n \n );\n }\n if (error) return

error...

;\n if (!response) return

no response

;\n\n if (!response?.data?.relationships?.tagdoc?.data?.id) return ;\n\n // Get the buttons that are not widgets\n const restButtons = restButtonsInLesson(widgets, buttonsInLesson);\n\n // ___ TABLE PROPERTIES ________________________________________\n const tableUpdate = currentLessonWidgets !== 'test' ? `updated: ${currentLessonWidgets}` : '';\n const tableDataMerged = [...widgets, ...restButtons];\n\n /**\n * The MaterialTable component requires every row to have a unique key as id.\n * The widget data is already unique because of the id field.\n * The restButtons data is not unique, so we need to generate unique ids for each row.\n * - We use the crypto.randomUUID() function to generate a unique id for each row.\n * - In the tableOptions object, we set the idSynonym property to 'uniqId' to use the uniqId field as the unique key.\n */\n const tableData = tableDataMerged.map((item) => ({ ...item, uniqId: crypto.randomUUID() }));\n\n const tableTitle = `${t('lesEditForm.widgetsTabel.totalWidgets')}: ${widgets.length} / ${tableData.length} ${tableUpdate}`;\n const tableOptions = {\n ...lessonTableQuestionWidgets.options,\n ...customStyling,\n ...{ actionsColumnIndex: -1 },\n ...{ showGroupingCount: true },\n ...{ idSynonym: 'uniqId' }\n };\n const tableColumns = lessonTableQuestionWidgets.columns;\n\n return (\n \n \n }\n checkedIcon={}\n />\n \n \n }\n onRowClick={(_event, rowData, togglePanel) => openEditWidgetDialog(rowData, togglePanel)}\n components={{\n Toolbar: (props) => (\n \n \n \n )\n }}\n />\n \n \n );\n};\n\nDialogWidgetsTabel.propTypes = {\n lessonContentId: PropTypes.string,\n showLessonItems: PropTypes.func\n};\n\nexport default observer(DialogWidgetsTabel);\n\n// CUSTOM SX _______________________________________________________________________________________\nconst sxFlexColumn = { display: 'flex', flexDirection: 'column', flex: 1 };\nconst dividerIconSize = { fontSize: '35px' };\n\nconst sxMtContainer = {\n padding: '0 10px',\n borderRadius: '5px',\n '.MuiTableRow-head': { height: '50px' },\n '.MuiTableCell-root': { lineHeight: '0px' },\n '.MuiPaper-root': { backgroundColor: 'transparent', boxShadow: 'none' },\n '.MuiTablePagination-root': { border: 'none', background: 'white', borderRadius: '5px', marginTop: '15px', padding: '0px' },\n 'tr td > button': { padding: '0px' },\n 'td[colspan]': { lineHeight: '40px!important' },\n '.MuiToolbar-root > div': {\n boxSizing: 'border-box',\n borderRadius: '20px',\n padding: '0px!important',\n background: 'transparent!important',\n border: '1px dashed transparent!important'\n },\n '.MuiPaper-root > .MuiToolbar-root > div:hover': { border: '1px dashed rgb(204, 204, 204)!important' },\n '.MuiPaper-root > .MuiToolbar-root > div': { background: '#c0c0c036!important', pading: '5px' },\n '.MuiToolbar-root .MuiChip-root': { background: 'white', color: '#0f0f0f', border: '3px solid #dae0e3' },\n pre: { margin: '0px!important', fontSize: '.9rem!important', whiteSpace: 'pre-wrap' }\n};\n\nconst sxToolbarContainer = {\n h6: { fontSize: '20px', fontWeight: '300' },\n '>.MuiToolbar-root': { maxHeight: '50px!important', minHeight: '50px!important', paddingLeft: '0px' }\n};\n\nconst customStyling = {\n rowStyle: {\n fontSize: '14px',\n lineHeight: '0px'\n },\n searchFieldStyle: {\n height: '33px',\n fontSize: '14px',\n borderRadius: '20px',\n border: '3px solid #e0e0e0'\n }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, DialogActions, Box, Button, Stack } from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\n/* ICONS */\nimport UndoIcon from '@mui/icons-material/Undo';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MySelect, MyCheckbox, MyTextField, FileUpload } from 'components/form/RHF';\nimport {\n LessonToast,\n LessonFormLabels,\n getSelectedLesson,\n getSelectedLessonContent,\n getSelectedLessonInitialFormValues\n} from 'pages/adminCourses/addCourse/EditCourse.helper';\nimport { newCourseValidation } from './beans/NewCourse.ValidationSchema';\nimport { defaultValues, lessonTypes, freeFlow } from './beans/lesson.helper';\nimport OneAnswerGroup from './OneAnswerGroup';\n/* CUSTOM components */\nimport DialogWidgetsTable from '../../lesson/DialogWidgetsTable';\n/* LOADERS */\nimport LoaderWithBackdrop from '../../loading/LoaderWithBackdrop';\nimport LoadingLinearProgress from '../../loading/LoadingLinearProgress';\n\nconst LessonEditForm = () => {\n const { t } = useTranslation('editCourseForm');\n const store = useStore();\n //\n const [loading, setLoading] = useState(false);\n const [displayFormFieldContainer, setDisplay] = useState('flex');\n const [odtFileName, setOdtFileName] = useState({});\n //\n // Destructering\n const { courseEdit } = store;\n const { currentCourse } = courseEdit;\n\n const fileNameOdt = store?.courseEdit?.currentFilename?.fileName || '';\n\n useEffect(() => {\n if (fileNameOdt) {\n setOdtFileName({ file: fileNameOdt, url: store?.courseEdit?.currentFilename?.fileUri });\n }\n }, [fileNameOdt, store?.courseEdit?.currentFilename?.fileUri, store?.courseEdit?.currentFilename.url]);\n\n // TOAST MESSAGES __________________________________________________\n const toast = LessonToast();\n\n // FORM LABELS TRANSLATIONS ______________________________________________\n const labels = LessonFormLabels();\n\n // SELECTED LESSON VALUES__________________________________________\n const selectedLesson = getSelectedLesson(store);\n const selectedLessonContent = getSelectedLessonContent(currentCourse, selectedLesson);\n const initialValues = getSelectedLessonInitialFormValues(currentCourse, selectedLesson, defaultValues, selectedLessonContent);\n\n // EVENT: SUBMIT FORM ________________________________________\n const handleSubmitLesson = async (values) => {\n if (values?.attributes?.field_valid_period) delete values.attributes.field_valid_period;\n setLoading(true);\n try {\n await store.courseEdit.patchpostLesson(values);\n setLoading(false);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n courseEdit.setDialogLesson();\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n setLoading(false);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset, watch, setValue, getValues }) => (\n \n \n \n {/* 1. LESSON PART OF THE DIALOG */}\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 {odtFileName?.file ? (\n \n {odtFileName?.file || ''}\n \n }\n >\n download odt\n \n \n \n ) : (\n ''\n )}\n \n \n \n \n\n {/* 2. QUESTION WIDGETS PART OF THE DIALOG */}\n \n {selectedLessonContent?.id && }\n \n \n {/* ______ DIALOG FORM ACTION BAR ____________ */}\n \n \n \n \n \n \n \n \n {\n reset();\n courseEdit.setDialogLesson();\n }}\n disableElevation\n variant=\"contained\"\n endIcon={}\n sx={{ background: '#607d8b' }}\n >\n {t('lesEditForm.btnCancel')}\n \n }\n loading={loading}\n loadingPosition=\"end\"\n disabled={!dirty}\n >\n {t('lesEditForm.btnSave')}\n \n \n \n \n )}\n
\n );\n};\n\nexport default observer(LessonEditForm);\n\n// CUSTOM SX ________________________________________________________________\nconst sxLoader = { position: 'absolute', left: '0px', top: '0px', width: '100%', height: '4px' };\nconst sxFlexColumn = { display: 'flex', flex: '1', flexDirection: 'column' };\nconst sxDialogContent = {\n display: 'flex',\n flexDirection: 'column',\n '.MuiFormControl-root': { padding: '0px', margin: '0px' },\n '.MuiInputBase-root': { height: '40px', fontSize: '14px' },\n '.MuiGrid-item': { margin: '5px 0px', paddingTop: '0px!important' }\n};\nconst sxFormFieldContainer = {\n marginBottom: '0px',\n padding: '10px 20px',\n background: '#607d8b12',\n borderRadius: '10px',\n '.MuiInputBase-root': { background: 'white' }\n};\nconst sxBoxFileUpload = {\n display: 'flex',\n padding: '10px',\n borderRadius: '5px',\n 'label label': {\n boxShadow: 'none',\n background: 'white',\n border: '5px solid #d8dee1',\n borderRadius: '20px',\n fontSize: '14px',\n color: '#698594'\n },\n '>.MuiBox-root': { display: 'flex', columnGap: '10px' }\n};\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n/* MUI components */\nimport { Box, Dialog, IconButton, Slide, Typography } from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport CloseIcon from '@mui/icons-material/Close';\n/* CUSTOM components */\nimport LessonEditForm from './form/LessonEditForm';\n\nconst Transition = forwardRef((props, ref) => );\n\n/*\n In summary, the LessonScreen component is used to show a dialog for adding or updating lessons. \n It provides a user-friendly interface with a customizable title that changes based on the operation (add or update). \n The user can close the dialog by clicking the close button. \n Additionally, there is commented-out code for saving, indicating that the ability to save changes may be implemented separately. \n This component is likely part of a course management system where lessons can be added or edited.\n*/\n\nconst LessonScreen = ({ open }) => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n //\n const { courseEdit } = store;\n const { dialogLesson } = courseEdit;\n const dialogTitle = dialogLesson.lessonId ? t('lesEditForm.updateLesson') : t('lesEditForm.addLesson');\n //\n if (!open) return null;\n\n return (\n \n \n \n \n courseEdit.setDialogLesson()} aria-label=\"close\">\n \n \n \n {dialogTitle}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nLessonScreen.propTypes = {\n open: PropTypes.bool\n};\n\nexport default observer(LessonScreen);\n\n// CUSTOM sx _________________________________________________________________\nconst sxLessonDialog = { left: '200px', borderRadius: '10px 0px 0px 10px' };\nconst sxAppBar = { position: 'relative', background: 'white', boxShadow: 'none', color: '#607d8b' };\nconst sxFlexColumn = { display: 'flex', flexDirection: 'column', flex: 1 };\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* Helpers */\nimport { rawHTML } from 'helpers/Helpers';\n/* MUI */\nimport { Box } from '@mui/material';\n\n// renders the course information to be displayed in the preview dialog\nconst CourseInformation = ({ previewValues }) => (\n \n {previewValues?.lessonContainer?.attributes?.field_information &&\n rawHTML(previewValues?.lessonContainer?.attributes?.field_information)}\n \n);\n\nCourseInformation.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseInformation);\n","import { Box } from '@mui/material';\nimport PropTypes from 'prop-types';\n\n// renders a subheader for the course preview dialog\nconst CourseSubHeaders = ({ title }) => (\n \n

{title || ''}

\n
\n);\n\nCourseSubHeaders.propTypes = {\n title: PropTypes.string\n};\n\nexport default CourseSubHeaders;\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* Helpers */\nimport { rawHTML, isValidPodcast } from 'helpers/Helpers';\n/* MUI */\nimport { Box } from '@mui/material';\nimport CourseSubHeaders from './CourseSubHeaders';\n\n// renders the course podcast to be displayed in the preview dialog\nconst CoursePodcast = ({ previewValues }) => {\n if (!previewValues?.lessonContainer.attributes.field_podcast_html) return '';\n if (!isValidPodcast(previewValues?.lessonContainer.attributes.field_podcast_html)) return '';\n return (\n \n {rawHTML(previewValues?.lessonContainer.attributes.podcast_title)}\n \n\n \n {rawHTML(previewValues?.lessonContainer.attributes.field_podcast_html)}\n \n \n );\n};\n\nCoursePodcast.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CoursePodcast);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport ReactPlayer from 'react-player';\n\n/* Helpers */\nimport { matchNumbersInString } from 'helpers/Helpers';\n/* MUI */\nimport { Box } from '@mui/material';\nimport CourseSubHeaders from './CourseSubHeaders';\n\n// renders the course video to be displayed in the preview dialog\nconst CourseVideo = ({ previewValues }) => {\n const hasVimeoId = matchNumbersInString(previewValues?.lessonContainer?.attributes?.field_preview_video);\n if (!previewValues?.lessonContainer?.attributes?.field_preview_video) return '';\n return (\n \n \n\n \n {hasVimeoId ? (\n \n \n \n ) : (\n Geen video gevonden\n )}\n \n \n );\n};\n\nCourseVideo.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseVideo);\n\nconst sxVideoWrapper = {\n position: 'relative',\n paddingTop: '56.25%',\n borderRadius: '6px',\n overflow: 'hidden',\n '.video-player': { position: 'absolute', top: 0, left: 0 },\n iframe: { width: '100%', height: '100%' }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* Helpers */\nimport { rawHTML } from 'helpers/Helpers';\n/* MUI */\nimport { Box } from '@mui/material';\nimport CourseSubHeaders from './CourseSubHeaders';\n\n// renders the course goals to be displayed in the preview dialog\nconst CourseGoals = ({ previewValues }) => {\n if (!previewValues?.lessonContainer?.attributes?.field_goals) return '';\n return (\n \n \n \n {previewValues?.lessonContainer?.attributes?.field_goals && rawHTML(previewValues?.lessonContainer?.attributes?.field_goals)}\n \n \n );\n};\n\nCourseGoals.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseGoals);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Box, Skeleton } from '@mui/material';\nimport { convertBlobString2File } from 'helpers/image.helper';\n\n// renders the course image to be displayed in the preview dialog\nconst CourseImage = ({ previewValues }) => {\n let src = false;\n const coursePhoto = previewValues?.lessonContainer?.relationships?.field_coursephoto;\n const iscoursePhotoObject = coursePhoto instanceof Object;\n if (!iscoursePhotoObject && coursePhoto.includes('http')) {\n src = coursePhoto;\n }\n src = coursePhoto?.data ? convertBlobString2File(coursePhoto.data) : src;\n\n return (\n \n {src && \"test2\"}\n {!src && }\n \n );\n};\n\nCourseImage.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseImage);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { convertBlobString2File } from 'helpers/image.helper';\n/* MUI */\nimport { Box, Skeleton } from '@mui/material';\n\n// renders the course image to be displayed in the preview dialog\nconst sxPreviewGradient = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n background: 'linear-gradient(90deg,#002318,#003927 38.54%,rgba(0,104,72,0))'\n};\n\nconst CourseImageHeader = ({ previewValues }) => {\n let src = false;\n const headerPhoto = previewValues?.lessonContainer?.relationships?.field_course_header_photo;\n const isHeaderPhotoObject = headerPhoto instanceof Object;\n if (!isHeaderPhotoObject && headerPhoto.includes('http')) {\n src = headerPhoto;\n }\n src = headerPhoto?.data ? convertBlobString2File(headerPhoto.data) : src;\n\n return (\n \n \n \n {previewValues?.course?.attributes?.title}\n \n {previewValues?.lessonContainer?.attributes.field_extra_label}\n \n \n {src && \"test1\"}\n {!previewValues?.lessonContainer?.relationships?.field_course_header_photo && (\n \n )}\n \n );\n};\n\nCourseImageHeader.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseImageHeader);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useStore } from 'hooks';\n/* MUI */\nimport { Box, List, ListItem, ListItemText, ListItemIcon, SvgIcon } from '@mui/material';\nimport Quiz from 'components/icons/Quiz';\nimport CertificateTab from 'components/icons/CertificateTab';\n\n// renders the course details to be displayed in the preview dialog\nconst CourseDetails = ({ previewValues }) => {\n const store = useStore();\n const getLesson = store?.courseEdit?.currentCourse?.included.find((item) => item.type === 'lesson');\n const minScore = getLesson?.attributes?.minimum_score || 0;\n const points = `${previewValues?.course?.attributes?.field_points || 0}`;\n const mainPoints = `${points} ${\n points === 0 || points > 1\n ? store.courseEdit?.accreditation?.attributes?.field_accr_unit_plural\n : store.courseEdit?.accreditation?.attributes.accr_unit\n }`;\n const xtraPoints = previewValues?.course?.attributes?.field_extra_points || '';\n const isExtraPoints = xtraPoints ? `+ ${xtraPoints} ${store.courseEdit?.accreditation?.attributes?.extra_points_unit}` : '';\n const certificationPoints = `${mainPoints} ${isExtraPoints}`;\n\n const attrPrimaryText = { primaryTypographyProps: { fontSize: '16px', fontWeight: '600' } };\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nCourseDetails.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseDetails);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { rawHTML } from 'helpers/Helpers';\n/* MUI */\nimport { Box, LinearProgress } from '@mui/material';\nimport useJsonApi from 'hooks/useJsonApi';\n\n// renders the author of a course to be displayed in the preview dialog\nconst CourseAuthor = ({ author }) => {\n const fetchUrl = `author/${author.id}`;\n const fetchQuery = `include=field_photo`;\n // HOOK\n const { response, loading, error } = useJsonApi(fetchUrl, fetchQuery);\n // - based on hook response\n if (loading || (!response && !error)) {\n return (\n \n \n \n );\n }\n if (error) return

error...

;\n\n let authorUrl = false;\n if (response?.included) {\n authorUrl = response.included[0].attributes.uri.url;\n }\n\n return (\n \n {authorUrl && {author.title}}\n \n {response?.data?.attributes?.title}\n {rawHTML(response?.data?.attributes?.body?.value)}\n \n \n );\n};\n\nCourseAuthor.propTypes = {\n author: PropTypes.object\n};\n\nexport default observer(CourseAuthor);\n\nconst sxAuthorTitle = { fontSize: '18px', lineHeight: '34px', fontWeight: '500' };\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Box } from '@mui/material';\n\nimport CourseAuthor from './CourseAuthor';\nimport CourseSubHeaders from './CourseSubHeaders';\n\n// container component for the authors of a course\n// - renders a list of authors of a course to be displayed in the preview dialog\nconst CourseAuthors = ({ previewValues }) => {\n const authors = previewValues.lessonContainer.relationships.field_authors;\n if (!authors.length) return '';\n const title = authors.length > 1 ? 'Docenten' : 'Docent';\n return (\n \n \n \n {authors.map((author) => (\n \n \n \n ))}\n \n \n );\n};\n\nCourseAuthors.propTypes = {\n previewValues: PropTypes.object\n};\n\nexport default observer(CourseAuthors);\n","/* Core */\nimport { forwardRef } from 'react';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Box, Stack, Grid, Button, Dialog, DialogContent, DialogActions, Slide } from '@mui/material';\n/* Custom */\nimport CourseInformation from '../previewIntroduction/CourseInformation';\nimport CoursePodcast from '../previewIntroduction/CoursePodcast';\nimport CourseVideo from '../previewIntroduction/CourseVideo';\nimport CourseGoals from '../previewIntroduction/CourseGoals';\nimport CourseImage from '../previewIntroduction/CourseImage';\nimport CourseImageHeader from '../previewIntroduction/CourseImageHeader';\nimport CourseDetails from '../previewIntroduction/CourseDetails';\nimport CourseAuthors from '../previewIntroduction/CourseAuthors';\n\nconst Transition = forwardRef((props, ref) => );\n\n/*\n In summary, the IntroductionPreviewDialog component is used to display a preview of course information within a dialog. \n It's well-structured and visually organized, making it user-friendly. Users can view various course details, and when they're done, they can close the dialog with the \"Close\" button. \n This component is likely part of a larger system for managing and previewing course content.\n*/\nconst IntroductionPreviewDialog = (props) => {\n const { open, handleClickDialog, previewValues } = props;\n\n if (!open) return null;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nIntroductionPreviewDialog.propTypes = {\n open: PropTypes.bool,\n handleClickDialog: PropTypes.func,\n previewValues: PropTypes.object\n};\n\nexport default observer(IntroductionPreviewDialog);\n\nconst previewDialog = {\n '.MuiDialog-paper': { borderRadius: '20px' },\n '.preview_image_header': {\n position: 'relative',\n maxHeight: '300px',\n overflow: 'hidden',\n borderRadius: '20px',\n background: 'linear-gradient(90deg,#002318,#003927 38.54%,rgba(0,104,72,0))',\n '.preview_title': { position: 'absolute', top: '50%', left: '10px', color: 'white', fontSize: '30px', fontWeight: 'bold' }\n },\n '.preview_box_right': {\n marginTop: '-250px',\n marginRight: '30px',\n borderRadius: '10px',\n padding: '20px',\n background: '#f4f4f4',\n '.preview_image_course': { maxHeight: '200px', overflow: 'hidden', borderRadius: '10px' }\n }\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport { Controller, useFieldArray, useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Radio, Stack, IconButton, FormControlLabel, Checkbox, Box, Button } from '@mui/material';\n/* ICONS */\nimport AddIcon from '@mui/icons-material/Add';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\n\n/* Custom RHF components */\nimport { Editor } from 'components/form/RHF';\n\nconst FormWidgetOptions = ({ optionType = 'radio', control, setValue }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const { fields, append, remove } = useFieldArray({ control, name: 'attributes.widget_data.options' });\n const indexCorrectAnswer = fields.findIndex((item) => item.correct === true);\n const [checkedOption, setCheckedOption] = useState(indexCorrectAnswer);\n const watchOptions = useWatch({ control, name: 'attributes.widget_data.options' });\n\n useEffect(() => {\n if (indexCorrectAnswer !== checkedOption) {\n setCheckedOption(indexCorrectAnswer);\n }\n }, [checkedOption, indexCorrectAnswer]);\n //\n return (\n \n \n }\n onClick={() => {\n append({ value: (fields.length + 1).toString(), label: '', correct: false, feedback: '' });\n }}\n color=\"primary\"\n >\n {t('answer')}\n \n \n\n {fields.map((option, index) => (\n div': { border: '1px solid #607D8B', borderRadius: '10px', padding: '10px', paddingBottom: '15px' }\n }}\n >\n \n \n \n {index + 1}\n \n \n {optionType === 'radio' && (\n {\n setCheckedOption(`${index}`);\n setValue(\n 'attributes.widget_data.options',\n watchOptions.map((item, optionIndex) =>\n optionIndex === index ? { ...item, correct: true } : { ...item, correct: false }\n ),\n {\n shouldTouch: true,\n shouldDirty: true\n }\n );\n }}\n label=\"correct\"\n control={control}\n />\n )}\n {optionType !== 'radio' && (\n (\n } />\n )}\n />\n )}\n \n \n \n \n \n \n \n \n \n remove(index)}>\n \n \n \n \n \n ))}\n \n );\n};\n\nFormWidgetOptions.propTypes = {\n control: PropTypes.object,\n optionType: PropTypes.string,\n setValue: PropTypes.func\n};\n\nexport default observer(FormWidgetOptions);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { DialogActions, Box, Button } from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\n/* ICONS */\nimport UndoIcon from '@mui/icons-material/Undo';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { toggleDialogEditWidget } from './formWidgets.helper';\n\nconst FormActionBar = ({ reset, dirty, saving, defaultValues }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n\n return (\n \n \n store.courseEdit.deleteWidget()}\n size=\"small\"\n color=\"error\"\n variant=\"contained\"\n startIcon={}\n disabled={!store?.courseEdit?.setEditWidget?.id}\n >\n {t('btnDelete')}\n \n \n \n \n {\n reset(defaultValues);\n toggleDialogEditWidget(store);\n }}\n size=\"small\"\n variant=\"contained\"\n endIcon={}\n sx={{ background: '#607d8b' }}\n >\n {t('btnClose')}\n \n }\n loadingPosition=\"end\"\n loading={saving}\n disabled={!dirty}\n >\n {t('btnSave')}\n \n \n \n );\n};\n\nFormActionBar.propTypes = {\n reset: PropTypes.func,\n dirty: PropTypes.bool,\n defaultValues: PropTypes.object,\n saving: PropTypes.bool\n};\n\nexport default observer(FormActionBar);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport { MyTextField } from 'components/form/RHF';\nimport { numericalProps, textFieldProps } from './formWidgets.helper';\n\nconst FormDefaultWidgetsAttributes = ({ control, isPollWordcloud = false }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const preFix = isPollWordcloud ? 'question.' : '';\n return (\n \n \n \n \n \n );\n};\n\nFormDefaultWidgetsAttributes.propTypes = {\n control: PropTypes.any,\n isPollWordcloud: PropTypes.bool\n};\n\nexport default observer(FormDefaultWidgetsAttributes);\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, Editor } from 'components/form/RHF';\n//\nimport FormWidgetOptions from './FormWidgetOptions';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultRadioQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n\nconst FormRadioQuestion = ({ optionType }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n const widget = store.courseEdit.setEditWidget;\n\n // SETTING WIDGET DATA _______________________________________________\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultRadioQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n\n // SET CORRECT WIDGET TYPE\n defaultValues.attributes.widget_type = widget.attributes.widget_type.toLowerCase().includes('radio')\n ? 'Radio Question'\n : 'Check Question';\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset, setValue }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* bottom */}\n \n \n \n \n )}\n \n );\n};\n\nFormRadioQuestion.propTypes = {\n optionType: PropTypes.string\n};\n\nexport default observer(FormRadioQuestion);\n\n// custom sx ___________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultVideoQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n\nconst FormVideoWidget = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n\n const widget = store.courseEdit.setEditWidget;\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultVideoQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n defaultValues.attributes.widget_type = 'Video Widget';\n defaultValues.attributes.weight = 0;\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default observer(FormVideoWidget);\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { Controller } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\n// helpers\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultOpenQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n//\n\nconst FormOpenQuestion = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n\n const widget = store.courseEdit.setEditWidget;\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultOpenQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n defaultValues.attributes.widget_type = 'Open Question';\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset, setValue }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n (\n \n } label={t('open')} />\n } label={t('reflect')} />\n \n )}\n />\n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default observer(FormOpenQuestion);\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultHtmlQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n\n//\nconst FormHtmlWidget = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n\n const widget = store.courseEdit.setEditWidget;\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultHtmlQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n defaultValues.attributes.widget_type = 'HTML Widget';\n\n const options = 'attributes.widget_data.options';\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset, setValue }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default observer(FormHtmlWidget);\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useFieldArray } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Stack, Box, Button, IconButton } from '@mui/material';\n/* ICONS */\nimport AddIcon from '@mui/icons-material/Add';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\n/* Custom RHF components */\nimport { Editor, MyTextField } from 'components/form/RHF';\n// helpers\nimport { numericalProps } from './formWidgets.helper';\n\nconst FormSortOptions = ({ control, setValue }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const { fields, append, remove } = useFieldArray({ control, name: 'attributes.widget_data.options' });\n\n return (\n \n \n }\n onClick={() => {\n append({\n label: `sort item${fields.length + 1}`,\n value: (fields.length + 1).toString(),\n startposition: (fields.length + 1).toString()\n });\n }}\n color=\"primary\"\n >\n {t('answer')}\n \n \n\n {fields.map((option, index) => (\n \n \n \n {index + 1}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n remove(index)}>\n \n \n \n \n \n ))}\n \n );\n};\n\nFormSortOptions.propTypes = {\n control: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(FormSortOptions);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport FormSortOptions from './FormSortOptions';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\n// helpers\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultSortQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n\nconst FormSortQuestion = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n const widget = store.courseEdit.setEditWidget;\n\n // SETTING WIDGET DATA _______________________________________________\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultSortQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n\n // SET CORRECT WIDGET TYPE\n defaultValues.attributes.widget_type = 'Sort Question';\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n const widgetOptions = newWidget.attributes.widget_data.options;\n widgetOptions.forEach((option) => {\n option.value = option.value.toString();\n option.startposition = Number(option.startposition);\n });\n\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
\n {({ control, errors, dirty, reset, setValue }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* Sorting options */}\n \n \n \n \n )}\n \n );\n};\n\nexport default observer(FormSortQuestion);\n\n// custom sx ___________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useFieldArray } from 'react-hook-form';\n// MUI\nimport { Grid, Box, Button, IconButton, Stack } from '@mui/material';\n/* ICONS */\nimport AddIcon from '@mui/icons-material/Add';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\n/* Custom RHF components */\nimport { Editor, MyTextField } from 'components/form/RHF';\nimport { numericalProps } from './formWidgets.helper';\n\nconst FormMatchMatches = ({ setValue, control, optionsIndex }) => {\n const { fields, append, remove } = useFieldArray({ control, name: `attributes.widget_data.options[${optionsIndex}].matches` });\n\n return (\n \n \n }\n onClick={() => {\n append({ answer: `item`, nr: `${optionsIndex + 1}` });\n }}\n color=\"warning\"\n disableElevation\n >\n Item\n \n \n {fields.map((field, index) => (\n
  • \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n remove(index)}>\n \n \n \n \n
  • \n ))}\n
    \n );\n};\n\nFormMatchMatches.propTypes = {\n control: PropTypes.object,\n setValue: PropTypes.func,\n optionsIndex: PropTypes.number\n};\n\nexport default observer(FormMatchMatches);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useFieldArray } from 'react-hook-form';\n// MUI\nimport { Grid, Box, Button } from '@mui/material';\n/* ICONS */\nimport AddIcon from '@mui/icons-material/Add';\n/* Custom RHF components */\nimport { MyTextField } from 'components/form/RHF';\nimport FormMatchMatches from './FormMatchMatches';\n\nconst FormMatchOptions = ({ setValue, control, ...restProps }) => {\n const { fields, append } = useFieldArray({ control, name: 'attributes.widget_data.options' });\n\n return (\n \n \n }\n onClick={() => {\n append({\n label: 'Container',\n nr: fields.length + 1,\n matches: [{ answer: '', nr: (fields.length + 1).toString(), startPosition: 0 }]\n });\n }}\n color=\"primary\"\n >\n Container\n \n \n\n {fields.map((option, index) => (\n \n \n \n \n \n {index + 1}\n \n \n
      \n \n
    \n
    \n
    \n
    \n
    \n ))}\n
    \n );\n};\n\nFormMatchOptions.propTypes = {\n control: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(FormMatchOptions);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, Editor } from 'components/form/RHF';\n//\nimport FormMatchOptions from './FormMatchOptions';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\nimport {\n textFieldProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultMatchQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n\nconst FormMatchQuestion = ({ optionType }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n const widget = store.courseEdit.setEditWidget;\n\n // SETTING WIDGET DATA _______________________________________________\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultMatchQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n\n const _widgetData = 'attributes.widget_data';\n\n // SET CORRECT WIDGET TYPE\n defaultValues.attributes.widget_type = widget.attributes.widget_type.toLowerCase().includes('match') ? 'Match Question' : 'Sort Question';\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
    \n {({ control, errors, dirty, reset, setValue, getValues }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* bottom */}\n \n \n \n \n )}\n \n );\n};\n\nFormMatchQuestion.propTypes = {\n optionType: PropTypes.string\n};\n\nexport default observer(FormMatchQuestion);\n\n// custom sx ___________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n","import { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, DialogContent, Box, Backdrop, CircularProgress, Stack } from '@mui/material';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField, MySelect, Editor } from 'components/form/RHF';\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\n// helpers\nimport {\n numericalProps as numProps,\n textFieldProps as txtProps,\n toggleDialogEditWidget,\n ToastWidgetSubmit,\n defaultNumericalQuestionWidgetData,\n RadioSchema\n} from './formWidgets.helper';\n//\n\nconst FormNumericalQuestion = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [saving, setSaving] = useState(false);\n\n const widget = store.courseEdit.setEditWidget;\n const widgetData = JSON.parse(store.courseEdit.setEditWidget.attributes.widget_data);\n const setWidgetData = { ...defaultNumericalQuestionWidgetData, ...widgetData };\n const defaultValues = { ...widget, attributes: { ...widget.attributes, widget_data: setWidgetData } };\n defaultValues.attributes.widget_type = 'Numerical Question';\n\n const options = 'attributes.widget_data.options';\n const selItems = [\n { name: 'slider', value: 'slider' },\n { name: 'input', value: 'input' }\n ];\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n try {\n await store.courseEdit.patchPostWidget(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n return (\n
    \n {({ control, errors, dirty, reset, setValue }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\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 \n );\n};\n\nexport default observer(FormNumericalQuestion);\n\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n\nconst sxSelect = { '& > div': { padding: '10px' } };\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport MaterialTable from '@material-table/core';\nimport useCustomEwapi from 'hooks/useCustomEwapi';\nimport LoadingContent from '../../loading/LoadingContent';\n\nconst WidgetInCourses = ({ widgetNid }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const endPoint = `ewapi/course_widgets/widget/${widgetNid}`;\n const { response, loading, error } = useCustomEwapi(endPoint);\n const orderCollection = [{ orderBy: 0, orderDirection: 'desc', sortOrder: 1 }];\n\n // get the profession list from the store to:\n // map the response.profession to the packageMenuList.profession name\n const isPackageMenuList = store?.courseEdit?.packageMenuList;\n\n if (loading) return ;\n\n // map the profession id to the profession name from packegeMenuList\n const tableData =\n response?.data?.courses?.map((course) => {\n const proffesion = isPackageMenuList?.find((prof) => prof.profession_id === course.profession) || course.profession;\n return { ...course, professionName: proffesion?.profession_name };\n }) || [];\n\n return (\n \n \n {error &&

    Something went wrong...

    }\n {response && (\n (rowData.online ? t('yes') : t('no')) }\n ]}\n data={tableData}\n options={{\n padding: 'dense',\n maxColumnSort: 1,\n defaultOrderByCollection: orderCollection,\n showColumnSortOrder: true,\n paging: true,\n emptyRowsWhenPaging: false,\n rowStyle: (rowData, index) => ({\n backgroundColor: index % 2 ? 'rgba(0,0,0,0.04)' : 'rgba(0,0,0,0.0)'\n })\n }}\n />\n )}\n
    \n
    \n );\n};\n\nWidgetInCourses.propTypes = {\n widgetNid: PropTypes.number\n};\n\nexport default observer(WidgetInCourses);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Box, Checkbox, FormControlLabel } from '@mui/material';\n/* Custom RHF components */\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport { textFieldProps } from './formWidgets.helper';\n\nconst FormPollWidgetEdit = ({ getValues, ...restProps }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const { setValue, control, errors } = restProps;\n const [edit, setEdit] = useState(false);\n\n return (\n \n \n setEdit(!edit)} inputProps={{ 'aria-label': 'controlled' }} />}\n label={t('edit')}\n />\n \n \n \n\n \n\n \n {getValues()?.poll?.attributes?.poll_options.map((option, index) => (\n \n {index + 1} \n \n \n ))}\n \n \n \n );\n};\n\nFormPollWidgetEdit.propTypes = {\n pollWidgetId: PropTypes.string,\n reset: PropTypes.func,\n resetField: PropTypes.func,\n setValue: PropTypes.func,\n getValues: PropTypes.func,\n control: PropTypes.any,\n errors: PropTypes.object,\n pollWidgetOptions: PropTypes.array\n};\n\nexport default observer(FormPollWidgetEdit);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' },\n rowGap: '15px',\n flexDirection: 'column',\n paddingTop: '10px',\n display: 'flex',\n marginTop: '15px'\n};\n//\nconst sxOptionContainer = {\n width: '100%',\n display: 'flex',\n\n ' .option_nr': { display: 'flex', alignSelf: 'center', width: '20px' }\n};\n\nconst sxNewPoll = {\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0px 0px 5px 0px rgba(0,0,0,0.2)',\n borderRadius: '5px',\n padding: '15px',\n paddingTop: '20px'\n};\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Box } from '@mui/material';\n\nconst FormPollWidgetShow = ({ getValues }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n // set values\n const title = getValues()?.poll?.attributes?.title;\n const question = getValues()?.poll?.attributes?.body.value;\n const pollOptions = getValues()?.poll?.attributes?.poll_options || [];\n\n return (\n \n \n {`Internal title: ${title}`}\n {`${t('question')}: ${question}`}\n\n \n {pollOptions.map((option, index) => (\n \n {index + 1} \n {option}\n \n ))}\n \n \n \n );\n};\n\nFormPollWidgetShow.propTypes = {\n getValues: PropTypes.func\n};\n\nexport default observer(FormPollWidgetShow);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' },\n rowGap: '15px',\n flexDirection: 'column',\n paddingTop: '10px',\n display: 'flex',\n marginTop: '15px'\n};\n//\nconst sxOptionContainer = {\n width: '100%',\n display: 'flex',\n\n ' .option_nr': { display: 'flex', alignSelf: 'center', width: '20px' }\n};\n\nconst sxNewPoll = {\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0px 0px 5px 0px rgba(0,0,0,0.2)',\n borderRadius: '5px',\n padding: '15px',\n paddingTop: '20px'\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport useCustomEwapi from 'hooks/useCustomEwapi';\nimport PollStats from '../../../../play/questions/PollWidget/PollStats';\nimport LoadingContent from '../../loading/LoadingContent';\n\nconst FormPollWidgetPreview = ({ widgetNid }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const endPoint = `ewapi/poll/${widgetNid}/data`;\n const { response, error } = useCustomEwapi(endPoint);\n\n // dummy functions needed to show the poll preview\n const handleCancelVote = () => null;\n if (error) return

    Something went wrong...

    ;\n if (!response) return ;\n\n return (\n \n \n {error &&

    {t('loadingError')}

    }\n {response && }\n
    \n
    \n );\n};\n\nFormPollWidgetPreview.propTypes = {\n widgetNid: PropTypes.number\n};\n\nexport default observer(FormPollWidgetPreview);\n","import { Controller } from 'react-hook-form';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext, useCallback, useState, useEffect, forwardRef, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport useDebounce from 'hooks/useDebounce';\nimport { newPollWidget, newWordcloudWidget } from './formWidgets.helper';\n\nconst SearchPollWordcloudWidgets = forwardRef(\n (\n { name, control, label, node, formValues, setValue, getValues, resetField, multiSelect = false, includeNid = true, ...otherProps },\n fRef\n ) => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n const { defaultSearchData } = store.courseEdit;\n // set state\n const [objOptions, setOptions] = useState([]);\n const [searchTerm, setSearchTerm] = useState('');\n const [isSearching, setIsSearching] = useState(false);\n const debouncedSearchTerm = useDebounce(searchTerm, 500);\n const errorSearchTxt = t('errorSearchTxt');\n\n // helper fuction to get attract poll or wordcloud from node value\n const _typeNode = node.split('_')[0];\n\n // get defaultWidget data from form values\n const defaultPollData = getValues()?.[_typeNode];\n\n // set _defaultPollData\n const _defaultPollData = useMemo(\n () =>\n defaultPollData?.attributes?.title\n ? {\n title: defaultPollData.attributes.title,\n question: defaultPollData.attributes?.body?.value,\n id: defaultPollData.id,\n type: node,\n proffession: false\n }\n : {},\n [defaultPollData.attributes?.body?.value, defaultPollData.attributes.title, defaultPollData.id, node]\n );\n\n // SET VALUE FOR AUTOCOMPLETE: pollWidgetData ________________________________________________\n const [pollWidgetData, setPollWidgetData] = useState(_defaultPollData);\n\n // USEEFFECTS ________________________________________________\n useEffect(() => {\n // When a search item is selected, the selected data is stored in store\n // On form reset, the store isn't cleared, so we need to clear it here\n setPollWidgetData(_defaultPollData);\n }, [_defaultPollData]);\n\n // CALLBACK FETCHDATA: used in useEffect __________________________________\n const fetchData = useCallback(\n async (search) => {\n try {\n const newQuery = `filter[name][condition][path]=body.value&filter[name][condition][value]=${search}&filter[name][condition][operator]=CONTAINS&include=profession`;\n const { data: result } = await store.lmsApi.fetchIt(node, newQuery);\n const included = result.included || [];\n\n // create a new map with profession id and name used when creating the options list\n const professions = new Map();\n included.map((item) => professions.set(item.attributes.drupal_internal__tid, item.attributes.name));\n\n // set search result from fetched data\n const searchResult = result.data;\n // if no result, show toast\n if (!searchResult.length) {\n setOptions([]);\n store.courseEdit.setToasts({\n title: t('serverEmptyResponse.title', 'Geen data gevonden'),\n content: t('serverEmptyResponse.message', 'Er zijn geen resultaten gevonden'),\n type: 'info',\n timeOut: 4000,\n variant: 'outlined'\n });\n }\n // create new options data structure as used for the autocomplete list\n const newOptionsData = searchResult.map((item) => ({\n widget: item,\n title: item.attributes.title,\n question: item.attributes?.body?.value,\n id: item.id,\n type: node,\n proffession: professions.get(item?.relationships?.profession?.data?.meta?.drupal_internal__target_id) || false,\n ...(includeNid ? { nid: item.attributes.drupal_internal__nid } : {})\n }));\n\n setOptions(newOptionsData);\n setIsSearching(false);\n } catch (error) {\n setIsSearching(false);\n store.courseEdit.setToasts({\n title: t('serverTimeOut.title', 'Geen data gevonden'),\n content: t('serverTimeOut.message', 'Er zijn geen resultaten gevonden'),\n type: 'info',\n timeOut: 6000,\n variant: 'filled'\n });\n }\n },\n [store.lmsApi, store.courseEdit, node, t, includeNid]\n );\n\n // useEffect __________________________________\n useEffect(() => {\n if (debouncedSearchTerm.length > 0 && debouncedSearchTerm.length < 3) return setOptions([]);\n // call to the fetchData function __________\n if (debouncedSearchTerm) {\n setIsSearching(true);\n // setOptions([]);\n fetchData(debouncedSearchTerm);\n }\n\n return () => setOptions([]);\n }, [debouncedSearchTerm, fetchData]);\n\n return (\n (\n -b.title.localeCompare(a.title))}\n onChange={(event, newValue) => {\n // NO RESULT or CLEARED ________________\n if (!newValue) {\n const setNewWidgetValue = _typeNode === 'poll' ? newPollWidget : newWordcloudWidget;\n setPollWidgetData({});\n setSearchTerm('');\n resetField(name);\n resetField(node.split('_')[0]); // reset poll or wordcloud property\n setValue('question.relationships.widget_link.data.', 0, {\n shouldTouch: false, // update touched fields form state\n shouldDirty: false // update dirty and dirty fields form state\n });\n setValue(_typeNode, setNewWidgetValue);\n return;\n }\n\n // ON RESULT ____________________________\n // 1. create new question widget_link data\n const widgetLinkData = {\n id: newValue.id,\n type: node,\n meta: {\n target_type: 'node',\n drupal_internal__target_id: newValue.nid\n }\n };\n\n // 1a. update question widget link data in form values\n setValue('question.relationships.widget_link.data', widgetLinkData, {\n shouldTouch: true, // update touched fields form state\n shouldDirty: true // update dirty and dirty fields form state\n });\n\n // 2. update poll or wordcloud widget data in form values\n setValue(_typeNode, newValue.widget, {\n shouldTouch: true, // update touched fields form state\n shouldDirty: true // update dirty and dirty fields form state\n });\n\n // 3, set the new poll or wordcloud widget data\n setPollWidgetData(newValue);\n // 5. update the options to the selected result\n setOptions([{ ...newValue }]);\n }}\n isOptionEqualToValue={(option, value) => option.id === value.id}\n getOptionLabel={(option) => (option?.title ? `${option.question}` : '')}\n getOptionKey={(option) => option?.id || ''}\n renderOption={(props, option) => (\n
  • \n
    \n title: {option.title}\n
    \n
    \n question: {option.question}\n
    \n
    \n profession: {option.proffession}\n
    \n
  • \n )}\n defaultValue={[]}\n loading={isSearching && objOptions.length === 0}\n loadingText={t('retrieveData', 'Retrieving data')}\n autoComplete\n filterSelectedOptions\n renderInput={(params) => (\n 0 && debouncedSearchTerm.length < 3) || false}\n {...params}\n {...field}\n label={label}\n onChange={(e) => setSearchTerm(e.target.value)}\n inputRef={ref}\n helperText={debouncedSearchTerm.length > 0 && debouncedSearchTerm.length < 3 && errorSearchTxt}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {isSearching ? : null}\n {params.InputProps.endAdornment}\n \n )\n }}\n />\n )}\n />\n )}\n />\n );\n }\n);\n\nSearchPollWordcloudWidgets.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n label: PropTypes.string,\n node: PropTypes.string,\n setValue: PropTypes.func,\n getValues: PropTypes.func,\n resetField: PropTypes.func,\n otherProps: PropTypes.object,\n multiSelect: PropTypes.bool,\n includeNid: PropTypes.bool,\n setTabItem: PropTypes.func,\n formValues: PropTypes.object\n};\n\nexport default observer(SearchPollWordcloudWidgets);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Divider, IconButton, Box, Button } from '@mui/material';\n/* ICONS */\nimport AddIcon from '@mui/icons-material/Add';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\n/* Custom RHF components */\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport { textFieldProps } from './formWidgets.helper';\n\nconst FormPollWidgetNew = ({ control, setValue, errors }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const { fields, append, remove } = useFieldArray({ control, name: 'poll.attributes.poll_options' });\n const watchQuestion = useWatch({ control, name: 'poll.attributes.body.value' });\n const watchOptions = useWatch({ control, name: 'poll.attributes.poll_options' });\n\n return (\n \n {t('orCreateNewPollWidget')}\n \n \n\n \n\n \n \n }\n onClick={() => {\n append('');\n }}\n color=\"primary\"\n >\n {t('answer')}\n \n {watchOptions.length < 2 && {t('min2options')}}\n \n\n {fields.map((option, index) => (\n \n {index + 1} \n \n remove(index)}>\n \n \n \n ))}\n \n \n \n );\n};\n\nFormPollWidgetNew.propTypes = {\n control: PropTypes.object,\n setValue: PropTypes.func,\n errors: PropTypes.object\n};\n\nexport default observer(FormPollWidgetNew);\n\n// custom sx ________________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' },\n rowGap: '8px'\n};\n//\nconst sxOptionContainer = {\n width: '100%',\n display: 'flex',\n ' .option_nr': { display: 'flex', alignSelf: 'center', width: '20px' }\n};\n\nconst sxNewPoll = {\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0px 0px 5px 0px rgba(0,0,0,0.2)',\n borderRadius: '5px',\n padding: '15px',\n paddingTop: '20px'\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Divider, Tab, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n// mui lab\nimport TabContext from '@mui/lab/TabContext';\nimport TabList from '@mui/lab/TabList';\nimport TabPanel from '@mui/lab/TabPanel';\n// icons\nimport ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\n// custom components\n// import useCustomEwapi from 'hooks/useCustomEwapi';\nimport WidgetInCourses from './WidgetInCourses';\nimport FormPollWidgetEdit from './FormPollWidgetEdit';\nimport FormPollWidgetShow from './FormPollWidgetShow';\nimport FormPollWidgetPreview from './FormPollWidgetPreview';\nimport LoadingContent from '../../loading/LoadingContent';\n\n// custom components\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\n// import FormWPollWidgetTabs from './FormPollWidgetTabs';\nimport SearchPollWordcloudWidgets from './SearchPollWordcloudWidgets';\nimport FormPollWidgetNew from './FormPollWidgetNew';\nimport { textFieldProps, toggleDialogEditWidget, ToastWidgetSubmit, newPollQuestion, PollSchema } from './formWidgets.helper';\n\nconst FormPollWidget = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n // states\n const [saving, setSaving] = useState(false);\n const [loadingData, setLoadingData] = useState(true);\n const [tabItem, setTabItem] = useState('1');\n\n // RHF INITIAL FORM DATA\n const [defaultFormData, setDefaultFormData] = useState({});\n\n // GET INITIAL POLL QUESTION DATA FROM STORE _______________________________________________\n const iniPollQuestion = store.courseEdit.setEditWidget;\n const isNewQuestion = !iniPollQuestion?.id;\n\n const newFormPollQuestion = useMemo(() => ({ ...newPollQuestion }), []);\n\n // UPDATE NEWPOLLQUESTION DATA WITH STORE DATA _______________________________________________\n // if new question: set the widget_code for the new question\n if (isNewQuestion) newFormPollQuestion.question.attributes.widget_code = iniPollQuestion.attributes.widget_code;\n // if existing question: override question with the existing question\n if (!isNewQuestion) newFormPollQuestion.question = iniPollQuestion;\n\n useEffect(() => {\n // set the pollWidgetId\n const pollWidgetId = iniPollQuestion?.relationships?.widget_link?.data?.id;\n // fetch the poll data\n const fetchData = async () => {\n try {\n const result = await store.lmsApi.fetchIt(`poll_widget`, '', pollWidgetId);\n // update the newPollQuestion with the poll data\n newFormPollQuestion.poll = result.data.data;\n setDefaultFormData(newFormPollQuestion);\n setLoadingData(false);\n } catch (error) {\n console.error(error);\n }\n };\n // pollWidgetId = false: set the default form data\n if (!pollWidgetId) {\n setDefaultFormData(newFormPollQuestion);\n setLoadingData(false);\n return;\n }\n // pollWidgetId = true: call to fetch the poll data\n fetchData();\n }, [iniPollQuestion, newFormPollQuestion, store.lmsApi]);\n\n // helper function to get the profession of the CourseContainer\n const _getCourseContainerProfession = useCallback(() => {\n const {\n courseEdit: {\n courseContainer: {\n relationships: {\n profession: { data }\n }\n }\n }\n } = store;\n const pollProfession = {\n type: 'profession',\n id: data.id,\n meta: {\n drupal_internal__target_id: data.attributes.drupal_internal__tid\n }\n };\n return pollProfession;\n }, [store]);\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n // if new poll widget set the profession of the poll to the profession of the destructered CourseContainer\n if (!newWidget?.poll?.relationships?.profession?.data?.id) {\n newWidget.poll.relationships.profession.data = _getCourseContainerProfession();\n }\n\n try {\n await store.courseEdit.patchPostPolWordQuestion(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n // POLL TAB ITEMS ________________________________________________\n const tabListItems = [\n { label: 'Poll widget', value: '1' },\n { label: 'Edit Poll widget', value: '1a' },\n { label: 'Preview', value: '2' },\n { label: t('usedInCourses'), value: '3' }\n ];\n // handle tab change\n const handleChange = (_event, newValue) => setTabItem(newValue);\n\n // IF LOADING SHOW LOADER ELSE CONTINUE ____________________________\n if (loadingData) return ;\n\n return (\n
    \n {({ control, errors, dirty, reset, resetField, setValue, getValues }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n {t('linkPollWidget')}\n \n {/* create custom poll */}\n {!getValues('question.relationships.widget_link.data.id') && (\n \n )}\n \n \n \n \n \n \n\n {/* POLL WIDGET TABS */}\n {getValues()?.poll?.id && getValues()?.question?.relationships?.widget_link?.data?.id && (\n \n \n \n \n \n {getValues()?.poll?.id && (\n \n \n \n \n {tabListItems.map((item) => (\n \n ))}\n \n \n {/* SHOW POLL WIDGET VALUES (not editable) */}\n \n \n \n\n {/* EDIT POLL WIDGET */}\n \n \n \n\n {/* PREVIEW */}\n \n {getValues().poll?.attributes?.drupal_internal__nid && (\n \n )}\n \n\n {/* WIDGET USED IN COURSES */}\n \n {getValues().poll?.attributes?.drupal_internal__nid && (\n \n )}\n \n \n \n )}\n \n \n )}\n \n\n \n \n )}\n \n );\n};\n\nexport default observer(FormPollWidget);\n\n// custom sx ___________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\n\nconst sxTabContext = { display: 'flex', flexDirection: 'column', flex: '1' };\nconst sxTabContextBox = {\n background: '#9e9e9e38',\n borderBottom: 1,\n borderColor: 'divider',\n ' .Mui-selected': { backgroundColor: 'white' }\n};\n","import { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport MaterialTable from '@material-table/core';\nimport AddIcon from '@mui/icons-material/Add';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport useCustomEwapi from 'hooks/useCustomEwapi';\n// custom components\nimport LoadingContent from '../../loading/LoadingContent';\nimport TableSelectFilter from '../../tables/TableSelectFilter';\n\nconst WordCloudBlackList = ({ widgetNid }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const endPoint = `ewapi/wordclouds/${widgetNid}`;\n const { response, loading, error } = useCustomEwapi(endPoint);\n // state\n const [saving, setSaving] = useState(false);\n const [tableData, setTableData] = useState([]);\n // const\n const orderCollection = [{ orderBy: 1, orderDirection: 'desc', sortOrder: 1 }];\n const tableRef = useRef();\n\n const startIcon = (blacklist) => (blacklist ? : );\n\n useEffect(() => {\n if (response) {\n // add new field to the data for the blacklist column\n // workaround for filter column not working with numbers\n const newData = response.data.answers.map((item) => ({\n ...item,\n blacklists2: item.blacklists === 1 ? t('yes') : t('no')\n }));\n setTableData(newData);\n }\n }, [response, t]);\n\n const updateBlackList = async (data) => {\n setSaving(true);\n const {\n word,\n nid,\n blacklists,\n tableData: { index }\n } = data;\n // set correct list to add word\n const list = blacklists ? 'whitelist' : 'blacklist';\n const resp = await store.lmsApi.fetchEwapiData(`ewapi/wordclouds/${nid}/${list}/${encodeURIComponent(word)}`);\n // if errrors show toast with error\n if (resp.data?.errors?.length > 0) {\n store.showToast({ message: resp.data?.errors[0]?.title, variant: 'error' });\n setSaving(false);\n return null;\n }\n const tableDataCopy = [...tableData];\n // update fields: blacklists, blacklists2\n tableDataCopy[index].blacklists = tableDataCopy[index].blacklists === 0 ? 1 : 0;\n tableDataCopy[index].blacklists2 = tableDataCopy[index].blacklists2 === t('no') ? t('yes') : t('no');\n setTableData(tableDataCopy);\n setSaving(false);\n return store.showToast({ message: 'saved', variant: 'success' });\n };\n\n if (loading) return ;\n\n // select filter for blacklist column\n const selectBlackList = [\n { value: '', label: 'All' },\n { value: t('yes'), label: 'Blacklist' },\n { value: t('no'), label: 'Whitelist' }\n ];\n\n return (\n \n \n {error &&

    Something went wrong...

    }\n {response && (\n ,\n render: (rowData) => (rowData.blacklists ? t('yes') : t('no'))\n },\n {\n title: '+/- blacklist',\n field: 'blacklists',\n width: 100,\n filtering: false,\n sorting: false,\n render: (rowData) => (\n updateBlackList(rowData)}\n sx={{ fontSize: '10px', background: 'white', '&:hover': { background: 'white' } }}\n size=\"small\"\n loading={saving}\n loadingPosition=\"start\"\n startIcon={startIcon(rowData.blacklists)}\n variant=\"outlined\"\n >\n {rowData.blacklists ? t('remove') : t('add')}\n \n )\n }\n ]}\n options={{\n idSynonym: 'word',\n emptyRowsWhenPaging: false,\n pageSize: 50,\n pageSizeOptions: [5, 10, 25, 50, 100, response.data.answers.length],\n actionsColumnIndex: -1,\n padding: 'dense',\n maxColumnSort: 1,\n paging: true,\n defaultOrderByCollection: orderCollection,\n showColumnSortOrder: true,\n filtering: true,\n rowStyle: (rowData, index) => ({\n backgroundColor: index % 2 ? 'rgba(0,0,0,0.04)' : 'rgba(0,0,0,0.0)'\n })\n }}\n />\n )}\n
    \n
    \n );\n};\n\nWordCloudBlackList.propTypes = {\n widgetNid: PropTypes.number\n};\n\nexport default observer(WordCloudBlackList);\n\nconst sxStartIcon = { fontSize: '13px!important' };\nconst sxBlackListTable = {\n 'table tbody tr[data-testid=\"mtablebodyrow\"]:hover td': {\n background: 'rgba(0,0,0,0.08)'\n }\n};\n// const sxFixedHeader = {\n// ' table tbody': {\n// display: 'block',\n// overflow: 'auto',\n// height: '400px',\n// width: '100%'\n// },\n// ' table thead tr': {\n// display: 'block'\n// }\n// };\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@mui/material';\nimport ReactWordcloud from 'react-wordcloud';\nimport useCustomEwapi from 'hooks/useCustomEwapi';\nimport LoadingContent from '../../loading/LoadingContent';\n\nconst FormWordCloudWidgetPreview = ({ widgetNid }) => {\n const endPoint = `ewapi/wordcloud/${widgetNid}/data`;\n const { response, loading, error } = useCustomEwapi(endPoint);\n\n const options = {\n colors: ['#1A237E', '#ff7f0e', '#039BE5'],\n enableTooltip: true,\n deterministic: false,\n fontFamily: 'impact',\n fontSizes: [13, 60],\n fontStyle: 'normal',\n fontWeight: 'normal',\n padding: 1,\n rotations: 3,\n rotationAngles: [0, 90],\n scale: 'sqrt',\n spiral: 'archimedean',\n transitionDuration: 1000\n };\n\n if (loading) return ;\n\n let formatWords = [];\n if (response) {\n formatWords = response.wordcloud.words.map(({ word: value, count }) => ({\n text: value.slice(0, 20),\n value: count\n }));\n }\n\n return (\n \n \n {error &&

    Something went wrong...

    }\n {response && }\n
    \n
    \n );\n};\n\nFormWordCloudWidgetPreview.propTypes = {\n widgetNid: PropTypes.number\n};\n\nexport default observer(FormWordCloudWidgetPreview);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Controller } from 'react-hook-form';\n// MUI\nimport { Stack, FormControlLabel, Checkbox, Box } from '@mui/material';\n/* Custom */\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport useJsonApi from 'hooks/useJsonApi';\nimport LoadingContent from '../../loading/LoadingContent';\nimport { textFieldProps, numericalProps } from './formWidgets.helper';\n\nconst FormWordCloudWidgetEdit = ({ wordCloudWidgetId, getValues, ...restProps }) => {\n const { setValue, control, errors } = restProps;\n const { response } = useJsonApi(`wordcloud_widget/${wordCloudWidgetId}`, '');\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n const [edit, setEdit] = useState(false);\n\n useEffect(() => {\n if (wordCloudWidgetId && response && !getValues()?.poll?.attributes?.title) {\n setValue('wordcloud', response.data);\n }\n }, [getValues, response, setValue, wordCloudWidgetId]);\n\n if (!response || !getValues()?.wordcloud?.id) return ;\n\n return (\n \n \n setEdit(!edit)} inputProps={{ 'aria-label': 'controlled' }} />}\n label={t('edit')}\n />\n \n \n \n \n \n \n (\n }\n />\n )}\n />\n \n \n \n );\n};\n\nFormWordCloudWidgetEdit.propTypes = {\n wordCloudWidgetId: PropTypes.string,\n reset: PropTypes.func,\n setValue: PropTypes.func,\n getValues: PropTypes.func,\n control: PropTypes.any\n};\n\nexport default observer(FormWordCloudWidgetEdit);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Controller } from 'react-hook-form';\nimport { Stack, Divider, Box, FormControlLabel, Checkbox } from '@mui/material';\nimport { MyTextField, Editor } from 'components/form/RHF';\nimport { textFieldProps, numericalProps } from './formWidgets.helper';\n\nconst FormWordCloudWidgetNew = ({ control, setValue }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n\n return (\n \n {t('orCreateNewWordcloudWidget')}\n \n \n \n \n\n \n (\n }\n />\n )}\n />\n \n \n \n // \n );\n};\n\nFormWordCloudWidgetNew.propTypes = {\n control: PropTypes.any,\n errors: PropTypes.any,\n isDisabled: PropTypes.func,\n setError: PropTypes.func,\n clearErrors: PropTypes.func,\n setValue: PropTypes.func\n};\n\nexport default observer(FormWordCloudWidgetNew);\n\nconst sxCreateNewWordcloud = { boxShadow: '0px 0px 5px 0px rgba(0,0,0,0.2)', padding: '15px', paddingTop: '30px', borderRadius: '5px' };\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Box } from '@mui/material';\n\nconst FormWordCloudWidgetShow = ({ getValues }) => {\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n\n const title = getValues()?.wordcloud?.attributes?.title;\n const question = getValues()?.wordcloud?.attributes?.body.value;\n const showFields = getValues()?.wordcloud?.attributes?.show_fields;\n const inputRequired = getValues()?.wordcloud?.attributes?.input_required;\n\n return (\n \n \n \n {`${t('title')}`}\n {title}\n \n \n {`${t('question')}`}\n {question}\n \n \n {`${t('numberOfFields')}`}\n {showFields}\n \n \n {`${t('allFieldsRequired')}`}\n {inputRequired ? t('yes') : t('no')}\n \n \n \n );\n};\n\nFormWordCloudWidgetShow.propTypes = {\n getValues: PropTypes.func\n};\n\nexport default observer(FormWordCloudWidgetShow);\n\n// custom sx ________________________________________________________\nconst sxQuestionWidgetFields = {\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0px 0px 5px 0px rgba(0,0,0,0.2)',\n borderRadius: '5px',\n padding: '15px',\n paddingTop: '20px',\n rowGap: '20px'\n};\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Grid, Divider, Tab, DialogContent, Box, Backdrop, CircularProgress } from '@mui/material';\n// mui lab\nimport TabContext from '@mui/lab/TabContext';\nimport TabList from '@mui/lab/TabList';\nimport TabPanel from '@mui/lab/TabPanel';\n// icons\nimport ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight';\n/* Custom RHF components */\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\n// custom components\nimport FormActionBar from './FormActionBar';\nimport FormDefaultWidgetsAttributes from './FormDefaultWidgetsAttributes';\n\n// import FormWordCloudWidgetTabs from './FormWordCloudWidgetTabs';\nimport WidgetInCourses from './WidgetInCourses';\nimport WordCloudBlackList from './WordCloudBlackList';\nimport LoadingContent from '../../loading/LoadingContent';\nimport FormWordCloudWidgetPreview from './FormWordCloudWidgetPreview';\nimport FormWordCloudWidgetEdit from './FormWordCloudWidgetEdit';\nimport FormWordCloudWidgetNew from './FormWordCloudWidgetNew';\nimport FormWordCloudWidgetShow from './FormWordCloudWidgetShow';\n// custom search component\nimport SearchPollWordcloudWidgets from './SearchPollWordcloudWidgets';\n\nimport { textFieldProps, toggleDialogEditWidget, ToastWidgetSubmit, newWordCloudQuestion, WordcloudSchema } from './formWidgets.helper';\n\nconst FormWordCloudWidget = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n // states\n const [saving, setSaving] = useState(false);\n const [loadingData, setLoadingData] = useState(true);\n const [tabItem, setTabItem] = useState('1');\n\n // RHF INITIAL FORM DATA\n const [defaultFormData, setDefaultFormData] = useState({});\n\n // GET INITIAL POLL QUESTION DATA FROM STORE _______________________________________________\n const iniWordcloudQuestion = store.courseEdit.setEditWidget;\n const isNewQuestion = !iniWordcloudQuestion?.id;\n\n const newFormWordCloudQuestion = useMemo(() => ({ ...newWordCloudQuestion }), []);\n\n // UPDATE NEWWORDCLOUDQUESTION DATA WITH STORE DATA _______________________________________________\n // if new question: set the widget_code for the new question\n if (isNewQuestion) newFormWordCloudQuestion.question.attributes.widget_code = iniWordcloudQuestion.attributes.widget_code;\n // if existing question: override question with the existing question\n if (!isNewQuestion) newFormWordCloudQuestion.question = iniWordcloudQuestion;\n\n useEffect(() => {\n // set the pollWidgetId\n const wordcloudWidgetId = iniWordcloudQuestion?.relationships?.widget_link?.data?.id;\n // fetch the poll data\n const fetchData = async () => {\n try {\n const result = await store.lmsApi.fetchIt(`poll_widget`, '', wordcloudWidgetId);\n // update the newPollQuestion with the poll data\n newFormWordCloudQuestion.wordcloud = result.data.data;\n setDefaultFormData(newFormWordCloudQuestion);\n setLoadingData(false);\n } catch (error) {\n console.error(error);\n }\n };\n // pollWidgetId = false: set the default form data\n if (!wordcloudWidgetId) {\n setDefaultFormData(newFormWordCloudQuestion);\n setLoadingData(false);\n return;\n }\n // pollWidgetId = true: call to fetch the poll data\n fetchData();\n }, [iniWordcloudQuestion, newFormWordCloudQuestion, store.lmsApi]);\n\n // helper function to get the profession of the CourseContainer\n const _getCourseContainerProfession = useCallback(() => {\n const {\n courseEdit: {\n courseContainer: {\n relationships: {\n profession: { data }\n }\n }\n }\n } = store;\n const wordcloudProfession = {\n type: 'profession',\n id: data.id,\n meta: {\n drupal_internal__target_id: data.attributes.drupal_internal__tid\n }\n };\n return wordcloudProfession;\n }, [store]);\n\n // TOAST NOTIFICATIONS ________________________________________________\n const toast = ToastWidgetSubmit();\n\n // ON SUBMIT / HANDLE SUBMIT __________________________________________\n const handleFormSubmit = async (newWidget) => {\n setSaving(true);\n // if new poll widget set the profession of the poll to the profession of the destructered CourseContainer\n if (!newWidget?.wordcloud?.relationships?.profession?.data?.id) {\n newWidget.wordcloud.relationships.profession.data = _getCourseContainerProfession();\n }\n try {\n await store.courseEdit.patchPostPolWordQuestion(newWidget);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n setSaving(false);\n toggleDialogEditWidget(store);\n } catch (error) {\n setSaving(false);\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n toggleDialogEditWidget(store);\n }\n };\n\n // TAB ITEMS ________________________________________________\n const tabListItems = [\n { label: 'Wordcloud widget', value: '1' },\n { label: 'Edit', value: '1a' },\n { label: 'Preview', value: '2' },\n { label: t('usedInCourses'), value: '3' },\n { label: t('usedWords'), value: '4' }\n ];\n // handle tab change\n const handleChange = (_event, newValue) => setTabItem(newValue);\n\n // IF LOADING SHOW LOADER ELSE CONTINUE ____________________________\n if (loadingData) return ;\n\n return (\n
    \n {({ control, errors, dirty, reset, resetField, setValue, getValues }) => (\n <>\n theme.zIndex.drawer + 1 }} open={saving}>\n \n \n \n {/* top */}\n \n \n \n \n {t('linkWordcloudWidget')}\n\n \n {/* create custom wordcloud */}\n {!getValues('question.relationships.widget_link.data.id') && (\n \n )}\n \n \n\n \n {/* default question fields in right column */}\n \n \n \n\n {/* POLL WIDGET TABS */}\n {getValues()?.wordcloud?.id && getValues()?.question?.relationships?.widget_link?.data?.id && (\n \n \n \n \n \n {getValues()?.wordcloud?.id && (\n \n \n \n \n {tabListItems.map((item) => (\n \n ))}\n \n \n {/* SHOW POLL WIDGET VALUES (not editable) */}\n \n \n \n\n {/* EDIT POLL WIDGET */}\n \n \n \n\n {/* PREVIEW */}\n \n {getValues().wordcloud?.attributes?.drupal_internal__nid && (\n \n )}\n \n\n {/* WIDGET USED IN COURSES */}\n \n {getValues().wordcloud?.attributes?.drupal_internal__nid && (\n \n )}\n \n \n {getValues().wordcloud?.attributes?.drupal_internal__nid && (\n \n )}\n \n \n \n )}\n \n \n )}\n \n \n \n )}\n \n );\n};\n\nexport default observer(FormWordCloudWidget);\n\n// custom sx ___________________________________________________\nconst sxGrid = {\n '.MuiFormControl-root': { margin: '0px' },\n '.MuiGrid-item': { paddingTop: '0px' }\n};\n//\nconst sxFlexColumnGap = {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px'\n};\nconst sxTabContext = { display: 'flex', flexDirection: 'column', flex: '1' };\nconst sxTabContextBox = {\n background: '#9e9e9e38',\n borderBottom: 1,\n borderColor: 'divider',\n ' .Mui-selected': { backgroundColor: 'white' }\n};\n","/* Core */\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Box, Dialog, DialogTitle, Chip, Button } from '@mui/material';\n/* Custom components */\nimport FormRadioQuestion from './formWidgets/FormRadioQuestion';\nimport FormVideoWidget from './formWidgets/FormVideoWidget';\nimport FormOpenQuestion from './formWidgets/FormOpenQuestion';\nimport FormHtmlWidget from './formWidgets/FormHtmlWidget';\nimport FormSortQuestion from './formWidgets/FormSortQuestion';\nimport FormMatchQuestion from './formWidgets/FormMatchQuestion';\nimport FormNumericalQuestion from './formWidgets/FormNumericalQuestion';\nimport FormPollWidget from './formWidgets/FormPollWidget';\nimport FormWordCloudWidget from './formWidgets/FormWordCloudWidget';\nimport { sxCustomQuickEditor } from './formWidgets/formWidgets.helper';\n\nconst EditWidgetDialog = () => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm', { keyPrefix: 'quickWidgetEditor' });\n\n if (!store.courseEdit.toggleDialogEditWidget) return null;\n //\n const editWidget = store.courseEdit.setEditWidget || {};\n const editWidgetAction = editWidget.id ? `${t('quick')} ${t('edit')}: ` : `${t('quick')} ${t('add')}: `;\n //\n const dialogTitle = `${editWidgetAction} ${editWidget.attributes.widget_code}`;\n const widgetType = editWidget.attributes.widget_type.toLowerCase();\n\n // current available form types\n const formType = {\n 'radio question': ,\n 'check question': ,\n 'video widget': ,\n 'open question': ,\n 'html widget': ,\n 'sort question': ,\n 'match question': ,\n 'numerical question': ,\n 'poll widget': ,\n 'wordcloud widget': \n };\n\n return (\n \n \n {dialogTitle}\n \n \n \n \n {formType[widgetType] || }\n \n );\n};\n\nexport default observer(EditWidgetDialog);\n\nconst editDialog = {\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: '20px',\n fontWeight: '600',\n color: '#584c4c',\n '& .edit-widget-type': { fontSize: '16px' },\n '& .MuiInputBase-root.MuiOutlinedInput-root': { fontSize: '10px' }\n};\n","import { observer } from 'mobx-react';\nimport { useContext, useState } from 'react';\nimport { Store } from 'state/ContextStore';\n\n/* MUI */\nimport LinkOffIcon from '@mui/icons-material/LinkOff';\nimport { Popper, Tooltip } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { useTranslation } from 'react-i18next';\nimport { urlify } from 'state/Utils';\nimport LoaderWithBackdrop from '../loading/LoaderWithBackdrop';\n\nconst BtnLinkedCourse = () => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n const [anchorEl, setAnchorEl] = useState(null);\n const [open, setOpen] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n //\n const linked = store?.routerStore?.routerState?.queryParams?.type === 'linked';\n if (!linked) return null;\n\n const btnLink = {\n btnTooltip: t('editCourse.btnDeleteLink.tooltip'),\n btnTitle: t('editCourse.btnDeleteLink.btnTitle'),\n dialogTitle: t('editCourse.btnDeleteLink.dialogTitle'),\n dialogMesssage: t('editCourse.btnDeleteLink.dialogMessage'),\n dialogBtnCancel: t('editCourse.btnDeleteLink.btnCancel'),\n dialogBtnDelete: t('editCourse.btnDeleteLink.btnDelete')\n };\n\n const toast = {\n success: { content: 'Courses are updated', title: 'Yeah Great', type: 'success' },\n error: { content: 'er is iets mis gegaan', title: 'Error', type: 'error' },\n default: { timeOut: 5000, variant: 'filled' }\n };\n\n // DELETE LINKED COURSE\n const handleDelete = async () => {\n setIsSaving(true);\n const { courseContainer } = store.courseEdit;\n const { courseuuid, packageNid, containerNid } = store.params;\n //\n const courses = [...JSON.parse(JSON.stringify(courseContainer.relationships.courses.data))];\n const indexCurrentCourse = courses.findIndex((course) => course.id === courseuuid);\n courses.splice(indexCurrentCourse, 1);\n //\n const newCourseContainer = {\n id: courseContainer.id,\n type: courseContainer.type,\n relationships: { courses: { data: courses } }\n };\n\n try {\n await store.courseEdit.lmsApi.patchpost(newCourseContainer);\n store.courseEdit.setToasts({ ...toast.success, ...toast.default });\n const routerParams = {\n params: { package: urlify(store.params.package.toLowerCase()), packageNid, containerNid }\n };\n setIsSaving(false);\n store.routerStore.goTo('adminDashboardCourses', routerParams);\n } catch (error) {\n store.courseEdit.setToasts({ ...toast.error, ...toast.default });\n setIsSaving(false);\n }\n };\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n setOpen((previousOpen) => !previousOpen);\n };\n\n return (\n \n \n \n }\n onClick={handleClick}\n >\n {btnLink.btnTitle}\n \n \n \n {({ TransitionProps }) => (\n \n \n \n {btnLink.dialogTitle}\n \n \n {btnLink.dialogMesssage}\n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default observer(BtnLinkedCourse);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport { Box } from '@mui/material';\n\nconst BtnPreviewIntroduction = ({ handleClickDialog, getValues }) => (\n handleClickDialog(getValues())}>\n \n Preview\n \n);\n\nBtnPreviewIntroduction.propTypes = {\n handleClickDialog: PropTypes.func,\n getValues: PropTypes.func\n};\n\nexport default observer(BtnPreviewIntroduction);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Box, Tooltip } from '@mui/material';\nimport DownloadIcon from '@mui/icons-material/Download';\n\nconst BtnDownloadAsCsv = ({ data }) => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n\n const { course, lessonContainer } = data();\n\n // Check if the course is on label E-WISE\n const isEwise = store?.label === 'ewise';\n if (!isEwise) return null;\n\n // Get the course id and the target group\n const courseNid = store?.courseEdit?.currentCourse?.attributes?.drupal_internal__nid || '';\n const targetGroup = store?.courseEdit?.courseContainer?.relationships?.profession?.data?.attributes?.name || '';\n\n // return the function group\n const functionGroup = (params) => {\n const isLeidingGevend = params.toLowerCase().includes('schoolleider') || params.toLowerCase().includes('leidinggevend');\n return isLeidingGevend ? 'Leidinggevend' : 'Lesgevend';\n };\n\n // return the education type\n const educationType = (type) => {\n if (type.toLowerCase().includes('po')) return 'PO';\n if (type.toLowerCase().includes('school')) return 'PO';\n if (type.toLowerCase().includes('begeleider')) return 'PO';\n if (type.toLowerCase().includes('vo')) return 'VO';\n if (type.toLowerCase().includes('mbo')) return 'MBO';\n if (type.toLowerCase().includes('kind')) return 'KO';\n if (type.toLowerCase().includes('pedag')) return 'KO';\n return '';\n };\n // Create the csv data\n const createCsvData = () => {\n const csvData = {\n courseid: courseNid,\n coursename: `\"${course?.attributes?.title || ''}\"`,\n extralabel: `\"${lessonContainer?.attributes?.field_extra_label || ''}\"`,\n url: `https://learn.e-wise.nl/to-course/${courseNid}`,\n points: course?.attributes?.field_points,\n authors: `\"${lessonContainer?.relationships?.field_authors?.map((author) => author.title).join(', ') || ''}\"`,\n category: `\"${course?.relationships?.course_category?.map((cat) => cat.title).join(', ')}\"`,\n targetgroup: targetGroup,\n summary: `\"${lessonContainer?.attributes?.field_information.replace(/(\\r\\n|\\n|\\r|\\t)/gm, '')}\"`,\n goals: `\"${lessonContainer?.attributes?.field_goals.replace(/(\\r\\n|\\n|\\r|\\t)/gm, '')}\"`,\n image: ``,\n registers: `\"${course?.relationships?.course_category2?.map((reg) => reg.title).join(', ')}\"`,\n expected: course?.attributes?.expected,\n courseonline: !!course.attributes.online,\n dateoffline: course?.attributes?.field_valid_period?.end_value?.split('-').reverse().join('-') || '',\n functiongroup: functionGroup(store.params.package),\n educationtype: educationType(store.params.package)\n };\n const headers = Object.keys(csvData);\n const rows = Object.values(csvData);\n const csv = [headers.join(','), rows.join(',')].join('\\n');\n return csv;\n };\n const createCsvFile = () => {\n try {\n const csv = createCsvData();\n const csvBlob = new Blob([csv], { type: 'text/csv' });\n const url = URL.createObjectURL(csvBlob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `cursus_${courseNid}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n store.courseEdit.setToasts({\n title: t('editCourse.btnSaveAsCsv.error.title'),\n content: t('editCourse.btnSaveAsCsv.error.message'),\n type: 'error',\n timeOut: 6000\n });\n console.error('Error creating csv file', error);\n }\n };\n return (\n \n createCsvFile()}>\n {t('editCourse.btnSaveAsCsv.btnTitle')}\n \n \n );\n};\n\nBtnDownloadAsCsv.propTypes = {\n data: PropTypes.func\n};\n\nexport default observer(BtnDownloadAsCsv);\n","import { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Alert } from '@mui/material';\n\nconst BtnReUsedCourse = () => {\n const store = useContext(Store);\n const { t } = useTranslation('editCourseForm');\n const { courseEdit } = store;\n const reUsedText = t('editCourse.reUsed');\n const lessonContainer = courseEdit?.currentCourse?.included.find((item) => item.type === 'lesson_container');\n const lessonContainerProfName = lessonContainer?.relationships?.profession?.data?.id?.attributes?.name;\n return (\n \n {reUsedText}: {lessonContainerProfName}\n \n );\n};\n\nexport default observer(BtnReUsedCourse);\n\nconst sxAlertReUsed = {\n position: 'absolute',\n top: '18px',\n right: '220px',\n zIndex: '100000',\n boxShadow: '1px 3px 6px #0000006b'\n};\n","import { observer } from 'mobx-react';\n// import { useContext } from 'react';\n// import { Store } from 'state/ContextStore';\nimport PropTypes from 'prop-types';\n\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Box, FormControlLabel, Checkbox, Tooltip } from '@mui/material';\n\nconst CheckboxEnableEdit = ({ linked, overRideEdit, handleOverRideEdit }) => {\n const { t } = useTranslation('editCourseForm');\n if (!linked) return null;\n // const store = useContext(Store);\n return (\n \n \n \n }\n label={t('editCourse.checkboxOverRide.label')}\n labelPlacement=\"start\"\n sx={{ color: '#505055' }}\n />\n \n \n );\n};\n\nCheckboxEnableEdit.propTypes = {\n overRideEdit: PropTypes.bool,\n handleOverRideEdit: PropTypes.func,\n linked: PropTypes.bool\n};\n\nexport default observer(CheckboxEnableEdit);\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n/* MUI */\nimport { Tooltip, Box } from '@mui/material';\nimport ContentPasteIcon from '@mui/icons-material/ContentPaste';\n\nconst BtnCopyToCourse = () => {\n const { t } = useTranslation('editCourseForm');\n const store = useStore();\n const { courseEdit } = store;\n const courseId = courseEdit.currentCourse.attributes.drupal_internal__nid;\n\n const copyToClipboard = async () => {\n const toCourseLabel = {\n pe: 'https://learn.pe-academy.nl/to-course',\n po: 'https://learn.po-online.nl/to-course',\n cme: 'https://learn.cme-online.nl/to-course',\n ewise: 'https://learn.e-wise.nl/to-course'\n };\n const toCourseUrl = `${toCourseLabel[store.label]}/${courseId}`;\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n\n const toast = {\n success: {\n title: t('editCourse.btnCopyToCourseLink.success.title'),\n content: `${toCourseUrl}`,\n type: 'success'\n },\n error: {\n title: t('editCourse.btnCopyToCourseLink.error.title'),\n content: t('editCourse.btnCopyToCourseLink.error.message'),\n type: 'error'\n },\n default: { timeOut: 4000, variant: 'outlined' }\n };\n // firefox doesn't support the permissions API\n if (isFirefox) {\n await navigator.clipboard.writeText(toCourseUrl);\n courseEdit.setToasts({ ...toast.success, ...toast.default });\n }\n if (!isFirefox) {\n try {\n const permissions = await navigator.permissions.query({ name: 'clipboard-write' });\n if (permissions.state === 'granted' || permissions.state === 'prompt') {\n await navigator.clipboard.writeText(toCourseUrl);\n courseEdit.setToasts({ ...toast.success, ...toast.default });\n } else {\n throw new Error(\"Can't access the clipboard. Check your browser permissions.\");\n }\n } catch (error) {\n courseEdit.setToasts({ ...toast.error, ...toast.default });\n }\n }\n };\n return (\n \n copyToClipboard()}>\n \n {t('editCourse.btnCopyToCourseLink.btnTitle')}\n \n \n );\n};\n\nexport default observer(BtnCopyToCourse);\n","import { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\n\nimport PropTypes from 'prop-types';\nimport { styled, alpha } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Divider from '@mui/material/Divider';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport BtnCopyToCourseLink from './BtnCopyToCourseLink';\nimport BtnPreviewIntroduction from './BtnPreviewIntroduction';\nimport BtnDownloadAsCsv from './BtnDownloadAsCsv';\n\nconst StyledMenu = styled((props) => (\n \n))(({ theme }) => ({\n '& .MuiPaper-root': {\n borderRadius: 6,\n marginTop: theme.spacing(1),\n minWidth: 180,\n color: 'rgb(55, 65, 81)',\n boxShadow:\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\n '& .MuiMenu-list': {\n padding: '4px 0'\n },\n '& .MuiMenuItem-root': {\n '& .MuiSvgIcon-root': {\n fontSize: 18,\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(1.5)\n },\n '&:active': {\n backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)\n }\n },\n ...theme.applyStyles('dark', {\n color: theme.palette.grey[300]\n })\n }\n}));\n\nconst BtnDropdownOptions = ({ handleClickDialog, getValues }) => {\n const store = useStore();\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n // Check if the course is on label E-WISE\n const isEwise = store?.label === 'ewise';\n\n return (\n
    \n }\n >\n Options\n \n \n \n \n \n \n \n \n \n {isEwise && }\n {isEwise && (\n \n \n \n )}\n \n
    \n );\n};\n\nBtnDropdownOptions.propTypes = {\n handleClickDialog: PropTypes.func,\n getValues: PropTypes.func\n};\n\nexport default observer(BtnDropdownOptions);\n","import * as Yup from 'yup';\n\nconst EditCourse = Yup.object().shape({\n course: Yup.object({\n attributes: Yup.object({\n title: Yup.string().min(5, 'Title should be longer than 5 characters').required('Title is required'),\n status: Yup.bool(),\n // field_accreditation_code: Yup.lazy((value) => {\n // if (value.length > 2) {\n // return Yup.string().min(5, 'zooo kort?').required();\n // }\n // return Yup.mixed().notRequired();\n // }),\n online: Yup.string().nullable(),\n course_status: Yup.string().required('Course status is required'),\n // field_points: Yup.string().when(['status', 'online'], {\n // is: (status, online) => {\n //\n //\n // return status && online;\n // },\n // then: Yup.string().required('Points is required'),\n // otherwise: Yup.string().nullable()\n // }),\n field_points: Yup.string().nullable(),\n field_extra_points: Yup.string().nullable(),\n field_valid_period: Yup.object({\n value: Yup.date().nullable(),\n end_value: Yup.date().nullable()\n })\n }),\n relationships: Yup.object({\n course_category: Yup.array().min(1, 'Category is required')\n })\n }),\n lessonContainer: Yup.object({\n attributes: Yup.object({}),\n relationships: Yup.object({})\n })\n});\n\nexport { EditCourse };\n","/* eslint-disable camelcase */\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n/* MUI COMPONENTS */\nimport { Grid, Button, Box } from '@mui/material';\nimport UndoIcon from '@mui/icons-material/Undo';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport { LoadingButton } from '@mui/lab';\n/* COMPONENTS */\nimport { Form } from 'components/form';\nimport { TabComponent } from 'components';\n/* HELPER */\nimport { editCourseModel, EditCourseDefaultValues, Toast } from './EditCourse.helper';\nimport { FrmCourse, FrmImages, FrmIntro, FrmLessons, FrmSharing, FrmStudents, FrmFeedback } from './forms';\n//\nimport LessonScreen from '../components/dialog/LessonScreen';\nimport IntroductionPreviewDialog from '../components/dialog/IntroductionPreviewDialog';\nimport EditWidgetDialog from '../components/dialog/EditWidgetDialog';\n//\nimport { BtnLinkedCourse, CheckEnableEdit, TxtReUsed, BtnDropdownOptions } from '../components/editCourse';\nimport BtnShowSidebar from '../components/layout/BtnShowSidebar';\n/* LOADERS */\nimport LoaderWithBackdrop from '../components/loading/LoaderWithBackdrop';\nimport LoadingLinearProgress from '../components/loading/LoadingLinearProgress';\n/* SCHEMAS */\nimport { EditCourse as EditCourseSchema } from './forms/beans/EditCourse.ValidationSchema';\n/* CUSTOM SCSS */\nimport './addCourse.scss';\n\n/*\n EDIT COURSE PAGE\n In summary, the EditCourse component serves as an interface for editing course details. \n It allows users to navigate between different editing tabs, including an introduction section and sections for managing images and lessons. \n Users can save their changes and preview the course details as well. \n It integrates with the courseEdit store for data management.\n */\nconst EditCourse = () => {\n const store = useStore();\n const { t } = useTranslation('editCourseForm');\n const { courseEdit } = store;\n const { currentCourse } = courseEdit;\n const { lesson_container } = currentCourse?.relationships || {};\n //\n const [loading, setLoading] = useState(false);\n const [overRideEdit, setOverRideEdit] = useState(false);\n // OPEN DIALOG PREVIEW\n const [open, setOpen] = useState(false);\n const [previewValues, setPreviewValues] = useState(false);\n //\n const showSidebar = store.courseEdit.showSidebarEdit;\n const setDisplay = showSidebar ? 'flex' : 'none';\n //\n const linked = store?.routerStore?.routerState?.queryParams?.type === 'linked';\n\n // COURSE DEFAULT VALUES ____________________________________________________\n const defaultValues = EditCourseDefaultValues(store);\n\n // TOASTS MESSAGE WITH TRANSLATIONS _________________________________________\n const toast = Toast();\n\n // TAB FUNCTIONS ____________________________________________________________\n const changeTab = (tab) => () => {\n window.history.pushState(null, '', `?tab=${tab}`);\n courseEdit.setEditTab(tab);\n };\n // tab items\n const tabItems = [\n { id: 'Introduction', label: <>{t('editCourse.tabs.introduction', 'Introduction')}, callback: changeTab('Introduction') },\n { id: 'Images', label: <>{t('editCourse.tabs.images', 'Images')}, callback: changeTab('Images') },\n { id: 'Lessons', label: <>{t('editCourse.tabs.lessons', 'Lessons')}, callback: changeTab('Lessons') },\n { id: 'Sharing', label: <>{t('editCourse.tabs.sharing', 'Sharing Info')}, callback: changeTab('Sharing') },\n { id: 'Students', label: <>{t('editCourse.tabs.students', 'Students')}, callback: changeTab('Students') },\n { id: 'Feedback', label: <>{t('editCourse.tabs.feedback', 'Feedback')}, callback: changeTab('Feedback') }\n ];\n // check if tab exists || default tab ('Introduction')\n const isTabItem = tabItems.find((tab) => tab.id === courseEdit.editTab);\n if (!isTabItem) courseEdit.setEditTab('Introduction');\n // get current tab\n const { editTab } = courseEdit;\n\n // PREVIEW DIALOG FUNCTIONS ________________________________________________\n const handleClickDialog = (passedValues) => {\n setPreviewValues(passedValues);\n setOpen(!open);\n };\n\n // OVERRIDE EDIT FUNCTIONS __________________________________________________\n const handleOverRideEdit = () => setOverRideEdit(!overRideEdit);\n\n // ENABLE / DISABLE FIELDS __________________________________________________\n const isDisabled = (name) => {\n if (linked && !overRideEdit) return true;\n if (linked && overRideEdit) return false;\n const isReUsed = courseEdit.isReUsedCoursed();\n const isCourse = name.startsWith('course');\n return isReUsed && !isCourse;\n };\n\n // PATCH PICTURE (helper function used in handleSubmit) _______________________\n const picturePatch = async (newValues, key) => {\n const isObject = typeof newValues.lessonContainer.relationships[key].data === 'object';\n if (newValues.lessonContainer.relationships[key].data && newValues.lessonContainer.relationships[key].data !== '' && isObject) {\n await lesson_container.data.id.patchPicture(lesson_container?.data?.id, newValues.lessonContainer.relationships[key].data, key);\n delete newValues.lessonContainer.relationships[key];\n }\n delete newValues.lessonContainer.relationships[key];\n };\n\n // SUBMIT FORM ______________________________________________________________\n const handleSubmit = async (values) => {\n setLoading(true);\n const newValues = editCourseModel(values);\n try {\n await picturePatch(newValues, 'field_course_image_extern');\n await picturePatch(newValues, 'field_course_header_photo');\n await picturePatch(newValues, 'field_coursephoto');\n // POST VALUES TO API\n await courseEdit.patchCourseData(currentCourse, newValues);\n // show toast\n courseEdit.setToasts({ ...toast.success, ...toast.default });\n setLoading(false);\n } catch (error) {\n courseEdit.setToasts({ ...toast.error, ...toast.default });\n setLoading(false);\n }\n };\n\n return (\n \n {courseEdit.isReUsedCoursed() && }\n \n
    \n {({ control, dirty, reset, watch, ...restProps }) => (\n \n \n \n {/* TAB ITEMS */}\n \n \n \n {/* PREVIEW / LINKED / CHECKBOX */}\n \n \n \n \n \n \n \n\n {/* TAB CONTENT -> FORMS */}\n \n {editTab === 'Introduction' && }\n {editTab === 'Images' && }\n {editTab === 'Lessons' && }\n {editTab === 'Sharing' && }\n {editTab === 'Students' && }\n {editTab === 'Feedback' && }\n \n \n \n {/* FORM COURSE @ RIGHT SIDEBAR */}\n \n \n\n {/* FORM ACTION BAR: saving progress indicator, [reset button], [save button] */}\n \n \n \n \n \n \n\n }\n disabled={!dirty || (linked && !overRideEdit) || Object.keys(restProps.errors).length > 0}\n loading={loading}\n loadingPosition=\"end\"\n >\n {t('editCourse.save')}\n \n \n \n \n )}\n \n\n {/* Dialogs */}\n \n \n \n
    \n );\n};\n\nexport default observer(EditCourse);\n\n// CUSTOM SX _____________________________________________________________\nconst sxBoxInfo = {\n display: 'flex',\n alignSelf: 'center',\n fontSize: '20px',\n fontWeight: '900',\n color: '#c0cce4',\n gap: '10px',\n padding: '0px 15px'\n};\nconst sxBoxEditCourse = {\n display: 'flex',\n flexDirection: 'column',\n flex: '1',\n '.MuiFormLabel-root': { background: 'white', padding: '0px 5px' },\n ' form': { display: 'flex', flexDirection: 'column', flex: '1' }\n};\nconst sxFormActionBar = { display: 'block!important', '.formActionBar_buttons': { display: 'flex', justifyContent: 'space-between' } };\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport EditCourse from './EditCourse';\n\nconst EditCourseViewMap = {\n editCourse: (\n \n \n \n )\n};\n\nexport default EditCourseViewMap;\n","import { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n// MUI\nimport { Box } from '@mui/material';\nimport Logo from '../components/layout/Logo';\n\n/**\n * Home screen of the admin panel\n * @returns {JSX.Element}\n */\nconst ViewCourses = () => {\n const store = useContext(Store);\n const { t } = useTranslation('adminCourses');\n\n return (\n \n \n \n {t('viewCourses.title')} {store?.login?.userName || 'Niet ingelogd'}\n \n \n \n \n \n \n \n \n );\n};\n\nexport default observer(ViewCourses);\n\nconst img = { img: { maxWidth: '50%', width: '100%', maxHeight: '50%!important', height: '100%!important', mixBlendMode: 'overlay' } };\nconst sxCenter = { justifyContent: 'center', alignItems: 'center' };\nconst sxDraftView = { display: 'flex', flexDirection: 'column', flexGrow: 1 };\nconst sxBoxContent = { ...sxDraftView, ...sxCenter, ...img };\nconst sxDraftViewTitle = { fontSize: 'calc(16px + 1vw)', lineHeight: 'calc(1.1em + 0.5vw)', fontWeight: '500' };\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport ViewCourses from './ViewCourses';\n\nconst ViewCourseViewMap = {\n adminViewCourses: (\n \n \n \n )\n};\n\nexport default ViewCourseViewMap;\n","import { observer } from 'mobx-react';\nimport { Box } from '@mui/material';\n\nconst CourseSearchBar = () => (\n \n coming soon\n \n);\n\nexport default observer(CourseSearchBar);\n","import AdminCourseLayout from 'pages/adminCourses/AdminCourseLayout';\nimport CourseSearchBar from './CourseSearchBar';\n\nconst CourseSearchBarViewMap = {\n courseSearchBar: (\n \n \n \n )\n};\n\nexport default CourseSearchBarViewMap;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport ErrorPage from '../ErrorPage';\n\nconst ErrorPageViewMap = {\n errorPage: (\n \n \n \n )\n};\n\nexport default ErrorPageViewMap;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport NotFound from '../NotFound';\n\nconst NotFoundPageViewMap = {\n notFound: (\n \n \n \n )\n};\n\nexport default NotFoundPageViewMap;\n","/* Core */\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport TextField from '@mui/material/TextField';\nimport { Typography, Grid } from '@mui/material';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport 'theme/faq/Faq.scss';\n\n/* MUI - Icons */\nimport SearchIcon from '@mui/icons-material/Search';\n\nconst SearchBar = () => {\n const { t } = useTranslation();\n\n return (\n \n \n \n {t('faq.search.title', 'Do you have a question?')}\n \n \n \n \n )\n }}\n />\n \n \n );\n};\n\nexport default SearchBar;\n","/* Core */\nimport { useContext, useState, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\n\n/* MUI */\nimport { Card, CardContent, CardHeader, Grid, Box } from '@mui/material';\nimport 'theme/faq/Faq.scss';\n\n/* Custom components */\nimport { AccordionComponent } from 'components';\nimport SearchBar from './components/SearchBar';\n\nconst Faq = () => {\n const store = useContext(Store);\n\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n setLoaded(false);\n store.fetchFaqByLabel('ewise').then(() => {\n setLoaded(true);\n });\n }, [store, store.routerState.routeName]);\n\n return (\n <>\n {loaded && (\n \n \n \n \n {store.groupByCategory().map((faq, index) => (\n \n \n \n \n {faq.items.map((item) => (\n \n ))}\n \n \n \n ))}\n \n \n \n )}\n \n );\n};\n\nexport default observer(Faq);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Faq from '../faq';\n\nconst FaqViewMap = {\n faq: (\n \n \n \n )\n};\n\nexport default FaqViewMap;\n","/* Core */\nimport { useContext, useEffect, useState } from 'react';\nimport { useRouterStore } from 'mobx-state-router';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Card, CardContent, CardHeader, Grid, Box } from '@mui/material';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport 'theme/faq/Faq.scss';\n\n/* Custom components */\nimport SearchBar from './components/SearchBar';\n\nexport const Questions = [\n {\n id: 0,\n category: 'Category 1',\n question: 'What are the costs of a subscription?',\n answer: 'A subscription for teachers costs € 292 per year. You can use this unlimited training. '\n },\n {\n id: 1,\n category: 'Category 2',\n question: 'How soon after my registration can I start the courses?',\n answer: 'If you send, e-mail or fax your signed registration on working days before 5 p.m.,'\n },\n {\n id: 2,\n category: 'Category 3',\n question: 'How soon after my registration can I start the courses??',\n answer: 'If you send, e-mail or fax your signed registration on working days before 5 p.m.,'\n },\n {\n id: 3,\n category: 'Category 4',\n question: 'How soon after my registration can I start the courses??',\n answer: 'If you send, e-mail or fax your signed registration on working days before 5 p.m.,'\n }\n];\n\nconst Faq2 = () => {\n const store = useContext(Store);\n const routerStore = useRouterStore();\n\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n setLoaded(false);\n store.fetchFaqByLabel('ewise').then(() => {\n setLoaded(true);\n });\n }, [store, store.routerState.routeName]);\n\n const handleClick = () => {\n routerStore.goTo('article');\n };\n\n return (\n <>\n {loaded && (\n \n \n \n \n {store.groupByCategory().map((faq, index) => (\n \n \n \n \n {faq.items.map((item) => (\n \n \n \n \n \n ))}\n \n \n \n ))}\n \n
    \n \n )}\n \n );\n};\n\nexport default observer(Faq2);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Faq2 from '../faq2';\n\nconst Faq2ViewMap = {\n faq2: (\n \n \n \n )\n};\n\nexport default Faq2ViewMap;\n","/* Core */\nimport { useContext, useEffect, useState } from 'react';\nimport { useRouterStore } from 'mobx-state-router';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Card, CardContent, CardHeader, Grid } from '@mui/material';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Divider from '@mui/material/Divider';\nimport 'theme/faq/Faq.scss';\n\n/* Custom components */\nimport SearchBar from './components/SearchBar';\n\nconst Faq3 = () => {\n const store = useContext(Store);\n const routerStore = useRouterStore();\n\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n setLoaded(false);\n store.fetchFaqByLabel('ewise').then(() => {\n setLoaded(true);\n });\n }, [store, store.routerState.routeName]);\n\n const handleClick = () => {\n routerStore.goTo('article');\n };\n return (\n <>\n {loaded && (\n \n \n \n \n {store.groupByCategory().map((faq, index) => (\n \n \n \n {faq.items.map((item) => (\n \n \n \n \n \n \n ))}\n \n \n ))}\n \n \n \n )}\n \n );\n};\n\nexport default observer(Faq3);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Faq3 from '../faq3';\n\nconst Faq3ViewMap = {\n faq3: (\n \n \n \n )\n};\n\nexport default Faq3ViewMap;\n","import { useState } from 'react';\nimport { Divider, Button, Typography, Paper } from '@mui/material';\nimport Breadcrumbs from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport 'theme/faq/Faq.scss';\nimport { Questions } from '../faq2';\n\nconst Answer = () => {\n const [clicked, setClicked] = useState(false);\n\n return (\n <>\n \n
    \n
    \n \n \n HOME\n \n \n FAQ\n \n \n ARTICLE\n \n \n
    \n \n {Questions[1].question}\n \n

    \n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris varius lacinia ligula, congue varius nulla varius eu. Praesent\n bibendum pharetra orci, nec suscipit justo posuere quis. Nullam et pulvinar lorem. Nulla eget justo lectus. Etiam scelerisque\n viverra mi non dignissim. Vestibulum sodales lorem quis erat sollicitudin facilisis. Ut id elit sed lorem pulvinar elementum in\n nec leo.\n

    \n

    \n Aliquam erat volutpat. Duis porttitor risus non purus mollis, sit amet ullamcorper neque cursus. Duis facilisis quam a urna\n porttitor bibendum. Vestibulum viverra erat scelerisque felis posuere, at dapibus sem faucibus. Integer volutpat odio in augue\n scelerisque auctor sed maximus quam. Duis pharetra, nisi a mollis suscipit, quam urna aliquam enim, in suscipit massa dolor vel\n nibh. Pellentesque tellus ante, ultrices id nibh ac, varius venenatis lorem. Fusce porttitor metus eget commodo convallis.\n Vestibulum eget ante sodales, efficitur tellus at, fermentum mauris. Ut id rutrum dui. Nam varius sapien purus, et convallis\n odio maximus efficitur. Pellentesque pellentesque purus at urna rutrum tristique. Nunc in sagittis felis, id ultricies magna.\n Cras efficitur varius ipsum, in convallis arcu posuere id.\n

    \n

    \n Etiam eget tempor tellus. Etiam fermentum, elit in tristique porttitor, turpis felis lacinia lorem, et commodo quam sapien\n egestas purus. Aliquam egestas ullamcorper vulputate. Donec vitae elit justo. Nullam ac enim sagittis, blandit turpis sit amet,\n congue tortor. Maecenas quis purus ac tortor fringilla pellentesque at sed ex. Integer augue augue, varius ut magna non,\n ultrices euismod turpis.\n

    \n
      \n
    • \n Lorem ipsum dolor sit amet consectetur adipisicing elit. Alias numquam culpa ipsum nihil laborum libero, aliquid maxime\n provident cupiditate unde, deserunt quidem ex dignissimos corporis voluptas doloremque doloribus corrupti earum.\n
    • \n
    • \n Assumenda, quo? Quos, rem ad. Vel corrupti, enim tempore sunt perferendis ab tempora ex aspernatur eveniet rerum. Quas, in\n atque numquam iste at aspernatur quaerat maiores ut molestias veniam aliquid?\n
    • \n
    • \n A sunt delectus quas velit officia ea quisquam iste odit excepturi, veritatis quo explicabo. Labore eveniet nobis qui\n doloribus, hic iste dolorum voluptates obcaecati recusandae eos totam soluta, consectetur culpa?\n
    • \n
    • \n Quo itaque excepturi facere neque qui ipsa quas recusandae mollitia, autem, nemo eius eveniet accusamus harum modi corporis\n culpa nobis aspernatur, maiores perspiciatis iste saepe quia! Officiis modi nisi libero!\n
    • \n
    \n \n
    \n
    \n \n Was this article helpful?\n \n {clicked ? (\n
    Thank you for your feedback!
    \n ) : (\n
    \n \n \n
    \n )}\n
    \n
    \n \n
    \n
    \n \n );\n};\n\nexport default Answer;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport Article from '../components/ArticlePage';\n\nconst ArticleViewMap = {\n article: (\n \n
    \n \n )\n};\n\nexport default ArticleViewMap;\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useContext, useEffect, useState } from 'react';\nimport { Store } from 'state/ContextStore';\n\n/* Custom components */\nimport { Box, Typography, Divider, Skeleton } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport TopLinks from 'pages/course/components/CourseOverview/TopLinks';\nimport { ThemeBrandTitle, getMarketingSiteUrl } from 'helpers/Helpers';\n\n/**\n * ColophonOverview\n * The ColophonOverview component is the main component for displaying the colophon.\n */\nconst ColophonOverview = () => {\n const { t } = useTranslation('colophon');\n const store = useContext(Store); // Use useContext to access the store\n const { product, packageId } = store.params;\n const selectedPackage = store.packages.filter((pack) => pack.nid === store.selectedPackageId);\n const selectedPackageTitle = selectedPackage[0]?.tab_label || '';\n const labelTitle = ThemeBrandTitle();\n const marketingUrl = getMarketingSiteUrl();\n const marketingShortUrl = getMarketingSiteUrl().replace(/^https?:\\/\\//, '');\n const colophonEmail = `redactie@${getMarketingSiteUrl().replace(/^https?:\\/\\/(www\\.)?/, '')}`;\n const colophonEmailFull = `mailto:${colophonEmail}`;\n const [data, setData] = useState(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const init = async () => {\n const result = await window.authedClient(`${process.env.REACT_APP_JSONAPI}/ewapi/product/${product}/package/${packageId}/json`);\n\n const { authors, profession } = result.data.data;\n\n const parsedAuthors = authors\n .map((author) => {\n const { titles, first_name: firstName, last_name: lastName, affiliation } = author;\n const fullName = [titles, firstName, lastName, affiliation]\n .filter(Boolean)\n .map((el) => el.trim())\n .join(' ');\n return { ...author, fullName };\n })\n .sort((a, b) => (a.fullName > b.fullName ? 1 : -1));\n\n setData({\n authors: parsedAuthors,\n advisoryBoard: profession.advisory_board.map((advisoryBoardAuthorId) =>\n parsedAuthors.find((author) => author.id === advisoryBoardAuthorId)\n )\n });\n\n setLoading(false);\n };\n\n init();\n }, [packageId, product, setData]);\n\n return (\n \n \n \n \n {selectedPackageTitle}\n {t('intro', { labelTitle })}\n \n \n {loading && }\n {data?.advisoryBoard?.length > 0 && (\n <>\n \n {t('titles.title1')}\n \n
      \n {data.advisoryBoard.map(({ id, fullName }) => (\n
    • {fullName}
    • \n ))}\n
    \n
    \n
    \n \n \n )}\n \n {t('titles.title2')}\n {t('experts', { labelTitle })}\n \n \n \n {t('titles.title3')}\n \n E-WISE Nederland bv
    Janssoniuslaan 40
    3528 AJ Utrecht
    \n
    030-26 44 100
    \n \n {marketingShortUrl}\n \n
    \n \n {colophonEmail}\n \n
    \n
    \n \n \n {t('titles.title4')}\n {t('copyright', { labelTitle })}\n \n \n \n {t('titles.title5')}\n {t('rights')}\n \n
    \n
    \n );\n};\n\nexport default observer(ColophonOverview);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport ColophonOverview from './ColophonOverview';\n\nconst colophonViewMap = {\n colophonOverview: (\n \n \n \n )\n};\n\nexport default colophonViewMap;\n","import { Box, List, ListItemButton, ListItemIcon, ListItemText, Paper, Typography } from '@mui/material';\nimport { RouterLink } from 'mobx-state-router';\nimport PersonIcon from '@mui/icons-material/Person';\nimport WebStoriesIcon from '@mui/icons-material/WebStories';\nimport ExploreOutlinedIcon from '@mui/icons-material/ExploreOutlined';\nimport GridViewSharpIcon from '@mui/icons-material/GridViewSharp';\nimport { useTranslation } from 'react-i18next';\n\nconst NavBar = () => {\n const { t } = useTranslation();\n\n return (\n \n {t('lms.title')}\n\n \n \n ['LmsDashboardOverview', 'LmsDashboardProfessions', 'LmsDashboardProducts'].includes(currentState.routeName)\n }\n >\n \n \n \n \n \n \n \n \n ['LmsStudents', 'LmsStudentsOpen', 'LmsStudentsCompleted', 'LmsStudentDetail'].includes(currentState.routeName)\n }\n >\n \n \n \n \n \n \n \n\n \n ['LmsCourses', 'LmsCourseDetail', 'LmsCoursesOpenList', 'LmsCoursesCompleted'].includes(currentState.routeName)\n }\n >\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default NavBar;\n","import { Box, ListItemButton, ListItemText, Paper, Typography, List } from '@mui/material';\nimport { RouterLink } from 'mobx-state-router';\nimport { useTranslation } from 'react-i18next';\n\nconst ShortCuts = () => {\n const { t } = useTranslation();\n\n const shortcuts = [\n // { name: 'Cursisten', route: 'LmsStudents', disabled: false },\n // { name: 'Students not logged in', route: 'LmsStudenst', disabled: true },\n { name: t('lms.shortcuts.listStudentsOpen'), route: 'LmsStudentsOpen', disabled: false },\n { name: t('lms.shortcuts.listStudentsCompleted'), route: 'LmsStudentsCompleted', disabled: false },\n { name: t('lms.shortcuts.listCoursesCompleted'), route: 'LmsCoursesCompleted', disabled: false },\n { name: t('lms.shortcuts.listCoursesOpen'), route: 'LmsCoursesOpenList', disabled: false },\n { name: t('lms.shortcuts.listAllCoursesAZ'), route: 'LmsCourses', disabled: false }\n ];\n\n return (\n \n {t('lms.shortcuts.title')}\n \n \n {shortcuts.map((shortcut) => (\n \n \n \n \n \n ))}\n \n \n \n );\n};\n\nexport default ShortCuts;\n","import { Box, List, ListItemButton, ListItemIcon, ListItemText, Paper, Typography } from '@mui/material';\nimport { RouterLink } from 'mobx-state-router';\nimport PersonIcon from '@mui/icons-material/Person';\nimport ArticleIcon from '@mui/icons-material/Article';\nimport { useTranslation } from 'react-i18next';\n\nconst AssistantsNavBar = () => {\n const { t } = useTranslation();\n\n return (\n \n {t('lms.title')}\n\n \n ['LmsStudents', 'LmsStudentDetail'].includes(currentState.routeName)}\n >\n \n \n \n \n \n \n \n\n \n ['LmsCourses', 'LmsCourseDetail', 'LmsCoursesOpenList', 'LmsCoursesCompleted'].includes(currentState.routeName)\n }\n >\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default AssistantsNavBar;\n","const BORDER_COLOR = '#EEE';\nconst BORDER = `1px solid ${BORDER_COLOR}`;\n// const TABLE_BODY_TEXT_COLOR = '#A3AED0';\nconst BACKGROUND_GRAY = 'rgba(43, 54, 116, 0.1)';\nconst BACKGROUND_GREEN = '#80B4A3';\nconst HEADING_COLOR = '#2B3674';\n\nexport const getLmsTheme = (theme) => ({\n palette: {\n background: {\n gray: BACKGROUND_GRAY,\n green: BACKGROUND_GREEN\n }\n },\n shadows: [\n 'none',\n '0px 11.168px 24.8178px rgb(112 144 176 / 12%)',\n '0px 11.168px 24.8178px rgb(112 144 176 / 12%)',\n ...theme.shadows.slice(3)\n ],\n typography: {\n h1: {\n fontSize: '1.5rem',\n fontWeight: 700,\n lineHeight: 1.75,\n color: HEADING_COLOR\n },\n h2: {\n fontSize: '1.375rem',\n fontWeight: 700,\n lineHeight: 1.16,\n color: HEADING_COLOR\n },\n\n count: {\n fontSize: '30px',\n fontWeight: 700\n }\n },\n components: {\n MuiGrid: {\n styleOverrides: {\n root: {\n marginTop: 0,\n marginBottom: 0\n }\n }\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n borderRadius: theme.spacing(2),\n '& .MuiOutlinedInput-input': {\n paddingBlock: theme.spacing(1.5)\n },\n '& fieldset': {\n borderColor: BORDER_COLOR\n },\n '&:hover fieldset': {\n borderColor: theme.palette.primary.main\n }\n }\n }\n }\n },\n MuiSelect: {\n variants: [\n {\n props: { variant: 'standard' },\n style: {\n border: BORDER,\n paddingInline: theme.spacing(1.5),\n paddingBlock: theme.spacing(0.8),\n borderRadius: theme.spacing(2),\n '&::before, &::after': {\n content: 'none'\n },\n '& .MuiInputBase-input': {\n border: 'none'\n },\n '& .MuiSelect-icon': {\n top: 'calc(50% - 12px)',\n right: theme.spacing(1)\n }\n }\n }\n ]\n },\n MuiAutocomplete: {\n variants: [\n {\n props: { variant: 'customAutocomplete' },\n style: {\n '&.Mui-focused': {\n label: {\n color: theme.palette.primary.main\n }\n },\n '& .MuiInputBase-root': {\n padding: 0\n },\n '& .MuiOutlinedInput-root': {\n borderRadius: theme.spacing(2),\n position: 'relative',\n width: '100%',\n '& .MuiOutlinedInput-input.MuiAutocomplete-input': {\n padding: theme.spacing(1.5)\n },\n '&:focus-within': {\n border: 'none'\n },\n '& fieldset': {\n border: BORDER\n },\n '&:hover fieldset': {\n borderColor: theme.palette.primary.main\n },\n '&.Mui-focused fieldset': {\n border: BORDER,\n borderColor: theme.palette.primary.main\n }\n }\n }\n }\n ]\n },\n MuiTable: {\n styleOverrides: {\n root: {\n borderCollapse: 'separate',\n borderSpacing: `0 ${theme.spacing(1)}`,\n padding: `0 ${theme.spacing(2)}`\n }\n }\n },\n MuiTableHead: {\n styleOverrides: {\n root: {\n color: theme.palette.primaryBlue.main,\n '& .MuiTableCell-root': {\n border: 'none'\n }\n }\n }\n },\n MuiTableBody: {\n styleOverrides: {\n root: {\n // color: TABLE_BODY_TEXT_COLOR,\n '& .MuiTableCell-root': {\n border: BORDER,\n borderLeft: 'none',\n borderRight: 'none'\n },\n '& .MuiTableCell-root:first-of-type': {\n borderLeft: BORDER,\n borderTopLeftRadius: theme.spacing(4),\n borderBottomLeftRadius: theme.spacing(4)\n },\n '& .MuiTableCell-root:last-of-type': {\n borderRight: BORDER,\n borderTopRightRadius: theme.spacing(4),\n borderBottomRightRadius: theme.spacing(4)\n }\n }\n }\n },\n MuiTableFooter: {\n styleOverrides: {\n root: {\n position: 'absolute',\n bottom: -60,\n right: 0,\n '& .MuiTableCell-root': {\n border: 'none'\n }\n }\n }\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n borderRadius: theme.spacing(1)\n }\n }\n },\n MuiList: {\n styleOverrides: {\n root: {\n '& a': {\n textDecoration: 'none'\n },\n '& .ButtonNavigation': {\n color: HEADING_COLOR,\n borderRadius: theme.spacing(2),\n border: BORDER,\n justifyContent: 'left',\n marginTop: theme.spacing(1),\n '&:last-of-type': {\n marginBottom: 0\n },\n transition: 'all 0.5s',\n '& .MuiTypography-root': {\n fontWeight: 700,\n fontSize: '14px'\n },\n '& svg': {\n color: HEADING_COLOR\n }\n },\n '& .ButtonNavigation-active .ButtonNavigation': {\n backgroundColor: theme.palette.primary.main,\n color: 'white',\n borderColor: theme.palette.primary.main\n },\n '& .ButtonNavigation-active .ButtonNavigation svg': {\n color: 'white'\n }\n }\n }\n },\n MuiButton: {\n styleOverrides: {\n root: {\n borderRadius: theme.spacing(2)\n }\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n backgroundColor: 'transparent',\n '&.Mui-selected': {\n backgroundColor: 'transparent'\n }\n }\n }\n }\n }\n});\n","import DownloadIcon from '@mui/icons-material/Download';\nimport { Button, Tooltip } from '@mui/material';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nconst lmsManualUrl = `/system/files/2024-08/LMS_Handleiding.pdf`;\nconst pharmacistManualUrl = `/system/files/2024-08/LMS_Handleiding_assistententeams.pdf`;\n\nconst LmsDownloadButton = ({ url, text, tooltip }) => (\n \n }\n >\n {text}\n \n \n);\n\nLmsDownloadButton.propTypes = {\n url: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n tooltip: PropTypes.string\n};\n\nconst LmsDownloadManualBtns = () => {\n const { t } = useTranslation();\n const store = useStore();\n const isLms = store.showMenuItemLms;\n const isAssistant = store.showMenuAssistant;\n\n function getLearnDomainUrl() {\n const { label } = store;\n const mapLabelToDomain = {\n ewise: 'e-wise.nl',\n pe: 'pe-academy.nl',\n po: 'po-online.nl',\n cme: 'cme-online.nl'\n };\n const { hostname } = window.location;\n const isStaging = hostname.includes('staging') || hostname.includes('local');\n const url = `https://learn${isStaging ? '.aws-staging' : ''}.${mapLabelToDomain[label]}`;\n return url;\n }\n\n if (isAssistant) {\n return (\n \n );\n }\n if (isLms) {\n return (\n \n );\n }\n return null;\n};\n\nexport default LmsDownloadManualBtns;\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Box, Grid, ThemeProvider } from '@mui/material';\nimport { useCustomTheme, useStore } from 'hooks';\nimport { createTheme, responsiveFontSizes } from '@mui/material/styles';\nimport NavBar from './components/NavBar';\nimport ShortCuts from './components/ShortCuts';\nimport AssistantsNavBar from './components/AssistantsNavBar';\nimport { getLmsTheme } from './LmsTheme';\nimport LmsDownloadManualBtns from './components/LmsDownloadManualBtns';\n\nconst LmsLayout = ({ children }) => {\n const store = useStore();\n const { globalTheme } = useCustomTheme();\n\n if (!store.showMenuItemLms) {\n return null;\n }\n\n const LmsTheme = responsiveFontSizes(createTheme(globalTheme, getLmsTheme(globalTheme)));\n const sxNavigation = {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px'\n };\n const sxDownloadInstructions = {\n background: 'white',\n // borderRadius: 1,\n marginBottom: '0px',\n padding: '10px 10px 0px 0px'\n };\n return (\n \n \n \n \n {store.showMenuAssistant ? : }\n {!store.showMenuAssistant && }\n \n \n \n \n \n \n {children}\n \n \n \n );\n};\n\nLmsLayout.propTypes = {\n children: PropTypes.node\n};\n\nexport default observer(LmsLayout);\n","import PropTypes from 'prop-types';\nimport { RouterLink, useRouterStore } from 'mobx-state-router';\nimport { observer } from 'mobx-react';\nimport { Box, Stack, Tab, Tabs } from '@mui/material';\n// import { useTranslation } from 'react-i18next';\nimport { useBreakpoint } from 'hooks';\nimport LmsToolbar from './LmsToolbar';\n// import SearchBar from './SearchBar';\n\nconst TabsLayout = ({ tabsRoutes, children }) => {\n // const { t } = useTranslation();\n const routerStore = useRouterStore();\n const { queryParams, routeName } = routerStore.routerState;\n const breakpoint = useBreakpoint();\n\n const isMobile = ['xs'].includes(breakpoint);\n const title = tabsRoutes[routeName];\n\n return (\n \n \n theme.palette.primary.main,\n color: 'white'\n },\n '.MuiTabs-flexContainer': {\n justifyContent: 'center',\n gap: '10px',\n a: { padding: '0px' }\n }\n }}\n variant={isMobile ? 'scrollable' : 'standard'}\n scrollButtons\n allowScrollButtonsMobile\n >\n {Object.entries(tabsRoutes).map(([route, label]) => (\n \n {label}\n \n }\n />\n ))}\n \n \n \n {/* {['LmsStudents'].includes(routeName) && } */}\n {children}\n \n );\n};\nTabsLayout.propTypes = {\n children: PropTypes.node,\n tabsRoutes: PropTypes.object\n};\n\nexport default observer(TabsLayout);\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport TabsLayout from '../components/TabsLayout';\n\nconst LmsDashboardLayout = ({ children }) => {\n const { t } = useTranslation();\n\n const mapRouteNameToTitle = {\n LmsDashboardOverview: t('lms.dashboard.overview.title'),\n // LmsDashboardProfessions: t('lms.dashboard.professions.title'),\n LmsDashboardProducts: t('lms.dashboard.products.title')\n };\n\n return (\n \n {children}\n \n );\n};\n\nLmsDashboardLayout.propTypes = {\n children: PropTypes.node\n};\n\nexport default observer(LmsDashboardLayout);\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\nimport LmsLayout from '../LmsLayout';\nimport LmsDashboardLayout from './LmsDashboardLayout';\n\nconst LmsDashboardOverview = React.lazy(() => import('./LmsDashboardOverview'));\nconst LmsDashboardProfessions = React.lazy(() => import('./LmsDashboardProfessions'));\nconst LmsDashboardProducts = React.lazy(() => import('./LmsDashboardProducts'));\n\nconst LmsDashboardViewMap = {\n LmsDashboardOverview: (\n \n \n \n \n \n \n \n \n \n ),\n LmsDashboardProfessions: (\n \n \n \n \n \n \n \n \n \n ),\n LmsDashboardProducts: (\n \n \n \n \n \n \n \n \n \n )\n};\n\nexport default LmsDashboardViewMap;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport TabsLayout from '../components/TabsLayout';\n\nconst LmsStudentsLayout = ({ children }) => {\n const { t } = useTranslation();\n\n const mapRouteNameToTitle = {\n LmsStudents: t('lms.courses.allCourses.title'),\n LmsStudentsOpen: t('lms.courses.coursesByStatus.open.title'),\n LmsStudentsCompleted: t('lms.courses.coursesByStatus.completed.title')\n };\n\n return {children};\n};\n\nLmsStudentsLayout.propTypes = {\n children: PropTypes.node\n};\n\nexport default LmsStudentsLayout;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\nimport LmsLayout from '../LmsLayout';\nimport LmsStudentsLayout from './LmsStudentsLayout';\n\nconst LmsStudents = React.lazy(() => import('./LmsStudents'));\nconst LmsStudentsByStatus = React.lazy(() => import('./LmsStudentsByStatus'));\n\nconst LmsStudentsViewMap = {\n LmsStudents: (\n \n \n \n \n \n \n \n \n \n ),\n LmsStudentsOpen: (\n \n \n \n \n \n \n \n \n \n ),\n LmsStudentsCompleted: (\n \n \n \n \n \n \n \n \n \n )\n};\n\nexport default LmsStudentsViewMap;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\nimport LmsLayout from '../LmsLayout';\n\nconst LmsStudentDetail = React.lazy(() => import('./LmsStudentDetail'));\n\nconst LmsStudentDetailViewMap = {\n LmsStudentDetail: (\n \n \n \n \n \n \n \n )\n};\n\nexport default LmsStudentDetailViewMap;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport TabsLayout from '../components/TabsLayout';\n\nconst LmsCoursesLayout = ({ children }) => {\n const { t } = useTranslation();\n\n const mapRouteNameToTitle = {\n LmsCourses: t('lms.courses.allCourses.title'),\n LmsCoursesCompleted: t('lms.courses.coursesByStatus.completed.title'),\n LmsCoursesOpenList: t('lms.courses.coursesByStatus.open.title')\n };\n\n return {children};\n};\n\nLmsCoursesLayout.propTypes = {\n children: PropTypes.node\n};\n\nexport default LmsCoursesLayout;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\nimport LmsLayout from '../LmsLayout';\nimport LmsCoursesLayout from './LmsCoursesLayout';\n\nconst LmsCourses = React.lazy(() => import('./LmsCourses'));\nconst LmsCoursesByStatus = React.lazy(() => import('./LmsCoursesByStatus'));\n\nconst lmsCoursesViewMap = {\n LmsCourses: (\n \n \n \n \n \n \n \n \n \n ),\n LmsCoursesCompleted: (\n \n \n \n \n \n \n \n \n \n ),\n LmsCoursesOpenList: (\n \n \n \n \n \n \n \n \n \n )\n};\n\nexport default lmsCoursesViewMap;\n","import { Stack } from '@mui/material';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport LmsTable from '../components/LmsTable';\nimport LmsToolbar from '../components/LmsToolbar';\nimport { getLmsOrganisations } from '../api';\n\nconst LmsOrganisations = () => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n );\n};\n\nexport default observer(LmsOrganisations);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport LmsLayout from '../LmsLayout';\nimport LmsOrganisations from './LmsOrganisations';\n\nconst LmsOrganisationsViewMap = {\n LmsOrganisations: (\n \n \n \n \n \n )\n};\n\nexport default LmsOrganisationsViewMap;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\nimport LmsLayout from '../LmsLayout';\n\nconst LmsCourseDetail = React.lazy(() => import('./LmsCourseDetail'));\n\nconst LmsCourseDetailViewMap = {\n LmsCourseDetail: (\n \n \n \n \n \n \n \n )\n};\n\nexport default LmsCourseDetailViewMap;\n","import { parseISO, isToday, isFuture, isPast } from 'date-fns';\n\nexport const getEvents = async () => {\n const overviewResponse = await window.authedClient.get('ewapi/vtb/overview?currentTeacherEvents=true');\n\n if (overviewResponse.status !== 200) {\n throw new Error('something went wrong');\n }\n\n const formattedEvents = [];\n\n // Loop through each event in the data\n overviewResponse.data.data.forEach((event) => {\n // Extract the event type name\n const { name, subtitle } = overviewResponse.data.included.find(\n (includedItem) => includedItem.id === event.relationships.event_type.data.id\n )?.attributes;\n\n const title = [name, subtitle].join(', ');\n\n // Extract the date of the event\n const date = parseISO(event.attributes.date.value);\n const dateIsToday = isToday(date);\n\n const dateIsInTheFuture = isFuture(date) && !dateIsToday;\n const dateIsInThePast = isPast(date) && !dateIsToday;\n\n const totalSeats = event.attributes.seats;\n const seatsLeft = event.meta.available_seats;\n\n // Extract the location details\n const locationId = event.relationships.location.data.id;\n const location = overviewResponse.data.included.find((includedItem) => includedItem.id === locationId)?.attributes;\n const address = `${location.street ?? ''} ${location.house_number ?? ''}, ${location.zipcode ?? ''}, ${location.name ?? ''}`;\n\n // Add the formatted event to the array\n formattedEvents.push({\n id: event.attributes.drupal_internal__id,\n uuid: event.id,\n isToday: dateIsToday,\n isPast: dateIsInThePast,\n isFuture: dateIsInTheFuture,\n totalSeats,\n seatsLeft,\n title,\n date,\n address\n });\n });\n\n // Return the array of formatted events\n return formattedEvents.sort((a, b) => a.date - b.date);\n};\n","export const getStudents = async (eventUuid) => {\n const signupsResponse = await window.authedClient.get(\n `ewapi/vtb/attendance?event_uuid=${eventUuid}&limit=all&cacheBust=${new Date().getTime()}`\n );\n\n if (signupsResponse.status !== 200) {\n throw new Error('something went wrong');\n }\n\n return signupsResponse.data.data.signups.map((signup) => ({\n id: signup.user.user_internal__id,\n name: signup.user.initials + signup.user.last_name || '',\n email: signup.user.email || '',\n present: signup.present || false,\n signupId: signup.uuid\n }));\n};\n","import { Alert, Box, Button, Checkbox, Chip, Grid, Paper, Typography } from '@mui/material';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { useTheme } from '@mui/styles';\nimport { format } from 'date-fns';\nimport * as PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { getEvents } from './getEvents';\nimport { getStudents } from './getStudents';\n\nconst EventButton = (props) => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n const aDate = props?.date?.getTime();\n const formattedDate = aDate ? format(aDate, 'dd-MM-yyyy') : '';\n\n return (\n \n \n {props.title}\n \n \n \n {formattedDate}\n \n {props.address} \n \n );\n};\n\nEventButton.propTypes = {\n id: PropTypes.any,\n selectedEvent: PropTypes.any,\n attendees: PropTypes.number,\n onClick: PropTypes.func,\n title: PropTypes.any,\n date: PropTypes.any,\n address: PropTypes.any\n};\nconst AttendanceSheetLayout = () => {\n const [students, setStudents] = useState([]);\n const { t } = useTranslation();\n const theme = useTheme();\n\n const [events, setEvents] = useState([]);\n const [selectedEvent, setSelectedEvent] = useState();\n const [ongoingBulkUpdate, setOngoingBulkUpdate] = useState(false);\n const ongoingUpdates = {};\n\n useEffect(() => {\n const init = async () => {\n const currentEvents = await getEvents();\n if (currentEvents.length > 0) {\n setEvents(currentEvents);\n const todayEvent = currentEvents.filter((eventItem) => !!eventItem.isToday)?.[0];\n setSelectedEvent(todayEvent);\n }\n };\n\n init();\n }, []);\n\n useEffect(() => {\n const init = async () => {\n if (!selectedEvent) {\n setStudents([]);\n return;\n }\n setStudents([]); // Reset the students to show a loading state\n const studentsOfEvent = await getStudents(selectedEvent.uuid);\n if (studentsOfEvent.length > 0) {\n setStudents(studentsOfEvent);\n }\n };\n\n init();\n }, [selectedEvent]);\n\n const handleSetPresent = async (signupId, isPresent) => {\n // Prevent concurrent updates for the same signupId\n if (ongoingUpdates[signupId] || ongoingBulkUpdate) {\n return;\n }\n try {\n // Mark this signupId as having an ongoing update\n ongoingUpdates[signupId] = true;\n await window.authedClient.patch(`jsonapi/event_signups/${signupId}`, {\n data: {\n type: 'event_signups',\n id: signupId,\n attributes: {\n present: !!isPresent\n }\n }\n });\n // Fetch the updated list of students\n const updatedStudents = await getStudents(selectedEvent.uuid);\n setStudents(updatedStudents);\n } catch (error) {\n // Handle error appropriately\n } finally {\n // Once the update is complete or fails, allow new updates for this signupId\n delete ongoingUpdates[signupId];\n }\n };\n\n const notPresentStudents = students.filter((student) => !student.present);\n\n const handleMarkAllStudentActive = async () => {\n try {\n setOngoingBulkUpdate(true);\n await window.authedClient.subRequests(\n notPresentStudents.map((student) => ({\n action: 'update',\n uri: `jsonapi/event_signups/${student.signupId}`,\n body: JSON.stringify({\n data: {\n type: 'event_signups',\n id: student.signupId,\n attributes: {\n present: true\n }\n }\n })\n }))\n );\n const updatedStudents = await getStudents(selectedEvent.uuid);\n setStudents(updatedStudents);\n } catch (error) {\n console.error(error);\n } finally {\n setOngoingBulkUpdate(false);\n }\n };\n\n const todayEvents = events.filter((eventItem) => !!eventItem.isToday);\n\n return (\n \n \n \n \n {t('attendance.events')}\n \n \n \n {t('attendance.today')}\n \n {todayEvents.length < 1 && (\n \n \n {t('attendance.noEventsToday')}\n \n \n )}\n\n {todayEvents?.map(({ id, uuid, address, date, title, totalSeats, seatsLeft, isFuture }) => (\n setSelectedEvent({ id, uuid, address, date, title, totalSeats, seatsLeft, isFuture })}\n title={title}\n date={date}\n address={address}\n />\n ))}\n \n \n \n {t('attendance.allEvents')}\n \n\n {events.length < 1 && (\n \n \n {t('attendance.noEvents')}\n \n \n )}\n\n {events?.map(({ id, uuid, address, date, title, totalSeats, seatsLeft, isFuture }) => (\n setSelectedEvent({ id, uuid, address, date, title, totalSeats, seatsLeft, isFuture })}\n title={title}\n date={date}\n address={address}\n />\n ))}\n \n \n \n \n {t('attendance.students')}\n \n {selectedEvent?.isFuture && (\n \n {t('attendance.notActiveYet')}\n \n )}\n {!selectedEvent?.isFuture && (\n \n \n \n \n {ongoingBulkUpdate && } {t('attendance.markAllPresent')}\n \n \n \n {t('attendance.present')}\n \n \n {t('attendance.name')}\n \n \n \n \n {t('attendance.email')}\n \n \n \n {students?.length < 1 && (\n \n {t('attendance.noSignups')}\n \n )}\n {students?.map((student) => (\n !selectedEvent?.isFuture && handleSetPresent(student.signupId, !student.present)}\n >\n \n handleSetPresent(student.signupId, !student.present)}\n />\n \n \n {student.name}\n \n \n {student.email}\n \n \n ))}\n \n \n )}\n \n \n \n );\n};\n\nexport default AttendanceSheetLayout;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport AttendanceSheetLayout from 'pages/attendanceSheet/AttendanceSheetLayout';\n\nconst AttendanceSheetViewMap = {\n attendanceSheet: (\n \n \n \n )\n};\n\nexport default AttendanceSheetViewMap;\n","export const getYearsFromStartToCurrent = (startYear) => {\n const currentYear = new Date().getFullYear();\n\n return Array.from({ length: currentYear - startYear + 1 }, (_, index) => startYear + index);\n};\n","export const CertificateIcon = () => (\n \n \n \n \n);\n","export const InformationIcon = () => (\n \n \n \n \n);\n","import { Box, FormControlLabel, MenuItem, Select, Switch, Typography } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { getYearsFromStartToCurrent } from 'pages/vtbDashboard/lib/getYearsFromStartToCurrent';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport { CertificateIcon } from 'pages/vtbDashboard/EventTypeTitleHead/CertificateIcon';\nimport { InformationIcon } from 'pages/vtbDashboard/EventTypeTitleHead/InformationIcon';\n\nexport const FilterBar = ({ onOnlyShowAvailableChange, onlyShowAvailableChange, year, onYearChange }) => {\n const { t } = useTranslation('vtb');\n\n const years = getYearsFromStartToCurrent(2024);\n\n return (\n \n \n \n {t('filters.year')}\n \n \n onOnlyShowAvailableChange(event.target.checked)} checked={onlyShowAvailableChange} />}\n label={\n \n {t('filters.onlyShowAvailableEvent')}\n \n }\n />\n \n \n \n \n \n {t('filters.preCourse')}\n \n \n \n \n \n {t('filters.info')}\n \n \n \n \n );\n};\n\nFilterBar.propTypes = {\n onOnlyShowAvailableChange: PropTypes.func.isRequired,\n onlyShowAvailableChange: PropTypes.bool,\n year: PropTypes.number,\n onYearChange: PropTypes.func.isRequired\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { isPast, subDays } from 'date-fns';\n\nfunction parseData({ data }) {\n const eventTypes = data.included.filter((eventType) => eventType.type === 'event_type');\n const files = data.included.filter((location) => location.type === 'file--file');\n const locations = data.included\n .filter((location) => location.type === 'event_location')\n .map((location) => ({ ...location, image: files.find((file) => file.id === location.relationships?.image?.data.id) }));\n const events = data.data\n .map((event) => {\n const availableSeats = event.meta.available_seats;\n const date = event.attributes.date.value;\n const canRegisterMaxDate = subDays(new Date(date), 7);\n\n const noSeatsAvailable = availableSeats < 1;\n\n return { ...event, isEnrollmentClosed: isPast(new Date(date)) || new Date() >= canRegisterMaxDate, noSeatsAvailable };\n })\n .sort((a, b) => {\n const dateA = new Date(a.attributes.date.value);\n const dateB = new Date(b.attributes.date.value);\n\n return dateA - dateB;\n });\n\n return { eventTypes, locations, events };\n}\nexport const useVtbOverview = ({ year }) => {\n const [isLoading, setIsLoading] = useState(false);\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n\n const getData = useCallback(async () => {\n setIsLoading(true);\n\n try {\n const overviewResponse = await window.authedClient.get(`ewapi/vtb/overview?year=${year}`);\n const parsedData = parseData(overviewResponse);\n\n const signupResponse = await window.authedClient.get(`ewapi/vtb/signups`);\n const eventSignupIds =\n signupResponse.data?.data?.events?.length > 0 ? signupResponse.data?.data?.events?.map((signup) => signup.event_uuid) : [];\n\n setData({ ...parsedData, eventSignupIds });\n } catch (err) {\n setError(err);\n }\n setIsLoading(false);\n }, [year]);\n\n useEffect(() => {\n getData();\n }, [getData]);\n\n return { data, isLoading, error, refetch: getData };\n};\n","import { Box, Typography } from '@mui/material';\nimport * as PropTypes from 'prop-types';\nimport { CertificateIcon } from './CertificateIcon';\nimport { InformationIcon } from './InformationIcon';\n\nexport const EventTypeTitleHead = ({ eventType, onInfoClick }) => (\n \n \n \n {eventType.attributes.name}\n \n \n \n \n \n onInfoClick(eventType.attributes.event_description_node_id)}\n >\n \n \n \n \n \n {eventType.attributes.subtitle}\n \n \n);\n\nEventTypeTitleHead.propTypes = { eventType: PropTypes.any, onInfoClick: PropTypes.func };\n","import PropTypes from 'prop-types';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Checkbox,\n Box,\n FormControl,\n FormControlLabel,\n Typography\n} from '@mui/material';\nimport { LoadingButton } from '@mui/lab';\n\nexport const DialogBox = ({\n open,\n title,\n onClose,\n submitButtonText,\n cancelButtonText,\n isLoading,\n onAction,\n text,\n mailNotification,\n setMailNotification,\n mailNotificationText\n}) => (\n \n {title}\n \n {text}\n \n setMailNotification(!mailNotification)} />}\n label={{mailNotificationText}}\n />\n \n \n \n \n \n {cancelButtonText && }\n \n {submitButtonText}\n \n \n \n \n \n);\n\nDialogBox.propTypes = {\n title: PropTypes.string.isRequired,\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n submitButtonText: PropTypes.string.isRequired,\n cancelButtonText: PropTypes.string,\n isLoading: PropTypes.bool.isRequired,\n onAction: PropTypes.func.isRequired,\n text: PropTypes.string.isRequired,\n mailNotification: PropTypes.bool.isRequired,\n setMailNotification: PropTypes.func.isRequired,\n mailNotificationText: PropTypes.string.isRequired\n};\n","import { format } from 'date-fns';\n\nexport const formatDate = (date) => (date ? format(new Date(date), 'd MMMM, yyyy') : null);\n","import PropTypes from 'prop-types';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useEwaApiPost } from '../hooks/useEwaApiPost';\nimport { DialogBox } from './DialogBox';\nimport { formatDate } from '../lib/formatDate';\n\nexport const RegisterEventDialogBox = ({ selectedData, onClose }) => {\n const { t } = useTranslation('vtb');\n const [mailNotification, setMailNotification] = useState(false);\n\n const toastSuccessText = !selectedData?.isUserAttending ? t('toast.registered') : t('toast.unregistered');\n const translationKey = selectedData?.isUserAttending ? 'alreadySignedIn' : 'notSignedIn';\n\n const { post, isLoading } = useEwaApiPost({ toastTextSuccess: toastSuccessText, toastTextFailure: t('toast.failed') });\n\n const translations = useMemo(\n () => ({\n title: t(`popups.${translationKey}.title`),\n cancelButtonText: t(`popups.${translationKey}.cancelText`),\n submitButtonText: t(`popups.${translationKey}.submitButtonText`),\n text: t(`popups.${translationKey}.text`, { eventDate: formatDate(selectedData?.vtbEvent.attributes.date.value) }),\n mailNotificationText: t('popups.mailNotificationText')\n }),\n [selectedData?.vtbEvent.attributes.date.value, t, translationKey]\n );\n\n const handleAction = useCallback(async () => {\n const eventDrupalId = selectedData?.vtbEvent.attributes?.drupal_internal__id.toString();\n\n if (!eventDrupalId) {\n return;\n }\n\n const endpoint = selectedData?.isUserAttending ? 'signout' : 'signup';\n\n await post({\n url: `events/${eventDrupalId}/${endpoint}`,\n body: {\n data: {\n type: 'event_signup',\n attributes: {\n wants_confirmation: mailNotification ? 1 : 0\n }\n }\n }\n });\n\n onClose();\n }, [selectedData?.vtbEvent.attributes?.drupal_internal__id, selectedData?.isUserAttending, post, mailNotification, onClose]);\n\n return (\n \n );\n};\n\nRegisterEventDialogBox.propTypes = {\n selectedData: PropTypes.any,\n onClose: PropTypes.func.isRequired\n};\n","import { useCallback, useState } from 'react';\nimport { useStore } from '../../../hooks';\n\nexport const useEwaApiPost = ({ toastTextSuccess, toastTextFailure }) => {\n const store = useStore();\n const [data, setData] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const post = useCallback(\n async ({ url, body }) => {\n setIsLoading(true);\n\n try {\n const response = await window.authedClient.post(`ewapi/${url}`, body ?? undefined);\n\n if (response.status > 199 && response.status < 300) {\n setData(response.data);\n store.showToast({ message: toastTextSuccess, variant: 'success' });\n setIsLoading(false);\n return;\n }\n\n setError(`${url} returned statuscode: ${response.status}`);\n store.showToast({ message: toastTextFailure, variant: 'error' });\n } catch (_) {\n setError('Something went wrong with the fetch');\n store.showToast({ message: toastTextFailure, variant: 'error' });\n }\n\n setIsLoading(false);\n },\n [store, toastTextSuccess, toastTextFailure]\n );\n\n return { post, data, isLoading, error };\n};\n","import { Box, Stack, Typography } from '@mui/material';\nimport * as PropTypes from 'prop-types';\n\nexport const LocationContent = ({ location }) => (\n \n \n {location.image && (\n \n \n {/* \"location */}\n \n \n \n )}\n \n \n {location.attributes.title ?? location.attributes.name}\n \n \n \n {location.attributes.street} {location.attributes.house_number}\n \n \n {location.attributes.zipcode} {location.attributes.name}\n \n \n \n \n \n Parkeerinformatie\n \n \n {location.attributes.parking_info}\n \n \n \n \n);\n\nLocationContent.propTypes = { location: PropTypes.any.isRequired };\n","import { Typography } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport { forwardRef } from 'react';\nimport { Icon } from '@iconify/react';\n\nconst useStyles = makeStyles((theme) => ({\n button: {\n backgroundColor: '#F2F7F6',\n paddingLeft: 20,\n paddingRight: 20,\n borderRadius: 10,\n width: '100%',\n height: '48px',\n color: 'black',\n boxShadow: 'none',\n fontSize: 16,\n justifyContent: 'space-between',\n fontWeight: 400,\n textTransform: 'initial',\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'all ease-in-out 0.15s',\n\n '&:hover': { boxShadow: 'none', backgroundColor: theme.palette.primary.main, color: theme.palette.primary.contrastText }\n }\n}));\n\nexport const LocationButtonBase = forwardRef(({ children, ...props }, ref) => {\n const classes = useStyles();\n\n return (\n \n );\n});\n\nLocationButtonBase.propTypes = {\n onClick: PropTypes.func,\n children: PropTypes.any.isRequired\n};\n","import { Dialog } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { LocationContent } from './LocationContent';\nimport { LocationButtonBase } from './LocationButtonBase';\n\nexport const LocationButtonMobile = ({ location }) => {\n const [open, setOpen] = useState(false);\n\n return (\n <>\n setOpen(false)} sx={{ margin: 2 }}>\n \n \n setOpen(true)}>{location.attributes.name}\n \n );\n};\n\nLocationButtonMobile.propTypes = {\n location: PropTypes.any.isRequired\n};\n","import { Box } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport Tooltip, { tooltipClasses } from '@mui/material/Tooltip';\nimport { useBreakpoint } from 'hooks';\nimport React, { useState } from 'react';\n\nexport const VtbTooltip = styled(({ className, ...props }) => )(\n ({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n backgroundColor: 'white',\n color: '#2B3674',\n marginInline: 10,\n minWidth: 400,\n '@media (max-width: 600px)': {\n minWidth: 0\n },\n fontSize: theme.typography.pxToRem(12),\n borderRadius: 20,\n padding: 10,\n boxShadow: '0 15px 30px rgba(0,0,0,0.15)'\n },\n\n [`& .${tooltipClasses.arrow}::before`]: {\n backgroundColor: 'white'\n }\n })\n);\n\n// eslint-disable-next-line react/prop-types\nconst CustomTooltip = ({ children, ...props }) => {\n const breakpoint = useBreakpoint();\n const mobileBreakpoint = breakpoint === 'sm' || breakpoint === 'xs';\n const [open, setOpen] = useState(false);\n\n return (\n setOpen(false) : undefined}\n onOpen={mobileBreakpoint ? () => setOpen(true) : undefined}\n disableFocusListener={mobileBreakpoint}\n disableHoverListener={mobileBreakpoint}\n >\n \n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n onTouchEnd: () => (mobileBreakpoint ? setOpen(true) : undefined)\n });\n }\n return child;\n })}\n \n \n );\n};\n","import PropTypes from 'prop-types';\nimport { VtbTooltip } from '../VtbTooltip';\nimport { LocationContent } from './LocationContent';\nimport { LocationButtonBase } from './LocationButtonBase';\n\nexport const LocationButtonDesktop = ({ location }) => (\n }>\n {location.attributes.name}\n \n);\n\nLocationButtonDesktop.propTypes = {\n location: PropTypes.any.isRequired\n};\n","import { Box, useMediaQuery } from '@mui/material';\nimport * as PropTypes from 'prop-types';\nimport { useTheme } from '@mui/styles';\nimport { useMemo } from 'react';\nimport { LocationButtonMobile } from './LocationButtonMobile';\nimport { LocationButtonDesktop } from './LocationButtonDesktop';\n\nexport const LocationButton = ({ location }) => {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n const content = useMemo(() => {\n if (isMobile) {\n return ;\n }\n\n return ;\n }, [isMobile, location]);\n\n return {content};\n};\n\nLocationButton.propTypes = { location: PropTypes.any };\n","import PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport { forwardRef } from 'react';\nimport CheckIcon from '@mui/icons-material/Check';\n\nconst useStyles = makeStyles({\n button: {\n backgroundColor: '#F8F8F8',\n paddingLeft: 20,\n borderRadius: 10,\n width: '100%',\n border: 'none',\n height: '48px',\n boxShadow: '0 15px 30px rgba(0,0,0,0)',\n display: 'flex',\n justifyContent: 'center',\n gap: 10,\n alignItems: 'center',\n textTransform: 'initial',\n textAlign: 'center',\n fontSize: 16,\n fontWeight: 400,\n fontFamily: `'Roboto', 'Helvetica', 'Arial', sans-serif`,\n color: '#2B3674',\n cursor: 'pointer',\n transition: 'all ease-in-out 0.15s',\n '&:hover:not([disabled])': { boxShadow: '0 8px 15px rgba(0,0,0,0.15)', opacity: 1 },\n '&:disabled': {\n backgroundColor: '#A9A9A9',\n color: 'white',\n cursor: 'not-allowed'\n }\n },\n isUserAttendingEventType: {\n opacity: 0.5,\n\n '&:disabled': {\n opacity: 1\n },\n\n '&:hover:not([disabled])': { boxShadow: '0 8px 15px rgba(0,0,0,0.0)', opacity: 0.5, cursor: 'not-allowed' }\n },\n isUserAttending: {\n color: 'white',\n fontWeight: 800,\n backgroundColor: '#006848',\n opacity: 1,\n '&:hover:not([disabled])': { backgroundColor: '#FF3B30' }\n }\n});\n\nexport const EventButton = forwardRef(\n ({ isUserAttending, isEnrollmentClosed, isUserAttendingEventType, noSeatsAvailable, onClick, children, ...props }, ref) => {\n const classes = useStyles();\n\n const className = [\n classes.button,\n isUserAttendingEventType && !isUserAttending ? classes.isUserAttendingEventType : false,\n isUserAttending ? classes.isUserAttending : false\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n \n {children}\n {isUserAttending && isEnrollmentClosed ? : null}\n \n );\n }\n);\n\nEventButton.propTypes = {\n isUserAttending: PropTypes.bool,\n isUserAttendingEventType: PropTypes.bool,\n isEnrollmentClosed: PropTypes.bool,\n noSeatsAvailable: PropTypes.bool,\n onClick: PropTypes.func,\n children: PropTypes.any\n};\n","import { Box, Typography } from '@mui/material';\nimport { useBreakpoint } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { VtbTooltip } from '../../../VtbTooltip';\nimport { formatDate } from '../../../lib/formatDate';\nimport { EventButton } from './EventButton';\n\nexport const EventTypeColumn = ({ vtbEvents, onEventClick, isUserAttendingEventType, eventType }) => {\n const { t } = useTranslation('vtb');\n const breakpoint = useBreakpoint();\n const mobileBreakpoint = breakpoint === 'sm' || breakpoint === 'xs';\n\n const { name } = eventType.attributes;\n\n const getTitleContent = (vtbEvent) => {\n if (isUserAttendingEventType && vtbEvent.isUserAttending && vtbEvent.isEnrollmentClosed) {\n return (\n \n \n {t('popups.attendedPastEvent')}\n \n \n );\n }\n if (isUserAttendingEventType && !vtbEvent.isUserAttending && !vtbEvent.isEnrollmentClosed) {\n return (\n \n \n {t('popups.alreadySignedInSameType.title', { name })}\n \n \n {t('popups.alreadySignedInSameType.text', { name })}\n \n \n );\n }\n return '';\n };\n\n return (\n \n {vtbEvents.map((vtbEvent) => (\n \n \n (vtbEvent.isUserAttending || !isUserAttendingEventType) &&\n onEventClick({\n vtbEvent,\n isUserAttending: vtbEvent.isUserAttending\n })\n }\n isUserAttending={vtbEvent.isUserAttending}\n isUserAttendingEventType={isUserAttendingEventType}\n isEnrollmentClosed={vtbEvent.isEnrollmentClosed}\n noSeatsAvailable={vtbEvent.noSeatsAvailable}\n >\n {formatDate(vtbEvent.attributes.date.value)}\n \n \n ))}\n \n );\n};\n\nEventTypeColumn.propTypes = {\n isUserAttendingEventType: PropTypes.bool,\n vtbEvents: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n attributes: PropTypes.shape({\n date: PropTypes.shape({\n value: PropTypes.string.isRequired\n }).isRequired\n }).isRequired,\n isEnrollmentClosed: PropTypes.bool\n })\n ).isRequired,\n onEventClick: PropTypes.func,\n eventType: PropTypes.any\n};\n","import { Box } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { LocationButton } from '../../LocationButton/LocationButton';\nimport { EventTypeColumn } from './EventTypeColumn/EventTypeColumn';\nimport { getOtherEventsOfSameEventType } from '../../lib/getOtherEventsOfSameEventType';\n\nexport const LocationRow = ({ vtbEvents, eventSignupIds, location, eventTypes, onEventClick }) => (\n \n \n \n {eventTypes.map((eventType) => {\n // So let's get all events of this event type\n const eventsOfSameEventType = getOtherEventsOfSameEventType(vtbEvents, eventType.id);\n\n // So is a user present in one of these event of this type\n const userPresentInOneOfTheEvents = eventsOfSameEventType.some((eventOfSameEventType) =>\n eventSignupIds?.includes(eventOfSameEventType.id)\n );\n\n const parsedEvents = eventsOfSameEventType.map((eventOfSameEventType) => {\n const isUserAttending = eventSignupIds?.includes(eventOfSameEventType.id);\n const isUserAttendingEventOfOtherEventType = userPresentInOneOfTheEvents;\n return { ...eventOfSameEventType, isUserAttending, isUserAttendingEventOfOtherEventType };\n });\n\n const events = parsedEvents.filter((parsedEvent) => parsedEvent.relationships.location.data.id === location.id);\n\n return (\n vtbEvent.isUserAttendingEventOfOtherEventType)}\n key={eventType.id}\n eventType={eventType}\n vtbEvents={events}\n onEventClick={({ vtbEvent, isUserAttending }) =>\n onEventClick({\n vtbEvent,\n eventType,\n location,\n isUserAttending\n })\n }\n />\n );\n })}\n \n \n);\n\nLocationRow.propTypes = {\n vtbEvents: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n attributes: PropTypes.shape({\n date: PropTypes.shape({\n value: PropTypes.string.isRequired\n }).isRequired\n }).isRequired,\n isEnrollmentClosed: PropTypes.bool\n })\n ).isRequired,\n eventSignupIds: PropTypes.arrayOf(PropTypes.string),\n location: PropTypes.shape({\n id: PropTypes.string.isRequired\n }).isRequired,\n eventTypes: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired\n })\n ).isRequired,\n onEventClick: PropTypes.func.isRequired\n};\n","export const getOtherEventsOfSameEventType = (allEvents, eventTypeId) =>\n allEvents.filter((eventItem) => eventItem.relationships.event_type.data.id === eventTypeId);\n","import PropTypes from 'prop-types';\nimport parse, { domToReact } from 'html-react-parser/dist/html-react-parser.min';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from '@mui/material';\nimport { useMemo } from 'react';\nimport './style.css';\nimport { useTranslation } from 'react-i18next';\n\nexport const EventTypeDescriptionDialog = ({ selectedData, onClose }) => {\n const { t } = useTranslation('translation');\n\n const parsedHtml = useMemo(() => {\n if (!selectedData) {\n return null;\n }\n\n return parse(selectedData.body.processed, {\n // eslint-disable-next-line consistent-return\n replace: ({ attribs, children, options, name }) => {\n if (name === 'div' && attribs.class?.split(' ').includes('field-label')) {\n const textChildren = children.find((child) => child.name === 'strong')?.children;\n\n return {domToReact(textChildren, options)};\n }\n\n if (name === 'p') {\n return (\n \n {domToReact(children, options)}\n \n );\n }\n\n if (name === 'ul') {\n const listItemChildren = children.filter((child) => child.name === 'li');\n\n return (\n
      \n {listItemChildren.map((listItemChild) => (\n
    • \n {domToReact(listItemChild.children, listItemChild.options)}\n
    • \n ))}\n
    \n );\n }\n }\n });\n }, [selectedData]);\n\n if (!parsedHtml) {\n return null;\n }\n\n return (\n \n {selectedData.title}\n \n {parsedHtml}\n \n \n \n \n \n \n \n \n \n );\n};\n\nEventTypeDescriptionDialog.propTypes = {\n selectedData: PropTypes.any,\n onClose: PropTypes.func.isRequired\n};\n","import { Box, Typography } from '@mui/material';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useVtbOverview } from '../hooks/useVtbOverview';\nimport { EventTypeTitleHead } from '../EventTypeTitleHead/EventTypeTitleHead';\nimport { RegisterEventDialogBox } from './RegisterEventDialogBox';\nimport { LocationRow } from './LocationRow/LocationRow';\nimport { EventTypeDescriptionDialog } from './EventTypeDescriptionDialog/EventTypeDescriptionDialog';\nimport { useEventTypeDescriptions } from './useEventTypeDescriptions';\n\nconst MidContentSection = ({ showOnlyAvailable, year }) => {\n const [selectedData, setSelectedData] = useState(null);\n const { t } = useTranslation();\n const [descriptionDialogId, setDescriptionDialogId] = useState(false);\n\n const { data, refetch } = useVtbOverview({ year });\n const { data: descriptionData } = useEventTypeDescriptions();\n\n if (!data) {\n return (\n \n \n \n );\n }\n\n const filteredEvents = showOnlyAvailable ? data.events.filter((event) => !event.isEnrollmentClosed) : data.events;\n\n const locationIds = [...new Set(filteredEvents.map((vtbEvent) => vtbEvent.relationships.location.data.id))];\n const eventTypeIds = [...new Set(filteredEvents.map((vtbEvent) => vtbEvent.relationships.event_type.data.id))];\n\n const filteredLocations = showOnlyAvailable ? data.locations.filter((location) => locationIds.includes(location.id)) : data.locations;\n\n const filteredEventTypes = showOnlyAvailable\n ? data.eventTypes.filter((eventType) => eventTypeIds.includes(eventType.id))\n : data.eventTypes;\n\n if (data.events.length < 1) {\n return (\n \n \n {t('noEvents')}\n \n \n );\n }\n\n return (\n <>\n {\n setSelectedData(null);\n await refetch();\n }}\n />\n setDescriptionDialogId(null)} selectedData={descriptionData?.[descriptionDialogId]} />\n \n \n \n \n {t('vtb.maintitle')} {year}\n \n \n {filteredEventTypes.map((eventType) => (\n \n ))}\n \n {filteredLocations.map((location) => (\n \n ))}\n \n \n );\n};\n\nMidContentSection.propTypes = {\n showOnlyAvailable: PropTypes.bool,\n year: PropTypes.number\n};\n\nexport default MidContentSection;\n","import { useEffect, useState } from 'react';\n\nexport const useEventTypeDescriptions = () => {\n const [isLoading, setIsLoading] = useState(false);\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n const init = async () => {\n setIsLoading(true);\n try {\n const response = await window.authedClient.get(`jsonapi/node/vtb_event`);\n\n const transformedData = {};\n\n response.data.data.forEach((item) => {\n const key = item.attributes.drupal_internal__nid;\n transformedData[key] = item.attributes;\n });\n\n setData(transformedData);\n } catch (err) {\n setError(err);\n }\n setIsLoading(false);\n };\n\n init();\n }, []);\n\n return { data, error, isLoading };\n};\n","import { observer } from 'mobx-react';\nimport { Box, Typography } from '@mui/material';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useTheme } from '@emotion/react';\n\nconst BottomDescription = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n return (\n \n \n {t('vtb.introTitle')}\n \n \n \n On this page you can register for the technical meetings. To do this, click on a date in the table below and then click “Save\n changes“. You can adjust your registration up to a week before the meeting by clicking out the registered dates (unsubscribe) or\n clicking on another date. There are four meetings each year that you can register for.

    \n You can view the information about the meeting by clicking on the relevant quarter. You can view more information about the\n location of the meeting by place name.

    If you have any questions about your registration, please contact us at:\n
    \n \n bijeenkomsten@pe-academy.nl\n \n \n

    or call 030 - 26 44 100.\n
    \n \n \n );\n};\n\nexport default observer(BottomDescription);\n","import { observer } from 'mobx-react';\nimport { Box } from '@mui/material';\n\nimport { useState } from 'react';\nimport { FilterBar } from './FilterBar';\nimport MidContentSection from './MidContentSection/MidContentSection';\nimport BottomDescription from './BottomDescription';\n\nconst VTBLayout = () => {\n const [showOnlyAvailable, setShowOnlyAvailable] = useState(false);\n const [year, setYear] = useState(new Date().getFullYear());\n\n return (\n \n \n \n \n \n );\n};\nexport default observer(VTBLayout);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport VTBLayout from '../VTBLayout';\n\nconst VtbViewMap = {\n vtb: (\n \n \n \n )\n};\n\nexport default VtbViewMap;\n","import { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport PropTypes from 'prop-types';\nimport { Box } from '@mui/material';\nimport LoadingPage from 'components/common/LoadingPage';\n\nconst CurriculumLayout = ({ children }) => {\n const store = useContext(Store);\n\n if (store.state === 'loading') {\n return ;\n }\n\n return (\n <>\n \n {children}\n \n \n );\n};\nCurriculumLayout.propTypes = {\n children: PropTypes.any\n};\n\nexport default observer(CurriculumLayout);\n","import PropTypes from 'prop-types';\n\nimport { alpha, Button as ButtonBase, Tooltip } from '@mui/material';\nimport { useTheme } from '@mui/styles';\n\nconst Button = ({\n tooltipText,\n color,\n variant = 'contained',\n size = 'medium',\n disableElevation = true,\n shadow = false,\n inverted = false,\n square = false,\n border = false,\n children,\n sx,\n ...rest\n}) => {\n const theme = useTheme();\n const lightGreen = alpha(theme.palette.primary.main, 0.2);\n\n const sizes = { small: '2.0rem', medium: '2.5rem', large: '3.0rem' };\n\n const buttonStyles = {\n borderRadius: '0.75rem',\n display: 'flex',\n gap: '0.5rem',\n textTransform: 'none',\n fontWeight: 400,\n minWidth: 'auto',\n height: sizes[size],\n ...sx\n };\n\n if (shadow) {\n buttonStyles.boxShadow = '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)';\n }\n\n if (inverted && variant === 'contained' && (!color || color === 'primary')) {\n buttonStyles.backgroundColor = '#fff';\n buttonStyles.color = 'primary.main';\n buttonStyles['&:hover'] = {\n backgroundColor: 'primary.main',\n color: '#fff'\n };\n if (border) {\n buttonStyles.border = `1px solid ${lightGreen}`;\n }\n }\n\n if (square) {\n buttonStyles.width = sizes[size];\n buttonStyles.height = sizes[size];\n }\n\n return (\n \n {/* span is needed to make tooltip work for disabled button state */}\n \n \n {children}\n \n \n \n );\n};\n\nButton.propTypes = {\n sx: PropTypes.any,\n children: PropTypes.any,\n tooltipText: PropTypes.string,\n variant: PropTypes.string,\n color: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n disableElevation: PropTypes.bool,\n shadow: PropTypes.bool,\n inverted: PropTypes.bool,\n square: PropTypes.bool,\n border: PropTypes.bool\n};\n\nexport default Button;\n","import PropTypes from 'prop-types';\n\nimport { Icon } from '@iconify/react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport { DialogTitle, Button, Box, CircularProgress, Tooltip } from '@mui/material';\n\nconst CustomDialog = ({ title, onClose, visible, children, name, action }) => (\n
    \n reason === 'escapeKeyDown' && onClose()}\n aria-labelledby={`${name}-dialog-title`}\n aria-describedby={`${name}-dialog-description`}\n >\n \n \n {title}\n onClose()}\n >\n \n \n \n \n \n {children}\n \n {action && (\n \n \n \n {action.isLoading && }\n {!action.isLoading && (\n <>\n {action.icon && }\n {action.name}\n \n )}\n \n \n \n )}\n \n
    \n);\n\nCustomDialog.propTypes = {\n name: PropTypes.string,\n title: PropTypes.string,\n children: PropTypes.node,\n onClose: PropTypes.func,\n visible: PropTypes.bool,\n action: PropTypes.shape({\n action: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n icon: PropTypes.string,\n classes: PropTypes.string,\n sx: PropTypes.any,\n isLoading: PropTypes.bool\n })\n};\n\nexport default CustomDialog;\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { useStore } from 'hooks';\nimport Dialog from './Dialog';\n\nconst ConfirmationModal = ({ title, text, btnLabel, isVisible, onCancel, onConfirm }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n return (\n \n {text}\n \n );\n};\n\nConfirmationModal.propTypes = {\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n isVisible: PropTypes.bool.isRequired,\n onCancel: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n btnLabel: PropTypes.string\n};\n\nexport default observer(ConfirmationModal);\n","import { useLocalStorage, useStore } from 'hooks';\n\nexport const useDisclaimer = () => {\n const store = useStore();\n\n const [hasReadDisclaimer, setHasReadDisclaimer] = useLocalStorage(`disclaimer-read-${store.login.uuid}`, null);\n\n return { hasReadDisclaimer, setHasReadDisclaimer };\n};\n","/* eslint-disable react/no-danger */\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box } from '@mui/material';\n\nimport Dialog from './Dialog';\nimport { useDisclaimer } from './useDisclaimer';\n\nconst DisclaimerDialog = ({ open, onCloseCallback }) => {\n const { t } = useTranslation('curriculum');\n\n const { setHasReadDisclaimer } = useDisclaimer();\n\n const onClose = () => {\n setHasReadDisclaimer(true);\n onCloseCallback();\n };\n\n return (\n \n \n
    \n \n \n );\n};\n\nDisclaimerDialog.propTypes = {\n open: PropTypes.bool,\n onCloseCallback: PropTypes.func\n};\n\nexport default DisclaimerDialog;\n","import DialogBase from '@mui/material/Dialog';\nimport { styled } from '@mui/material/styles';\n\nconst Dialog = styled(DialogBase)(() => ({\n '& .MuiPaper-root': { minWidth: '500px !important' },\n '& .MuiDialogTitle-root': {\n fontSize: '20px',\n textAlign: 'left !important',\n padding: '0 0 8px 0'\n },\n '& .MuiDialogContent-root': {\n padding: '0 0 20px 0'\n },\n '& .MuiDialogActions-root': {\n padding: '0 0 8px 0',\n paddingLeft: '0px',\n paddingRight: '0px !important'\n }\n}));\n\nexport default Dialog;\n","import DialogTitleBase from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\n\nconst DialogTitle = styled(DialogTitleBase)(() => ({\n fontWeight: 'bold',\n color: '#2B3674',\n fontSize: '20px'\n}));\n\nexport default DialogTitle;\n","import { makeStyles } from '@mui/styles';\n\nexport const useCurriculumStyles = makeStyles(() => ({\n mySelect: {\n maxHeight: 250\n }\n}));\n\nexport const TextField = {\n borderWidth: '0px',\n '& .MuiOutlinedInput-notchedOutline': {\n padding: '5px',\n border: 'none',\n boxShadow: '0px 3px 10px 2px rgba(0,0,0,0.10)',\n borderRadius: '10px'\n }\n};\n\nexport const SelectBox = {\n paddingInline: '8px',\n '& .MuiOutlinedInput-notchedOutline': {\n padding: '5px',\n border: 'none',\n boxShadow: '0px 3px 10px 2px rgba(0,0,0,0.10)',\n borderRadius: '10px'\n }\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Button, Grid } from '@mui/material';\nimport DialogActions from '@mui/material/DialogActions';\n\nimport Dialog from 'components/dialog/Dialog';\nimport DialogTitle from 'components/dialog/DialogTitle';\nimport { Form } from 'components/form';\nimport { MySelect } from 'components/form/RHF';\nimport { useStore } from 'hooks';\nimport * as Styles from '../components/styles';\n\nconst AddNewCurriculumDialog = ({ isOpen, onCloseCallback, onSubmitCallback }) => {\n const classes = Styles.useCurriculumStyles();\n const store = useStore();\n const { t } = useTranslation('curriculum');\n\n const currentYear = new Date().getFullYear();\n const currentMonth = new Date().getMonth();\n const allowedYears = [currentYear, currentYear + 1];\n if (currentMonth === 0) {\n allowedYears.unshift(currentYear - 1);\n }\n const allowedValues = allowedYears.map((year) => ({ name: year }));\n\n const validationSchema = Yup.object().shape({\n year: Yup.number()\n .min(Math.min(...allowedYears))\n .max(Math.max(...allowedYears))\n .integer()\n .required()\n });\n\n const initialValues = {\n year: currentYear\n };\n\n const handleClose = (event, reason) => {\n if (reason === 'backdropClick') {\n return false;\n }\n onCloseCallback();\n return true;\n };\n\n const handleSubmit = async (values) => {\n store.startLoadCurriculum();\n const result = await store.createCurriculum(values);\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback(result?.data?.data);\n\n return { success: true };\n };\n\n return (\n \n {t('dashboard.addNewCurriculumTitle')}\n
    \n {({ control, errors, reset }) => (\n <>\n \n \n \n \n \n \n {\n reset();\n handleClose();\n }}\n >\n {t('dashboard.cancelLabel')}\n \n \n \n \n )}\n
    \n
    \n );\n};\n\nAddNewCurriculumDialog.propTypes = {\n isOpen: PropTypes.bool,\n onCloseCallback: PropTypes.func,\n onSubmitCallback: PropTypes.func\n};\n\nexport default observer(AddNewCurriculumDialog);\n","export const canEditCurriculum = (year) => {\n const now = new Date();\n return year >= now.getFullYear() || (year === now.getFullYear() - 1 && now.getMonth() === 0);\n};\n\nexport const evaluationIsComplete = (evaluation) =>\n (evaluation?.relationships?.courses?.data?.length > 0 || evaluation?.attributes?.activities?.length > 0) &&\n evaluation?.attributes?.name?.length > 0 &&\n evaluation?.attributes?.evaluation?.length > 0;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Button, LinearProgress, Pagination, Paper, Stack, Typography } from '@mui/material';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport RestoreIcon from '@mui/icons-material/Restore';\nimport Tooltip from '@mui/material/Tooltip';\nimport { useTheme } from '@mui/material/styles';\n\nimport { useStore } from 'hooks';\nimport { CURRICULUM_STAGE_BY_STEP } from '../constants';\nimport { canEditCurriculum } from '../utils';\n\nexport const CurriculumTable = ({ items, page, noOfPages, itemsPerPage, handlePageChange, refreshCallback }) => {\n const store = useStore();\n const theme = useTheme();\n const { t } = useTranslation('curriculum');\n\n const actionButtonProps = {\n variant: 'outlined',\n size: 'small',\n sx: {\n borderRadius: '20px',\n textTransform: 'none',\n fontWeight: 400,\n display: 'flex',\n gap: '8px',\n width: '100px',\n [theme.breakpoints.down('lg')]: {\n minWidth: '50px',\n width: '50px'\n }\n }\n };\n\n const archive = async (uid) => {\n await window.authedClient.delete(`ewapi/portfolios/${uid}/delete`);\n refreshCallback();\n };\n\n const unarchive = async (item) => {\n await store.unarchiveCurriculum(item.uid);\n refreshCallback();\n };\n\n const download = async (uid) => {\n const result = await window.authedClient.get(`/portfolio/${uid}/access-pdf`);\n\n if (result?.data?.download_url) {\n window.open(result.data.download_url, '_blank');\n }\n };\n\n const handleRowClick = (item) => {\n if (item.isDeleted) {\n return;\n }\n\n if (item.isFinished) {\n download(item.uid);\n return;\n }\n\n const stageToGoTo = CURRICULUM_STAGE_BY_STEP[item.currentStep] ?? CURRICULUM_STAGE_BY_STEP[1];\n\n store.routerStore.goTo('curriculumStages', {\n params: {\n uid: item.uid,\n stageId: stageToGoTo\n }\n });\n };\n\n return (\n \n {store.isLoadingCurriculum && }\n \n \n \n {t('dashboard.yearTitle')}\n \n \n {t('dashboard.progressTitle')}\n \n \n {t('dashboard.learningGoalsTitle')}\n \n \n {t('dashboard.plannedActivitiesTitle')}\n \n \n {t('dashboard.evaluationsTitle')}\n \n \n \n \n {items.map((item) => (\n handleRowClick(item)}\n key={item.uid}\n sx={{\n mb: 2,\n alignItems: 'center',\n display: 'grid',\n px: 4,\n gridTemplateColumns: '100px 3fr 1fr 1fr 1fr 3fr',\n width: '100%',\n height: '54px',\n borderRadius: '20px',\n border: '1px solid #EEEEEE',\n cursor: item.isDeleted ? 'default' : 'pointer',\n '&:hover': { boxShadow: item.isDeleted ? '' : '0px 30px 15px -26px rgba(0, 0, 0, 0.2)' }\n }}\n >\n {item.year}\n \n \n \n \n \n \n {`${Math.round(item.percentageCompleted)}%`}\n \n \n \n {item.isV3Portfolio ? '-' : item.goals}\n {item.isV3Portfolio ? '-' : item.plannedActivities}\n {item.isV3Portfolio ? '-' : item.evaluations}\n \n \n {!item.isDeleted && (\n \n {\n event.stopPropagation();\n archive(item.uid);\n }}\n >\n \n \n {t('dashboard.archiveBtnLabel')}\n \n \n \n )}\n\n {item.isDeleted && (\n \n {\n event.stopPropagation();\n unarchive(item);\n }}\n >\n \n \n {t('dashboard.unarchiveBtnLabel')}\n \n \n \n )}\n\n {!item.isDeleted && item.percentageCompleted >= 25 && (\n \n {\n event.stopPropagation();\n download(item.uid);\n }}\n >\n \n \n {t('dashboard.downloadBtnLabel')}\n \n \n \n )}\n\n {!item.isDeleted && !item.isFinished && canEditCurriculum(item.year) && (\n \n {\n event.stopPropagation();\n handleRowClick(item);\n }}\n >\n \n \n {t('dashboard.editBtnLabel')}\n \n \n \n )}\n \n \n \n ))}\n \n {noOfPages > 1 && (\n \n handlePageChange((newPage - 1) * itemsPerPage)} />\n \n )}\n \n \n );\n};\n\nCurriculumTable.propTypes = {\n noOfPages: PropTypes.number,\n itemsPerPage: PropTypes.number,\n page: PropTypes.number,\n handlePageChange: PropTypes.func,\n refreshCallback: PropTypes.func,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n uid: PropTypes.string.isRequired,\n id: PropTypes.number.isRequired,\n year: PropTypes.number.isRequired,\n isFinished: PropTypes.bool.isRequired,\n currentStep: PropTypes.number.isRequired,\n percentageCompleted: PropTypes.number.isRequired,\n goals: PropTypes.number.isRequired,\n plannedActivities: PropTypes.number.isRequired,\n evaluations: PropTypes.number.isRequired\n })\n ).isRequired\n};\n","import { useTheme } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport { Button } from '../components';\n\nexport const FilterButton = ({ children, onClick, isActive }) => {\n const theme = useTheme();\n\n return (\n \n {children}\n \n );\n};\n\nFilterButton.propTypes = {\n isActive: PropTypes.bool,\n children: PropTypes.any,\n onClick: PropTypes.func\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport AddIcon from '@mui/icons-material/Add';\nimport QuestionMarkIcon from '@mui/icons-material/QuestionMark';\nimport { Box, ButtonGroup, Paper } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { Button, DisclaimerDialog } from '../components';\nimport { CURRICULUM_STAGE } from '../constants';\nimport AddNewCurriculumDialog from './AddNewCurriculumDialog';\nimport { CurriculumTable } from './CurriculumTable';\nimport { FilterButton } from './FilterButton';\nimport { useDisclaimer } from '../components/useDisclaimer';\n\nfunction calculatePagination({ offset, limit, total }) {\n // Calculate the current page and total number of pages\n const page = offset / limit + 1;\n const noOfPages = Math.ceil(total / limit);\n\n // Return the calculated values\n return { page, noOfPages, itemsPerPage: limit };\n}\n\nconst ActionButton = ({ row: { uid, isFinished } }) => {\n const { t } = useTranslation('curriculum');\n\n const onDownloadBtnClick = async (e) => {\n e.stopPropagation();\n\n const result = await window.authedClient.get(`/portfolio/${uid}/access-pdf`);\n\n if (result?.data?.download_url) {\n window.open(result.data.download_url, '_blank');\n }\n };\n\n return (\n <>\n {isFinished ? (\n \n ) : (\n \n )}\n \n );\n};\n\nActionButton.propTypes = {\n row: PropTypes.shape({\n uid: PropTypes.string,\n isFinished: PropTypes.bool\n })\n};\n\nconst CurriculumDashboard = () => {\n const store = useStore();\n const { t } = useTranslation('curriculum');\n\n const items = store.curriculums.portfolios ?? [];\n const meta = store.curriculums.result;\n\n const isArchive = store.routerStore?.routerState?.params?.type === 'archive';\n const [filter, setFilter] = useState(isArchive ? 'archive' : 'active');\n\n const { hasReadDisclaimer } = useDisclaimer();\n\n const [isAddModalOpen, setIsAddModalOpen] = useState(false);\n const [isDisclaimerDialogOpen, setIsDisclaimerDialogOpen] = useState(!hasReadDisclaimer);\n\n const fetchCurriculums = async (offset = 0) => {\n const params = {\n offset,\n limit: 10,\n is_deleted: isArchive ? 1 : 0\n };\n\n await store.fetchCurriculums(params);\n };\n\n useEffect(() => {\n if (store.error?.length > 0) {\n store.showToast({ message: store.error[0].message, variant: 'error' });\n }\n }, [store]);\n\n const tableItems = items?.map(\n ({\n current_step: currentStep,\n drupal_internal__uid: id,\n uuid: uid,\n percentage_completed: percentageCompleted,\n totals: { learning_goal_activities: plannedActivities, learning_goal_evaluations: evaluations, learning_goals: goals },\n year,\n is_finished: isFinished,\n is_deleted: isDeleted,\n is_v3_portfolio: isV3Portfolio\n }) => ({\n uid,\n id,\n year,\n isFinished: !!isFinished,\n isDeleted: !!isDeleted,\n currentStep,\n percentageCompleted,\n goals,\n plannedActivities,\n evaluations,\n isV3Portfolio\n })\n );\n\n const handlePageChange = (offset) => {\n fetchCurriculums(offset);\n };\n\n const handleAddClick = () => {\n setIsAddModalOpen(true);\n };\n\n const onClose = () => {\n setIsAddModalOpen(false);\n };\n\n const onSubmitted = async (curriculum) => {\n setIsAddModalOpen(false);\n store.startLoadCurriculum();\n store.routerStore.goTo('curriculumStages', {\n params: {\n uid: curriculum.id,\n stageId: CURRICULUM_STAGE.functions\n }\n });\n store.stopLoadCurriculum();\n };\n\n const setRouteFilter = (route) => {\n setFilter(route);\n store.routerStore.goTo('curriculumDashboard', {\n params: {\n type: route === 'active' ? 'active' : 'archive'\n }\n });\n };\n\n return (\n <>\n \n \n \n setRouteFilter('active')}>\n {t('dashboard.activeLabel')}\n \n setRouteFilter('archive')}>\n {t('dashboard.archivedLabel')}\n \n \n \n \n \n \n \n \n \n {tableItems.length > 0 ? (\n \n ) : (\n \n {isArchive ? t('dashboard.noArchiveText') : t('dashboard.noPortfolioText')}\n \n )}\n \n\n \n\n setIsDisclaimerDialogOpen(false)} />\n \n );\n};\n\nexport default observer(CurriculumDashboard);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport CurriculumLayout from 'pages/curriculum/CurriculumLayout';\nimport CurriculumDashboard from './CurriculumDashboard';\n\nconst CurriculumDashboardViewMap = {\n curriculumDashboard: (\n \n \n \n \n \n )\n};\n\nexport default CurriculumDashboardViewMap;\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport { Stack, Button, Typography } from '@mui/material';\n\nimport { CustomTable } from 'components';\nimport { ConfirmationModal as DeleteActivityConfirmationModal } from '../../components';\n\nconst ActivitiesActions = ({ id, onDelete, onEdit }) => {\n const { t } = useTranslation('curriculum');\n\n return (\n \n onEdit(id)}\n >\n \n {t('general.editBtnLabel')}\n \n onDelete(id)}\n >\n \n {t('general.deleteBtnLabel')}\n \n \n );\n};\n\nActivitiesActions.propTypes = {\n id: PropTypes.any,\n onDelete: PropTypes.func,\n onEdit: PropTypes.func\n};\n\nconst ActivitiesTable = ({ translationGroup, activities, columns, showActions, onEditCallback, onDeleteCallback }) => {\n const { t } = useTranslation('curriculum');\n\n const [selectedForDelete, setSelectedForDelete] = useState();\n const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);\n\n const handleMultiDelete = (data, selected) => {\n onDeleteCallback(selected);\n };\n\n const onDelete = (id) => {\n setSelectedForDelete([id]);\n setIsDeleteModalVisible(true);\n };\n\n const onConfirmDelete = () => {\n onDeleteCallback(selectedForDelete);\n setIsDeleteModalVisible(false);\n };\n\n const onEdit = (id) => {\n onEditCallback(id);\n };\n\n const onRowClick = (e, id) => {\n e.preventDefault();\n onEditCallback(id);\n };\n\n return (\n <>\n : null}\n actionProps={showActions ? { onDelete, onEdit } : null}\n />\n\n setIsDeleteModalVisible(false)}\n />\n \n );\n};\n\nActivitiesTable.propTypes = {\n translationGroup: PropTypes.oneOf(['functions', 'learningGoals']),\n activities: PropTypes.array,\n columns: PropTypes.array,\n onEditCallback: PropTypes.func,\n onDeleteCallback: PropTypes.func,\n showActions: PropTypes.bool\n};\n\nActivitiesTable.defaultProps = {\n translationGroup: 'functions',\n activities: [],\n columns: [],\n onEditCallback: () => {},\n onDeleteCallback: () => {},\n showActions: true\n};\n\nexport default observer(ActivitiesTable);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { Icon } from '@iconify/react';\nimport { Box, Typography } from '@mui/material';\n\nimport { Button } from '../../components';\n\nconst ActivitiesTableToolbar = ({\n onAddCallback,\n onEditCallback,\n onDeleteCallback,\n title,\n addActivityBtnLabel,\n addActivityBtnTooltip,\n editBtnLabel,\n editBtnTooltip\n}) => (\n \n
    \n \n {title}\n \n
    \n \n \n\n \n\n \n \n \n \n
    \n);\n\nActivitiesTableToolbar.propTypes = {\n onAddCallback: PropTypes.func.isRequired,\n onDeleteCallback: PropTypes.func.isRequired,\n onEditCallback: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n editBtnLabel: PropTypes.string.isRequired,\n editBtnTooltip: PropTypes.string,\n addActivityBtnLabel: PropTypes.string.isRequired,\n addActivityBtnTooltip: PropTypes.string\n};\n\nActivitiesTableToolbar.defaultProps = {\n editBtnTooltip: '',\n addActivityBtnTooltip: ''\n};\n\nexport default observer(ActivitiesTableToolbar);\n","import PropTypes from 'prop-types';\nimport { Box, Typography } from '@mui/material';\n\nconst StageHeader = ({ title, description }) => (\n \n \n {title}\n \n {description}\n \n);\n\nStageHeader.propTypes = {\n title: PropTypes.string.isRequired,\n description: PropTypes.string\n};\n\nexport default StageHeader;\n","import PropTypes from 'prop-types';\nimport { Box } from '@mui/material';\n\nconst StageTitleBar = ({ children }) => (\n \n {children}\n \n);\n\nStageTitleBar.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport default StageTitleBar;\n","import PropTypes from 'prop-types';\nimport { Typography } from '@mui/material';\n\nconst StageTitle = ({ title }) => (\n \n {title}\n \n);\n\nStageTitle.propTypes = {\n title: PropTypes.string.isRequired\n};\n\nexport default StageTitle;\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { MyTextField } from 'components/form/RHF';\nimport * as Styles from '../../../components/styles';\n\nconst ActivitiesFormPart = ({ control, errors }) => {\n const { t } = useTranslation('curriculum');\n\n return (\n <>\n \n
    {t('functions.activitiesDescription')}
    \n \n\n \n
    {t('functions.expectedResultsDescription')}
    \n \n \n );\n};\n\nActivitiesFormPart.propTypes = {\n control: PropTypes.object,\n errors: PropTypes.object\n};\n\nexport default observer(ActivitiesFormPart);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { MySelect, MyTextField } from 'components/form/RHF';\nimport { useStore } from 'hooks';\n\nimport * as Styles from '../../../components/styles';\n\nconst FunctionFormPart = ({ control, errors, setValue }) => {\n const { t } = useTranslation('curriculum');\n\n const classes = Styles.useCurriculumStyles();\n\n const store = useStore();\n\n const functionExamples = store.curriculumFunctionExamples?.data?.map((item) => ({\n name: item.attributes.description.value,\n value: item.attributes.description.value\n }));\n\n return (\n <>\n {\n setValue('nameDropDown', e.target.value);\n setValue('nameString', '');\n }}\n inputProps={{ classes: { paper: classes.mySelect } }}\n />\n\n {\n setValue('nameDropDown', '');\n }}\n />\n \n );\n};\n\nFunctionFormPart.propTypes = {\n errors: PropTypes.object,\n control: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(FunctionFormPart);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { Form } from 'components/form';\nimport { Dialog } from '../../../components';\nimport ActivitiesFormPart from './ActivitiesFormPart';\nimport FunctionFormPart from './FunctionFormPart';\n\nconst AddFunctionDialog = ({ visible, onCloseCallback, onSubmitCallback }) => {\n const { t } = useTranslation('curriculum');\n\n const store = useStore();\n\n const submitRef = useRef();\n\n const initialValues = useMemo(\n () => ({\n nameDropDown: '',\n nameString: '',\n activityName: '',\n activityResult: ''\n }),\n []\n );\n\n const validationSchema = Yup.object().shape(\n {\n nameDropDown: Yup.string().when('nameString', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n nameString: Yup.string().when('nameDropDown', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n activityName: Yup.string().required(),\n activityResult: Yup.string().required()\n },\n ['nameDropDown', 'nameString', 'activityName', 'activityResult']\n );\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n const handleSubmit = async ({ nameDropDown, nameString, activityName, activityResult }) => {\n store.startLoadCurriculum();\n const result = await store.createCurriculumFunctionWithActivity(store.curriculum.data, {\n functionName: nameDropDown.length > 0 ? nameDropDown : nameString,\n activityName,\n activityResult\n });\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: t('general.addBtnLabel'),\n icon: 'ant-design:plus-outlined',\n isLoading: store.isLoadingCurriculum\n }}\n title={t('functions.addFunctionTitle')}\n name=\"add-function\"\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors, setValue }) => (\n \n \n \n \n \n )}\n
    \n \n );\n};\n\nAddFunctionDialog.propTypes = {\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired\n};\n\nexport default observer(AddFunctionDialog);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { Form } from 'components/form';\nimport { Dialog } from 'pages/curriculum/components';\nimport { useStore } from 'hooks';\nimport ActivitiesFormPart from './ActivitiesFormPart';\n\nconst validationSchema = Yup.object().shape({\n activityName: Yup.string().required(),\n activityResult: Yup.string().required()\n});\n\nconst AddOrEditActivityModal = ({ visible, onCloseCallback, onSubmitCallback, fn, activity = null }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n const title = activity ? t('functions.editActivityTitle') : t('functions.addActivityTitle');\n const buttonLabel = t('dashboard.saveLabel');\n const icon = activity ? null : 'ant-design:plus-outlined';\n const name = title.replace(' ', '-').toLowerCase();\n\n const initialValues = {\n activityName: activity?.attributes?.name || '',\n activityResult: activity?.attributes?.expected_result || ''\n };\n\n const submitRef = useRef();\n\n const handleSubmit = async ({ activityName, activityResult }) => {\n let result = null;\n\n store.startLoadCurriculum();\n if (activity?.id) {\n result = await store.updateCurriculumFunctionActivity({\n ...activity,\n attributes: {\n ...activity.attributes,\n name: activityName,\n expected_result: activityResult\n }\n });\n } else {\n result = await store.createCurriculumFunctionActivity(fn, {\n name: activityName,\n expected_result: activityResult\n });\n }\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: buttonLabel,\n isLoading: store.isLoadingCurriculum,\n icon\n }}\n title={title}\n name={name}\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors }) => (\n \n \n \n \n )}\n
    \n \n );\n};\n\nAddOrEditActivityModal.propTypes = {\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired,\n fn: PropTypes.object,\n activity: PropTypes.shape({\n id: PropTypes.string.isRequired,\n attributes: PropTypes.shape({\n name: PropTypes.string.isRequired,\n expected_result: PropTypes.string.isRequired\n })\n })\n};\n\nAddOrEditActivityModal.defaultProp = {\n activity: null\n};\n\nexport default observer(AddOrEditActivityModal);\n","import { useStore } from 'hooks';\n\nexport const useCurriculum = () => {\n const store = useStore();\n\n const curriculum = store.curriculum?.data ?? [];\n\n return {\n curriculum\n };\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { MyTextField } from 'components/form/RHF';\nimport { useStore } from 'hooks';\nimport { Form } from 'components/form';\nimport { Dialog } from '../../../components';\nimport * as Styles from '../../../components/styles';\n\nconst EditFunctionDialog = ({ fn, visible, onCloseCallback, onSubmitCallback }) => {\n const { t } = useTranslation('curriculum');\n\n const store = useStore();\n\n const submitRef = useRef();\n\n const initialValues = useMemo(\n () => ({\n nameString: fn?.attributes?.name\n }),\n [fn]\n );\n\n const validationSchema = Yup.object().shape(\n {\n nameString: Yup.string().required()\n },\n ['nameString']\n );\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n const handleSubmit = async ({ nameString }) => {\n const data = {\n ...fn,\n attributes: {\n ...fn.attributes,\n name: nameString\n }\n };\n\n store.startLoadCurriculum();\n const result = await store.updateCurriculumFunction(data);\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: t('general.editBtnLabel'),\n icon: 'ant-design:edit-outlined',\n isLoading: store.isLoadingCurriculum\n }}\n title={t('functions.editFunctionTitle')}\n name=\"edit-function\"\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors }) => (\n \n \n \n \n \n )}\n
    \n \n );\n};\n\nEditFunctionDialog.propTypes = {\n fn: PropTypes.object.isRequired,\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired\n};\n\nexport default observer(EditFunctionDialog);\n","import { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box } from '@mui/material';\nimport { Icon } from '@iconify/react';\n\nimport { useStore } from 'hooks';\nimport { ConfirmationModal, Button } from '../../components';\nimport { ActivitiesTable, ActivitiesTableToolbar, StageTitleBar, StageTitle, StageHeader } from '../components';\nimport { useFunctions } from '../useFunctions';\nimport AddFunctionDialog from './components/AddFunctionDialog';\nimport AddOrEditActivityModal from './components/AddOrEditActivityModal';\nimport { useCurriculum } from '../useCurriculum';\nimport EditFunctionDialog from './components/EditFunctionDialog';\n\nconst CurriculumFunctions = () => {\n const store = useStore();\n const { t } = useTranslation('curriculum');\n\n const { curriculum } = useCurriculum();\n const { functionsWithActivities, functionActivities } = useFunctions();\n\n const [activeFunction, setActiveFunction] = useState(null);\n const [activeActivity, setActiveActivity] = useState(null);\n\n const [isAddFunctionModalOpen, setIsAddFunctionModalOpen] = useState(false);\n const [isEditFunctionModalOpen, setIsEditFunctionModalOpen] = useState(false);\n const [isAddOrEditModalVisible, setIsAddOrEditModalVisible] = useState(false);\n const [isConfirmDeleteModalVisible, setIsConfirmDeleteModalVisible] = useState(false);\n\n const onAddFunction = () => {\n setIsAddFunctionModalOpen(true);\n };\n\n const onEditFunction = (fn) => {\n setActiveFunction(fn);\n setIsEditFunctionModalOpen(true);\n };\n\n const onDeleteFunction = async (fn) => {\n setActiveFunction(fn);\n setIsConfirmDeleteModalVisible(true);\n };\n\n const onCloseAddFunctionDialog = () => {\n setIsAddFunctionModalOpen(false);\n };\n\n const onSubmitAddFunctionDialog = async () => {\n store.startLoadCurriculum();\n store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n setIsAddFunctionModalOpen(false);\n };\n\n const onDeleteFunctionConfirm = async () => {\n store.startLoadCurriculum();\n await store.deleteCurriculumFunction(curriculum, activeFunction);\n store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n setIsConfirmDeleteModalVisible(false);\n };\n\n const onAddActivity = (fn) => {\n setActiveFunction(fn);\n setActiveActivity(null);\n setIsAddOrEditModalVisible(true);\n };\n\n const onEditActivity = (fn, id) => {\n const activity = functionActivities.find((a) => a.id === id);\n\n setActiveFunction(fn);\n setActiveActivity(activity);\n setIsAddOrEditModalVisible(true);\n };\n\n const onCloseAddOrEditActivityModal = () => {\n setIsAddOrEditModalVisible(false);\n };\n\n const onSubmitAddOrEditActivityModal = () => {\n setIsAddOrEditModalVisible(false);\n store.refreshCurrentCurriculum();\n };\n\n const onCloseEditFunctionDialog = () => {\n setIsEditFunctionModalOpen(false);\n };\n\n const onSubmitEditFunctionDialog = () => {\n setIsEditFunctionModalOpen(false);\n store.refreshCurrentCurriculum();\n };\n\n const onDeleteActivities = async (fn, ids) => {\n if (!ids) {\n return;\n }\n\n store.startLoadCurriculum();\n await store.deleteCurriculumFunctionActivities(fn, ids);\n store.stopLoadCurriculum();\n store.refreshCurrentCurriculum();\n };\n\n const activityColumns = [\n {\n id: 'attributes.name',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('functions.activitiesLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n },\n {\n id: 'attributes.expected_result',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('functions.expectedResultsLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n }\n ];\n\n return (\n <>\n \n \n\n \n \n \n \n\n {functionsWithActivities.map((fn) => (\n \n onAddActivity(fn)}\n onEditCallback={() => onEditFunction(fn)}\n onDeleteCallback={() => onDeleteFunction(fn)}\n />\n onEditActivity(fn, id)}\n onDeleteCallback={(ids) => onDeleteActivities(fn, ids)}\n />\n \n ))}\n \n\n \n\n {activeFunction && (\n \n )}\n\n \n\n setIsConfirmDeleteModalVisible(false)}\n />\n \n );\n};\n\nexport default observer(CurriculumFunctions);\n","import { useStore } from 'hooks';\n\nexport const useFunctions = () => {\n const store = useStore();\n\n const functions = store.curriculumFunctions ?? [];\n const functionActivities = store.curriculumFunctionActivities ?? [];\n\n // create a nested version for display purposes\n const functionsWithActivities = functions.map((fn) => {\n const activityIds = fn.relationships?.activities?.data.map((a) => a.id);\n const activities = functionActivities?.filter((a) => activityIds.includes(a.id));\n return {\n ...fn,\n activities\n };\n });\n\n return {\n functions,\n functionActivities,\n functionsWithActivities\n };\n};\n","import { useStore } from 'hooks';\n\nexport const useLearningGoals = () => {\n const store = useStore();\n\n const learningGoals = store.curriculumLearningGoals ?? [];\n const learningGoalActivities = store.curriculumLearningGoalActivities ?? [];\n const learningGoalEvaluations = store.curriculumEvaluations ?? [];\n\n const learningGoalsWithActivities = learningGoals.map((goal) => {\n const activityIds = goal.relationships?.activities?.data.map((a) => a.id);\n const evaluationIds = goal.relationships?.evaluations?.data.map((e) => e.id);\n\n const activities = learningGoalActivities?.filter((a) => activityIds.includes(a.id));\n const evaluations = learningGoalEvaluations?.filter((e) => evaluationIds.includes(e.id));\n\n return {\n ...goal,\n activities,\n evaluations\n };\n });\n\n return {\n learningGoals,\n learningGoalActivities,\n learningGoalEvaluations,\n learningGoalsWithActivities\n };\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { useStore } from 'hooks';\nimport { MySelect, MyTextField } from 'components/form/RHF';\nimport * as Styles from '../../../components/styles';\n\nconst ActivitiesFormPart = ({ control, errors, setValue }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n const classes = Styles.useCurriculumStyles();\n\n const learningGoalActivityExamples = store.curriculumLearningGoalActivityExamples?.map((item) => ({\n name: item.attributes.description.value,\n value: item.attributes.description.value\n }));\n\n return (\n <>\n

    {t('learningGoals.addLearningGoalActivityTitle')}

    \n

    {t('learningGoals.addLearningGoalActivityNameTextfieldDescription')}

    \n\n {\n setValue('activityDropDown', e.target.value);\n setValue('activityName', '');\n }}\n inputProps={{ classes: { paper: classes.mySelect } }}\n />\n\n {\n setValue('activityDropDown', '');\n }}\n />\n\n \n \n );\n};\n\nActivitiesFormPart.propTypes = {\n control: PropTypes.object,\n errors: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(ActivitiesFormPart);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { Form } from 'components/form';\nimport { Dialog } from 'pages/curriculum/components';\nimport { useStore } from 'hooks';\nimport ActivitiesFormPart from './ActivitiesFormPart';\n\nconst AddOrEditActivityModal = ({ visible, onCloseCallback, onSubmitCallback, learningGoal, activity = null }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n const submitRef = useRef();\n\n const title = activity ? t('learningGoals.editActivityTitle') : t('learningGoals.addActivityTitle');\n const buttonLabel = t('dashboard.saveLabel');\n const icon = activity ? null : 'ant-design:plus-outlined';\n const name = title.replace(' ', '-').toLowerCase();\n\n const initialValues = {\n activityDropDown: '',\n activityName: activity?.attributes?.name || '',\n activityExplanation: activity?.attributes?.explanation || ''\n };\n\n const validationSchema = Yup.object().shape(\n {\n activityDropDown: Yup.string().when('activityName', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n activityName: Yup.string().when('activityDropDown', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n activityExplanation: Yup.string().required()\n },\n [['activityDropDown', 'activityName']]\n );\n\n const handleSubmit = async ({ activityDropDown, activityName, activityExplanation }) => {\n let result = null;\n\n const data = {\n name: activityDropDown?.length > 0 ? activityDropDown : activityName,\n explanation: activityExplanation\n };\n\n store.startLoadCurriculum();\n if (activity?.id) {\n result = await store.updateCurriculumLearningGoalActivity({\n ...activity,\n attributes: { ...activity.attributes, ...data }\n });\n } else {\n result = await store.createCurriculumLearningGoalActivity(learningGoal, data);\n }\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: buttonLabel,\n isLoading: store.isLoadingCurriculum,\n icon\n }}\n title={title}\n name={name}\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors, setValue }) => (\n \n \n\n \n \n )}\n
    \n \n );\n};\n\nAddOrEditActivityModal.propTypes = {\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired,\n learningGoal: PropTypes.object,\n activity: PropTypes.shape({\n id: PropTypes.string.isRequired,\n attributes: PropTypes.shape({\n name: PropTypes.string.isRequired,\n explanation: PropTypes.string\n })\n })\n};\n\nAddOrEditActivityModal.defaultProp = {\n activity: null\n};\n\nexport default observer(AddOrEditActivityModal);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { List, ListItemButton, ListItemText, Collapse, InputLabel, Typography } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { MyTextField } from 'components/form/RHF';\nimport { ExpandLess, ExpandMore } from '@mui/icons-material';\nimport * as Styles from '../../../components/styles';\n\nconst LearningGoalFormPart = ({ control, errors, setValue }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n const [isLearningGoalExamplesOpen, setIsLearningGoalExamplesOpen] = useState(false);\n\n const learningGoalExamples = store.curriculumLearningGoalExamples?.map((item) => ({\n name: item.attributes.description.value,\n value: item.attributes.description.value\n }));\n\n const handleClick = () => {\n setIsLearningGoalExamplesOpen(!isLearningGoalExamplesOpen);\n };\n\n return (\n <>\n {t('learningGoals.selectLearningGoalDescription')}\n \n \n {t('learningGoals.selectLearningGoalDropdownLabel')}\n {isLearningGoalExamplesOpen ? : }\n \n \n \n {learningGoalExamples?.map((item) => (\n {\n setValue('learningGoalName', item.value);\n setIsLearningGoalExamplesOpen(false);\n }}\n >\n \n \n ))}\n \n \n \n\n \n \n );\n};\n\nLearningGoalFormPart.propTypes = {\n control: PropTypes.object,\n errors: PropTypes.object,\n setValue: PropTypes.func\n};\n\nexport default observer(LearningGoalFormPart);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { Form } from 'components/form';\nimport { Dialog } from '../../../components';\nimport ActivitiesFormPart from './ActivitiesFormPart';\nimport LearningGoalFormPart from './LearningGoalFormPart';\n\nconst AddLearningGoalModal = ({ visible, onCloseCallback, onSubmitCallback }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n const submitRef = useRef();\n\n const initialValues = useMemo(\n () => ({\n learningGoalName: '',\n activityDropDown: '',\n activityName: '',\n activityExplanation: ''\n }),\n []\n );\n\n const validationSchema = Yup.object().shape(\n {\n learningGoalName: Yup.string().required(),\n activityDropDown: Yup.string().when('activityName', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n activityName: Yup.string().when('activityDropDown', {\n is: (val) => val === '',\n then: Yup.string().required(),\n otherwise: Yup.string()\n }),\n activityExplanation: Yup.string().required()\n },\n [['activityDropDown', 'activityName']]\n );\n\n const handleSubmit = async ({ learningGoalName, activityDropDown, activityName, activityExplanation }) => {\n store.startLoadCurriculum();\n const result = await store.createCurriculumLearningGoalWithActivity(store.curriculum.data, {\n learningGoalName,\n activityName: activityName.length > 0 ? activityName : activityDropDown,\n activityExplanation\n });\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: t('general.addBtnLabel'),\n isLoading: store.isLoadingCurriculum,\n icon: 'ant-design:plus-outlined'\n }}\n title={t('learningGoals.addLearningGoalTitle')}\n name=\"add-goal\"\n visible={visible}\n onClose={onCloseCallback}\n >\n \n {({ control, errors, setValue }) => (\n \n \n\n \n\n \n \n )}\n \n \n );\n};\n\nAddLearningGoalModal.propTypes = {\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired\n};\n\nexport default observer(AddLearningGoalModal);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Stack, Button } from '@mui/material';\n\nimport { MyTextField } from 'components/form/RHF';\nimport { useStore } from 'hooks';\nimport { Form } from 'components/form';\nimport { Dialog } from '../../../components';\nimport * as Styles from '../../../components/styles';\n\nconst EditLearningGoalDialog = ({ goal, visible, onCloseCallback, onSubmitCallback }) => {\n const { t } = useTranslation('curriculum');\n\n const store = useStore();\n\n const submitRef = useRef();\n\n const initialValues = useMemo(\n () => ({\n nameString: goal?.attributes?.name\n }),\n [goal]\n );\n\n const validationSchema = Yup.object().shape(\n {\n nameString: Yup.string().required()\n },\n ['nameString']\n );\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n const handleSubmit = async ({ nameString }) => {\n const data = {\n ...goal,\n attributes: {\n ...goal.attributes,\n name: nameString\n }\n };\n\n store.startLoadCurriculum();\n const result = await store.updateCurriculumLearningGoal(data);\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onSubmitCallback();\n\n return { success: true };\n };\n\n return (\n {\n submitRef.current.click();\n },\n name: t('general.editBtnLabel'),\n icon: 'ant-design:edit-outlined',\n isLoading: store.isLoadingCurriculum\n }}\n title={t('learningGoals.editLearningGoalTitle')}\n name=\"edit-learning-goal\"\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors }) => (\n \n \n \n \n )}\n
    \n \n );\n};\n\nEditLearningGoalDialog.propTypes = {\n goal: PropTypes.object.isRequired,\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired,\n onSubmitCallback: PropTypes.func.isRequired\n};\n\nexport default observer(EditLearningGoalDialog);\n","import { observer } from 'mobx-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport { Box } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { ConfirmationModal } from '../../components';\nimport { ActivitiesTable, ActivitiesTableToolbar, StageTitleBar, StageTitle, StageHeader } from '../components';\nimport { useCurriculum } from '../useCurriculum';\nimport { useLearningGoals } from '../useLearningGoals';\nimport AddOrEditActivityModal from './components/AddOrEditActivityModal';\nimport AddLearningGoalModal from './components/AddLearningGoalModal';\nimport EditLearningGoalDialog from './components/EditLearningGoalDialog';\nimport Button from '../../components/Button';\n\nconst CurriculumLearningGoals = () => {\n const store = useStore();\n const { t } = useTranslation('curriculum');\n\n const { curriculum } = useCurriculum();\n const { learningGoalsWithActivities, learningGoalActivities } = useLearningGoals();\n\n const [activeLearningGoal, setActiveLearningGoal] = useState(null);\n const [activeActivity, setActiveActivity] = useState(null);\n\n const [isAddLearningGoalModalOpen, setIsAddLearningGoalModalOpen] = useState(false);\n const [isEditLearningGoalModalOpen, setIsEditLearningGoalModalOpen] = useState(false);\n const [isAddOrEditActivityModalVisible, setIsAddOrEditActivityModalVisible] = useState(false);\n const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);\n\n const onAddGoal = () => {\n setIsAddLearningGoalModalOpen(true);\n };\n\n const onEditGoal = (goal) => {\n setActiveLearningGoal(goal);\n setIsEditLearningGoalModalOpen(true);\n };\n\n const onDeleteGoal = async (goal) => {\n setActiveLearningGoal(goal);\n setIsDeleteModalVisible(true);\n };\n\n const onCloseAddLearningGoalDialog = () => {\n setIsAddLearningGoalModalOpen(false);\n };\n\n const onSubmitAddLearningGoalDialog = () => {\n setIsAddLearningGoalModalOpen(false);\n store.refreshCurrentCurriculum();\n };\n\n const onDeleteGoalConfirm = async () => {\n store.startLoadCurriculum();\n await store.deleteCurriculumLearningGoal(curriculum, activeLearningGoal);\n store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n setIsDeleteModalVisible(false);\n };\n\n const onAddActivity = (goal) => {\n setActiveLearningGoal(goal);\n setActiveActivity(null);\n setIsAddOrEditActivityModalVisible(true);\n };\n\n const onEditActivity = (goal, id) => {\n const activity = learningGoalActivities.find((a) => a.id === id);\n\n setActiveLearningGoal(goal);\n setActiveActivity(activity);\n setIsAddOrEditActivityModalVisible(true);\n };\n\n const onCloseAddOrEditActivityModal = () => {\n setIsAddOrEditActivityModalVisible(false);\n };\n\n const onSubmitAddOrEditActivityModal = () => {\n setIsAddOrEditActivityModalVisible(false);\n store.refreshCurrentCurriculum();\n };\n\n const onCloseEditLearningGoalDialog = () => {\n setIsEditLearningGoalModalOpen(false);\n };\n\n const onSubmitEditLearningGoalDialog = () => {\n setIsEditLearningGoalModalOpen(false);\n store.refreshCurrentCurriculum();\n };\n\n const onDeleteActivities = async (goal, ids) => {\n if (!ids) {\n return;\n }\n\n store.startLoadCurriculum();\n await store.deleteCurriculumLearningGoalActivities(goal, ids);\n store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n };\n\n const activityColumns = [\n {\n id: 'attributes.name',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('learningGoals.activitiesLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n },\n {\n id: 'attributes.explanation',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('learningGoals.explanationLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n }\n ];\n\n return (\n <>\n \n \n\n \n \n \n \n\n {learningGoalsWithActivities.map((goal) => (\n \n onAddActivity(goal)}\n onEditCallback={() => onEditGoal(goal)}\n onDeleteCallback={() => onDeleteGoal(goal)}\n />\n onEditActivity(goal, id)}\n onDeleteCallback={(ids) => onDeleteActivities(goal, ids)}\n />\n \n ))}\n \n\n \n\n {activeLearningGoal && (\n \n )}\n\n \n\n setIsDeleteModalVisible(false)}\n />\n \n );\n};\nexport default observer(CurriculumLearningGoals);\n","import PropTypes from 'prop-types';\n\nexport const InitialValues = {\n Evaluation: {\n attributes: {\n name: '',\n evaluation: '',\n activities: []\n },\n relationships: {\n courses: {\n data: []\n }\n }\n }\n};\n\nexport const CourseResult = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string,\n completed: PropTypes.string, // isodate\n certificate: PropTypes.string, // isodate\n transfer: PropTypes.string, // isodate\n points: PropTypes.string,\n accreditation_unit_singular: PropTypes.string,\n accreditation_unit_plural: PropTypes.string,\n is_accredited: PropTypes.bool,\n data: PropTypes.string\n })\n});\n\nexport const Evaluation = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string,\n evaluation: PropTypes.string,\n activities: PropTypes.array\n }),\n courses: PropTypes.arrayOf(CourseResult)\n});\n\nexport const LearningGoalActivity = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string,\n explanation: PropTypes.string\n })\n});\n\nexport const LearningGoal = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string\n }),\n activities: PropTypes.arrayOf(LearningGoalActivity),\n evaluations: PropTypes.arrayOf(Evaluation)\n});\n\nexport const FunctionActivity = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string,\n expected_result: PropTypes.string\n })\n});\n\nexport const JobFunction = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n name: PropTypes.string\n }),\n activities: PropTypes.arrayOf(FunctionActivity)\n});\n\nexport const Curriculum = PropTypes.shape({\n id: PropTypes.string,\n attributes: PropTypes.shape({\n year: PropTypes.number\n }),\n functions: PropTypes.arrayOf(JobFunction),\n learning_goals: PropTypes.arrayOf(LearningGoal)\n});\n","import { useMemo } from 'react';\nimport { useStore } from 'hooks';\nimport { evaluationIsComplete } from '../utils';\n\nexport const useEvaluations = () => {\n const store = useStore();\n\n const goals = useMemo(() => store.curriculumLearningGoals ?? [], [store.curriculumLearningGoals]);\n const evaluations = useMemo(() => store.curriculumEvaluations ?? [], [store.curriculumEvaluations]);\n const evaluationCourses = store.curriculumEvaluationCourses ?? [];\n\n const canFinalize = useMemo(() => {\n if (goals.length <= 0 || evaluations.length <= 0) {\n return false;\n }\n\n // check if all goals have an evaluation\n const goalsWithEvaluation = goals.filter(\n (goal) => goal.relationships?.evaluations?.data && goal.relationships?.evaluations?.data.length > 0\n );\n if (goalsWithEvaluation.length !== goals.length) {\n return false;\n }\n\n // check if all evaluations have a name, evaluation and at least one course or activity\n const evaluationsThatAreComplete = evaluations.filter((evaluation) => evaluationIsComplete(evaluation));\n if (evaluationsThatAreComplete.length !== evaluations.length) {\n return false;\n }\n\n // all checks have passed, user can finalize portfolio\n return true;\n }, [evaluations, goals]);\n\n const evaluationsWithCourses = evaluations.map((evaluation) => {\n const courseIds = evaluation.relationships?.courses?.data.map((c) => c.id);\n const courses = evaluationCourses?.filter((c) => courseIds.includes(c.id));\n return {\n ...evaluation,\n courses\n };\n });\n\n // courses\n const courseResults = store.curriculumAvailableCourseResults.length > 0 ? store.curriculumAvailableCourseResults : [];\n\n return {\n evaluations,\n evaluationCourses,\n courseResults,\n evaluationsWithCourses,\n canFinalize\n };\n};\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Typography } from '@mui/material';\nimport { Icon } from '@iconify/react';\n\nimport { useStore } from 'hooks';\nimport * as Types from '../../../types';\nimport { useEvaluations } from '../../useEvaluations';\n\nconst Activities = ({ evaluation }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n const { courseResults } = useEvaluations();\n\n const hasActivities = evaluation?.attributes?.activities?.length > 0;\n\n const hasCourses = evaluation?.relationships?.courses?.data?.length > 0;\n const relatedCoursesIds = hasCourses ? evaluation.relationships.courses.data.map(({ id }) => id) : null;\n const relatedCourseResults = relatedCoursesIds ? courseResults?.filter((course) => relatedCoursesIds.includes(course.id)) : null;\n\n const deleteActivity = async (activity, index) => {\n const activities = evaluation.attributes.activities.filter((_, i) => i !== index);\n store.startLoadCurriculum();\n await store.updateCurriculumEvaluation({ ...evaluation, attributes: { ...evaluation.attributes, activities } });\n store.stopLoadCurriculum();\n store.refreshCurrentCurriculum();\n };\n\n const removeCourse = async (course) => {\n const courses = evaluation.relationships.courses.data.filter(({ id }) => course.id !== id);\n\n store.startLoadCurriculum();\n await store.updateCurriculumEvaluation({\n ...evaluation,\n relationships: {\n ...evaluation.relationships,\n courses: {\n ...evaluation.relationships.courses,\n data: courses\n }\n }\n });\n store.stopLoadCurriculum();\n store.refreshCurrentCurriculum();\n };\n\n return (\n \n \n \n {t('evaluations.coursesTitle')}\n \n {t('evaluations.coursesDescription')}\n \n {relatedCourseResults ? (\n
      \n {relatedCourseResults.map((course) => (\n
    • \n {course.attributes.name}\n\n removeCourse(course)}\n icon=\"akar-icons:cross\"\n style={{\n color: '#B91C1C',\n fontSize: '0.75rem',\n lineHeight: '1rem',\n fontWeight: '700',\n marginLeft: '0.5rem',\n cursor: 'pointer'\n }}\n />\n
    • \n ))}\n
    \n ) : (\n \n {t('evaluations.noCoursesText')}\n \n )}\n
    \n
    \n\n \n \n {t('evaluations.activitiesTitle')}\n \n {t('evaluations.activitiesDescription')}\n \n {hasActivities ? (\n
      \n {evaluation.attributes.activities.map((activity, i) => (\n
    • \n {activity}\n\n deleteActivity(activity, i)}\n icon=\"akar-icons:cross\"\n style={{\n color: '#B91C1C',\n fontSize: '0.75rem',\n lineHeight: '1rem',\n fontWeight: '700',\n marginLeft: '0.5rem',\n cursor: 'pointer'\n }}\n />\n
    • \n ))}\n
    \n ) : (\n \n {t('evaluations.noActivitiesText')}\n \n )}\n
    \n \n \n );\n};\n\nActivities.propTypes = {\n evaluation: Types.Evaluation.isRequired\n};\n\nexport default observer(Activities);\n","import { useEffect, useState } from 'react';\n\nexport const useAccordion = (id) => {\n const defaultValue = window.localStorage.getItem(id) === 'true' || false;\n const [hasState, toggleState] = useState(defaultValue);\n\n useEffect(() => {\n if (hasState) {\n window.localStorage.setItem(id, hasState);\n } else {\n window.localStorage.removeItem(id);\n }\n }, [id, hasState]);\n\n return { hasState, toggleState };\n};\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Typography } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { lighten, useTheme } from '@mui/material/styles';\n\nimport { Button } from '../../../components';\nimport * as Types from '../../../types';\nimport Activities from './Activities';\nimport { useAccordion } from './useAccordion';\n\nconst EvaluationActivities = ({ goal, evaluation, onAddActivityCallback }) => {\n const { t } = useTranslation('curriculum');\n const theme = useTheme();\n\n const panelId = `evaluation-activities-${goal.id}`;\n const { hasState, toggleState } = useAccordion(panelId);\n\n const handleOpen = (e) => {\n e.preventDefault();\n toggleState(!hasState);\n };\n\n return (\n \n \n \n \n }\n aria-controls={`${panelId}-content`}\n id={`${panelId}-header`}\n onClick={handleOpen}\n >\n \n {t('evaluations.activitiesPaneTitle')}\n {\n e.preventDefault();\n e.stopPropagation();\n toggleState(true);\n onAddActivityCallback();\n }}\n >\n \n {t('evaluations.addActivityBtnLabel')}\n \n \n \n \n \n \n \n \n \n );\n};\n\nEvaluationActivities.propTypes = {\n goal: Types.LearningGoal.isRequired,\n evaluation: Types.Evaluation.isRequired,\n onAddActivityCallback: PropTypes.func.isRequired\n};\n\nexport default observer(EvaluationActivities);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport NeedsWorkIcon from '@mui/icons-material/Error';\nimport { Box, Typography, Tooltip } from '@mui/material';\n\nimport * as Types from '../../../types';\nimport { evaluationIsComplete } from '../../../utils';\n\nconst EvaluationHeader = ({ goal, evaluation }) => {\n const { t } = useTranslation('curriculum');\n\n return (\n \n \n {goal.attributes.name}\n \n {evaluationIsComplete(evaluation) ? (\n \n \n \n ) : (\n \n \n \n )}\n \n );\n};\n\nEvaluationHeader.propTypes = {\n goal: Types.LearningGoal.isRequired,\n evaluation: Types.Evaluation.isRequired\n};\n\nexport default observer(EvaluationHeader);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Typography } from '@mui/material';\n\nimport { lighten, useTheme } from '@mui/material/styles';\nimport { Button } from '../../../components';\nimport { ActivitiesTable } from '../../components';\nimport { useAccordion } from './useAccordion';\n\nconst PlannedActivities = ({ goal }) => {\n const theme = useTheme();\n const { t } = useTranslation('curriculum');\n\n const panelId = `evaluation-planned-activities-${goal.id}`;\n const { hasState, toggleState } = useAccordion(panelId);\n\n const handleOpen = (e) => {\n e.preventDefault();\n toggleState(!hasState);\n };\n\n const activityColumns = [\n {\n id: 'attributes.name',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('learningGoals.activitiesLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n },\n {\n id: 'attributes.explanation',\n numeric: false,\n disablePadding: true,\n disableSorting: false,\n label: t('learningGoals.explanationLabel'),\n type: 'text',\n sx: {\n width: '40%'\n }\n }\n ];\n\n return (\n \n \n \n \n }\n aria-controls={`${panelId}-content`}\n id={`${panelId}-header`}\n onClick={handleOpen}\n >\n \n {t('evaluations.plannedActivitiesTitle')}\n \n \n \n \n \n \n );\n};\nPlannedActivities.propTypes = {\n goal: PropTypes.object.isRequired\n};\nexport default observer(PlannedActivities);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Button, Stack, Typography } from '@mui/material';\n\nimport { Form } from 'components/form';\nimport { MySelect, MyTextField } from 'components/form/RHF';\nimport { useStore } from 'hooks';\nimport { Dialog } from '../../../components';\nimport * as Styles from '../../../components/styles';\nimport * as Types from '../../../types';\nimport { useEvaluations } from '../../useEvaluations';\n\nconst AddActivityDialog = ({ goal, evaluation, visible, onCloseCallback }) => {\n const classes = Styles.useCurriculumStyles();\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n const { courseResults } = useEvaluations();\n\n const maxInputLength = 255;\n const [inputCount, setInputCount] = useState(0);\n\n const coursesForSelect = courseResults?.map((course) => ({\n name: course.attributes.name,\n value: course.id\n }));\n\n const handleSubmit = async ({ customActivityText = '', courseId = '' }) => {\n const attributes = customActivityText\n ? {\n ...evaluation.attributes,\n activities: [...evaluation.attributes.activities, customActivityText]\n }\n : evaluation.attributes;\n\n const relationships = customActivityText\n ? evaluation.relationships\n : {\n ...evaluation.relationships,\n courses: { data: [...evaluation.relationships.courses.data, { id: courseId, type: 'course_result' }] }\n };\n\n const data = {\n ...evaluation,\n attributes,\n relationships\n };\n\n store.startLoadCurriculum();\n const result = await store.createOrUpdateCurriculumEvaluation(goal, data);\n await store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onCloseCallback();\n\n return { success: true };\n };\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n const submitRef = useRef();\n\n const initialValues = useMemo(\n () => ({\n courseId: '',\n customActivityText: ''\n }),\n []\n );\n\n const validationSchema = Yup.object().shape(\n {\n courseId: Yup.string().when('customActivityText', {\n is: (val) => val?.trim().length === 0,\n then: Yup.string().required()\n }),\n customActivityText: Yup.string().when('courseId', {\n is: (val) => val?.trim().length === 0,\n then: Yup.string().required()\n }).max(maxInputLength, t('evaluations.activityMaxInputError'))\n },\n [['courseId', 'customActivityText']]\n );\n\n return (\n {\n submitRef.current.click();\n },\n name: t('dashboard.saveLabel'),\n icon: 'ant-design:plus-outlined',\n isLoading: store.isLoadingCurriculum\n }}\n title={t('evaluations.addActivityTitle')}\n name=\"add-activity\"\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control, errors, setValue, setError, clearErrors }) => {\n const validateFieldValue = ((field, value) => {\n const fieldObj = {};\n fieldObj[field] = value;\n\n validationSchema.validate(fieldObj)\n .then(() => {\n clearErrors(field);\n })\n .catch((error) => {\n setError(field, { type: 'custom', message: error?.errors?.[0] });\n });\n });\n\n return (\n \n {coursesForSelect.length > 0 ? (\n {\n setValue('courseId', e.target.value);\n setValue('customActivityText', '');\n }}\n inputProps={{ classes: { paper: classes.mySelect } }}\n />\n ) : (\n \n )}\n\n \n \n {errors?.customActivityText?.message &&\n {errors?.customActivityText?.message}\n }\n ({inputCount}/{maxInputLength})\n \n }\n error={!!errors?.customActivityText}\n onChange={(e) => {\n const newValue = e.target.value;\n\n setValue('customActivityText', newValue);\n setValue('courseId', '');\n\n setInputCount(newValue.length);\n validateFieldValue('customActivityText', newValue);\n }}\n />\n \n \n )\n }}\n
    \n \n );\n};\n\nAddActivityDialog.propTypes = {\n goal: Types.LearningGoal.isRequired,\n evaluation: Types.Evaluation.isRequired,\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired\n};\n\nexport default observer(AddActivityDialog);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as Yup from 'yup';\n\nimport { Button, Stack } from '@mui/material';\n\nimport { Form } from 'components/form';\nimport { MyTextField } from 'components/form/RHF';\nimport { useStore } from 'hooks';\nimport { Dialog } from '../../../components';\nimport * as Types from '../../../types';\n\nconst EditReflectionDialog = ({ goal, evaluation, visible, onCloseCallback }) => {\n const { t } = useTranslation('curriculum');\n const store = useStore();\n\n const handleSubmit = async ({ reflectionText1 = '', reflectionText2 = '' }) => {\n const attributes = {\n ...evaluation.attributes,\n evaluation: reflectionText1.trim(),\n name: reflectionText2.trim()\n };\n\n const data = {\n ...evaluation,\n attributes\n };\n\n store.startLoadCurriculum();\n const result = await store.createOrUpdateCurriculumEvaluation(goal, data);\n await store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n\n if (!result) {\n return {\n success: false,\n errors: [{ name: 'root.serverError', error: { type: 'server', message: 'Internal Server Error' }, options: {} }]\n };\n }\n\n if (result.errors) {\n return {\n success: false,\n errors: result.errors\n };\n }\n\n onCloseCallback();\n\n return { success: true };\n };\n\n const handleClose = () => {\n onCloseCallback();\n };\n\n const submitRef = useRef();\n\n const initialValues = {\n reflectionText1: evaluation?.attributes?.evaluation ?? '',\n reflectionText2: evaluation?.attributes?.name ?? ''\n };\n\n const validationSchema = Yup.object().shape({\n reflectionText1: Yup.string(),\n reflectionText2: Yup.string()\n });\n\n return (\n {\n submitRef.current.click();\n },\n name: t('dashboard.saveLabel'),\n icon: 'ant-design:plus-outlined',\n isLoading: store.isLoadingCurriculum\n }}\n title={t('evaluations.editReflectionTitle')}\n name=\"edit-reflection\"\n visible={visible}\n onClose={handleClose}\n >\n
    \n {({ control }) => (\n \n \n \n\n \n \n\n \n \n )}\n
    \n \n );\n};\n\nEditReflectionDialog.propTypes = {\n goal: Types.LearningGoal.isRequired,\n evaluation: Types.Evaluation.isRequired,\n visible: PropTypes.bool.isRequired,\n onCloseCallback: PropTypes.func.isRequired\n};\n\nexport default observer(EditReflectionDialog);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Typography } from '@mui/material';\n\nimport * as Types from '../../../types';\n\nconst Reflections = ({ evaluation }) => {\n const { t } = useTranslation('curriculum');\n\n return (\n \n \n {t('evaluations.reflectionTitle')}\n \n\n {t('evaluations.reflectionText1Label')}\n \n {evaluation?.attributes?.evaluation?.length > 0 ? evaluation.attributes.evaluation : {t('evaluations.noEvaluationText')}}\n \n\n {t('evaluations.reflectionText2Label')}\n \n {evaluation?.attributes?.name?.length > 0 ? evaluation.attributes.name : {t('evaluations.noReflectionText')}}\n \n \n );\n};\n\nReflections.propTypes = {\n evaluation: Types.Evaluation.isRequired\n};\n\nexport default observer(Reflections);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Typography } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { lighten, useTheme } from '@mui/material/styles';\n\nimport { Button } from '../../../components';\nimport * as Types from '../../../types';\nimport { useAccordion } from './useAccordion';\nimport Reflections from './Reflections';\n\nconst EvaluationActivities = ({ goal, evaluation, onEditReflectionCallback }) => {\n const { t } = useTranslation('curriculum');\n const theme = useTheme();\n const panelId = `evaluation-reflections-${goal.id}`;\n const { hasState, toggleState } = useAccordion(panelId);\n\n const hasReflection = evaluation?.attributes?.name;\n const hasEvaluation = evaluation?.attributes?.evaluation;\n\n const handleOpen = (e) => {\n e.preventDefault();\n toggleState(!hasState);\n };\n\n return (\n \n \n \n \n }\n aria-controls={`${panelId}-content`}\n id={`${panelId}-header`}\n onClick={handleOpen}\n >\n \n {t('evaluations.reflectionPaneTitle')}\n {\n e.preventDefault();\n e.stopPropagation();\n toggleState(true);\n onEditReflectionCallback();\n }}\n >\n \n {hasReflection || hasEvaluation ? t('evaluations.editReflectionBtnLabel') : t('evaluations.addReflectionBtnLabel')}\n \n \n \n \n \n \n \n \n \n );\n};\n\nEvaluationActivities.propTypes = {\n goal: Types.LearningGoal.isRequired,\n evaluation: Types.Evaluation.isRequired,\n onEditReflectionCallback: PropTypes.func.isRequired\n};\n\nexport default observer(EvaluationActivities);\n","import { observer } from 'mobx-react';\nimport { useState } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport * as Types from '../../../types';\nimport EvaluationActivities from './EvaluationActivities';\nimport EvaluationHeader from './EvaluationHeader';\nimport PlannedActivities from './PlannedActivities';\nimport AddActivityDialog from './AddActivityDialog';\nimport EditReflectionDialog from './EditReflectionDialog';\nimport EvaluationReflections from './EvaluationReflections';\nimport { InitialValues } from '../../../types';\n\nconst EvaluationCard = ({ goal }) => {\n const [isAddActivityDialogVisible, setIsAddActivityDialogVisible] = useState(false);\n const [isEditReflectionDialogVisible, setIsEditReflectionDialogVisible] = useState(false);\n\n const store = useStore();\n\n const evaluation = goal.evaluations[0] ?? InitialValues.Evaluation;\n\n const onAddActivity = () => {\n setIsAddActivityDialogVisible(true);\n };\n\n const onEditReflection = () => {\n setIsEditReflectionDialogVisible(true);\n };\n\n const onCloseAddActivityModal = async () => {\n setIsAddActivityDialogVisible(false);\n store.startLoadCurriculum();\n await store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n };\n\n const onCloseEditReflectionModal = async () => {\n setIsEditReflectionDialogVisible(false);\n store.startLoadCurriculum();\n await store.refreshCurrentCurriculum();\n store.stopLoadCurriculum();\n };\n\n return (\n <>\n \n \n \n \n \n \n\n \n \n \n );\n};\n\nEvaluationCard.propTypes = {\n goal: Types.LearningGoal.isRequired\n};\n\nexport default observer(EvaluationCard);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box } from '@mui/material';\n\nimport { StageTitleBar, StageTitle } from '../components';\nimport EvaluationCard from './components/EvaluationCard';\nimport { useLearningGoals } from '../useLearningGoals';\nimport StageHeader from '../components/StageHeader';\n\nconst CurriculumEvaluations = () => {\n const { t } = useTranslation('curriculum');\n const { learningGoalsWithActivities } = useLearningGoals();\n\n return (\n \n \n\n \n \n \n \n\n {learningGoalsWithActivities?.map((goal) => (\n \n ))}\n \n \n );\n};\n\nexport default observer(CurriculumEvaluations);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useState, useRef, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Xarrow, { Xwrapper, useXarrow } from 'react-xarrows';\n\nimport { Icon } from '@iconify/react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Box, IconButton, Typography, alpha } from '@mui/material';\nimport { useTheme } from '@mui/styles';\n\nimport { useBreakpoint, useStore } from 'hooks';\nimport { Button, ConfirmationModal, DisclaimerDialog } from '../components';\nimport { CURRICULUM_STAGE, CURRICULUM_STEP } from '../constants';\nimport CurriculumActivities from './curriculumStageFunctions/CurriculumFunctions';\nimport CurriculumGoals from './curriculumStageLearningGoals/CurriculumLearningGoals';\nimport CurriculumEvaluation from './curriculumStageEvaluations/CurriculumEvaluations';\nimport { useEvaluations } from './useEvaluations';\n\nconst StageButton = ({ tooltipText, stage, handleOnClick, bottomText, active = false, disabled = false, btnId }) => {\n const theme = useTheme();\n\n const lightGreen = alpha(theme.palette.primary.main, 0.2);\n\n return (\n \n \n handleOnClick()}\n >\n {stage}\n \n \n \n {bottomText}\n \n \n );\n};\n\nStageButton.propTypes = {\n btnId: PropTypes.string,\n tooltipText: PropTypes.string,\n stage: PropTypes.string,\n handleOnClick: PropTypes.func,\n bottomText: PropTypes.string,\n active: PropTypes.bool,\n disabled: PropTypes.bool\n};\n\nconst CurriculumStagesLayout = () => {\n const updateXarrow = useXarrow();\n const layoutRef = useRef();\n const store = useStore();\n const theme = useTheme();\n const breakpoint = useBreakpoint();\n const { t } = useTranslation('curriculum');\n const { canFinalize } = useEvaluations();\n\n const [isDisclaimerDialogOpen, setIsDisclaimerDialogOpen] = useState(false);\n const [isConfirmFinalizeDialogOpen, setIsConfirmFinalizeDialogOpen] = useState(false);\n\n const {\n data: {\n attributes: { percentage_completed: percentageCompleted }\n }\n } = store.curriculum;\n\n const { stageId, uid } = store.params;\n const isSmallScreen = breakpoint === 'xs' || breakpoint === 'sm';\n\n const stages = Object.values(CURRICULUM_STAGE);\n const [currentStage, setCurrentStage] = useState(stages.includes(stageId) ? stageId : CURRICULUM_STAGE.functions);\n\n const isPreviousButtonDisabled = currentStage === CURRICULUM_STAGE.functions;\n\n const canGoToStep2 = percentageCompleted >= 25;\n const canGoToStep3 = percentageCompleted >= 50;\n\n const isNextButtonDisabled =\n currentStage === CURRICULUM_STAGE.evaluation ||\n (currentStage === CURRICULUM_STAGE.functions && !canGoToStep2) ||\n (currentStage === CURRICULUM_STAGE.learningGoals && !canGoToStep3);\n\n const shouldShowFinalizeButton = currentStage === CURRICULUM_STAGE.evaluation && percentageCompleted >= 50;\n const isFinalizeButtonDisabled = !canFinalize;\n\n const goToStage = async (stage) => {\n setCurrentStage(stage);\n\n await store.updateCurriculumStep(store.curriculum.data, CURRICULUM_STEP[stage]);\n\n // use replace state to prevent triggering a new route change and reloading data from the API\n window.history.replaceState({}, '', `/portfolio/${uid}/stages/${stage}`);\n\n // if we need to, we could use the routerStore to navigate to the new route and relaod data from the API\n // store.routerStore.goTo('curriculumStages', { params: { uid, stageId: stage } });\n };\n\n const nextStep = () => {\n if (currentStage === CURRICULUM_STAGE.functions) {\n goToStage(CURRICULUM_STAGE.learningGoals);\n }\n if (currentStage === CURRICULUM_STAGE.learningGoals) {\n goToStage(CURRICULUM_STAGE.evaluation);\n }\n };\n\n const prevStep = () => {\n if (currentStage === CURRICULUM_STAGE.evaluation) {\n goToStage(CURRICULUM_STAGE.learningGoals);\n }\n if (currentStage === CURRICULUM_STAGE.learningGoals) {\n goToStage(CURRICULUM_STAGE.functions);\n }\n };\n\n const onFinalizeBtnClick = () => {\n setIsConfirmFinalizeDialogOpen(true);\n };\n\n const onConfirmFinalizeBtnClick = async () => {\n setIsConfirmFinalizeDialogOpen(false);\n store.showToast({ message: t('general.pdfDownload'), variant: 'success' });\n await store.finalizeCurriculum(store.curriculum.data);\n await download();\n };\n\n const download = async () => {\n try {\n const result = await window.authedClient.get(`/portfolio/${uid}/access-pdf`);\n const downloadUrl = result?.data?.download_url;\n if (downloadUrl) {\n window.open(downloadUrl, '_blank');\n goBack();\n } else {\n store.showToast({ message: t('general.pdfDownloadError'), variant: 'error' });\n }\n } catch (error) {\n store.showToast({ message: t('general.pdfDownloadError'), variant: 'error' });\n }\n };\n\n const goBack = () => {\n store.routerStore.goTo('curriculumDashboard', {\n params: {\n type: 'active'\n }\n });\n };\n\n // Ugly hack to make sure the xarrow is rendered correctly on the first render\n useEffect(() => {\n setTimeout(updateXarrow, 250);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Whenever the drawer is opened or closed, we need to update the xarrow\n useEffect(() => {\n setTimeout(updateXarrow, 250);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store.minDrawer]);\n\n return (\n <>\n \n \n \n \n {t('dashboard.title')}\n \n\n \n \n \n \n goToStage(CURRICULUM_STAGE.functions)}\n active\n stage=\"1\"\n />\n goToStage(CURRICULUM_STAGE.learningGoals)}\n active={currentStage === CURRICULUM_STAGE.learningGoals || currentStage === CURRICULUM_STAGE.evaluation}\n disabled={!canGoToStep2}\n stage=\"2\"\n />\n goToStage(CURRICULUM_STAGE.evaluation)}\n active={currentStage === CURRICULUM_STAGE.evaluation}\n disabled={!canGoToStep3}\n stage=\"3\"\n />\n \n {!isSmallScreen && (\n <>\n \n \n \n )}\n \n {!isSmallScreen && (\n \n setIsDisclaimerDialogOpen(true)}\n shadow\n inverted\n sx={{\n width: '3rem',\n height: '3rem'\n }}\n >\n \n \n \n )}\n \n \n\n \n {currentStage === CURRICULUM_STAGE.functions && }\n {currentStage === CURRICULUM_STAGE.learningGoals && }\n {currentStage === CURRICULUM_STAGE.evaluation && }\n \n\n \n \n {!shouldShowFinalizeButton && (\n \n )}\n {shouldShowFinalizeButton && (\n <>\n \n \n )}\n \n\n setIsDisclaimerDialogOpen(false)} />\n\n setIsConfirmFinalizeDialogOpen(false)}\n onConfirm={onConfirmFinalizeBtnClick}\n />\n \n );\n};\nexport default observer(CurriculumStagesLayout);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport CurriculumLayout from 'pages/curriculum/CurriculumLayout';\nimport CurriculumStagesLayout from 'pages/curriculum/curriculumStages/curriculumStagesLayout';\n\nconst CurriculumStagesViewMap = {\n curriculumStages: (\n \n \n \n \n \n )\n};\n\nexport default CurriculumStagesViewMap;\n","import { observer } from 'mobx-react';\nimport { useContext, useEffect, useRef } from 'react';\nimport { Store } from '../../state/ContextStore';\nimport LoadingPage from '../../components/common/LoadingPage';\n\nexport const Logout = observer(() => {\n const inProgress = useRef(false);\n const store = useContext(Store);\n\n useEffect(() => {\n if (!inProgress.current) {\n inProgress.current = true;\n store.logout(true);\n }\n });\n\n return ;\n});\n","import { observer } from 'mobx-react';\nimport { useEffect, useRef } from 'react';\nimport LoadingPage from '../../components/common/LoadingPage';\n\nexport const GoToAdmin = observer(() => {\n const inProgress = useRef(false);\n\n useEffect(() => {\n if (!inProgress.current) {\n inProgress.current = true;\n window.location.href = `${window.clientInstance.authorizationDomain}/node/add`;\n }\n });\n\n return ;\n});\n","import { observer } from 'mobx-react';\nimport { useEffect, useRef } from 'react';\nimport LoadingPage from '../../components/common/LoadingPage';\n\nexport const SwitchBack = observer(() => {\n const inProgress = useRef(false);\n\n useEffect(() => {\n if (!inProgress.current) {\n inProgress.current = true;\n window.clientInstance.killLocalSession().then(() => {\n window.close();\n });\n }\n });\n\n return ;\n});\n","import { LoadingPage } from 'components';\nimport { Logout } from './Logout';\nimport { GoToAdmin } from './GoToAdmin';\nimport { SwitchBack } from './SwitchBack';\n\nconst LogoutViewMap = {\n loading: ,\n logout: ,\n switchback: ,\n gotoadmin: \n};\n\nexport default LogoutViewMap;\n","import PropTypes from 'prop-types';\nimport { Box, Button, InputAdornment, TextField } from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { observer } from 'mobx-react';\n\nconst TeacherSearch = ({ defaultValue = '', onSubmit, onChange, placeholder }) => {\n const handleSubmit = (e) => {\n e.preventDefault();\n if (typeof onSubmit === 'function') {\n const { searchInput } = Object.fromEntries(new FormData(e.target).entries());\n onSubmit(searchInput);\n }\n };\n const handleChange = (e) => {\n if (typeof onChange === 'function') {\n const { value } = e.target;\n onChange(value);\n }\n };\n\n return (\n \n \n \n \n )\n }}\n sx={{ '& .MuiOutlinedInput-root': { backgroundColor: 'background.main' } }}\n />\n \n \n );\n};\n\nexport default observer(TeacherSearch);\n\nTeacherSearch.propTypes = {\n onSubmit: PropTypes.func,\n onChange: PropTypes.func,\n placeholder: PropTypes.string,\n defaultValue: PropTypes.string\n};\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Avatar, Box, Button, Typography, CardMedia } from '@mui/material';\nimport { RouterLink, useRouterStore } from 'mobx-state-router';\n\nconst TeacherCard = ({ img, title, teacherId }) => {\n const { t } = useTranslation();\n const router = useRouterStore();\n const { product, productName, packageId } = router.routerState.params;\n\n return (\n \n \n \n \n {img ? : }\n \n \n \n {title}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nTeacherCard.propTypes = {\n img: PropTypes.string,\n title: PropTypes.string,\n teacherId: PropTypes.string\n};\n\nexport default TeacherCard;\n","import { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\n// MUI components\nimport { Box, Grid, Typography, IconButton } from '@mui/material';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport SchoolIcon from '@mui/icons-material/School';\n// Custom components\nimport TopLinks from 'pages/course/components/CourseOverview/TopLinks';\nimport TeacherSearch from './components/TeacherSearch';\nimport TeacherCard from './components/TeacherCard';\n\nconst TeachersOverview = () => {\n const store = useStore();\n const { t } = useTranslation();\n const courses = store?.courses?.courses || [];\n const advisoryBoardMembers = store?.courses?.advisoryBoardMembers;\n const onlyTeachers = store?.courses?.onlyTeachers;\n const [searchText, setSearchText] = useState('');\n\n const displayTeachers = searchText\n ? onlyTeachers.filter((teacher) => teacher.fullName.toLowerCase().includes(searchText.toLowerCase()))\n : onlyTeachers;\n\n if (!courses.length) {\n return ;\n }\n\n if (!onlyTeachers.length && !advisoryBoardMembers.length) {\n return (\n \n \n \n \n \n \n \n \n \n {t('teachers.noTeachers', 'No teachers available')}\n \n \n \n \n );\n }\n\n return (\n \n \n \n \n {advisoryBoardMembers?.length > 0 && (\n <>\n \n {t('teachers.title1')}\n \n \n {advisoryBoardMembers.map(({ id, uuid, fullName, img }) => (\n \n \n \n ))}\n \n \n )}\n {displayTeachers?.length > 0 && (\n <>\n \n {t('teachers.title2')}\n \n \n {displayTeachers.map(({ id, uuid, fullName, img }) => (\n \n \n \n ))}\n \n \n )}\n {displayTeachers?.length === 0 && (\n \n \n \n \n \n {t('teachers.noTeachers', 'No teachers available')}\n \n \n )}\n \n \n );\n};\n\nexport default observer(TeachersOverview);\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport TeachersOverview from './TeachersOverview';\n\nconst teachersOverviewViewMap = {\n teachersOverview: (\n \n \n \n )\n};\n\nexport default teachersOverviewViewMap;\n","/* eslint-disable camelcase */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n/* Custom styling */\nimport { Box, Grid } from '@mui/material';\nimport { getCourseCardProps } from 'helpers/Helpers';\n\n/* Custom components */\nimport CourseGridCard from 'pages/course/components/CourseOverview/Card/CourseGridCard';\nimport { uniqueId } from 'lodash';\n\nconst CourseList = ({ courseList }) => (\n // const gridItemXs = 12;\n // const gridItemSm = 4;\n // const gridItemMd = 4;\n // const gridItemLg = 6;\n // const gridItemXl = 3;\n \n \n {courseList.map((course) => {\n const propsBasicCard = getCourseCardProps(course);\n\n return (\n \n \n \n );\n })}\n \n \n);\nCourseList.propTypes = {\n courseList: PropTypes.array\n};\nexport default observer(CourseList);\n","import { Box, Typography, Avatar, Button, CardMedia } from '@mui/material';\nimport { useBreakpoint, useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport { useState, useRef, useEffect } from 'react';\nimport KeyboardDoubleArrowUpIcon from '@mui/icons-material/KeyboardDoubleArrowUp';\nimport KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';\nimport { useRouterStore } from 'mobx-state-router';\nimport CourseList from './components/CourseList';\n\nconst TeacherDetail = () => {\n const router = useRouterStore();\n const store = useStore();\n const { t } = useTranslation();\n const breakpoint = useBreakpoint();\n const isMobile = ['xs', 'sm'].includes(breakpoint);\n\n const [showMore, setShowMore] = useState(null);\n const [clamp, setClamp] = useState(true);\n const ref = useRef(null);\n\n useEffect(() => {\n if (isMobile && ref.current && ref.current.clientHeight > 200) {\n setShowMore(true);\n } else {\n setShowMore(false);\n }\n }, [isMobile]);\n\n useEffect(() => {\n window.scroll(0, 0);\n }, []);\n\n const { teacherId } = router.routerState.params;\n const teacher = store.authors.getAuthorByUuid(teacherId);\n if (!teacher) return
    something went wrong
    ; // TODO: add error page (404\n const { id, title, fullName, img, bio, disclosure } = teacher;\n\n const teacherCourseList = store.courses.getAuthorCourseList(id);\n\n return (\n \n \n \n {img ? (\n \n ) : (\n \n )}\n \n\n \n \n {fullName}\n \n \n {bio}\n \n {showMore && (\n \n {\n setClamp(!clamp);\n }}\n endIcon={!clamp ? : }\n sx={{ textTransform: 'capitalize' }}\n >\n {clamp ? t('teachers.showMore', 'Show more') : t('teachers.showLess', 'Show less')}\n \n \n )}\n {disclosure && (\n <>\n \n Disclosure\n \n \n {disclosure}\n \n \n )}\n \n \n\n {teacherCourseList.length !== 0 && (\n \n \n {t('teachers.coursesBy')} {title}\n \n \n \n )}\n \n );\n};\n\nexport default TeacherDetail;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport TeacherDetail from './TeacherDetail';\n\nconst teacherDetailViewMap = {\n teacherDetail: (\n \n \n \n )\n};\n\nexport default teacherDetailViewMap;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport CourseOverview from './CourseOverview';\n\nconst courseOverviewViewMap = {\n courseOverview: (\n \n \n \n )\n};\n\nexport default courseOverviewViewMap;\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport CourseIntroduction from './CourseIntroduction';\n\nconst CourseIntroductionViewMap = {\n courseIntroduction: (\n \n \n \n )\n};\n\nexport default CourseIntroductionViewMap;\n","/* Course status */\nimport PropTypes from 'prop-types';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\n\n/* MUI */\nimport { Chip } from '@mui/material';\n\n// renders the course status\nconst CoursePackage = (props) => {\n const { packageLabel } = props;\n const store = useContext(Store);\n\n if (store.packages.length === 1) {\n return '';\n }\n return ;\n};\n\nCoursePackage.propTypes = {\n packageLabel: PropTypes.string\n};\n\nexport default CoursePackage;\n","import { Box, Chip, Typography } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTheme } from '@mui/styles';\nimport { urlify } from 'state/Utils';\nimport { useTranslation } from 'react-i18next';\nimport { IsLtiDeeplinker, GetSearchTimeLabel, translatePoints } from 'helpers/Helpers';\nimport CourseStatus from 'pages/course/components/CourseOverview/Card/elements/CourseStatus';\nimport Progress from 'pages/course/components/CourseOverview/Grid/CourseTable/Progress';\nimport { FavoriteButton } from 'pages/course/components/CourseOverview/Grid/CourseTable/FavoriteButton';\nimport HideCourse from 'pages/course/components/CourseOverview/Card/elements/HideCourse';\nimport CourseCategories from 'pages/course/components/CourseOverview/Card/elements/CourseCategories';\nimport CourseLtiButton from 'pages/course/components/CourseOverview/Card/elements/CourseLtiButton';\nimport CourseAuthors from 'pages/course/components/CourseOverview/Card/elements/CourseAuthors';\nimport CourseSymbols from 'pages/course/components/CourseOverview/Card/elements/CourseSymbols';\nimport PodcastIcon from 'pages/course/components/CourseOverview/Card/elements/PodcastIcon';\nimport CoursePackage from './elements/CoursePackage';\n\nconst CourseTableRow = (props) => {\n const store = useContext(Store);\n const { propsBasicCard, hideCourse } = props;\n const theme = useTheme();\n const { t } = useTranslation();\n\n const gotoCourse = (courseId, packageId, title) =>\n store.routerStore.goTo('courseIntroduction', {\n params: {\n productName: store.baseProduct.unique_name,\n product: store.selectedProductId.toString(),\n packageId: packageId.toString(),\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n const isCourseExpiring = store.courses.isCourseExpiring(propsBasicCard.nid);\n const isCourseFavorite = store.favorites && store.favorites.isCourseFavorite(propsBasicCard.nid);\n const getCoursePackage = store.courses.getCoursePackage(propsBasicCard.nid) || '';\n\n const sxAuthorChip = {\n top: 0,\n left: 0,\n padding: 0,\n margin: 0,\n marginTop: '5px',\n height: 'auto',\n position: 'relative',\n border: 'none',\n borderRadius: '5px',\n background: '#f8f8f8',\n color: '#2c3331',\n marginRight: '5px'\n };\n\n const points = propsBasicCard.duration;\n const splitPoints = points.split(' ');\n const getHours = parseFloat(splitPoints[0]);\n const isMinutes = getHours < 1 && splitPoints[1]?.includes('ur');\n\n const courseImage = propsBasicCard?.courseImage?.replace(/%20/g, '%2520');\n\n return (\n gotoCourse(propsBasicCard.nid, propsBasicCard.packageId, propsBasicCard.courseTitle)}\n >\n \n \n \n \n \n \n {getCoursePackage !== '' && }\n \n {IsLtiDeeplinker() && }\n \n \n \n {propsBasicCard.courseTitle}\n \n {propsBasicCard.podcast && }\n \n {propsBasicCard.extraLabel && (\n \n {propsBasicCard.extraLabel}\n \n )}\n \n \n \n\n {store.courses?.isFiltering && (\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 {hideCourse && }\n \n );\n};\n\nCourseTableRow.propTypes = {\n propsBasicCard: PropTypes.any,\n hideCourse: PropTypes.bool\n};\n\nexport default observer(CourseTableRow);\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { getCourseCardProps } from 'helpers/Helpers';\nimport CourseTableRow from './CourseTableRow';\n\nconst CourseList = ({ courses }) => (\n \n {courses.map((course) => {\n const propsBasicCard = getCourseCardProps(course);\n\n return (\n \n \n \n );\n })}\n \n);\n\nCourseList.propTypes = {\n courses: PropTypes.any\n};\n\nexport default observer(CourseList);\n","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgAiSearch(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 254.88 257.5\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \"\\n .cls-1 {\\n stroke-width: 0px;\\n }\\n \"))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_1-2\",\n \"data-name\": \"Layer 1\"\n }, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M7.81,165.89c3.64,4.58,8.85,7.03,14.6,7.6,3.84.38,3.81-5.62,0-6-4.23-.42-7.74-2.55-10.36-5.85-2.4-3.02-6.62,1.25-4.24,4.24h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M54.66,72.84c-6.33-.93-12.49-.61-18.57,1.46-3.63,1.24-2.07,7.04,1.6,5.79,5.01-1.71,10.14-2.23,15.38-1.46,3.78.55,5.41-5.23,1.6-5.79h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M69.28,28.5c1.71-2.26,2.34-5.5,3.65-8.02,3.34-6.41,9.66-10.62,16.44-12.74,13.16-4.12,27.49-1.21,35.48,10.62,2.15,3.18,7.35.18,5.18-3.03C121.15,2.18,106.05-2.34,90.86,1.12c-7.5,1.71-14.93,5.54-19.89,11.52-3.22,3.89-3.95,8.97-6.88,12.83-2.33,3.08,2.87,6.07,5.18,3.03h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M21.66,123.64c1.11.47-1.18-.68-1.58-.93-1.48-.94-2.86-2.12-3.94-3.5-3.57-4.55-2.95-10.67-1.56-15.93,3.03-11.41,12-19.96,23.22-23.2,2.04-.59,2.55-2.64,1.79-4.41-5.58-13-2.37-28.1,8.2-37.54,10.42-9.3,23.16-9.47,35.61-4.46,3.58,1.44,5.14-4.36,1.6-5.79-14.88-5.98-30.51-4.55-42.41,6.89-11.96,11.51-14.62,28.9-8.18,43.92l1.79-4.41c-14.08,4.06-25.36,15.5-28.02,30.11-1.93,10.59,1.48,20.63,11.87,25.02,3.55,1.5,5.1-4.31,1.6-5.79h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M125.32,244.12c-12.7,10.88-34.11,10.34-43.17-4.75-.85-1.41-2.67-1.87-4.1-1.08-9.54,5.32-19.17,7.92-29.9,4.33-9.25-3.1-16.85-10.5-20.21-19.65-.77-2.09-1.34-4.3-1.66-6.5-.29-1.93.27-4.64-.4-6.45s-2.83-2.7-4.31-3.92c-2.04-1.68-3.94-3.63-5.52-5.74-7.47-10.03-8.33-23.28-2.8-34.4.44-.88.66-2.17,0-3.03-9.59-12.47-9.85-29.3.2-41.63,2.42-2.97-1.8-7.24-4.24-4.24-11.63,14.27-12.48,34.15-1.13,48.9v-3.03c-9.02,18.14-3.36,39.2,13.4,50.48l-1.49-2.59c-.41,13.93,7.2,27.3,19.21,34.29,5.92,3.44,12.78,5.28,19.62,5.27,8.33,0,15.16-2.95,22.26-6.91l-4.1-1.08c11.15,18.59,36.97,19.35,52.59,5.97,2.94-2.52-1.32-6.74-4.24-4.24h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M241.44,121.3c10.05,12.33,9.79,29.16.2,41.63-.66.86-.44,2.15,0,3.03,5.42,10.89,4.72,23.82-2.38,33.8-1.54,2.16-3.37,4.13-5.39,5.86-1.36,1.17-3.95,2.28-4.71,4.04-.82,1.89-.25,4.76-.55,6.81-.33,2.21-.9,4.41-1.66,6.5-3.25,8.93-10.64,16.24-19.57,19.44-10.88,3.89-20.81,1.31-30.54-4.12-1.43-.8-3.26-.34-4.1,1.08-9.06,15.1-30.47,15.63-43.17,4.75-2.92-2.5-7.18,1.73-4.24,4.24,15.62,13.38,41.44,12.62,52.59-5.97l-4.1,1.08c6.85,3.82,13.4,6.7,21.41,6.89,7.13.17,14.31-1.67,20.47-5.25,12.01-6.99,19.62-20.36,19.21-34.29l-1.49,2.59c16.77-11.27,22.42-32.34,13.4-50.48v3.03c11.35-14.75,10.49-34.63-1.13-48.9-2.44-2.99-6.66,1.27-4.24,4.24h0Z\"\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M59.62,41.23v16.5c0,1.62,1.37,3,3,3h30.5c3.86,0,3.87-6,0-6h-30.5l3,3v-16.5c0-3.86-6-3.87-6,0h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M106.62,57.73c-.35,6.41-10,6.46-10,0s9.65-6.41,10,0c.21,3.84,6.21,3.86,6,0-.32-5.96-4.78-11-11-11s-11,5.03-11,11,4.76,10.75,10.56,10.98c6.39.25,11.11-4.84,11.44-10.98.21-3.86-5.79-3.85-6,0Z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M77.12,195.73h-19.5c-1.62,0-3,1.37-3,3v14l3-3h-19.5c-3.86,0-3.87,6,0,6h19.5c1.62,0,3-1.37,3-3v-14l-3,3h19.5c3.86,0,3.87-6,0-6h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M94.62,198.73c-.29-5.42-4.35-10-10-10s-9.97,4.57-10,10,4.36,9.75,9.62,9.98c5.8.25,10.08-4.43,10.38-9.98.21-3.86-5.79-3.85-6,0-.28,5.13-8,5.17-8,0s7.72-5.13,8,0c.21,3.84,6.21,3.86,6,0Z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M46.62,113.23v34c0,3.86,6,3.87,6,0v-34c0-3.86-6-3.87-6,0h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M49.62,160.73c-6.41-.35-6.46-10,0-10s6.41,9.65,0,10c-3.84.21-3.86,6.21,0,6,5.96-.32,11-4.78,11-11s-5.03-11-11-11-10.75,4.76-10.98,10.56c-.25,6.39,4.84,11.11,10.98,11.44,3.86.21,3.85-5.79,0-6Z\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M201.81,78.62c5.24-.77,10.38-.24,15.38,1.46,3.66,1.25,5.24-4.55,1.6-5.79-6.08-2.07-12.24-2.39-18.57-1.46-3.81.56-2.19,6.34,1.6,5.79h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M130.03,18.36c7.99-11.83,22.32-14.74,35.48-10.62,6.52,2.04,12.71,6.03,16.09,12.11,1.5,2.69,2.15,6.22,4,8.66,2.3,3.04,7.52.05,5.18-3.03-2.77-3.65-3.47-8.55-6.42-12.27-5-6.29-12.6-10.32-20.35-12.08-15.19-3.46-30.29,1.06-39.17,14.21-2.17,3.21,3.03,6.22,5.18,3.03h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M171.47,33.67c12.46-5.01,25.18-4.85,35.61,4.46,10.57,9.43,13.78,24.53,8.2,37.54-.76,1.77-.25,3.82,1.79,4.41,11.22,3.24,20.19,11.79,23.22,23.2,1.4,5.27,2,11.37-1.56,15.93-1.08,1.38-2.47,2.56-3.94,3.5-.4.25-2.68,1.4-1.58.93-3.5,1.48-1.96,7.29,1.6,5.79,10.39-4.38,13.8-14.42,11.87-25.02-2.66-14.61-13.94-26.04-28.02-30.11l1.79,4.41c6.44-15.02,3.78-32.41-8.18-43.92-11.89-11.45-27.52-12.88-42.41-6.89-3.54,1.42-1.99,7.23,1.6,5.79h0Z\"\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M194.12,56.73h-13.5l3,3v-13c0-1.62-1.37-3-3-3h-18.5c-3.86,0-3.87,6,0,6h18.5l-3-3v13c0,1.62,1.37,3,3,3h13.5c3.86,0,3.87-6,0-6h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M153.65,47.41c.23-4.29,6.68-4.32,6.68,0s-6.45,4.29-6.68,0c-.21-3.84-6.21-3.86-6,0,.27,5.06,4.06,9.34,9.34,9.34s9.31-4.27,9.34-9.34-4.08-9.12-9-9.32c-5.41-.23-9.41,4.14-9.69,9.32-.21,3.86,5.79,3.85,6,0Z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M228.12,147.73h-14.5l3,3v-11c0-1.62-1.37-3-3-3h-15.5c-3.86,0-3.87,6,0,6h15.5l-3-3v11c0,1.62,1.37,3,3,3h14.5c3.86,0,3.87-6,0-6h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M190.62,140.23c.17-3.21,5-3.23,5,0s-4.83,3.21-5,0c-.21-3.84-6.21-3.86-6,0,.25,4.6,3.7,8.5,8.5,8.5s8.47-3.89,8.5-8.5-3.73-8.3-8.2-8.48c-4.92-.2-8.55,3.78-8.8,8.48-.21,3.86,5.79,3.85,6,0Z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M195.62,207.23v-20c0-3.86-6-3.87-6,0v20c0,3.86,6,3.87,6,0h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M192.62,226.73c5.96-.32,11-4.78,11-11s-5.03-11-11-11-10.75,4.76-10.98,10.56c-.25,6.39,4.84,11.11,10.98,11.44,3.86.21,3.85-5.79,0-6-6.41-.35-6.46-10,0-10s6.41,9.65,0,10c-3.84.21-3.86,6.21,0,6Z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M143.36,148.78c-5.4-13.62-10.8-27.23-16.21-40.85-.5-1.25-1.47-2.2-2.89-2.2h-4.84c-1.44,0-2.4.95-2.89,2.2-5.4,13.62-10.81,27.23-16.21,40.85-1.42,3.59,4.38,5.15,5.79,1.6,5.4-13.62,10.81-27.23,16.21-40.85l-2.89,2.2h4.84l-2.89-2.2c5.4,13.62,10.8,27.23,16.21,40.85,1.41,3.55,7.21,2,5.79-1.6h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M154.62,149.23v-40c0-3.86-6-3.87-6,0v40c0,3.86,6,3.87,6,0h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M109.12,138.73h26c3.86,0,3.87-6,0-6h-26c-3.86,0-3.87,6,0,6h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M108.87,83.73h53.73c3.42,0,9.19-1.24,10.01,3.34.54,3.02,0,6.68,0,9.73v63.86c0,3.05.54,6.71,0,9.73-.77,4.28-5.12,3.34-8.33,3.34h-76.35c-.67,0-1.47.12-2.13,0-3.23-.61-3.2-2.82-3.2-5.23v-43.11c0-4.8-.81-10.45,0-15.21.38-2.21,1.54-3.06,2.98-4.5l8.43-8.43c2.86-2.86,5.72-5.72,8.58-8.58,1.61-1.61,3.74-4.69,6.27-4.94,3.81-.38,3.85-6.38,0-6-6.24.62-10.39,6.58-14.55,10.74-4.88,4.88-10,9.6-14.67,14.67-3.29,3.57-3.04,7.35-3.04,11.8v46.31c0,3.95-.87,9.48.9,13.2,2.38,5.02,7.25,5.27,12,5.27h67.21c8.52,0,21.53,2.19,21.89-10.05.77-26.65,0-53.42,0-80.08,0-5.42-1.66-10.81-7.95-11.75-4.16-.62-8.67-.13-12.85-.13h-48.95c-3.86,0-3.87,6,0,6Z\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M130.62,246.23v-59c0-3.86-6-3.87-6,0v59c0,3.86,6,3.87,6,0h0Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"cls-1\",\n d: \"M124.62,17.23v53c0,3.86,6,3.87,6,0V17.23c0-3.86-6-3.87-6,0h0Z\"\n })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgAiSearch);\nexport default __webpack_public_path__ + \"static/media/AISearch.55f2a6ea.svg\";\nexport { ForwardRef as ReactComponent };","import { Box, Button, Typography, Alert, AlertTitle } from '@mui/material';\nimport { useTranslation } from 'react-i18next'; // Assuming you use react-i18next for translations\nimport { useStore } from 'hooks'; // Assuming useStore is a custom hook for accessing store data\nimport { convertUrlEncodedString, convertUrlDecodedString, ThemeBrandTitle } from 'helpers/Helpers'; // Assuming convertUrlDecodedString is a helper function\nimport { ReactComponent as AISearchIcon } from 'pages/search/components/Grid/CourseTable/NoResults/assets/icons/AISearch.svg';\nimport { useTheme } from '@emotion/react';\n\nconst NoResultsMessage = () => {\n const { t } = useTranslation(); // t function for translations\n const store = useStore(); // Assuming useStore hook provides access to store data\n const searchAttemptNr = store.searchNextAttempt;\n const brandTitle = ThemeBrandTitle();\n const { u } = brandTitle !== 'E-WISE' ? { u: 'u' } : { u: 'je' };\n const theme = useTheme();\n const sxAISearchIcon = {\n width: '140px',\n height: '140px',\n borderRadius: '0px',\n fill: theme.palette.primary.main\n };\n const renderMessage = () => {\n switch (searchAttemptNr) {\n case 1:\n return t(\n 'searchoverview.noCoursesMessage1',\n 'We can reverse the order of your words, perform another search, and attempt to match each variation.'\n );\n case 2:\n return t('searchoverview.noCoursesMessage2', 'We can attempt to search for a word based on your input.');\n case 3:\n return t('searchoverview.noCoursesMessage3', { u });\n default:\n return '';\n }\n };\n\n const handleSubmit = () => {\n store.routerStore.goTo('searchOverview', {\n params: {\n baseProductId: store.baseProduct?.nid.toString(),\n searchParam: convertUrlEncodedString(store.searchParam),\n searchAttempt: searchAttemptNr.toString()\n }\n });\n };\n\n if (searchAttemptNr === 3) {\n return (\n \n \n \n {renderMessage()}\n
    \n {t('searchoverview.noCoursesMessage')}\n \n
    \n
    \n );\n }\n\n return (\n \n {searchAttemptNr > 0 && searchAttemptNr < 3 && (\n <>\n \n \n {t('searchoverview.noCourses', 'No courses found based on your search.')}\n
    \n "{convertUrlDecodedString(store.searchParam)}"\n
    \n \n \n {renderMessage()}\n \n \n \n {t('searchoverview.searchAgain', 'Search')}\n \n \n )}\n
    \n );\n};\n\nexport default NoResultsMessage;\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n/* Custom styling */\nimport { Box, Alert, AlertTitle } from '@mui/material';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\n/**\n * This component is responsible for displaying an introductory message from a package to the user, providing the option to access more information in a popup dialog, and managing the presentation of additional content.\n */\nconst AccreditationNotice = () => {\n const { t } = useTranslation();\n const brandTitle = ThemeBrandTitle();\n\n const cssMargin = '16px';\n const { u, kunt } = brandTitle !== 'E-WISE' ? { u: 'U', kunt: 'kunt', heeft: 'heeft' } : { u: 'Je', kunt: 'kan', heeft: 'hebt' };\n\n return (\n \n \n \n {t('searchoverview.intro.accr', { u, kunt })}\n \n \n \n );\n};\nexport default observer(AccreditationNotice);\n","/* eslint-disable react/no-danger */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Grid, Typography } from '@mui/material';\nimport { useStore } from 'hooks';\nimport { ThemeBrandTitle } from 'helpers/Helpers'; // Assuming convertUrlDecodedString is a helper function\nimport CourseList from './CourseList';\nimport NoResultsMessage from './NoResults/NoResultsMessage';\nimport AccreditationNotice from './elements/AccreditationNotice';\n\n/**\n * CourseTable component\n *\n * Displays a table view of courses fetched from MobX store.\n * Automatically adjusts course image sizes on mount.\n */\nconst CourseTable = () => {\n const store = useStore();\n const { t } = useTranslation();\n const brandTitle = ThemeBrandTitle();\n const isSchoolleiders = store.baseProduct.unique_name.includes('schoolleiders');\n\n // Render no results message if no courses or courses are undefined\n if (!store.courses?.courses || store.courses.courses.length === 0) {\n return (\n \n \n \n );\n }\n\n // Split for accredited professions\n const { accr, nonaccr } = store.courses.coursesByAccreditation();\n\n return (\n \n {store.searchIsRandom === true && (\n \n \n \n )}\n \n {accr.length > 0 && (brandTitle !== 'E-WISE' || isSchoolleiders) && (\n <>\n \n \n {t('searchoverview.accreditation')}\n \n \n \n \n )}\n {nonaccr.length > 0 && (brandTitle !== 'E-WISE' || isSchoolleiders) && (\n <>\n {accr.length > 0 && (\n \n \n {t('searchoverview.otherCourses')}\n \n \n )}\n \n \n \n \n \n )}\n {brandTitle === 'E-WISE' && !isSchoolleiders && }\n \n \n );\n};\n\nexport default observer(CourseTable);\n","import { observer } from 'mobx-react';\nimport { Box, CircularProgress } from '@mui/material';\nimport { useStore } from 'hooks';\nimport CourseTable from 'pages/search/components/Grid/CourseTable/CourseTable';\n\n/**\n * SearchOverview component\n *\n * The SearchOverview component is responsible for displaying courses based on search results.\n * It includes a filter bar and switches between grid and table views based on screen size.\n */\nconst SearchOverview = () => {\n const boxClassName = `course_overview_box search`;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default observer(SearchOverview);\n\n/**\n * Spinner component\n *\n * Renders a loading spinner centered on the screen.\n */\nconst Spinner = () => (\n \n \n \n);\n\n/**\n * SearchCourseViewAll component\n *\n * Renders either a grid or table view of search results based on screen size.\n * Uses MobX state to manage loading and responsive behavior.\n */\nconst SearchCourseViewAll = observer(() => {\n const store = useStore();\n\n if (store.searchingCourses === true) {\n return ;\n }\n\n return (\n
    \n \n
    \n );\n});\n","import MainLayout from 'pages/mainLayout/MainLayout';\nimport SearchOverview from './SearchOverview';\n\nconst searchOverviewViewMap = {\n searchOverview: (\n \n \n \n )\n};\n\nexport default searchOverviewViewMap;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\n\nconst CourseOverview = React.lazy(() => import('../course/CourseOverview'));\n\nconst SpecialAccessViewMap = {\n specialAccess: (\n \n \n \n \n \n )\n};\n\nexport default SpecialAccessViewMap;\n","import React from 'react';\nimport MainLayout from 'pages/mainLayout/MainLayout';\nimport { Lazy } from 'components';\n\nconst CourseIntroduction = React.lazy(() => import('../course/CourseIntroduction'));\n\nconst specialAccessIntroductionViewMap = {\n specialAccessCourseIntroduction: (\n \n \n \n \n \n )\n};\n\nexport default specialAccessIntroductionViewMap;\n","/* eslint-disable camelcase */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState, useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport * as material from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\n\n/* Custom styling */\nimport 'theme/course/courseoverview/Quickview.scss';\n\n/* Custom components */\n\nconst NewUserTermsAss = (props) => {\n const [check, setChecked] = useState(false);\n const { open, onClose } = props;\n const store = useContext(Store);\n const { t } = useTranslation();\n\n const handleBackdropClick = (event) => {\n event.stopPropagation();\n };\n\n const saveGdpr = async () => {\n try {\n store.showToast({ message: t('account.profile.gdpr', 'Thank you for accepting!'), variant: 'success' });\n store.setGdprAss();\n } catch (error) {\n store.showToast({ message: t('account.profile.error', 'Something went wrong'), variant: 'error' });\n store.setGdprAss();\n }\n onClose();\n };\n\n function handleClose(event, reason) {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n onClose();\n }\n }\n\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n const dpaUrl = 'https://proef.cme-online.nl/system/2022/07/verwerkersovereenkomst-assistenten.pdf';\n\n return (\n <>\n \n \n \n \n Algemene verordening gegevensbescherming (AVG)\n \n \n Laats bijgewerkt Maart 2024\n \n \n \n \n \n \n \n Geachte beheerder,\n \n \n In het kader van de Europese privacywetgeving, de Algemene verordening gegevensbescherming (AVG) informeren wij u graag over\n de verwerking van de persoonsgegevens.\n \n Wanneer u een gebruiker uitnodigt worden de persoonsgegevens in ons systeem geregistreerd om de uitnodigingsmail te versturen.\n Per gebruiker gaat het om de volgende gegevens:\n
      \n
    • E-mailadres
    • \n
    • Initialen
    • \n
    • Voornaam
    • \n
    • Achternaam
    • \n
    • Geslacht
    • \n
    \n \n CME-Online wordt daarmee verwerker van uw gegevens. Wij hebben daartoe een{' '}\n \n verwerkersovereenkomst\n {' '}\n opgesteld. Wij verzoeken u vriendelijk de overeenkomst door te nemen en daarna op akkoord te klikken.\n \n
    \n \n <>\n {\n setChecked(!check);\n }}\n />\n Ik heb het gelezen en ga ermee akkoord.\n \n \n
    \n \n \n Akkoord\n \n \n \n \n );\n};\n\nNewUserTermsAss.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default observer(NewUserTermsAss);\n","export function createURLParams(item) {\n return Object.entries(item)\n .map((pair) => pair.map(encodeURIComponent).join('='))\n .join('&');\n}\n","import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, TextField } from '@mui/material';\nimport { LoadingButton } from '@mui/lab';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { Controller, useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as Yup from 'yup';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from '../../../hooks';\nimport { createURLParams } from './createURLParams';\n\nconst validationSchema = Yup.object().shape({\n email: Yup.string().required('Email is verplicht').email('Email heeft niet het correcte formaat'),\n first_name: Yup.string().required('Voornaam is verplicht'),\n last_name: Yup.string().required('Achternaam is verplicht')\n});\n\nexport const InviteUserDialog = ({ open, handleClose, contractId, onSuccess }) => {\n const [isLoading, setIsLoading] = useState(false);\n const store = useStore();\n const { t } = useTranslation();\n\n const {\n handleSubmit,\n formState: { errors },\n control,\n reset\n } = useForm({\n defaultValues: { email: '', first_name: '', last_name: '' },\n resolver: yupResolver(validationSchema)\n });\n\n const handleInvite = async (data) => {\n setIsLoading(true);\n\n const params = {\n ...data,\n contract_id: contractId\n };\n\n try {\n await window.authedClient.post(`ewapi/assistant_manager/invite?${createURLParams(params)}`);\n await store.showToast({ message: t('assistant.invite.msgSuccess'), variant: 'success' });\n await onSuccess();\n await reset();\n } catch (err) {\n await store.showToast({ message: t('assistant.invite.msgError'), variant: 'error' });\n }\n\n setIsLoading(false);\n };\n\n return (\n \n
    \n {t('assistant.invite.title')}\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 {t('assistant.invite.btnInvite')}\n \n \n
    \n
    \n );\n};\n\nInviteUserDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n handleClose: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n contractId: PropTypes.any\n};","import { useState } from 'react';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from '../../../hooks';\nimport { createURLParams } from './createURLParams';\n\nexport const ResendInvitationButton = ({ data, onSuccess }) => {\n const store = useStore();\n const [isLoading, setIsLoading] = useState(false);\n const { t } = useTranslation();\n\n const onClick = async () => {\n setIsLoading(true);\n\n try {\n await window.authedClient.post(`ewapi/assistant_manager/invite?${createURLParams(data)}`);\n await store.showToast({ message: t('assistant.resend.msgSuccess'), variant: 'success' });\n await onSuccess();\n } catch (err) {\n await store.showToast({ message: t('assistant.resend.msgError'), variant: 'error' });\n }\n\n setIsLoading(false);\n };\n\n return (\n \n {t('assistant.resend.btn')}\n \n );\n};\n\nResendInvitationButton.propTypes = {\n data: PropTypes.object.isRequired,\n onSuccess: PropTypes.func.isRequired\n};","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport { Dialog, DialogActions, DialogContent, DialogTitle, Button } from '@mui/material';\nimport { useStore } from '../../../hooks';\n\nexport const RevokeButton = ({ contractId, subscriptionId, onSuccess, deleteType }) => {\n const store = useStore();\n const [isLoading, setIsLoading] = useState(false);\n const [openDialog, setOpenDialog] = useState(false);\n const { t } = useTranslation();\n const btnLabel = deleteType === 'delete' ? t('assistant.revoke.btn1') : t('assistant.revoke.btn2');\n const popupTitle = deleteType === 'delete' ? t('assistant.revoke.popupTitle1') : t('assistant.revoke.popupTitle2');\n const popupMsg = deleteType === 'delete' ? t('assistant.revoke.popupMsg1') : t('assistant.revoke.popupMsg2');\n const popupBtn = deleteType === 'delete' ? t('assistant.revoke.popupBtn1') : t('assistant.revoke.popupBtn2');\n const successMsg = deleteType === 'delete' ? t('assistant.revoke.msgSuccess1') : t('assistant.revoke.msgSuccess2');\n\n const onClick = async () => {\n setOpenDialog(true);\n };\n\n const handleConfirm = async () => {\n setIsLoading(true);\n try {\n const params = new URLSearchParams();\n params.append('contract_id', contractId);\n params.append('subscription_id', subscriptionId);\n\n await window.authedClient.post(`ewapi/assistant_manager/remove?${params.toString()}`);\n await store.showToast({ message: successMsg, variant: 'success' });\n await onSuccess();\n } catch (err) {\n await store.showToast({ message: t('assistant.revoke.msgError'), variant: 'error' });\n }\n setIsLoading(false);\n setOpenDialog(false);\n };\n\n return (\n <>\n \n {btnLabel}\n \n setOpenDialog(false)}>\n {popupTitle}\n {popupMsg}\n \n \n \n \n \n \n );\n};\n\nRevokeButton.propTypes = {\n contractId: PropTypes.number.isRequired,\n subscriptionId: PropTypes.number.isRequired,\n onSuccess: PropTypes.func.isRequired,\n deleteType: PropTypes.string\n};","import { Box, Chip, Grid, Typography } from '@mui/material';\nimport { useTheme } from '@mui/styles';\nimport { RouterLink } from 'mobx-state-router';\nimport * as PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { ResendInvitationButton } from './ResendInvitationButton';\nimport { RevokeButton } from './RevokeButton';\n\nexport const ListItem = ({ assistant, onAction }) => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n const assistantFullName = `${assistant.first_name ?? assistant.invitationdata?.first_name ?? assistant.initials ?? ''} ${\n assistant.last_name ?? assistant.invitationdata?.last_name ?? ''\n }`;\n\n return (\n \n \n \n \n {t('assistant.table.name')}\n \n \n {assistant.uid && assistant.opencourses > 0 ? (\n sxTheme.palette.primary.main } }}>\n \n {assistantFullName}\n \n \n ) : (\n {assistantFullName}\n )}\n \n \n \n \n {t('assistant.table.email')}\n \n \n {assistant.mail ?? assistant.invitationdata?.email}\n \n \n \n \n {t('assistant.table.courses')}\n \n \n {assistant.opencourses}\n \n \n \n \n {t('assistant.table.status')}\n \n \n \n \n \n {assistant.subscription_status === 'pending' && (\n \n )}\n \n \n \n );\n};\n\nListItem.propTypes = {\n assistant: PropTypes.any,\n onAction: PropTypes.func\n};\n","import { useTheme } from '@mui/styles';\nimport { useMemo } from 'react';\nimport { Box, Grid, Typography } from '@mui/material';\nimport * as PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { ListItem } from './ListItem';\n\nexport const List = ({ filteredAssistants, searchText, onAction }) => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n const noResultPanel = useMemo(() => {\n if (filteredAssistants?.length !== 0) {\n return null;\n }\n\n const text = searchText && searchText !== '' ? `${t('assistant.table.noresults1')} ${searchText}` : t('assistant.table.noresults2');\n\n return (\n \n \n \n {text}\n \n \n \n );\n }, [filteredAssistants?.length, searchText, t]);\n\n return (\n \n \n \n \n {t('assistant.table.name')}\n \n \n \n \n {t('assistant.table.email')}\n \n \n \n \n {t('assistant.table.courses')}\n \n \n \n \n {t('assistant.table.status')}\n \n \n \n {noResultPanel}\n \n {filteredAssistants?.map((assistant) => (\n \n ))}\n \n );\n};\n\nList.propTypes = {\n filteredAssistants: PropTypes.any,\n searchText: PropTypes.string,\n onAction: PropTypes.func\n};","/* Core */\nimport PropTypes from 'prop-types';\nimport { TextField, Box, InputAdornment, Button, IconButton } from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\nimport CancelRoundedIcon from '@mui/icons-material/CancelRounded';\nimport { useState } from 'react';\n\nexport const SearchBar = ({ placeholderText, setSearch }) => {\n const [searchText, setSearchText] = useState('');\n const handleSubmit = (event) => {\n event.preventDefault();\n setSearch(searchText);\n };\n\n return (\n
    \n \n setSearchText(event.target.value)}\n sx={{ flex: '1 0 auto' }}\n InputProps={{\n sx: { backgroundColor: 'grey.100', borderRadius: 2, borderColor: 'transparent' },\n startAdornment: (\n \n \n \n ),\n\n endAdornment: searchText && searchText.length !== 0 && (\n {\n setSearchText('');\n setSearch('');\n }}\n >\n \n \n )\n }}\n />\n \n \n \n \n
    \n );\n};\n\nSearchBar.propTypes = {\n placeholderText: PropTypes.string,\n setSearch: PropTypes.func\n};\n","import { Box, Typography } from '@mui/material';\nimport { useTheme } from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nexport const StatPanel = ({ icon, label, statNumber }) => {\n const theme = useTheme();\n\n return (\n \n {icon}\n \n \n {label}\n \n \n \n \n {statNumber}\n \n \n \n );\n};\n\nStatPanel.propTypes = {\n icon: PropTypes.node.isRequired,\n label: PropTypes.string.isRequired,\n statNumber: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired\n};\n","import { Grid } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport PersonIcon from '@mui/icons-material/Person';\nimport CardMembershipIcon from '@mui/icons-material/CardMembership';\nimport * as PropTypes from 'prop-types';\nimport { StatPanel } from './StatPanel';\n\nexport const StatsPanel = ({ data }) => {\n const { t } = useTranslation();\n\n return (\n \n \n } label={t('assistant.dashboard.active')} statNumber={data.result.total} />\n \n \n }\n label={t('assistant.dashboard.licenses')}\n statNumber={data.assistant_manager.attributes?.maximum_subscriptions - data.result.total}\n />\n \n \n }\n label={t('assistant.dashboard.total')}\n statNumber={data.assistant_manager.attributes?.maximum_subscriptions}\n />\n \n \n );\n};\n\nStatsPanel.propTypes = { data: PropTypes.any };\n","import { Box, Button, Grid, Pagination, Alert, Tooltip } from '@mui/material';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport { useStore } from 'hooks';\nimport NewUserTermsAss from 'pages/mainLayout/footer/NewUserTermsAss';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { InviteUserDialog } from './InviteUserDialog';\nimport { List } from './List';\nimport { SearchBar } from './SearchBar';\nimport { StatsPanel } from './StatsPanel';\nimport { useAssistantManager } from './useAssistantManager';\n\nfunction calculatePagination({ offset, limit, total }) {\n // Calculate the current page and total number of pages\n const page = offset / limit + 1;\n const noOfPages = Math.ceil(total / limit);\n\n // Return the calculated values\n return { page, noOfPages, itemsPerPage: limit };\n}\n\nexport const AssistantManagementView = () => {\n const { data, isLoading, hasError, refreshData } = useAssistantManager();\n const [searchText, setSearchText] = useState('');\n const [statusFilter, setStatusFilter] = useState('all');\n const [inviteUserDialogOpen, setInviteUserDialogOpen] = useState(false);\n // const filteredAssistants = filterAssistants(data, searchText, statusFilter) || [];\n const [openGdprAss, setOpenGdprAss] = useState(false);\n const { t } = useTranslation();\n const store = useStore();\n const offset = data?.result?.offset ?? 0;\n const { page, noOfPages, itemsPerPage } = calculatePagination({\n offset,\n total: data?.result?.total ?? 1,\n limit: data?.result?.limit ?? 1\n });\n useEffect(() => {\n window.scroll(0, 0);\n if (store?.getGdprAss() !== '1') {\n setOpenGdprAss(true);\n }\n }, [store]);\n\n if (isLoading && !data) {\n return t('assistant.tabs.loading');\n }\n\n if (hasError) {\n return {t('assistant.tabs.msgError')};\n }\n\n if (!data) {\n return null;\n }\n\n const onSetSearch = (text) => {\n setSearchText(text);\n refreshData(0, text, statusFilter);\n };\n\n const onStatusFilterChange = (status) => {\n setStatusFilter(status);\n refreshData(0, searchText, status);\n };\n\n const oncloseGdprAss = () => {\n setOpenGdprAss(!openGdprAss);\n };\n\n const contractId = data?.assistant_manager?.attributes?.drupal_internal__nid;\n const canInvite =\n data?.assistant_manager?.attributes?.maximum_subscriptions - data?.assistant_manager?.attributes?.subscriptions_used === 0;\n return (\n <>\n setInviteUserDialogOpen(false)}\n open={inviteUserDialogOpen}\n contractId={contractId}\n onSuccess={async () => {\n await refreshData(offset, searchText, statusFilter);\n setInviteUserDialogOpen(false);\n }}\n />\n \n \n \n }\n >\n {t('lms.downloadManual.assistant.text')}\n \n \n \n \n \n \n onStatusFilterChange(value)}\n aria-label=\"Platform\"\n >\n {t('assistant.tabs.tab1')}\n {t('assistant.tabs.tab2')}\n {t('assistant.tabs.tab3')}\n \n \n \n {!canInvite && (\n \n )}\n \n \n \n refreshData(offset, searchText, statusFilter)}\n />\n \n {noOfPages > 1 && (\n \n refreshData((newPage - 1) * itemsPerPage, searchText, statusFilter)}\n />\n \n )}\n \n \n );\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nexport const useAssistantManager = () => {\n const [data, setData] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [hasError, setHasError] = useState(null);\n\n const refreshData = useCallback(async (offset = 0, search = '', status = 'all') => {\n setIsLoading(true);\n let url = `ewapi/assistant_manager/assistants?limit=50&offset=${offset}`;\n if (search) {\n url += `&search=${search}`;\n }\n if (status === 'pending' || status === 'active') {\n url += `&status=${status}`;\n }\n try {\n const response = await window.authedClient.post(url);\n setData(response.data?.data);\n } catch (err) {\n setHasError(true);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n refreshData();\n }, [refreshData]);\n\n return { data, isLoading, hasError, refreshData };\n};\n","import { Box } from '@mui/material';\nimport MainLayout from '../mainLayout/MainLayout';\nimport { AssistantManagementView } from './AssistantManagementView/AssistantManagementView';\n\nexport const assistantManagementViewMap = {\n assistantManagement: (\n \n \n \n \n \n )\n};\n","import React from 'react';\n// MAIN LAYOUT\nimport MainLayout from 'pages/mainLayout/MainLayout';\n\n// E-WISE USERS SELECT PRODUCT PAGE\nimport SelectProductViewMap from 'pages/ewiseUserSelectProduct/SelectProductViewMap';\n\n/* COURSE */\nimport CourseOverview from 'pages/course/CourseOverview';\nimport CourseIntroduction from 'pages/course/CourseIntroduction';\n\n// ACCOUNT PAGES\nimport CertificatesViewMap from 'pages/account/accountViewMap/CertificatesViewMap';\nimport ProfileViewMap from 'pages/account/accountViewMap/ProfileViewMap';\nimport SettingsViewMap from 'pages/account/accountViewMap/SettingsViewMap';\nimport SubscriptionViewMap from 'pages/account/accountViewMap/SubscriptionViewMap';\n\n// PLAY\nimport EvaluationViewMap from 'pages/play/lessonPlayViewMaps/EvaluationViewMap';\nimport TermsViewMap from 'pages/play/lessonPlayViewMaps/TermsViewMap';\nimport FeedbackViewMap from 'pages/play/lessonPlayViewMaps/FeedbackViewMap';\n\n/* ADMIN COURSES */\nimport DashboardViewMap from 'pages/adminCourses/dashboard/DashboardViewMap';\nimport OnlineCoursesViewMap from 'pages/adminCourses/onlineCourses/OnlineCoursesViewMap';\nimport OfflineCoursesViewMap from 'pages/adminCourses/offlineCourses/OfflineCoursesViewMap';\nimport EditCourseViewMap from 'pages/adminCourses/addCourse/EditCourseViewMap';\nimport ViewCourseViewMap from 'pages/adminCourses/viewCourses/ViewCoursesViewMap';\nimport CourseSearchBarViewMap from 'pages/adminCourses/search/CourseSearchBarViewMap';\n/* ERROR PAGES */\nimport ErrorPageViewMap from 'pages/misc/miscViewMaps/ErrorPageViewMap';\nimport NotFoundPageViewMap from 'pages/misc/miscViewMaps/NotFoundViewMap';\n/* OTHER PAGES */\nimport FaqViewMap from 'pages/faq/faqViewMaps/FaqViewMap';\nimport Faq2ViewMap from 'pages/faq/faqViewMaps/Faq2ViewMap';\nimport Faq3ViewMap from 'pages/faq/faqViewMaps/Faq3ViewMap';\nimport ArticleViewMap from 'pages/faq/faqViewMaps/ArticleViewMap';\nimport colophonViewMap from 'pages/colophon/ColophonViewMap';\n\n/* LMS */\nimport LmsDashboardViewMap from 'pages/lms/lmsDashboard/LmsDashboardViewMap';\nimport LmsStudentsViewMap from 'pages/lms/lmsStudents/LmsStudentsViewMap';\nimport LmsStudentDetailViewMap from 'pages/lms/lmsStudentDetail/LmsStudentDetailViewMap';\nimport lmsCoursesViewMap from 'pages/lms/lmsCourses/lmsCoursesViewMap';\nimport LmsOrganisationsViewMap from 'pages/lms/lmsOrganisations/LmsOrganisationsViewMap';\nimport LmsCourseDetailViewMap from 'pages/lms/lmsCourseDetail/LmsCourseDetailViewMap';\nimport AttendanceSheetViewMap from 'pages/vtbDashboard/vtbViewMaps/AttendanceSheetViewMap';\nimport VtbViewMap from 'pages/vtbDashboard/vtbViewMaps/VtbViewMap';\nimport CurriculumDashboardViewMap from 'pages/curriculum/curriculumDashboard/CurriculumDashboardViewMap';\nimport CurriculumStagesViewMap from 'pages/curriculum/curriculumStages/CurriculumStagesViewMap';\n/* Assistant Custom components */\n\n// Only load pages and components when necessary. Lazy loading the following page(s)\nimport { Lazy } from 'components';\nimport LogoutViewMap from 'pages/login/LogoutViewMap';\nimport teachersOverviewViewMap from 'pages/teachersOverview/TeachersOverviewViewMap';\nimport teacherDetailViewMap from 'pages/teachersOverview/TeacherDetailViewMap';\nimport courseOverviewViewMap from 'pages/course/CourseOverviewViewMap';\nimport CourseIntroductionViewMap from 'pages/course/CourseIntroductionViewMap';\nimport searchOverviewViewMap from 'pages/search/SearchOverviewViewMap';\n// TEST HOME\n// import HomeViewMap from 'pages/home/HomeViewMap';\nimport SpecialAccessViewMap from 'pages/specialAccess/SpecialAccessViewMap';\nimport SpecialAccessIntroductionViewMap from 'pages/specialAccess/specialAccessIntroductionViewMap';\nimport { assistantManagementViewMap } from '../pages/assistentManagment/assitantManagementViewMap';\n\nconst LessonPlay = React.lazy(() => import('pages/play/LessonPlay'));\n\nexport const viewMap = {\n ...LogoutViewMap,\n // ...HomeViewMap,\n ...SpecialAccessViewMap,\n ...SpecialAccessIntroductionViewMap,\n\n /* COURSE OVERVIEW */\n ...courseOverviewViewMap,\n // defCourseOverview repeated in courseOverviewViewMap above, what to do?\n defCourseOverview: (\n \n \n \n ),\n\n /* SEARCH OVERVIEW */\n ...searchOverviewViewMap,\n\n /* COURSE INTRODUCTION */\n ...CourseIntroductionViewMap,\n defCourseIntroduction: (\n \n \n \n ),\n\n /* ADMIN COURSES */\n ...DashboardViewMap,\n ...OnlineCoursesViewMap,\n ...OfflineCoursesViewMap,\n ...EditCourseViewMap,\n ...ViewCourseViewMap,\n ...CourseSearchBarViewMap,\n\n /* EWISE USERS SELECT PRODUCT */\n ...SelectProductViewMap,\n\n /* MY ACCOUNT */\n ...ProfileViewMap,\n ...CertificatesViewMap,\n ...SubscriptionViewMap,\n ...SettingsViewMap,\n\n /* LESSONPLAY */\n lessonPlay: (\n \n \n \n ),\n defLessonPlay: (\n \n \n \n ),\n specialAccessLessonPlay: (\n \n \n \n ),\n /* END LESSONPLAY */\n ...EvaluationViewMap,\n ...TermsViewMap,\n ...FeedbackViewMap,\n\n /* ERROR PAGES */\n ...ErrorPageViewMap,\n ...NotFoundPageViewMap,\n\n /* ASSISTANT */\n ...assistantManagementViewMap,\n\n /* VTB */\n ...VtbViewMap,\n ...AttendanceSheetViewMap,\n\n /* Teachers */\n ...teachersOverviewViewMap,\n ...teacherDetailViewMap,\n\n /* Curriculum */\n ...CurriculumDashboardViewMap,\n ...CurriculumStagesViewMap,\n\n /* LMS */\n ...LmsDashboardViewMap,\n ...LmsStudentsViewMap,\n ...LmsStudentDetailViewMap,\n ...lmsCoursesViewMap,\n ...LmsCourseDetailViewMap,\n ...LmsOrganisationsViewMap,\n\n /* OTHER PAGES */\n ...FaqViewMap,\n ...Faq2ViewMap,\n ...Faq3ViewMap,\n ...ArticleViewMap,\n ...colophonViewMap\n};\n","/* Core */\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\n/* Translation */\nimport { I18nextProvider } from 'react-i18next';\nimport i18next from 'i18next';\nimport './i18n';\n\nimport OauthProvider from './providers/OauthProvider';\nimport WithStoreProvided from './providers/WithStoreProvided';\nimport { CustomThemeProvider } from './providers/CustomThemeProvider';\n\nimport './index.css';\n\nimport { LoadingPage } from './components';\nimport ProtectedRoutesMiddleware from './providers/ProtectedRoutesMiddleWare';\nimport { routes } from './state/Routes';\nimport { viewMap } from './providers/ViewMap';\n\nconst App = () => (\n \n \n \n \n \n \n \n \n \n);\n\nexport default App;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport 'react-app-polyfill/ie11';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport 'react-app-polyfill/stable';\nimport ReactDOM from 'react-dom';\nimport App from 'App';\nimport smoothscroll from 'smoothscroll-polyfill';\nimport { HttpClient as HttpClientIntegration } from '@sentry/integrations';\nimport * as Sentry from '@sentry/react';\nimport { ThemeMeta } from './helpers/Helpers';\n\n// Initialize sentry A.S.A.P to make sure all errors are handled (even non react ones)\nSentry.init({\n dsn: 'https://21712f117406e75094e9e32c9a3c931e@o4504849089757184.ingest.sentry.io/4505675190829056',\n integrations: [\n new Sentry.BrowserTracing({\n // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: ['localhost', 'https:yourserver.io/api/']\n }),\n new Sentry.Replay(),\n new HttpClientIntegration({\n // This array can contain tuples of `[begin, end]` (both inclusive),\n // single status codes, or a combination of both.\n // default: [[500, 599]]\n failedRequestStatusCodes: [[500, 505], 507]\n })\n ],\n // Performance Monitoring\n tracesSampleRate: 0.25,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0\n});\n\nThemeMeta(); // This will change some icons\nsmoothscroll.polyfill(); // kick off the polyfill for smooth vertically scrolling (only necessary for IE11 and Safari)\nwindow.isIE11 = window.navigator.userAgent.indexOf('Trident/') >= 0;\n\n// Some security message\nwindow.console.log('%cStop!', 'font-size: 30px; color: red; font-weight: bold;');\nwindow.console.log(\n '%cPlease note our content and product is copyrighted. Unauthorized use is prohibited.',\n 'font-size: 21px; color: #000;'\n);\nwindow.console.log(\n '%cThis is a browser feature intended for developers. If someone told you to copy-paste something here to enable a feature or \"hack\" someone\\'s account, it is a scam and will give them access to your account.',\n 'font-size: 14px; color: #000;'\n);\nwindow.console.log(\n '%cIn case of a security breach, contact security@reducate.com.',\n 'font-size: 14px; color: #000;'\n);\n\n/**\n * Polyfill for IE-11\n */\nif (window.isIE11) {\n // eslint-disable-next-line global-require,import/extensions\n require('./helpers/ie11domfull.js'); // Only ie11\n}\n\n// eslint-disable-next-line react/jsx-filename-extension\nReactDOM.render(, document.getElementById('root'));\n","/* Core */\nimport { useState, useContext, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n/* MUI */\nimport { Box } from '@mui/material';\nimport Card from '@mui/material/Card';\n\n/* Helpers */\nimport { urlify } from 'state/Utils';\nimport { useIntersection } from 'hooks';\n\n/* CARD Elements */\nimport CourseSymbols from './elements/CourseSymbols';\nimport PodcastIcon from './elements/PodcastIcon';\nimport CourseReactions from './elements/CourseReactions';\nimport HideCourse from './elements/HideCourse';\nimport CourseImage from './elements/CourseImage';\nimport CourseStatus from './elements/CourseStatus';\nimport CourseCategories from './elements/CourseCategories';\nimport CourseTitle from './elements/CourseTitle';\nimport CourseAuthors from './elements/CourseAuthors';\nimport CoursePoints from './elements/CoursePoints';\n\n/*\nIn summary, the BasicCard component is responsible for rendering a course card with essential course information.\nIt handles navigation to the course introduction page and manages the visibility of the course image.\nThe appearance and behavior of the card are determined by the data from the props and the application's store, along with user interactions.\n*/\nconst BasicCard = (props) => {\n const store = useContext(Store);\n const {\n chip,\n categoriesArray,\n duration,\n courseTitle,\n authors,\n badges,\n nid,\n id,\n courseImage,\n podcast,\n extraLabel,\n lessons,\n hideCourse,\n reviewers,\n isTrialCourse\n } = props;\n const [visible, setVisible] = useState(false);\n\n const nonTrialCourse = store?.product?.free_product && store?.trialCourses && !isTrialCourse ? 'nonTrialCourse' : '';\n\n const imgRef = useRef();\n useIntersection(imgRef, () => {\n setVisible(true);\n });\n\n const gotoSpecialAccessCourse = (courseId, title) =>\n store.routerStore.goTo('specialAccessCourseIntroduction', {\n params: {\n sa: 'my',\n productName: 'special',\n product: 'access',\n packageId: '0',\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n\n // eslint-disable-next-line consistent-return\n const gotoCourse = (courseId, title) => {\n if (store.courses.isSpecialAccessView) {\n return gotoSpecialAccessCourse(courseId, title);\n }\n // microlearnings\n if (store.isMicrolearning && lessons[0]?.nid) {\n return store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: courseId.toString(),\n lessonId: lessons[0].nid?.toString(),\n pageNo: store?.lesson_results?.getLessonPageIdMax(+lessons[0].nid).toString() || '1'\n }\n });\n }\n\n return store.routerStore.goTo('courseIntroduction', {\n params: {\n productName: store.baseProduct.unique_name,\n product: store.selectedProductId.toString(),\n packageId: store.selectedPackageId.toString(),\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n };\n\n const isFinished = store.courseResults.isCourseFinished(nid);\n const isCourseStarted = !isFinished && store.courseResults.isCourseStarted(nid);\n const isCourseExpiring = store.courses.isCourseExpiring(nid);\n\n return (\n \n \n \n gotoCourse(nid, courseTitle)}>\n \n \n \n \n \n \n gotoCourse(nid, courseTitle)}>\n \n \n \n \n \n \n gotoCourse(nid, courseTitle)}>\n \n \n \n \n {podcast && }\n {duration && }\n \n \n \n {hideCourse && }\n \n \n );\n};\n\n/* Our logo props */\nBasicCard.propTypes = {\n chip: PropTypes.string,\n categoriesArray: PropTypes.array,\n duration: PropTypes.string,\n courseTitle: PropTypes.string,\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n badges: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n nid: PropTypes.number,\n id: PropTypes.string,\n courseImage: PropTypes.string,\n podcast: PropTypes.any,\n extraLabel: PropTypes.any,\n lessons: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n hideCourse: PropTypes.bool,\n reviewers: PropTypes.array,\n isTrialCourse: PropTypes.bool\n};\n\nexport default observer(BasicCard);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n// import { getSnapshot, destroy } from 'mobx-state-tree';\n// import { RootStore } from './RootStore';\n// import { routes } from './Routes';\n\n// if (!window.store) {\n// const store = localStorage.getItem('store') // Only present during Cypress testing for ommitting logins\n// ? JSON.parse(localStorage.getItem('store'))\n// : {};\n// window.store = RootStore.create(store, { routes });\n// } else {\n//\n// const tmpStore = window.store;\n// const rootStoreSnapshot = getSnapshot(window.store);\n// window.store = RootStore.create(rootStoreSnapshot, { routes });\n// window.setTimeout(() => {\n// destroy(tmpStore); // Before removing the old store we need to wait until the new store is rendered in the browser window\n// }, 2000);\n// }\n\nexport const startupStore = window.store; // Only used by App.js to give access to the rootstore\nexport const Store = React.createContext(); // All other modules use this\nexport const StoreProvider = (props) => {\n const { children, store } = props;\n // eslint-disable-next-line react/jsx-filename-extension\n return {children};\n};\n\nStoreProvider.propTypes = {\n children: PropTypes.object.isRequired,\n store: PropTypes.object\n};\n\n// Below is some code to use it as a Redux time machine (I never really needed it)\n/*\n try {\n if (snapshotListener) snapshotListener(); // Dispose previous listener (if exists)\n Use window.store to make access easy in console\n \n connect devtools (o.a. time machine)\n connectReduxDevtools(require(\"remotedev\"), window.store); // connect devtools (o.a. time machine)\n connectReduxDevtools(require(\"remotedev\"), store, {logIdempotentActionSteps: false, logChildActions: false}); // connect devtools (o.a. time machine)\n\n Optionally during development: Create snapshot to localstorage after each (or certain) state change\n snapshotListener = onSnapshot(store, snapshot => {\n \n localStorage.setItem('store', JSON.stringify(snapshot));\n });\n } catch(e) {\n \n }\n*/\n","/* Core */\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, Avatar, Tooltip } from '@mui/material';\n\n// renders a list of badges for a course card\nconst CourseSymbols = (props) => {\n const { badges, small = false } = props;\n // IF NO BADGES, RETURN NULL\n if (!badges || badges.length === 0) return null;\n\n const sxNPO = {\n '[class*=\"#\"], [class*=\"NPO\"], [class*=\"symbol-VE\"], [class*=\"symbol-A1\"], [class*=\"symbol-A2\"]': {\n width: 'fit-content!important',\n borderRadius: '6px',\n padding: '0px 6px',\n background: '#ffffff !important',\n color: '#01689b !important',\n border: '1px solid #01689b'\n }\n };\n\n const npoBadges = badges.filter((badge) => badge?.name.toLowerCase().includes('npo'));\n const goBadges = badges.filter((badge) => badge?.name.toLowerCase() === 'groepsopdracht');\n const veBadges = badges.filter((badge) => badge?.symbol?.toLowerCase() === 've');\n const aBadges = badges.filter((badge) => badge?.name.toLowerCase() === 'a1' || badge?.name.toLowerCase() === 'a2');\n const restBadges = badges.filter(\n (badge) =>\n !badge?.name.toLowerCase().includes('npo') &&\n badge?.name.toLowerCase() !== 'groepsopdracht' &&\n badge?.symbol?.toLowerCase() !== 've' &&\n badge?.name.toLowerCase() !== 'a1' &&\n badge?.name.toLowerCase() !== 'a2'\n );\n restBadges.sort((a, b) => a.name.localeCompare(b.name));\n\n const sortedBadges = [...goBadges, ...npoBadges, ...veBadges, ...aBadges, ...restBadges];\n\n const sxBadgeSize = small ? { width: '24px', height: '24px', fontSize: '13px' } : {};\n\n const getFirstLetter = (badge) => {\n if (badge?.name) return badge.name.charAt(0);\n return 'unknown';\n };\n const getBadgeTitle = (badge) => {\n if (badge.symbol?.includes('#')) return [...badge.symbol][1];\n if (badge?.name?.toLowerCase().includes('npo')) return badge.name;\n return badge.symbol ? badge.symbol : [...badge.name][0];\n };\n\n // RETURN BADGES\n return (\n \n {sortedBadges.map((badge, index) => (\n \n \n {getBadgeTitle(badge)}\n \n \n ))}\n \n );\n};\n\nCourseSymbols.propTypes = {\n badges: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n small: PropTypes.bool\n};\n\nexport default CourseSymbols;\n","import { TextField } from '@mui/material';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef } from 'react';\n\n/*\nIn summary, the MyTextField component is a flexible text input component that can operate in both controlled and uncontrolled modes. \nIt allows users to enter text values and can handle numeric input when necessary. \nThis component is commonly used in forms and can be easily integrated with libraries like react-hook-form for controlled form handling.\n*/\n// eslint-disable-next-line react/prop-types\nconst MyTextField = forwardRef(({ name, control, onChange: onChangeProp, type = 'text', ...otherProps }, ref) => {\n const configTextfield = {\n size: 'small',\n fullWidth: true,\n variant: 'outlined',\n type,\n ...otherProps\n };\n\n return control ? (\n (\n {\n const val = parseInt(e.target.value, 10);\n if (Number.isNaN(val) || type === 'text') {\n field.onChange(e.target.value);\n } else if (type === 'password') {\n field.onChange(e.target.value);\n } else if (type === 'number' && val < 0) {\n e.preventDefault();\n } else {\n field.onChange(val);\n }\n if (onChangeProp) onChangeProp(e);\n }}\n {...configTextfield}\n />\n )}\n />\n ) : (\n \n );\n});\n\nMyTextField.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default MyTextField;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControl from '@mui/material/FormControl';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport FormGroup from '@mui/material/FormGroup';\nimport { FormHelperText } from '@mui/material';\nimport { PropTypes } from 'prop-types';\nimport { Controller } from 'react-hook-form';\n\n// renders a Checkbox\n// eslint-disable-next-line react/prop-types\nconst MyCheckbox = (props) => {\n const { name, label, control, helperText, ...otherProps } = props;\n\n // props config for Checkbox\n const configCheckbox = {\n ...otherProps\n };\n\n return control ? (\n (\n \n \n }\n label={label}\n />\n \n {helperText}\n \n )}\n />\n ) : (\n \n \n } label={label} />\n \n \n );\n};\n\nMyCheckbox.propTypes = {\n name: PropTypes.string,\n label: PropTypes.string,\n control: PropTypes.object,\n helperText: PropTypes.string\n};\n\nexport default MyCheckbox;\n","import Radio from '@mui/material/Radio';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\n\n// renders a Radio button with the option to use react-hook-form\n// eslint-disable-next-line react/prop-types\nconst MyRadio = ({ name, control, index, onChange: onChangeProp, type = 'radio', value, label, options, checked }) => {\n const indexCorrectOption = options?.findIndex((x) => x.correct === true);\n\n return control ? (\n (\n \n )}\n />\n ) : (\n \n );\n};\n\nMyRadio.propTypes = {\n type: PropTypes.string,\n name: PropTypes.string,\n value: PropTypes.string,\n label: PropTypes.string,\n control: PropTypes.object,\n index: PropTypes.number,\n onChange: PropTypes.func,\n checked: PropTypes.bool,\n options: PropTypes.array\n};\n\nexport default MyRadio;\n","import { Radio, FormLabel, RadioGroup, FormControlLabel, FormHelperText } from '@mui/material';\nimport { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\n\n// renders a RadioGroup with the option to use react-hook-form\n// eslint-disable-next-line react/prop-types\nconst MyRadioGroup = ({ name, control, type = 'radio', value, label, options, checked, helperText }) =>\n control ? (\n <>\n {label}\n (\n <>\n \n {options.map((option) => (\n } label={option.name} />\n ))}\n \n {helperText}\n \n )}\n />\n \n ) : (\n \n );\n\nMyRadioGroup.propTypes = {\n type: PropTypes.string,\n name: PropTypes.string,\n value: PropTypes.string,\n label: PropTypes.string,\n control: PropTypes.object,\n checked: PropTypes.bool,\n options: PropTypes.array,\n helperText: PropTypes.string\n};\n\nexport default MyRadioGroup;\n","import { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { forwardRef, useState } from 'react';\nimport { Box, Button } from '@mui/material';\n// ICONS\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\n\n/*\nIn summary, the FileUpload component is used for file uploads in a React form. \nIt allows users to select files, and the selected file's name is displayed in the component. \nThe file's content is read and can be processed within the onChange callback, making it suitable for various use cases\n where file uploads are required, including image avatars or document uploads. \nThe component is typically used within a form and benefits from controlled form handling provided by libraries like react-hook-form.\n*/\nconst FileUpload = forwardRef(\n ({ name, control, index, onChange: onChangeProp, avatar, buttonName, fileName, accept, editMode, reset, ...otherProps }, ref) => {\n const [filename, setFilename] = useState(fileName);\n\n return (\n (\n \n \n {filename}\n \n )}\n />\n );\n }\n);\n\nFileUpload.propTypes = {\n name: PropTypes.string,\n control: PropTypes.object,\n reset: PropTypes.any,\n onChange: PropTypes.func,\n // src: PropTypes.string,\n editMode: PropTypes.bool,\n avatar: PropTypes.bool,\n buttonName: PropTypes.string,\n accept: PropTypes.string,\n fileName: PropTypes.string,\n index: PropTypes.number\n};\n\nexport default FileUpload;\n","import PropTypes from 'prop-types';\nimport { useCustomTheme, useStore } from '../../hooks';\n\n/* Our logo */\nconst Logo = ({ style, showLabelLogo = false }) => {\n const { labelLogo, customLogo } = useCustomTheme();\n const store = useStore();\n\n /* Return to homepage */\n const GoHome = (event) => {\n event.preventDefault();\n const NoRedirectToHome = store.getLtiSession() === 1 || store.getLtiSession() === '1';\n window.location.href = NoRedirectToHome ? '#' : '/';\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n
    GoHome(event)}>\n \"logo\"\n
    \n );\n};\n\n/* Our logo props */\nLogo.propTypes = {\n style: PropTypes.object,\n showLabelLogo: PropTypes.bool\n};\n\nexport default Logo;\n","import { LinearProgress } from '@mui/material';\nimport Logo from './Logo';\nimport '../../theme/login/Login.scss';\nimport '../../theme/EwiseTheme';\n\nconst LoadingPage = () => (\n
    \n \n
    \n \n
    \n
    \n);\n\nexport default LoadingPage;\n","/* Course status */\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport { Chip } from '@mui/material';\n\n// renders the course status\nconst CourseStatus = (props) => {\n const { status, isCourseExpiring, size = 'medium', nid } = props;\n const { t } = useTranslation();\n const store = useStore();\n // hide expired label on labels pe/po when course end date is 31.12\n const hideExpiredLabel = store?.courses?.hideExpiredLabel(nid);\n if (hideExpiredLabel) return null;\n\n const course = {\n Expected: { text: t('course.badges.badge2', 'Expected'), color: '#6F6F6F' },\n Expire: { text: t('course.badges.badge3', 'Expire'), color: 'primary.main' },\n Update: { text: t('course.badges.badge4', 'Update'), color: '#007ABE' },\n New: { text: t('course.badges.badge1', 'New'), color: '#62A000' },\n Expiring: { text: t('course.badges.expiringSoon', 'Expires soon'), color: '#b04744' }\n };\n\n if ((!status || status === 'Default') && !isCourseExpiring) return null;\n\n return (\n \n );\n};\n\nCourseStatus.propTypes = {\n status: PropTypes.string,\n isCourseExpiring: PropTypes.bool,\n size: PropTypes.string,\n nid: PropTypes.number\n};\n\nexport default CourseStatus;\n","import { SvgIcon } from '@mui/material';\n\nconst CertificateTab = (props) => (\n \n \n \n);\n\nexport default CertificateTab;\n","import { useContext, useState, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\n\n// This code uses the useEwapi hook to fetch information about a product or package.\n// It also sets the value of loading to true while the fetch is in progress.\n\nconst useCustomEwapi = (url = '') => {\n const [response, setResponse] = useState(null);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(true);\n\n const store = useContext(Store);\n\n useEffect(() => {\n const doFetch = async () => {\n setLoading(true);\n try {\n const res = await window.authedClient.get(url);\n\n setResponse(res.data);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n };\n doFetch();\n }, [url, store]);\n return { response, error, loading };\n};\nexport default useCustomEwapi;\n","import { useState, useEffect } from 'react';\n\n/**\n * Make a fetch request using the jsonapi endpoint\n *\n * @param node\n * @param filter\n * @returns {{response: unknown, error: unknown, loading: boolean}}\n */\nconst useJsonApi = (node, filter) => {\n const [response, setResponse] = useState(null);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const doFetch = async () => {\n setLoading(true);\n try {\n const resp = await window.authedClient.get(`jsonapi/${node}?${filter}`);\n setResponse(resp.data);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n };\n doFetch();\n }, [filter, node]);\n return { response, error, loading };\n};\nexport default useJsonApi;\n","import { Box, Button } from '@mui/material';\nimport { useState, Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport { useSwipeable } from 'react-swipeable';\n\n/*\nIn summary, the Carousel component creates a versatile carousel with navigation arrows, swipe gestures, and indicator points for displaying a set of items. \nIt provides an engaging and interactive way to view content or images, with customizable styling options.\n*/\nexport const CarouselItem = ({ children, className }) => (\n
    {children}
    \n);\n\nCarouselItem.propTypes = {\n children: PropTypes.any,\n className: PropTypes.any\n};\n\nconst Carousel = ({ children, arrows, length }) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const updateIndex = (newIndex) => {\n if (newIndex < 0) {\n newIndex = length - 1;\n } else if (newIndex >= length) {\n newIndex = 0;\n }\n\n setActiveIndex(newIndex);\n };\n\n const handlers = useSwipeable({\n onSwipedLeft: () => updateIndex(activeIndex + 1),\n onSwipedRight: () => updateIndex(activeIndex - 1)\n });\n\n return (\n \n \n {arrows && (\n {\n updateIndex(activeIndex - 1);\n }}\n >\n \n \n )}\n \n \n \n {Children.map(children, (child, index) => cloneElement(child, { className: activeIndex === index && 'active' }))}\n \n \n\n \n {arrows && (\n {\n updateIndex(activeIndex + 1);\n }}\n >\n \n \n )}\n \n \n );\n};\n\nCarousel.propTypes = {\n children: PropTypes.any,\n arrows: PropTypes.bool,\n length: PropTypes.number\n};\nexport default Carousel;\n","import * as logger from 'loglevel';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { _headersUpload } from 'helpers/rootStoreHelper';\nimport qs from 'qs';\nimport { isNil, omitBy } from 'lodash';\nimport deepmerge from 'deepmerge';\nimport { convertUrlDecodedString } from 'helpers/Helpers';\n\nimport { createCurriculumApi } from 'pages/curriculum/api';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\nconst log = logger.getLogger('LmsApi');\n\n/**\n * Post-processing functions for certain entity types (mostly serializing)\n * Called from general patch-post function\n *\n * @type {{question_widget: (function(*): *), lesson_result: (function(*): *)}}\n */\nexport const convertSnapshot = {\n question_widget: function postProcessQuestionWidget(snapshot) {\n const newSnapshot = cloneDeep(snapshot);\n const attr = newSnapshot.attributes;\n delete attr.widget_data;\n const dataObj = {\n question: attr.question,\n feedback: attr.feedback,\n correct: attr.correct,\n options: []\n };\n if (attr.options) {\n dataObj.options = attr.options.map((option) => ({\n value: option.value,\n label: option.label,\n feedback: option.feedback,\n correct: option.correct\n }));\n }\n attr.widget_data = JSON.stringify(dataObj);\n Object.entries(dataObj).forEach((entry) => {\n delete attr[entry[0]];\n });\n return newSnapshot;\n },\n\n lesson_result: function postProcessLessonResult(snapshot) {\n const newSnapshot = cloneDeep(snapshot);\n const attr = newSnapshot.attributes;\n delete attr.data;\n const serialized = {};\n if (attr.questions) {\n serialized.questions = attr.questions;\n delete attr.questions;\n }\n if (attr.pages) {\n serialized.pages = attr.pages;\n delete attr.pages;\n }\n attr.data = JSON.stringify(serialized);\n return newSnapshot;\n }\n};\n\nfunction _convertNewQuestionWidgetData(questionWidget) {\n const qw = questionWidget;\n return {\n data: {\n type: 'question_widget',\n attributes: {\n title: qw.attributes.title,\n weight: qw.attributes.weight,\n widget_code: qw.attributes.widget_code,\n widget_type: qw.attributes.widget_type,\n widget_data: JSON.stringify({\n question: qw.attributes.question,\n feedback: qw.attributes.feedback,\n feedbackCorrect: qw.attributes.feedbackCorrect,\n feedbackFalse: qw.attributes.feedbackFalse,\n options: qw.attributes.options\n })\n }\n }\n };\n}\n\n/**\n * Build the include string for the course container\n * queries\n *\n * @returns {string}\n * @private\n */\nfunction _buildCourseContainerIncludes() {\n const courses = `courses`;\n return (\n `${courses}` +\n `,${courses}.profession` +\n `,${courses}.course_category` +\n `,${courses}.course_category2` +\n `,${courses}.lesson_container` +\n `,${courses}.lesson_container.lessons` +\n `,${courses}.lesson_container.field_authors` +\n `,${courses}.lesson_container.field_authors.field_photo` +\n `,${courses}.lesson_container.field_coursephoto` +\n `,${courses}.accreditation_links`\n );\n}\n\n// eslint-disable-next-line no-shadow\nexport const startLmsApiClient = () => ({\n /**\n * Fetch all initially needed user data\n *\n * including:\n * - courses\n * - products\n *\n * @param product\n * @param _package\n * @returns {Promise}\n */\n // LmsApi --> fetchUserData ==> single subrequest (1 call) to ewapi product / package\n // LmsApi --> fetchUserData >> NOT NEEDED SUBREQUEST !!\n // LmsApi --> fetchUserData >> Should be a normal fetchEwapi request\n // TODO LmsApi --> fetchUserData >> todo: Fix later not now\n async fetchUserData(product, _package) {\n try {\n const response = await window.authedClient.subRequests([\n {\n requestId: 'ewapi',\n uri: `/ewapi/product/${product}/package/${_package}/json`,\n action: 'view'\n }\n ]);\n return response;\n } catch (e) {\n return e;\n }\n },\n\n async fetchSearchResults(searchParam, baseProductId, attemptNr) {\n try {\n const params = {\n search_param: convertUrlDecodedString(searchParam),\n baseproduct: baseProductId\n };\n // Add search attempt if it is not the first attempt\n if (attemptNr > 0) {\n params.attempt = attemptNr;\n }\n const searchParams = new URLSearchParams(params);\n const response = await window.authedClient.post(`ewapi/search/results?${searchParams.toString()}`);\n return response.data;\n } catch (e) {\n return e;\n }\n },\n\n /**\n * Fetch the special access courses for the given user\n * (based on currently logged-in user)\n *\n * @returns {Promise>}\n */\n async fetchSpecialAccessCourses() {\n try {\n const response = window.authedClient.get(`ewapi/special-access/overview`);\n return response;\n } catch (e) {\n return null;\n }\n },\n\n /**\n * Fetch the profile data for the given user uuid\n *\n * @param uuid\n * @returns {Promise>}\n */\n async fetchUser(uuid) {\n return window.authedClient.get('jsonapi/user', {\n params: {\n include: `user_picture,professions,roles`,\n filter: {\n 'filter[userid][condition][value]': `${uuid}`,\n 'filter[userid][condition][path]': 'id',\n 'filter[userid][condition][operator]': '='\n }\n }\n });\n },\n\n /**\n * Fetches all course_container related data: (_buildCourseContainerIncludes)\n * - courses\n * - lesson_container\n *\n * @initiator RootStoreFetch -> fetchData\n * @param {*} id course_container uuid\n * @returns\n */\n async fetchCourseContainerData(id) {\n return window.authedClient.get(`jsonapi/course_container/${id}`, {\n params: {\n include: _buildCourseContainerIncludes()\n }\n });\n },\n\n /**\n * Fetch all completed course results\n *\n * @param uid\n * @returns {Promise>}\n */\n async fetchCourseResults(uid, params = {}) {\n const defaults = {\n filter: {\n userid: {\n condition: {\n value: uid,\n path: 'user.id',\n operator: '='\n }\n },\n completedDate: {\n condition: {\n value: '0',\n path: 'certificate',\n operator: '>'\n }\n }\n }\n };\n\n const merged = deepmerge(defaults, params);\n\n return window.authedClient.get('jsonapi/course_result', {\n params: merged\n });\n },\n\n /**\n * Fetch the course result for the given course id\n * (based on currently logged-in user)\n *\n * @param courseId\n * @returns {Promise>}\n */\n async fetchCourseResultsByCourseId(courseId) {\n return window.authedClient.get(`ewapi/course-result/course/${courseId}/json`);\n },\n\n /**\n * Fetch all active subscriptions for the given\n * currently logged in user\n *\n * @returns {Promise>}\n */\n async fetchSubscriptions() {\n const response = await window.authedClient.get(`ewapi/subscriptions/active`);\n return response.data;\n },\n\n /**\n * Fetch the course favorites for the given user id\n *\n * @param uid\n * @returns {Promise>}\n */\n async fetchCourseFavorites(uid) {\n return window.authedClient.get('jsonapi/course_favorites', {\n params: {\n include: [\n 'field_favorite_courses',\n 'field_favorite_courses.course_category',\n 'field_favorite_courses.course_category2',\n 'field_favorite_courses.lesson_container',\n 'field_favorite_courses.lesson_container.field_authors',\n 'field_favorite_courses.accreditation_links'\n ].join(','),\n filter: {\n condition: {\n path: 'uid.id',\n expression: '=',\n value: uid\n }\n }\n }\n });\n },\n\n /**\n * Fetch the banners for the given branch\n *\n * @param branch\n * @returns {Promise>}\n */\n async fetchBanners(productId) {\n // Initialize the params object with conditions that do not depend on productId\n const params = {\n sort: {\n 'sort[sort-weight][path]': 'order_weight',\n 'sort[sort-weight][direction]': 'DESC'\n },\n include: 'background_image',\n filter: {\n 'filter[expire][condition][value]': new Date().toISOString(),\n 'filter[expire][condition][path]': 'field_expiring_date',\n 'filter[expire][condition][operator]': '>'\n }\n };\n\n const products = productId.split(',');\n if (products.length > 1) {\n params.filter[`filter[product][condition][operator]`] = 'IN';\n params.filter[`filter[product][condition][path]`] = 'product_banner.meta.drupal_internal__target_id';\n for (let i = 0; i < products.length; i++) {\n params.filter[`filter[product][condition][value][${i}]`] = `${products[i]}`;\n }\n } else {\n // Conditionally add the filter[product] condition if productId is not 100\n params.filter['filter[product][condition][value]'] = `${productId}`;\n params.filter['filter[product][condition][path]'] = 'product_banner.meta.drupal_internal__target_id';\n params.filter['filter[product][condition][operator]'] = 'IN';\n }\n\n // Make the API request with the dynamically built params object\n return window.authedClient.get('jsonapi/banner', { params });\n },\n\n /**\n * Fetch the users evaluation\n *\n * @param uuid\n * @returns {Promise>}\n */\n async fetchEvaluationByUser(uuid, cuuid) {\n return window.authedClient.get('jsonapi/evaluation', {\n params: {\n filter: {\n user_id: {\n condition: {\n value: uuid,\n path: 'uid.id',\n operator: '='\n }\n },\n course_result_uuid: {\n condition: {\n value: cuuid,\n path: 'course_result_uuid',\n operator: 'CONTAINS'\n }\n }\n }\n }\n });\n },\n\n /**\n * Request access to download the certificate for the given\n * course result\n *\n * @param courseResultID\n * @returns {Promise<*>}\n */\n async downloadCertificate(courseResultID) {\n const response = await window.authedClient.get(`ewapi/course-result/${courseResultID}/access-certificate`);\n return response.data.code;\n },\n\n /**\n * Persist course favorites to the backend\n *\n * @param favoriteCourses\n * @param user\n * @returns {Promise>}\n * @constructor\n */\n async APIPersistCourseFavorites(favoriteCourses, user) {\n return window.authedClient.patch(`jsonapi/${user.type}/${user.id}`, {\n data: {\n type: user.type,\n id: user.id,\n relationships: {\n course_favorites: {\n data: favoriteCourses\n }\n }\n }\n });\n },\n\n /**\n * Get Courses edit data\n *\n * @param requests\n * @returns {Promise}\n */\n async subRequest(requests) {\n return window.authedClient.subRequests(requests);\n },\n\n /**\n * Get Courses edit data\n *\n * @param requests\n * @returns {Promise}\n */\n async getCourseEdit(requests) {\n return window.authedClient.subRequests(requests);\n },\n\n /**\n * Upload a file and attach\n * it to the given entity\n *\n * @param entity\n * @param file\n * @param field\n * @returns {Promise>}\n */\n async postFile(entity, file, field) {\n const endpoint = entity.type;\n const uuid = entity.id;\n const headersUpload = _headersUpload;\n\n headersUpload['Content-Disposition'] = `attachment; filename=\"${file.file.name}\"`;\n\n return window.authedClient.post(`jsonapi/${endpoint}/${uuid}/${field}`, file.data, {\n headers: {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/octet-stream',\n 'Content-Disposition': `file; filename=\"${file.file.name}\"`,\n 'Cache-Control': 'no-cache'\n }\n });\n },\n\n /**\n * Upload an image and attach\n * it to the given entity\n *\n * @param entity\n * @param file\n * @param field\n * @returns {Promise>}\n */\n async postImage(entity, file, field) {\n const endpoint = entity.type;\n const uuid = entity.id;\n\n try {\n const data = Buffer.from(file.data, 'binary');\n return window.authedClient.post(`jsonapi/${endpoint}/${uuid}/${field}`, data, {\n headers: {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/octet-stream',\n 'Content-Disposition': `file; filename=\"${file.filename}\"`,\n 'Cache-Control': 'no-cache'\n }\n });\n } catch (e) {\n return null;\n }\n },\n\n /**\n * Get the lesson content entity for the given id\n *\n * @param lessonContentId\n * @returns {Promise>}\n */\n async getLessonEdit(lessonContentId) {\n return window.authedClient.get(`/jsonapi/lesson_content/${lessonContentId}`, {\n params: {\n include: 'tagdoc,lesson_content_widgets'\n }\n });\n },\n\n /**\n * Create a new widget\n *\n * @param questionWidget\n * @param lessonContent\n * @returns {Promise}\n */\n async createWidget(questionWidget, lessonContent) {\n const newQuestionWidget = _convertNewQuestionWidgetData(questionWidget);\n return window.authedClient.subRequests([\n {\n action: 'create',\n requestId: 'widget',\n body: `${JSON.stringify(newQuestionWidget)}`,\n uri: `jsonapi/${questionWidget.type}`\n },\n {\n action: 'update',\n requestId: 'content',\n body: `${JSON.stringify({ data: lessonContent })}`,\n uri: `jsonapi/${lessonContent.type}/${lessonContent.id}`,\n waitFor: ['widget']\n }\n ]);\n },\n\n /**\n * Delete the given widget\n *\n * @param questionWidget\n * @param lessonContent\n * @returns {Promise}\n */\n async deleteWidget(questionWidget, lessonContent) {\n return window.authedClient.subRequests([\n {\n action: 'update',\n requestId: 'content',\n body: `${JSON.stringify({ data: lessonContent })}`,\n uri: `jsonapi/${lessonContent.type}/${lessonContent.id}`\n },\n {\n action: 'delete',\n requestId: 'widget',\n uri: `jsonapi/${questionWidget.type}/${questionWidget.id}`,\n waitFor: ['content']\n }\n ]);\n },\n\n /**\n * Delete the given post\n *\n * @param data\n * @returns {Promise>}\n */\n async deletePost(data) {\n const type = data.type !== 'file' ? data.type : 'file/file';\n const url = data.id ? `${type}` : type;\n\n return window.authedClient.delete(`jsonapi/${url}/${data.id}`);\n },\n\n /**\n * Create a new course\n *\n * @param requests\n * @returns {Promise}\n */\n async createCourse(requests) {\n return window.authedClient.subRequests(requests);\n },\n\n /**\n * Create a new lesson\n *\n * @param requests\n * @param file\n * @returns {Promise}\n */\n // eslint-disable-next-line no-unused-vars\n async createLesson(requests, file = false) {\n return window.authedClient.subRequests(requests);\n },\n\n /**\n * start the lesson and fetch the lesson\n * play configuration of this lesson from the backend\n *\n * @param courseId\n * @param lessonId\n * @returns {Promise<*>}\n */\n async fetchLessonPlay(courseId, lessonId) {\n try {\n const response = await window.authedClient.get(`/ewapi/course/${courseId}/lesson/${lessonId}/start`);\n return Object.assign(response.data.data, response.data.meta);\n } catch (e) {\n if (e.response?.data?.errors && e.response?.data?.errors.length > 0) {\n const { title } = e.response.data.errors[0];\n const { errorCode, depCourseId, courseTitle } = JSON.parse(title);\n if (errorCode === 'dependingCourse') {\n return { errorCode, depCourseId, courseTitle };\n }\n return title;\n }\n return e; // Handle if no errors array or empty errors array\n }\n },\n\n /**\n * Restart the given lesson and fetch the updated\n * lesson play config for this lesson\n *\n * @param courseId\n * @param lessonId\n * @returns {Promise}\n */\n async restartLessonPlay(courseId, lessonId) {\n const response = await window.authedClient.get(`/ewapi/course/${courseId}/lesson/${lessonId}/start?restart=true`);\n return Object.assign(response.data.data, response.data.meta);\n },\n\n /**\n * Fetch all authors\n *\n * @returns {Promise>}\n */\n async fetchAuthors() {\n return window.authedClient.get('/jsonapi/author', {\n params: {\n sort: 'title',\n include: 'field_photo,professions'\n }\n });\n },\n\n /**\n * Fetch arbitrary jsonapi entities\n *\n * @param what\n * @param params\n * @param id\n * @returns {Promise>}\n */\n async fetchIt(what, params, id) {\n if (!id) {\n if (typeof params === 'string') {\n return window.authedClient.get(`jsonapi/${what}?${params}`);\n }\n\n return window.authedClient.get(`jsonapi/${what}`, {\n params\n });\n }\n\n if (typeof params === 'string') {\n return window.authedClient.get(`jsonapi/${what}/${id}?${params}`);\n }\n\n return window.authedClient.get(`jsonapi/${what}/${id}`, {\n params\n });\n },\n\n async fetchEwapiData(url = '') {\n return window.authedClient.get(url);\n },\n\n /**\n * postODT\n *\n * @param entity\n * @param file\n * @param field\n * @returns {Promise<*|null>}\n */\n async postODT(entity, file, field) {\n const endpoint = entity.type;\n const uuid = entity.id;\n\n const data = Buffer.from(file.data, 'binary');\n return window.authedClient.post(`jsonapi/${endpoint}/${uuid}/${field}`, data, {\n headers: {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/octet-stream',\n 'Content-Disposition': `file; filename=\"${file.filename}\"`,\n 'Cache-Control': 'no-cache'\n }\n });\n },\n\n /**\n * Patch the given course content\n *\n * @param query\n * @returns {Promise<*>}\n */\n async patchCourse(query) {\n return window.authedClient.subRequests(query);\n },\n\n /**\n * Fetch all subscriptions (Max. 50)\n *\n * @returns {Promise>}\n */\n async fetchAllProfessions() {\n return window.authedClient.get('jsonapi/profession');\n },\n\n /**\n * Make a request to change your password\n *\n * @param data\n * @returns {Promise<*|AxiosResponse<*>>}\n * @constructor\n */\n async ResetPassword(data) {\n return window.authedClient.post(`${drupalBaseUrl}/ewapi/password_reset`, data);\n },\n\n /**\n * Finish the given lesson result\n *\n * @param nid\n * @returns {Promise>}\n */\n async postFinish(nid) {\n const response = await window.authedClient.get(`ewapi/lesson_result/${nid}/finish`);\n return response.data;\n },\n\n /**\n * Finish the given course result\n *\n * @returns {Promise<*>}\n * @param page\n */\n async resetLessonResult(nid, page) {\n const response = await window.authedClient.get(`ewapi/lesson_result/${nid}/reset/${page}`);\n return response.data;\n },\n\n /**\n * Finish the given course result\n *\n * @param nid\n * @returns {Promise<*>}\n */\n async finishCourseResult(nid) {\n return window.authedClient.get(`ewapi/course_result/${nid}/finish`);\n },\n\n /**\n * Patch or post the given entity data\n *\n * @param data\n * @param header\n * @returns {Promise<{favorite_courses: {target_id: *, uuid: *}[], nid, uuid}|*|{nid, uuid, hidden_courses: {target_id: *, uuid: *}[]}|{nid, uuid, liked_courses: {target_id: *, uuid: *}[]}>}\n */\n async patchpost(data) {\n const method = data.id ? 'patch' : 'post';\n const { type } = data;\n\n let response;\n\n if (method === 'post') {\n const url = `jsonapi/${type}`;\n response = await window.authedClient.post(url, { data });\n } else if (method === 'patch') {\n const url = `jsonapi/${type}/${data.id}`;\n response = await window.authedClient.patch(url, { data });\n } else {\n throw new Error('Faulty request type found');\n }\n if (type === 'course_favorites') {\n return {\n nid: response.data.data.attributes.drupal_internal__nid,\n uuid: response.data.data.id,\n favorite_courses: response.data.data.relationships.field_favorite_courses.data.map((course) => ({\n target_id: course.meta.drupal_internal__target_id,\n uuid: course.id\n }))\n };\n }\n if (type === 'course_likes') {\n return {\n nid: response.data.data.attributes.drupal_internal__nid,\n uuid: response.data.data.id,\n liked_courses: response.data.data.relationships.field_liked_courses.data.map((course) => ({\n target_id: course.meta.drupal_internal__target_id,\n uuid: course.id\n }))\n };\n }\n if (type === 'hidden_courses') {\n return {\n nid: response.data.data.attributes.drupal_internal__nid,\n uuid: response.data.data.id,\n hidden_courses: response.data.data.relationships.hidden_courses.data.map((course) => ({\n target_id: course.meta.drupal_internal__target_id,\n uuid: course.id\n }))\n };\n }\n return response.data.data;\n },\n //\n async patchPostData(data) {\n const method = data.id ? 'patch' : 'post';\n const { type } = data;\n\n let response;\n\n if (method === 'post') {\n const url = `jsonapi/${type}`;\n response = await window.authedClient.post(url, { data });\n } else if (method === 'patch') {\n const url = `jsonapi/${type}/${data.id}`;\n response = await window.authedClient.patch(url, { data });\n } else {\n throw new Error('Faulty request type found');\n }\n\n return response.data.data;\n },\n /**\n * Create a poll widget\n *\n * @param pollWidgetData\n * @returns {Promise}\n */\n async createPollWidget(pollWidgetData) {\n return window.authedClient.subRequests([\n {\n action: 'create',\n requestId: 'pollwidget',\n body: `${JSON.stringify(pollWidgetData)}`,\n uri: 'jsonapi/poll_widget'\n }\n ]);\n },\n\n /**\n * Fetch poll widget by id\n *\n * @param id\n * @returns {Promise<*>}\n */\n async fetchPollWidget(id) {\n const response = await window.authedClient.get(`/ewapi/poll/${id}/data`);\n return response.data;\n },\n\n /**\n * Post a poll answer to the backend\n *\n * @param id\n * @param answer\n * @returns {Promise}\n */\n async postPollAnswer(id, answer) {\n const response = await window.authedClient.post(`${drupalBaseUrl}/ewapi/poll/${id}/answer`, qs.stringify({ answer }), {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' }\n });\n return response.data;\n },\n\n /**\n * save a wordcloud widget to the backend\n *\n * @param wordCloudWidgetData\n * @returns {Promise}\n */\n async createWordCloudWidget(wordCloudWidgetData) {\n return window.authedClient.subRequests([\n {\n action: 'create',\n requestId: 'wordCloudWidget',\n body: JSON.stringify(wordCloudWidgetData),\n uri: 'jsonapi/wordcloud_widget'\n }\n ]);\n },\n\n /**\n * Save wordcloud question widget to the backend\n *\n * @param questionWidgetData\n * @param lessonContentData\n * @returns {Promise}\n */\n async createWordCloudQuestionWidget({ questionWidgetData, lessonContentData }) {\n log.info('questionWidgetData =', JSON.stringify(questionWidgetData, null, 2));\n return window.authedClient.subRequests([\n {\n action: 'create',\n requestId: 'questionwidget',\n body: `${JSON.stringify(questionWidgetData)}`,\n uri: `jsonapi/question_widget`\n },\n {\n action: 'update',\n requestId: 'content',\n body: `${JSON.stringify(lessonContentData)}`,\n uri: `jsonapi/${lessonContentData.data.type}/${lessonContentData.data.id}`,\n waitFor: ['questionwidget']\n }\n ]);\n },\n\n /**\n * Fetch the given wordcloud by its id\n *\n * @param id\n * @returns {Promise>}\n */\n async fetchWordCloud(id) {\n const response = await window.authedClient.get(`/ewapi/wordcloud/${id}/data`);\n return response.data;\n },\n\n /**\n * Post the wordcloud answer for the given nid\n *\n * @param nid\n * @param answer\n * @returns {Promise}\n */\n async postWordCloudAnswer(nid, answer) {\n const response = await window.authedClient.post(`${drupalBaseUrl}/ewapi/wordcloud/${nid}/answer`, qs.stringify({ answer }), {\n headers: { 'content-type': 'application/x-www-form-urlencoded' }\n });\n return response.data;\n },\n\n /**\n * Post a question for th ask a question functionality\n *\n * @param question\n * @returns {Promise<{data: *, errors: *}>}\n */\n async postAskQuestion(question) {\n const {\n askquestion: { errors, data }\n } = await window.authedClient.subRequests([\n {\n action: 'create',\n requestId: 'askquestion',\n body: `${JSON.stringify(question)}`,\n uri: `jsonapi/user_question`\n }\n ]);\n return { errors, data };\n },\n\n // LMS Dashboard\n\n /**\n * Fetch lms dashboard profession table data\n * @param {*}\n * @returns\n */\n async fetchLMSProfessions(queryParams) {\n const params = new URLSearchParams(\n omitBy(\n {\n ...queryParams\n },\n isNil\n )\n );\n const response = await window.authedClient.get(`ewapi/lms/startpage/profession?${params}`);\n return response.data;\n },\n\n /**\n * Fetch lms dashboard products table data\n * @param {*}\n * @returns\n */\n async fetchLMSProducts(queryParams) {\n const params = new URLSearchParams(\n omitBy(\n {\n ...queryParams\n },\n isNil\n )\n );\n const response = await window.authedClient.get(`ewapi/lms/startpage/product?${params}`);\n return response.data;\n },\n\n /**\n * Fetch lms dashboard overview line chart data\n * @param {*}\n * @returns\n */\n async fetchLMSChart(queryParams) {\n const params = new URLSearchParams(\n omitBy(\n {\n ...queryParams\n },\n isNil\n )\n );\n const response = await window.authedClient.get(`ewapi/lms/startpage/graph?${params}`);\n return response.data;\n },\n\n /**\n * Fetch a student by its nid\n *\n * @returns {Promise<{data: *, errors: *}>}\n * @param id\n */\n async fetchStudent(id) {\n const response = await window.authedClient.get(`student/${id}`);\n return response.data;\n },\n\n /**\n * Fetch a student by its nid\n *\n * @returns {Promise<{data: *, errors: *}>}\n * @param id\n */\n async fetchLMSStudent(id, startdate, enddate) {\n const response = await window.authedClient.get(`ewapi/lms/student/${id}?startdate=${startdate}&enddate=${enddate}`);\n return response.data;\n },\n\n /**\n * Fetch a course by its nid\n *\n * @returns {Promise<{data: *, errors: *}>}\n * @param id\n */\n async fetchLMSCourse(id) {\n const response = await window.authedClient.get(`ewapi/lms/course/${id}`);\n return response.data;\n },\n\n /**\n * Fetch a student by its nid\n *\n * @returns {Promise<{data: *, errors: *}>}\n * @param id\n */\n async fetchLMSAccess() {\n const response = await window.authedClient.get(`ewapi/lms/access`);\n return response.data;\n },\n\n /**\n * fetch all the course content from the ewapi endpoint\n *\n * @param product\n * @param _package\n * @returns {Promise<*>}\n */\n async fetchEwapiCourses(product, _package) {\n const response = await window.authedClient.get(`ewapi/product/${product}/package/${_package}/json`);\n return response.data;\n },\n //\n async fetchAdminMenu(label) {\n const response = await window.authedClient.get(`ewapi/editor-package-list/0/${label}/json`);\n return response.data;\n },\n\n // Curriculum (e.g. Portfolio)\n ...createCurriculumApi()\n});\n","import { Tooltip, Box } from '@mui/material';\nimport PodcastsIcon from 'components/icons/PodcastsIcon';\nimport PropTypes from 'prop-types';\n\nconst PodcastIcon = (props) => {\n const { sx, style, ...otherProps } = props;\n\n let width = sx?.width ?? '1em';\n let height = sx?.height ?? '1em';\n\n if (sx?.width && !sx?.height) {\n height = 'auto';\n }\n\n if (sx?.height && !sx?.width) {\n width = 'auto';\n }\n\n return (\n \n \n \n \n \n )\n};\n\nPodcastIcon.propTypes = {\n sx: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool]),\n ),\n PropTypes.func,\n PropTypes.object,\n ]),\n style: PropTypes.object\n};\n\nPodcastIcon.defaultProps = {\n sx: [],\n style: {}\n};\n\nexport default PodcastIcon;\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\n\n/* MUI - Icons */\nimport FavoriteIcon from '@mui/icons-material/Favorite';\n// import ThumbUpIcon from '@mui/icons-material/ThumbUp';\n\n/* MUI */\nimport { IconButton, Tooltip } from '@mui/material';\n\nimport CalculateProgress from 'pages/course/components/Common/CalculateProgress';\nimport { isCourseFailed } from 'helpers/Helpers';\nimport { useState } from 'react';\n\n// TODO: !!! NEEDS REFACTORING !!!!\nconst CourseReactions = ({ nid, id, lessons, courseIntroduction }) => {\n const store = useStore();\n const { t } = useTranslation();\n // eslint-disable-next-line camelcase\n const { courseResults, lesson_results } = store;\n\n const isFinished = courseResults.isCourseFinished(nid);\n const isCourseStarted = !isFinished && store.courseResults.isCourseStarted(nid);\n const isCourseFavorite = store.favorites && store.favorites.isCourseFavorite(nid);\n const [isSave, setIsSave] = useState(false);\n const isFailed = isCourseFailed(lesson_results, courseResults, nid);\n let storeFavourite = null;\n\n const toggleFavorites = async (courseId, courseNid) => {\n const removeFavorite = store.favoriteIds.filter((course) => course !== courseId);\n\n const removedFavorite = removeFavorite.map((course) => ({\n type: 'course',\n id: course\n }));\n\n const remodelData = store.favoriteIds.map((course) => ({\n type: 'course',\n id: course\n }));\n\n setIsSave(true);\n\n if (!store.favorites.isCourseFavorite(courseNid)) {\n storeFavourite = await store.patchData(store.favorites, {\n id: store.favorites.uuid,\n type: 'course_favorites',\n relationships: {\n field_favorite_courses: {\n data: [\n ...remodelData,\n {\n type: 'course',\n id: courseId\n }\n ]\n }\n }\n });\n\n if (storeFavourite) {\n setIsSave(false);\n }\n } else {\n storeFavourite = await store.patchData(store.favorites, {\n id: store.favorites.uuid,\n type: 'course_favorites',\n relationships: {\n field_favorite_courses: {\n data: removedFavorite\n }\n }\n });\n if (storeFavourite) {\n setIsSave(false);\n }\n }\n return storeFavourite;\n };\n\n const handleFavorite = (courseId, courseNid) => {\n setIsSave(true);\n if (!store.favorites) {\n store.postData({\n type: 'course_favorites',\n attributes: {\n title: 'course_favorites'\n },\n relationships: {\n field_favorite_courses: {\n data: [\n {\n id: courseId,\n type: 'course'\n }\n ]\n }\n }\n });\n } else {\n toggleFavorites(courseId, courseNid);\n }\n };\n\n // IF SPECIAL ACCESS VIEW\n if (store.courses.isSpecialAccessView) {\n return (\n <>\n {(isFinished || isCourseStarted) && !courseIntroduction && (\n \n )}\n \n );\n }\n return (\n <>\n \n handleFavorite(id, nid)}\n disabled={isSave}\n style={isSave ? { transform: 'scale(1)', animation: 'pulse 1s infinite' } : {}}\n >\n \n \n \n {(isFinished || isCourseStarted) && !courseIntroduction && !isFailed && (\n \n )}\n \n );\n};\n\nCourseReactions.propTypes = {\n nid: PropTypes.number,\n id: PropTypes.string,\n lessons: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n courseIntroduction: PropTypes.bool\n};\n\nexport default observer(CourseReactions);\n","import { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { Box, IconButton, Tooltip } from '@mui/material';\n/* MUI - Icons */\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\nimport { useTranslation } from 'react-i18next';\n\n// renders the hide course button\nconst HideCourse = ({ id }) => {\n const store = useStore();\n const { t } = useTranslation();\n if (store.routerState.routeName.includes('specialAccess')) return null;\n\n const handleHide = (courseId) => {\n const remodelData = store.hiddenIds.map((course) => ({\n type: 'course',\n id: course\n }));\n\n store.patchData(store.hidden, {\n id: store.hidden.uuid,\n type: 'hidden_courses',\n relationships: {\n hidden_courses: {\n data: [\n ...remodelData,\n {\n type: 'course',\n id: courseId\n }\n ]\n }\n }\n });\n };\n\n const hideCourses = (courseId) =>\n !store.hidden\n ? store.postData({\n type: 'hidden_courses',\n attributes: {\n title: 'hidden_courses'\n },\n relationships: {\n hidden_courses: {\n data: [\n {\n id: courseId,\n type: 'course'\n }\n ]\n }\n }\n })\n : handleHide(courseId);\n\n return (\n \n \n {\n event.stopPropagation();\n hideCourses(id);\n }}\n >\n \n \n \n \n );\n};\n\nHideCourse.propTypes = {\n id: PropTypes.string\n};\nexport default observer(HideCourse);\n","/* Course categories */\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Chip, Box, Tooltip } from '@mui/material';\n\n// renders a list of categories for a course card\nconst CourseCategories = (props) => {\n const store = useContext(Store);\n\n const { categories, noStatus, trialCoursesView = false } = props;\n\n // IF NO CATEGORIES, RETURN NULL\n if ((!categories || !store.courses.isFiltering) && !trialCoursesView) return null;\n\n // Categories <= 2: show all\n const showCategories = categories.length > 2 ? categories.slice(0, 2) : categories;\n\n // Categories > 2: map and join titles to show in tooltip\n let restCategories = categories.length > 2 ? categories.slice(2) : [];\n restCategories = restCategories.length > 0 ? restCategories.map((item) => item).join(', ') : '';\n\n return (\n \n {showCategories.map((category, index) => (\n \n \n \n ))}\n {categories.length - 2 > 0 && (\n \n \n \n )}\n \n );\n};\n\nCourseCategories.propTypes = {\n categories: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n noStatus: PropTypes.any,\n trialCoursesView: PropTypes.bool\n};\n\nexport default observer(CourseCategories);\n","import { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport { LtiLaunchUrl } from 'helpers/Helpers';\n\n/* MUI */\nimport { Button, Box } from '@mui/material';\n\nconst CourseLtiButton = (props) => {\n const { courseId, hideBg } = props;\n const { t } = useTranslation();\n const store = useStore();\n const launchUrl = LtiLaunchUrl();\n\n const handleCopyCourseId = useCallback(() => {\n const courseParam = `${launchUrl}?course_id=${courseId}`;\n navigator.clipboard\n .writeText(courseParam)\n .then(() => store.showToast({ message: t('lti.copy.msgSuccess', 'Link copied'), variant: 'success' }))\n .catch((err) => store.showToast({ message: err, variant: 'error' }));\n }, [courseId, launchUrl, store, t]);\n\n return (\n \n \n \n );\n};\n\nCourseLtiButton.propTypes = {\n courseId: PropTypes.bool, // Ensures courseId is a string\n hideBg: PropTypes.number // Ensures hideBg is a number\n};\n\nexport default CourseLtiButton;\n","/* Core */\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Chip, Box, Tooltip } from '@mui/material';\n\n// const drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n// renders a list of authors for a course card\nconst CourseAuthors = (props) => {\n const { authors } = props;\n if (!authors) return null;\n // show only 2 authors in Card\n const showAuthors = authors.length > 2 ? authors.slice(0, 2) : authors;\n\n // Authors > 2: map and join titles to show in tooltip\n let restAuthors = authors.length > 2 ? authors.slice(2) : [];\n restAuthors = restAuthors.length > 0 ? restAuthors.map((item) => item.title).join(', ') : '';\n\n return (\n \n {showAuthors.map((author, index) => (\n \n \n \n ))}\n {authors.length - 2 > 0 && (\n \n \n \n )}\n \n );\n};\n\n/* Our logo props */\nCourseAuthors.propTypes = {\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n};\n\nexport default CourseAuthors;\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText } from '@mui/material';\n\nconst CoursePointsAlert = (props) => {\n const { open, handleClose, handleConfirm, msg, showConfirm, btnBackCaption } = props;\n const { t } = useTranslation();\n const getMessage = {\n 'msg-1': 'introduction.popup.title',\n 'msg-2': 'introduction.popup.title2',\n 'msg-3': 'introduction.popup.notEnoughPoints',\n 'msg-4': 'introduction.popup.courseExpired',\n 'msg-5': 'introduction.popup.courseCompletLessThan30Minutes'\n };\n const showMessage = getMessage[msg];\n\n return (\n \n \n {t(showMessage, 'Do you want to continue?')}\n \n \n \n {!showConfirm && (\n \n )}\n \n \n );\n};\n\nCoursePointsAlert.propTypes = {\n open: PropTypes.any,\n handleClose: PropTypes.func,\n handleConfirm: PropTypes.func,\n msg: PropTypes.string,\n showConfirm: PropTypes.bool,\n btnBackCaption: PropTypes.string\n};\n\nexport default observer(CoursePointsAlert);\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { LessonProgress, LessonArrayProgress } from 'helpers/Helpers';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport CheckIcon from '@mui/icons-material/Check';\nimport { LinearProgressWithLabel } from 'components';\n\nconst CalculateProgress = ({ id, lessons, isFinished, isCourseStarted, isInHeader, showProgress }) => {\n const store = useContext(Store);\n\n if (!store.courseResults.courseResults.length) {\n return <>;\n }\n // Find lesson container for course\n const lessonResult = store.lesson_results.findLessonByCourseNid(id);\n\n // Calculate course progress for multiple lesson\n const courseProgress = (lessonProgressArray) => {\n let total = 0;\n lessonProgressArray.map((lesson) => {\n const lessonProgress = lesson / lessons.length;\n total += lessonProgress;\n return total;\n });\n return Math.round(total);\n };\n const showProgressHeader = (progressHeader) => {\n if (isInHeader) {\n if (showProgress) {\n return progressHeader === 100 && !store.courseResults.isCourseFinished(id) ? 99 : progressHeader || 0;\n }\n return (\n \n );\n }\n return (\n \n {isFinished && }\n {isCourseStarted && (\n \n \n \n {lessons && (progressHeader === 100 ? '99%' : `${progressHeader}%`)}\n \n \n \n \n )}\n \n );\n };\n if (lessons && lessons.length === 1) {\n LessonProgress(lessonResult[0]);\n return showProgressHeader(LessonProgress(lessonResult[0]));\n }\n const progressArray = lessons && LessonArrayProgress(lessonResult, lessons);\n const progress = progressArray && courseProgress(progressArray);\n\n return showProgressHeader(progress);\n};\n\nCalculateProgress.propTypes = {\n id: PropTypes.number,\n lessons: PropTypes.any,\n isFinished: PropTypes.bool,\n isCourseStarted: PropTypes.bool,\n isInHeader: PropTypes.bool,\n showProgress: PropTypes.bool\n};\nexport default observer(CalculateProgress);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\n\n/* Custom components */\nimport { List, ListItemButton, ListItemText, Collapse } from '@mui/material';\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\n\n// renders a list of items\nconst ListComponent = (props) => {\n const { items, expand, selected } = props;\n const [open, setOpen] = useState(expand);\n\n const handleChange = () => () => {\n setOpen(!open);\n };\n\n return (\n \n {items.map((item, index) => {\n if (item?.showMenuItem === false) return null;\n return (\n
    \n \n \n {item.nestedTabs && (open ? : )}\n \n \n \n {item.nestedTabs &&\n item.nestedTabs.map((tabs) => (\n \n \n \n ))}\n \n \n
    \n );\n })}\n
    \n );\n};\n\nListComponent.propTypes = {\n items: PropTypes.array,\n expand: PropTypes.bool,\n selected: PropTypes.string\n};\n\nexport default ListComponent;\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, Button } from '@mui/material';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\n\nconst TopLinks = (props) => {\n const { t } = useTranslation();\n const store = useStore();\n const { current } = props;\n return (\n <>\n \n {\n const { product, productName, packageId } = store.params;\n store.routerStore.goTo('courseOverview', { params: { product, productName, packageId } });\n }}\n >\n {t('courseoverview.toplinks.link3', 'Course overview')}\n \n {\n const { product, productName, packageId } = store.params;\n store.routerStore.goTo('colophonOverview', { params: { product, productName, packageId } });\n }}\n >\n {t('courseoverview.toplinks.link1', 'Colophon')}\n \n {\n const { product, productName, packageId } = store.params;\n store.routerStore.goTo('teachersOverview', { params: { product, productName, packageId } });\n }}\n >\n {t('courseoverview.toplinks.link4', 'Our teachers')}\n \n {/* {\n const { product, productName, packageId } = store.params;\n store.routerStore.goTo('faq', { params: { product, productName, packageId } });\n }}\n >\n {t('courseoverview.toplinks.link2', 'Most frequent questions')}\n */}\n \n \n );\n};\n\nTopLinks.propTypes = {\n current: PropTypes.string\n};\n\nexport default observer(TopLinks);\n","import React from 'react';\nimport { makeStyles } from '@mui/styles';\n\nimport { MyCheckbox, MyRadio, MyTextField, MySelect } from 'components/form/RHF';\nimport { green, red } from '@mui/material/colors';\n\nconst Editor = React.lazy(() => import('components/form/RHF/Editor/Editor'));\n\nconst useStyles = makeStyles((theme) => ({\n root: { display: 'flex', flexDirection: 'column' },\n isGreen: { color: green[600], '&checked': { color: green[500] } },\n buttonTemp: {\n backgroundColor: red[500],\n '&:hover': { backgroundColor: red[700] },\n '&:disabled': { backgroundColor: red[500], color: 'white' }\n },\n\n alignRight: { textAlign: 'right' },\n alignLeft: { textAlign: 'left' },\n alignCenter: { textAlign: 'center' },\n\n tabBar: { background: 'transparent', boxShadow: 'none', zIndex: '1' },\n tabItem: { background: '#f7f7f7', padding: '15px', fontSize: '13px', lineHeight: '15px', minHeight: '400px' },\n tabSelected: { background: '#f7f7f7' },\n tabsIndicator: { backgroundColor: '#760f4e' },\n\n section1200: { boxShadow: 'none', padding: '15px', maxWidth: '1200px', width: '100%', margin: '0 auto' },\n paperFlat: { boxShadow: 'none', padding: '15px' },\n paperFlatPadding: { boxShadow: 'none', padding: '15px' },\n paperFMb: { boxShadow: 'none', padding: '15px', marginBottom: '15px' },\n paperNoPadding: { boxShadow: 'none' },\n paperFlatSmoke: { boxShadow: 'none', padding: '15px', background: 'whitesmoke' },\n paperBoxSmoke: { padding: '15px', background: 'whitesmoke' },\n paperCategories: { padding: '15px' },\n paperLegenda: { padding: '15px' },\n\n formTitle: { color: '#67123f', fontWeight: '500', marginTop: '10px', marginBottom: '20px' },\n\n pageTitle: { color: '#67123f', fontWeight: '500', marginTop: '10px' },\n\n subTitle: { color: '#67123f', fontSize: '80%', fontStyle: 'italic' },\n\n gridTitle: { width: '100%' },\n\n bordered: { border: '1px solid silver', borderRadius: '5px', margin: '0px', width: '100%' },\n\n form: { marginTop: '10px' },\n formControl: { marginLeft: '8px', width: '100%', padding: '15px' },\n formDivider: { margin: '5px 0px' },\n helperText: { marginTop: '0px' },\n textField: { width: '100%', fontSize: '80%!important' },\n multipleSelect: { '&:focus': { background: 'white!important' } },\n\n div20: { display: 'inline-block', width: '20%', float: 'right' },\n div80: { display: 'inline-block', width: '75%', marginRight: '4%' },\n\n fabAdd: {\n background: theme?.palette?.primary?.main,\n color: 'white',\n height: '40px',\n width: '40px',\n minHeight: '30px',\n marginLeft: '15px',\n '&:hover': { background: theme?.palette?.primary?.light }\n },\n fabAddSm: {\n background: theme?.palette?.primary?.main,\n color: 'white',\n height: '40px',\n width: '40px',\n minHeight: '30px',\n marginRight: '10px',\n '&:hover': { background: theme?.palette?.primary?.light }\n },\n fabAddLesson: { background: '#460026', height: '30px', width: '30px', minHeight: '30px', marginLeft: '15px' },\n actionBar: {\n borderTop: '1px solid silver',\n position: 'fixed',\n bottom: '0px',\n left: '0',\n right: '0',\n background: '#fbfbfbf7',\n padding: '0px 20px',\n zIndex: '10',\n margin: '0'\n },\n\n actionBarModal: {\n borderTop: '1px solid silver',\n position: 'absolute',\n bottom: '0px',\n left: '0',\n right: '0',\n background: '#fbfbfbf7',\n padding: '0px 20px',\n zIndex: '10',\n margin: '0'\n },\n\n dialogActionBar50: {\n borderTop: '1px solid silver',\n position: 'fixed',\n bottom: '0px',\n left: 'inherit',\n right: '0',\n width: '50%',\n background: '#fbfbfbf7',\n padding: '0px 20px',\n zIndex: '10',\n margin: '0'\n }\n}));\n\nexport default function ComponentProps() {\n const classes = useStyles();\n return {\n number: {\n component: MyTextField,\n type: 'number',\n className: classes.textField,\n variant: 'outlined',\n fullWidth: true,\n margin: 'dense'\n },\n text: {\n // component: MyTextField,\n className: classes.textField,\n variant: 'outlined',\n fullWidth: true,\n margin: 'dense',\n InputLabelProps: { shrink: true }\n },\n // input: {\n // component: MyTextField,\n // className: classes.textField,\n // variant: 'outlined',\n // fullWidth: true,\n // margin: 'dense',\n // InputLabelProps: { shrink: true }\n // },\n textarea: { className: classes.textField, variant: 'outlined', fullWidth: true, margin: 'dense' },\n checkbox: { component: MyCheckbox, className: classes.checkBox },\n radio: { component: MyRadio, className: classes.checkBox },\n editor: { component: Editor, height: '200' },\n select: { component: MySelect, className: classes.select, variant: 'outlined', placeholder: 'select status' },\n\n formTitle: { variant: 'h4', className: classes.formTitle, color: 'inherit', gutterBottom: true },\n pageTitle: { variant: 'h4', className: classes.pageTitle, color: 'inherit', gutterBottom: true },\n subTitle: { component: 'span', variant: 'h5', className: classes.subTitle, color: 'inherit', gutterBottom: true },\n\n section1200: { className: classes.section1200 },\n div: { component: 'div' },\n div20: { component: 'div', className: classes.div20 },\n div80: { component: 'div', className: classes.div80 },\n\n root: { className: classes.root },\n fabAddSm: { className: classes.fabAddSm },\n fabAdd: { className: classes.fabAdd },\n frm: { className: classes.form },\n frmDivider: { className: classes.formDivider },\n frmCtrl: { className: classes.formControl },\n hlpTxt: { className: classes.helperText },\n ppr: { className: classes.paper },\n pprBoxed: { className: classes.paperLegenda },\n pprFlat: { className: classes.paperFlatPadding },\n pprFMb: { className: classes.paperFMb },\n pprFlatSmoke: { className: classes.paperFlatSmoke },\n pprBoxSmoke: { className: classes.paperBoxSmoke },\n txtRight: { className: classes.alignRight },\n txtLeft: { className: classes.alignLeft },\n txtCenter: { className: classes.alignCenter },\n actionBar: { className: classes.actionBar },\n dialogActionBar50: { className: classes.dialogActionBar50 }\n };\n}\n","import { useState, useEffect } from 'react';\n\n/*\nIn summary, the useDebounce custom React Hook is used to debounce a value, which is often useful for scenarios \nlike handling user input in search bars or reducing the frequency of requests in response to user interactions. \nIt ensures that the value is only updated after a specified delay once the input has stopped changing.\n*/\nexport default function useDebounce(value, delay) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n}\n","import { useContext } from 'react';\nimport { Store } from '../state/ContextStore';\n\nexport default function useStore() {\n return useContext(Store);\n}\n","import PropTypes from 'prop-types';\n\nimport NoPlay from '@mui/icons-material/NotInterested';\nimport ReactPlayer from 'react-player/lazy';\nimport { forwardRef } from 'react';\nimport { observer } from 'mobx-react';\nimport { embedVideo } from 'helpers/Helpers';\n\n/*\nIn summary, the Video component is a flexible video player that checks the compatibility of a given URL,\ndisplays the video if it's supported, and handles errors if they occur during playback.\nIt also provides a placeholder for unsupported URLs.\n*/\nconst Video = forwardRef((props, ref) => {\n const { url } = props;\n\n const uniqueTitle = 'Video';\n const videoUrl = embedVideo(url);\n const isUrlCorrect = ReactPlayer.canPlay(videoUrl);\n\n if (isUrlCorrect) {\n return (\n <>\n \n \n );\n }\n\n return (\n \n \n \n );\n});\n\nVideo.propTypes = {\n url: PropTypes.string\n};\n\nexport default observer(Video);\n","import { Box, Modal, Button } from '@mui/material';\n\nimport { useStore } from 'hooks';\n\nconst MaintenanceModal = () => {\n const store = useStore();\n\n const styles = {\n modal: {\n '--primary-color': '#2b3674',\n '--secondary-color': '#2b3674cc',\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '& *': {\n color: 'rgba(0, 0, 0, 0.87)'\n }\n },\n main: {\n backgroundColor: '#fff',\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n icon: {\n width: '14rem',\n height: '14rem'\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '1rem',\n textAlign: 'center',\n '& h1': {\n fontWeight: 600,\n fontSize: '2.4rem',\n lineHeight: '2.5rem',\n color: 'var(--primary-color)'\n },\n '& p': {\n marginTop: 0\n }\n }\n };\n\n const retry = (e) => {\n e.preventDefault();\n window.location.reload();\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n

    De site is in onderhoud

    \n

    \n Sorry voor het ongemak.\n
    \n We voeren op dit moment onderhoud uit op onze leeromgeving, maar we zijn snel weer online.\n

    \n

    Probeer het over 5 minuten a.u.b. nog een keer.

    \n
    \n \n

    This site is under maintenance

    \n

    \n Sorry for the inconvenience.\n
    \n We're performing some maintenance at the moment, but we'll be back online shortly.\n

    \n

    Please try again in 5 minutes.

    \n
    \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default MaintenanceModal;\n","import { useCustomTheme } from '../../hooks';\n\n/* Our logo */\nexport const SecondaryLogo = () => {\n const { labelLogo, customLogo } = useCustomTheme();\n\n if (!customLogo) {\n return null;\n }\n\n return \"logo\";\n};\n\n/* Our logo props */\n","import { useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { List, ListItemButton, ListItemText } from '@mui/material';\nimport { rawHTML } from '../../../helpers/Helpers';\nimport 'theme/course/courseoverview/PackageTabs.scss';\n\nconst ListItems = (open) => {\n const store = useContext(Store);\n\n const menuLinks = [];\n const { routerState } = store.routerStore;\n\n const handleMenuSelect = (link) => () => {\n store.setPrevTab(store.selectedPackageId);\n store.setSelectedPackage(parseInt(link.params.packageId));\n store.setStoreValue('courseHeaderTabs', 'All');\n store.courses.resetFilter();\n store.routerStore.goTo(link.routeName, { params: link.params, queryParams: {} });\n };\n\n const selectedPackageLabel = store.packages.filter((pack) => pack.nid === store.selectedPackageId);\n\n menuLinks.push(\n ...store.packages.map((packageref) => ({\n routeName: 'courseOverview',\n title: packageref.tab_label,\n label: (\n // store.product.packageClicked[index] ? (\n //
    \n // \n // {open && packageref.tab_label}\n //
    \n // ) :\n
    \n {packageref.tab_label.substring(0, 2)}\n
    {packageref.tab_label}
    \n
    \n ),\n params: {\n productName: store.baseProduct.unique_name,\n product: store.isEwiseUser ? store.baseProduct.nid.toString() : store.product.nid.toString(),\n packageId: packageref.nid.toString()\n }\n }))\n );\n return menuLinks.map((link, index) => {\n const { label } = link;\n\n if (\n link.params &&\n link.routeName === routerState.routeName &&\n link.params.product === routerState.params.product &&\n link.params.packageId === routerState.params.packageId\n ) {\n return (\n {\n event.preventDefault();\n }}\n sx={{\n '&.Mui-selected': { backgroundColor: 'primary.main' }\n }}\n >\n \n {\n <>\n {link.label.props.children[0].props.children.substring(0, 2)}\n {rawHTML(`${link.label.props.children[1].props.children[1]}`)}\n
    {/* {store.product.coursesByPackage[index]} */}
    \n \n }\n
    \n }\n />\n \n );\n }\n return (\n \n \n \n );\n });\n};\nconst PackageList = (props) => {\n const { open } = props;\n const store = useContext(Store);\n\n useEffect(() => {\n if (store.prevTab === 0) {\n store.setPrevTab(store.selectedPackageId);\n }\n }, [store]);\n return {ListItems(open)};\n};\n\nPackageList.propTypes = {\n open: PropTypes.bool\n};\n\nexport default observer(PackageList);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport CalendarMonthRoundedIcon from '@mui/icons-material/CalendarMonthRounded';\nimport GroupIcon from '@mui/icons-material/Group';\nimport HowToRegRoundedIcon from '@mui/icons-material/HowToRegRounded';\nimport TextSnippetIcon from '@mui/icons-material/TextSnippet';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport { Box, Stack, Typography } from '@mui/material';\n\n/* Custom components */\nimport ListComponent from 'components/common/List';\nimport { Store } from 'state/ContextStore';\n\nconst MyCompany = () => {\n const { t } = useTranslation();\n const store = useContext(Store);\n\n const showVTBTeacher = !!store.login.isVtbTeacher;\n const showVTB = (store.isEwiseUser && store.showMenuPortfolio) || store.product?.nid === 8065;\n const showMenuItems = store.showMenuMyCompany || showVTB || showVTBTeacher || store.showMenuPortfolio;\n\n if (!showMenuItems) {\n return null;\n }\n\n return (\n \n {store.showMenuMyCompany && (\n \n \n {t('course.leftSidebar.company')}\n \n \n \n {t('course.leftSidebar.assistent')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('assistantManagement');\n store.setMinDrawer(false);\n }\n },\n\n {\n id: 'lms',\n showMenuItem: store.showMenuItemLms,\n label: (\n \n \n {t('course.leftSidebar.LMS')}\n \n ),\n nestedTable: false,\n callback: () => {\n if (store.showMenuAssistant) {\n store.routerStore.goTo('LmsStudents');\n } else {\n store.routerStore.goTo('LmsDashboardOverview');\n }\n store.setMinDrawer(false);\n }\n }\n ]}\n />\n \n )}\n {showVTB && (\n \n \n {t('vtb.maintitle')}\n \n \n \n {t('course.leftSidebar.vtb')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('vtb');\n store.setMinDrawer(false);\n }\n }\n ]}\n />\n \n )}\n {showVTBTeacher && (\n \n {!showVTB && (\n \n {t('vtb.maintitle')}\n \n )}\n \n \n {t('course.leftSidebar.attendancesheet')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('attendanceSheet');\n store.setMinDrawer(false);\n }\n }\n ]}\n />\n \n )}\n {store.showMenuPortfolio && (\n \n \n Portfolio\n \n \n \n {t('course.leftSidebar.curriculum')}\n \n ),\n nestedTable: false,\n callback: () => {\n store.routerStore.goTo('curriculumDashboard', {\n params: {\n type: 'active'\n }\n });\n store.setMinDrawer(false);\n }\n }\n ]}\n />\n \n )}\n \n );\n};\n\nexport default observer(MyCompany);\n","import { useContext } from 'react';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\n\n/* MUI */\nimport { List, ListItemButton, ListItemText } from '@mui/material';\n\nconst SpecialAccess = () => {\n const store = useContext(Store);\n if (!store?.login?.hasSpecialAccess) return <>;\n\n const tabTitle = 'Special Access';\n\n const handleMenuSelect = (link) => () => {\n store.routerStore.goTo(link, { params: {}, queryParams: {} });\n };\n\n return (\n \n \n \n {tabTitle.substring(0, 2)}\n
    {tabTitle}
    \n
    \n }\n />\n \n \n );\n};\n\nexport default observer(SpecialAccess);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n/* Mui */\nimport { Box, Button, Drawer, IconButton, Typography, keyframes, Stack } from '@mui/material';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport BadgeIcon from '@mui/icons-material/Badge';\nimport NewReleasesIcon from '@mui/icons-material/NewReleases';\n\n/* Custom components */\nimport Logo from 'components/common/Logo';\nimport { SecondaryLogo } from 'components/common/SecondaryLogo';\nimport { SubscribeLink } from 'helpers/Helpers';\nimport { useBreakpoint, useStore } from 'hooks';\nimport PackageList from './PackageList';\nimport MyCompany from './MyCompany';\nimport SpecialAccess from './SpecialAccess';\n\nconst blink = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\nconst LeftSideDrawer = () => {\n const store = useStore();\n const { t } = useTranslation();\n const [isManualMinimized, setIsManualMinimized] = useState(false);\n\n const breakpoint = useBreakpoint();\n const isNarrow = ['xs', 'sm', 'md'].includes(breakpoint);\n\n // const boxClassName = store.minDrawer ? 'right_sidebar' : 'right_sidebar_minimized';\n const boxClassName = store.minDrawer ? 'right_sidebar_minimized' : 'right_sidebar';\n\n const toggleMinDrawer = () => {\n setIsManualMinimized(!store.minDrawer);\n store.setMinDrawer(!store.minDrawer);\n };\n\n useEffect(() => {\n // If the screen is narrow, the drawer should be minimized\n // If the drawer is wide and not manually minimized, it should be maximized\n // Otherwise it should stay minimized\n if (isNarrow) {\n store.setMinDrawer(true);\n } else if (!isManualMinimized) {\n store.setMinDrawer(false);\n }\n }, [store, isManualMinimized, isNarrow]);\n\n const drawer = (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {store.login.isImpersonation === true && (\n <>\n \n \n \n \n \n \n
    \n {!store.minDrawer && (\n \n {t('impersonate.message')}
    \n {store.login.userName}\n
    \n )}\n
    \n
    \n \n )}\n \n \n \n \n {store.login.isImpersonation !== true && store.showBtnSubscribe && (\n \n \n \n \n
    \n {!store.minDrawer && (\n \n {t('subscribe.title', 'Get access to all our courses')}\n \n )}\n \n
    \n )}\n \n
    \n
    \n \n \n );\n\n return (\n \n {\n store.toggleDrawer();\n }}\n ModalProps={{\n keepMounted: true\n }}\n sx={{\n display: { xs: 'block', md: 'none' },\n '& .MuiDrawer-paper': { boxSizing: 'border-box' }\n }}\n >\n {drawer}\n \n\n {\n store.toggleDrawer();\n }}\n ModalProps={{\n keepMounted: true\n }}\n sx={{\n display: { xs: 'none', md: 'block' },\n '& .MuiDrawer-paper': { boxSizing: 'border-box' },\n '& .MuiPaper-root:hover': {\n '& .Mui-selected': { backgroundColor: 'primary.main' }\n }\n }}\n >\n {drawer}\n \n \n );\n};\n\nexport default observer(LeftSideDrawer);\n","/* Core */\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, Typography, Tooltip, Button } from '@mui/material';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst TeacherHeadline = ({ title }) => {\n const { t } = useTranslation();\n const store = useContext(Store);\n\n const goBackRoute = () => {\n const { product, productName, packageId } = store.params;\n const defineRoute = store?.params?.teacherId ? 'teachersOverview' : 'courseOverview';\n store.routerStore.goTo(defineRoute, { params: { product, productName, packageId } });\n };\n\n const defineToolip = store?.params?.teacherId ? 'GoBackTeachers' : 'GoBackCourseOverview';\n\n return (\n \n \n }\n sx={{ textTransform: 'inherit' }}\n >\n {t(defineToolip)}\n \n \n \n \n {t(`${title}`)}\n \n \n \n );\n};\n\nTeacherHeadline.propTypes = {\n title: PropTypes.any\n};\n\nexport default observer(TeacherHeadline);\n","/* Core */\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, Typography, Tooltip, Button } from '@mui/material';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst CourseIntroductionHeadline = ({ title }) => {\n const { t } = useTranslation();\n const store = useContext(Store);\n\n const goBackRoute = () => {\n const { product, productName, packageId } = store.params;\n const defineRoute = store?.params?.teacherId ? 'teachersOverview' : 'courseOverview';\n if (store.params?.productName === 'special') {\n store.routerStore.goTo('specialAccess', { params: {}, queryParams: {} });\n return;\n }\n store.routerStore.goTo(defineRoute, { params: { product, productName, packageId } });\n };\n\n const defineTooltip = store?.params?.teacherId ? 'GoBackTeachers' : 'GoBackCourseOverview';\n\n return (\n \n \n }\n sx={{ textTransform: 'inherit' }}\n >\n {t(defineTooltip)}\n \n \n \n \n {title}\n \n \n \n );\n};\n\nCourseIntroductionHeadline.propTypes = {\n title: PropTypes.any\n};\n\nexport default observer(CourseIntroductionHeadline);\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useScrollPosition } from 'hooks';\nimport { Typography } from '@mui/material';\nimport { CapitalizeFirstLetter, convertUrlDecodedString, ThemeBrandTitle } from 'helpers/Helpers';\nimport TeacherHeadline from './TeacherHeadline';\nimport CourseIntroductionHeadline from './CourseIntroductionHeadline';\n\nconst HeaderTitle = ({ title, subtitle }) => {\n const store = useContext(Store);\n const { t } = useTranslation();\n\n const selectedPackageLabel = store.packages.filter((pack) => pack.nid === store.selectedPackageId);\n const isScrolling = useScrollPosition() > 14;\n const brandTitle = ThemeBrandTitle();\n const { uw } = brandTitle !== 'E-WISE' ? { uw: 'uw' } : { uw: 'je' };\n\n const courseIntroductionTitle = () => {\n if (title === 'introduction.title') {\n const courseNid = store.routerStore.routerState.params.courseId;\n const courseUuid = store.findCourseByNid(Number(courseNid));\n return courseUuid.course_title;\n }\n return null;\n };\n const courseIntroductionTitleText = isScrolling && courseIntroductionTitle();\n\n const specialAccessCourseOverviewTitle = () => {\n const isVtbTeacher =\n store.login?.isVtbTeacher === 1 && (store?.courses?.courses?.length === 0 || store?.courses?.courses === undefined);\n if (isVtbTeacher) {\n return t('courseoverview.specialAccessVtb.title');\n }\n return t('courseoverview.specialAccess.title');\n };\n\n const headerTitle = {\n 'teachers.title.bio': {\n header: \n },\n 'introduction.title': {\n header: \n },\n 'courseoverview.title': {\n header: (\n <>\n \n Dashboard/\n {CapitalizeFirstLetter(store.baseProduct?.unique_name || '')}/{CapitalizeFirstLetter(selectedPackageLabel[0]?.tab_label || '')}\n \n \n {`${t(title)} ${CapitalizeFirstLetter(selectedPackageLabel[0]?.tab_label || '')}`}\n \n \n )\n },\n 'curriculum.stagesTitle': {\n header: (\n <>\n \n {t(`${subtitle}`) || subtitle}\n \n \n {t(`${title}`) || title} {store.curriculum?.data?.attributes?.year}\n \n \n )\n },\n 'courseoverview.specialAccess.title': {\n header: (\n <>\n \n {specialAccessCourseOverviewTitle()}\n \n \n )\n },\n 'searchoverview.title': {\n header: (\n <>\n {store.searchParam !== '' && (\n <>\n \n {t('searchoverview.searchParam', 'Search results for:')} {convertUrlDecodedString(store.searchParam) || ''}\n \n \n {store.searchCoursesFound ?? 0}{' '}\n {store.searchCoursesFound === 0 || store.searchCoursesFound > 1 ? (\n <>{t('searchoverview.totalFound2', 'courses found')}\n ) : (\n <>{t('searchoverview.totalFound1', 'course found')}\n )}\n \n {store.searchCoursesFound > 0 &&\n store.searchSuggestedParam !== '' &&\n store.searchParam !== store.searchSuggestedParam &&\n store.searchIsRandom !== true && (\n \n {t('searchoverview.suggestion', 'Showing results for:')} {store.searchSuggestedParam || ''}\n \n )}\n {store.searchIsRandom === true && (\n \n {t('searchoverview.suggestionrand', { uw })}\n \n )}\n \n )}\n \n )\n }\n }[title];\n\n const defaultHeader = (\n <>\n \n {t(`${subtitle}`) || subtitle}\n \n \n {t(`${title}`) || title}\n \n \n );\n\n return (headerTitle && headerTitle.header) || (typeof title === 'function' && title()) || defaultHeader;\n};\n\nHeaderTitle.propTypes = {\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n subtitle: PropTypes.string\n};\n\nexport default HeaderTitle;\n","import { useState } from 'react';\n\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\n\nimport { useBreakpoint, useStore } from 'hooks';\nimport { shouldShowSidebar } from 'helpers/Helpers';\n\nexport const useHeader = () => {\n const store = useStore();\n\n const showSidebar = shouldShowSidebar(store);\n\n const theme = useTheme();\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('sm'));\n\n const breakpoint = useBreakpoint();\n const isMobile = breakpoint === 'sm' || breakpoint === 'xs';\n const isXs = breakpoint === 'xs';\n\n const [anchorProducts, setAnchorProducts] = useState(null);\n const [anchorAccount, setAnchorAccount] = useState(null);\n const [anchorQuickLinks, setAnchorQuickLinks] = useState(null);\n const [anchorNotification, setAnchorNotification] = useState(null);\n\n const isMenuProductsOpen = Boolean(anchorProducts);\n const isMenuAccountOpen = Boolean(anchorAccount);\n const isMenuQuickLinksOpen = Boolean(anchorQuickLinks);\n\n const productName = store.subscriptions?.subscriptions.filter((subscription) => subscription.product === store.selectedProductId)[0];\n const hasSubscriptions = store.subscriptions?.subscriptions?.length > 0;\n\n // Show or hide dynamic menu\n const uniqueProductTitles = new Set();\n store.subscriptions?.subscriptions?.forEach((subscription) => {\n const productNameDef = subscription.base_product_title.toLowerCase();\n if (!uniqueProductTitles.has(productNameDef)) {\n uniqueProductTitles.add(productNameDef);\n }\n });\n const showProductMenu = uniqueProductTitles.size > 1;\n\n const handleMenuClose = () => {\n setAnchorProducts(null);\n setAnchorAccount(null);\n setAnchorQuickLinks(null);\n setAnchorNotification(null);\n };\n\n function handleMenuProductsOpen(event) {\n if ((store.products.length > 1 && showProductMenu) || !store.isEwiseUser) {\n setAnchorProducts(event.currentTarget);\n return;\n }\n\n store.routerStore.goTo('selectProduct');\n }\n\n const handleCloseNotification = () => {\n setAnchorNotification(null);\n };\n const handleNotification = (event) => {\n setAnchorNotification(event.currentTarget);\n };\n\n const handleMenuSelect = (link) => () => {\n handleMenuClose();\n store.routerStore.goTo(link.routeName, { params: link.params, queryParams: link.queryParams });\n };\n\n const handleMenuSelectProduct = (link, handleChangeProduct) => () => {\n handleMenuClose();\n store.clearTabClicked();\n handleChangeProduct();\n store.routerStore.goTo(link.routeName, { params: link.params, queryParams: link.queryParams });\n };\n\n const handlePopoverClose = (event) => {\n event.persist();\n let menuOpen;\n let menuOpenTimeout;\n const elTarget = event.currentTarget;\n const elChild = event.relatedTarget;\n\n if (menuOpen) clearTimeout(menuOpenTimeout);\n\n menuOpenTimeout = setTimeout(() => {\n if (elChild && elChild.parentNode === elTarget) {\n // eslint-disable-next-line no-use-before-define\n handleMenuClose();\n }\n }, 1300);\n };\n\n const handleGoToLMS = () => {\n if (store.showMenuAssistant) {\n store.routerStore.goTo('LmsStudents');\n } else {\n store.routerStore.goTo('LmsDashboardOverview');\n }\n };\n\n const handleGoToAssistant = () => {\n store.routerStore.goTo('assistantManagement');\n };\n\n const handleGoToCourseOverview = () => {\n window.location.href = '/';\n };\n\n const handleGoToSpecialAccessOverview = () => {\n store.routerStore.goTo('specialAccess');\n };\n\n function handleMenuAccountOpen(event) {\n setAnchorAccount(event.currentTarget);\n }\n\n function handleMenuQuickLinksOpen(event) {\n setAnchorQuickLinks(event.currentTarget);\n }\n\n return {\n showSidebar,\n handleMenuSelect,\n anchorAccount,\n anchorProducts,\n anchorNotification,\n handleCloseNotification,\n handleMenuProductsOpen,\n showProductMenu,\n isMenuProductsOpen,\n handleMenuClose,\n handlePopoverClose,\n handleMenuAccountOpen,\n isMenuAccountOpen,\n hasSubscriptions,\n handleGoToSpecialAccessOverview,\n handleGoToCourseOverview,\n handleMenuSelectProduct,\n handleNotification,\n productName,\n handleGoToAssistant,\n handleGoToLMS,\n isMobile,\n isXs,\n isSmallScreen,\n isMenuQuickLinksOpen,\n anchorQuickLinks,\n handleMenuQuickLinksOpen\n };\n};\n","import PropTypes from 'prop-types';\nimport { createContext, useContext } from 'react';\n\nimport { useHeader } from './useHeader';\n\nconst HeaderContext = createContext();\n\nexport const HeaderContextProvider = ({ isSidebarVisible, children }) => {\n const store = useHeader({ isSidebarVisible });\n\n // eslint-disable-next-line react/jsx-filename-extension\n return {children};\n};\n\nexport const useHeaderContext = () => {\n const context = useContext(HeaderContext);\n\n if (context === undefined) {\n throw new Error('useHeaderContext must be used within a HeaderContextProvider');\n }\n\n return context;\n};\n\nHeaderContextProvider.propTypes = {\n isSidebarVisible: PropTypes.bool,\n children: PropTypes.node.isRequired\n};\n","import { styled } from '@mui/material/styles';\nimport { Button as ButtonBase, IconButton as IconButtonBase } from '@mui/material';\n\nexport const Button = styled(ButtonBase)(() => ({\n color: '#2b3674',\n borderRadius: '49px',\n letterSpacing: '-0.02em',\n fontSize: '14px',\n fontWeight: 400,\n paddingLeft: '10px',\n background: '#F4F7FE',\n height: '41px',\n width: 'auto',\n textTransform: 'none'\n}));\n\nexport const IconButton = styled(IconButtonBase)(() => ({\n background: '#F4F7FE',\n width: '41px',\n height: '41px'\n}));\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Avatar, Tooltip } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport { useHeaderContext } from '../context';\n\nimport * as Styled from './HeaderComponents.styles';\n\nconst AccountButton = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n const { anchorAccount, handleMenuAccountOpen } = useHeaderContext();\n\n return (\n \n \n \n \n \n );\n};\n\nexport default observer(AccountButton);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Tooltip } from '@mui/material';\n\nimport { useHeaderContext } from '../context';\nimport * as Styled from './HeaderComponents.styles';\n\nconst AssistantButton = () => {\n const { t } = useTranslation();\n\n const { handleGoToAssistant } = useHeaderContext();\n\n return (\n \n \n {t('course.leftSidebar.assistent')}\n \n \n );\n};\n\nexport default observer(AssistantButton);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Tooltip } from '@mui/material';\n\nimport { useHeaderContext } from '../context';\nimport * as Styled from './HeaderComponents.styles';\n\nconst CourseOverviewButton = () => {\n const { t } = useTranslation();\n\n const { handleGoToCourseOverview } = useHeaderContext();\n\n return (\n \n \n {t('course.leftSidebar.courseOverview')}\n \n \n );\n};\n\nexport default observer(CourseOverviewButton);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport { Button, Tooltip } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { convertUrlEncodedString } from 'helpers/Helpers';\n\n/* Custom searching component */\nconst Searching = () => {\n const store = useStore();\n const { t } = useTranslation();\n const searchResults = store.searchCoursesFound;\n\n const goBackToSearchResults = () => {\n const searchTerm = store.searchParam;\n store.routerStore.goTo('searchOverview', {\n params: {\n baseProductId: store.baseProduct?.nid.toString(),\n searchParam: convertUrlEncodedString(searchTerm.trim()),\n searchAttempt: store.searchIsRandom === true ? '2' : '0'\n }\n });\n };\n\n // If no search param is set and the current route is not searchOverview, do not render the component\n // eslint-disable-next-line no-useless-return\n if (store.searchParam === '') {\n return null;\n }\n\n return (\n \n \n {searchResults}\n \n \n );\n};\n\nexport default observer(Searching);\n","/* Core */\nimport { useTranslation } from 'react-i18next';\nimport { useContext, useState } from 'react';\nimport { Store } from 'state/ContextStore';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { styled } from '@mui/material/styles';\nimport { Dialog, DialogActions, DialogContent, Button, InputBase, Box } from '@mui/material';\nimport { convertUrlEncodedString } from 'helpers/Helpers';\n\n/* MUI - Icons */\nimport SearchIcon from '@mui/icons-material/Search';\nimport Searching from './Searching';\n\nconst Search = styled('div')(({ theme }) => ({\n position: 'relative',\n borderRadius: '49px',\n borderColor: theme.shape.borderColor,\n backgroundColor: '#F4F7FE',\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(1),\n width: 'auto',\n height: '24px'\n }\n}));\n\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n}));\n\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\n color: 'inherit',\n marginTop: 5,\n marginBottom: 5,\n '& .MuiInputBase-input': {\n padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: '24ch',\n '&:focus': {\n width: '36ch'\n }\n }\n }\n}));\n\nconst StyledButton = styled(Button)(() => ({\n position: 'absolute',\n right: '18px',\n height: '100%',\n borderRadius: '34px',\n zIndex: 99,\n backgroundColor: '#F4F7FE'\n}));\n\nconst CourseSearch = () => {\n const { t } = useTranslation();\n const store = useContext(Store);\n const [searchTerm, setSearchTerm] = useState('');\n const [open, setOpen] = useState(false);\n const isSearchRoute = store.routerStore?.getCurrentRoute().name === 'searchOverview';\n const isSelectProductRoute = store.routerStore?.getCurrentRoute().name === 'selectProduct';\n\n const handleChange = (event) => {\n setSearchTerm(event.target.value);\n };\n\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n handleSubmit();\n }\n };\n\n const handleSubmit = () => {\n // Navigate to the search results route\n if (searchTerm.trim().length < 2) {\n store.showToast({ message: t('searchoverview.error', 'Please enter at least 2 characters'), variant: 'error' });\n return;\n }\n store.routerStore.goTo('searchOverview', {\n params: {\n baseProductId: store.baseProduct?.nid.toString(),\n searchParam: convertUrlEncodedString(searchTerm.trim()),\n searchAttempt: '0'\n }\n });\n };\n\n // Show/hide the search input\n const showPopupSearch = () => {\n setOpen(!open);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n if (isSelectProductRoute) {\n return null;\n }\n\n if (!store.hasSubscriptions) {\n return null;\n }\n\n return (\n <>\n {!isSearchRoute && }\n \n \n \n \n \n \n \n {t('courseoverview.search.button', 'Search')}\n \n \n \n \n );\n};\n\n// Mobile search button\n// eslint-disable-next-line arrow-body-style\nconst MobileSearchButton = ({ onClick }) => {\n return (\n \n );\n};\n\nMobileSearchButton.propTypes = {\n onClick: PropTypes.func\n};\n\n// Mobile search dialog\nconst MobileSearchDialog = ({ open, onChange, onClose, onSubmit }) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nMobileSearchDialog.propTypes = {\n onClose: PropTypes.func,\n open: PropTypes.bool,\n onSubmit: PropTypes.func,\n onChange: PropTypes.func\n};\n\nexport default CourseSearch;\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Tooltip } from '@mui/material';\n\nimport { useHeaderContext } from '../context';\nimport * as Styled from './HeaderComponents.styles';\n\nconst LmsButton = () => {\n const { t } = useTranslation();\n\n const { handleGoToLMS } = useHeaderContext();\n\n return (\n \n \n {t('course.leftSidebar.LMS')}\n \n \n );\n};\n\nexport default observer(LmsButton);\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { MenuItem } from '@mui/material';\n\nconst MenuItemAccount = ({ handleMenuSelect }) => {\n const { t } = useTranslation();\n\n return (\n \n {t('My Account')}\n \n );\n};\n\nMenuItemAccount.propTypes = { handleMenuSelect: PropTypes.func.isRequired };\n\nexport default observer(MenuItemAccount);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Link, MenuItem } from '@mui/material';\nimport { isStaging } from 'helpers/Helpers';\n\nconst MenuItemAdminPanel = () => {\n const { t } = useTranslation();\n\n return (\n \n \n {t('Admin panel')}\n \n \n );\n};\n\nexport default observer(MenuItemAdminPanel);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { MenuItem } from '@mui/material';\n\nconst MenuItemBackend = ({ handleMenuSelect }) => {\n const { t } = useTranslation();\n\n return (\n \n {t('Backend (admin)')}\n \n );\n};\n\nMenuItemBackend.propTypes = {\n handleMenuSelect: PropTypes.func.isRequired\n};\n\nexport default observer(MenuItemBackend);\n","/**\n * CREATE INDESIGN XML FROM COURSEOVERVIEW JSON\n *\n * @param {*} courses\n * @returns\n */\n// LAYOUT STYLE\nconst PRINT = 1;\n// eslint-disable-next-line no-unused-vars\nconst LEAF = 2;\nlet CURRENT_STYLE = 2;\n\n// SETTINGS VOOR COLUMN WIDTH's\nconst COLWIDTH = {\n print: { t: 170, a: 135, v: 35 },\n leaf: { t: 200, a: 100, v: 35 },\n title() {\n return CURRENT_STYLE === PRINT ? this.print.t : this.leaf.t;\n },\n authors() {\n return CURRENT_STYLE === PRINT ? this.print.a : this.leaf.a;\n },\n value() {\n return CURRENT_STYLE === PRINT ? this.print.v : this.leaf.v;\n }\n};\n\nexport const createXml = (store, style) => {\n CURRENT_STYLE = style;\n const { courses, packages, params } = store;\n const currentPackage = params.packageId === '0' ? packages[0] : packages.find((pkg) => pkg.nid.toString() === params.packageId);\n // group courses by category\n const coursesByCategory = {};\n courses.courses.forEach((course) => {\n course.course_category.forEach((cat) => {\n if (!coursesByCategory?.[cat.name]) coursesByCategory[cat.name] = [];\n coursesByCategory[cat.name].push(course);\n });\n });\n // create the xml with the courses grouped by category\n const xmlOutput = _createXmlContent(coursesByCategory, currentPackage);\n // create the xml file and start the download\n return _createFileAndDownload(xmlOutput, currentPackage);\n};\n\n//\nexport const _createXmlContent = (categories, curPackage) => {\n const tcols = CURRENT_STYLE === PRINT ? 2 : 3;\n const xmlAid = {\n root: `xmlns:aid5=\"http://ns.adobe.com/AdobeInDesign/5.0/\"`,\n table: `xmlns:aid=\"http://ns.adobe.com/AdobeInDesign/4.0/\" aid:table=\"table\" aid:tcols=\"${tcols}\" aid5:tablestyle=\"course-table\"`\n };\n\n let totCourses = '';\n //\n const entries = Object.entries(categories);\n entries.sort((a, b) => a[0].localeCompare(b[0]));\n entries.forEach(([key, val]) => {\n const count = CURRENT_STYLE === PRINT ? val.length * 2 : val.length;\n // create the xml for the courses\n const _catCourses = val.map((course) => _xmlCourse(course, curPackage)).join('');\n // create the xml for the category\n let xmlCat = `\\n\\n${key}\\n`;\n xmlCat += ``;\n xmlCat += ``;\n xmlCat += ``;\n xmlCat += `${_catCourses}`;\n xmlCat += `
    `;\n xmlCat += `
    `;\n xmlCat += `
    `;\n xmlCat += `
    `;\n totCourses += xmlCat;\n });\n //\n return `${totCourses}`;\n};\n\nconst _xmlCourse = (course, curPackage) => {\n const ccols = CURRENT_STYLE === PRINT ? 2 : 1;\n\n const xmlAid = {\n title: `aid:table=\"cell\" aid:crows=\"1\" aid:ccols=\"${ccols}\" aid:ccolwidth=\"${COLWIDTH.title()}\" aid5:cellstyle=\"cell-title\"`,\n authors: `aid:table=\"cell\" aid:crows=\"1\" aid:ccols=\"1\" aid:ccolwidth=\"${COLWIDTH.authors()}\" aid5:cellstyle=\"cell-authors\"`,\n value: `aid:table=\"cell\" aid:crows=\"1\" aid:ccols=\"1\" aid:ccolwidth=\"${COLWIDTH.value()}\" aid5:cellstyle=\"cell-value\"`\n };\n //\n const title = course.course_title ? course.course_title.replace(/&/g, '&').replace(/ +/g, ' ') : '';\n const weblecture = course?.webLecture ? `` : '';\n const expected = course.course_expected ? ` verwacht` : '';\n const extrapoints = course.course_extra_points ? _getExtraValues(course, curPackage) : '';\n const authors = course.lc_author_id.map((author) => `${author.title}`).join(', ');\n const accrUnitShort = curPackage?.accreditation?.accr_unit_short || 'pnt';\n //\n // create the xml for the course\n const cellTitle = `${title}${weblecture}${expected}`;\n const cellAuthors = `${authors}`;\n const cellValue = `${course.course_points} ${accrUnitShort} ${extrapoints}`;\n // return the xml for the course\n return cellTitle + cellAuthors + cellValue;\n};\n\n// OUTPUTS XML\nconst _getExtraValues = (course, curPackage) => {\n let xValue = `, `;\n xValue += `${course.course_extra_points}`;\n xValue += `${curPackage?.accreditation?.extra_points_unit || ''}`;\n xValue += ``;\n return xValue;\n};\n\nconst _createFileAndDownload = (xmlFile, curPackage) => {\n const layout = CURRENT_STYLE === 1 ? 'print' : 'brochure';\n const packageTitle = curPackage?.tab_label || 'cursusoverzicht';\n // create a file and put the content, name and type\n const file = new File([`\\ufeff${xmlFile}`], `${packageTitle}_${layout}.xml`, { type: 'text/plain:charset=UTF-8' });\n // create a ObjectURL in order to download the created file\n const url = window.URL.createObjectURL(file);\n // create a hidden link and set the href and click it\n const a = document.createElement('a');\n a.style = 'display: none';\n a.href = url;\n a.download = file.name;\n a.click();\n window.URL.revokeObjectURL(url);\n};\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { ListItemIcon, MenuItem } from '@mui/material';\nimport DownloadIcon from '@mui/icons-material/Download';\n\nimport { createXml } from 'helpers/xml.helper';\nimport { useStore } from 'hooks';\n\nconst MenuItemXmlBrochure = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n return (\n createXml(store, 2)}>\n \n \n \n {t('Brochure xml')}\n \n );\n};\n\nexport default observer(MenuItemXmlBrochure);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { ListItemIcon, MenuItem } from '@mui/material';\nimport DownloadIcon from '@mui/icons-material/Download';\n\nimport { createXml } from 'helpers/xml.helper';\nimport { useStore } from 'hooks';\n\nconst MenuItemXmlPrint = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n return (\n createXml(store, 1)}>\n \n \n \n {t('Print xml')}\n \n );\n};\n\nexport default observer(MenuItemXmlPrint);\n","import { renderToString } from 'react-dom/server';\n\nexport const createHtml = (store, theme) => {\n const { courses, packages, params, label } = store;\n // show symbols for these packages in the array\n const SHOW_SYMBOLS = ['fysiotherapeut'];\n // set course items\n const labelImage = getLogo(label);\n const labelDomain = getDomain(label);\n const overviewTitle = store.selectedPackageTitle;\n const releaseDate = getReleaseDate();\n const showSymbols = SHOW_SYMBOLS.includes(overviewTitle.toLowerCase());\n const accrLogo = renderToString(accreditationPartners(store));\n const advisoryBoard = getAdvisoryBoard(store?.profession?.advisory_board, store);\n const legendaItems = getLegendaItems(store.categories2);\n // get currentPackage\n const currentPackage = packages.find((pkg) => pkg.nid.toString() === params.packageId);\n // ! create courses by category\n const coursesByCategory = getCoursesByCategory(courses);\n // ! create html items for html output\n const htmlCourses = createHTMLCourses(coursesByCategory, currentPackage, showSymbols, store);\n const htmlAccr = `
    ${accrLogo}
    `;\n const htmlAdvBoard = advisoryBoard ? `
    ${advisoryBoard}
    ` : '';\n const htmlLegenda = showSymbols ? `
    ${legendaItems}
    ` : '';\n // ! create html output\n const htmlCourseOverview = `${htmlCourses}${htmlAccr}${htmlAdvBoard}${htmlLegenda}`;\n // ! create html document\n const htmlDocument = createHtmlDoc(htmlCourseOverview, theme, labelImage, overviewTitle, labelDomain, releaseDate, showSymbols);\n // ! ========== OPEN NEW WINDOW AND WRITE HTML ================\n const newTab = window.open(``, '_blank');\n newTab.document.write(htmlDocument);\n newTab.document.close();\n};\n\nconst accreditationPartners = (store) => {\n const currentDomain = store.label;\n const selectedPackageTitle = store.selectedPackageTitle?.toLowerCase() || '';\n const selectedProduct = store?.baseProduct?.title?.toLowerCase();\n\n return (\n
    \n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'advocatuur' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'po' && selectedPackageTitle === 'archief' && (\n
    \n \"\"\n
    \n )}\n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'notariaat' && (\n
    \n \"\"\n
    \n )}\n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'fiscaliteit' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'pe' &&\n (selectedPackageTitle === 'accountancy' || selectedPackageTitle === 'archief') &&\n selectedProduct !== 'notaris' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'pe' && selectedPackageTitle === 'juridisch medewerker notariaat' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'pe' && selectedPackageTitle === 'archief' && selectedProduct === 'notaris' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'ouderengeneeskunde' || selectedPackageTitle === 'huisarts' || selectedPackageTitle === 'ge-bu') && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' && (selectedPackageTitle === 'medicatiebeoordeling' || selectedPackageTitle === 'apotheker') && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'apothekersassistent' || selectedPackageTitle === 'farmaceutisch consulent') && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'fysiotherapeut' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'mondhygiënist' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'tandarts' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'verpleegkundig specialist' && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'VIG / Verpleegkundige' || selectedPackageTitle === 'Helpende plus / Verzorgende') && (\n
    \n \"\"\n
    \n )}\n {currentDomain === 'ewise' && (\n
    \n \n \"NRTO\"\n \n
    \n )}\n
    \n );\n};\n\nconst getReleaseDate = () => {\n const months = [\n 'januari',\n 'februari',\n 'maart',\n 'april',\n 'mei',\n 'juni',\n 'juli',\n 'augustus',\n 'september',\n 'oktober',\n 'november',\n 'december'\n ];\n const date = new Date();\n return [date.getDate(), months[date.getMonth()], date.getFullYear()];\n};\n\nconst getAdvisoryBoard = (advisoryBoard, store) => {\n if (!advisoryBoard.length) return '';\n const board = advisoryBoard.map((member) => store.authors.authorList.find((auth) => auth.id === member));\n const boardList = board?.map((comp) => `
  • ${comp?.title}
  • `).join('');\n const boardTitle = `
    Redactieraad
    `;\n return `
    ${boardTitle}
      ${boardList}
    `;\n};\n\nconst getCoursesByCategory = (courses) => {\n const coursesByCategory = {};\n courses.courses.forEach((course) => {\n course.course_category.forEach((cat) => {\n if (!coursesByCategory?.[cat.name]) coursesByCategory[cat.name] = [];\n coursesByCategory[cat.name].push(course);\n });\n });\n return coursesByCategory;\n};\n\nconst getLogo = (label) => {\n const logo = {\n cme: 'https://storage.googleapis.com/ewise-public-files/ewise_logos/cme-online-logo-small.png',\n pe: 'https://storage.googleapis.com/ewise-public-files/ewise_logos/pe-academy-logo-small.png',\n po: 'https://storage.googleapis.com/ewise-public-files/ewise_logos/po-online-logo-small.png',\n ewise: 'https://storage.googleapis.com/ewise-public-files/ewise_logos/ewise-logo-small.png'\n };\n return logo[label];\n};\n\nconst getDomain = (label) => {\n const url = {\n cme: 'cme-online.nl',\n pe: 'pe-academy.nl',\n po: 'po-online.nl',\n ewise: 'e-wise.nl'\n };\n return url[label];\n};\n\nconst createHTMLCourses = (categories, curPackage, showSymbols, store) => {\n let totCourses = '';\n // set correct order of categories by weight\n const orderedCategories = store.courses.categories.sort((a, b) => a.weight - b.weight).map((cat) => cat.name);\n // CREATE HTML for course categories\n orderedCategories.forEach((cat) => {\n // create HTML for courses in category\n const _catCourses = categories[cat].map((course) => createLiCourse(course, curPackage, showSymbols)).join('');\n totCourses += `\n
    \n
    ${cat}
    \n
      ${_catCourses}
    \n
    `;\n });\n\n return totCourses;\n};\n\nconst createLiCourse = (course, curPackage, showSymbols) => {\n const courseTitle = course.course_title ? course.course_title.replace(/&/g, '&') : '';\n const courseExpected = course.course_expected ? `verwacht` : '';\n const courseAuthors = course.lc_author_id.map((author) => `${author.title || ''}`).join(', ');\n const courseSYmbols = showSymbols ? getCompetences(course) : '';\n const showSymbolsHtml = showSymbols ? `${courseSYmbols}` : '';\n // create course
  • \n const _liCourse = `\n
  • \n
    ${courseTitle} ${courseExpected}
    \n
    \n ${courseAuthors}\n ${showSymbolsHtml}\n ${course.points}\n
    \n
  • `;\n\n return _liCourse;\n};\n\nconst getLegendaItems = (category2) => {\n const categories = JSON.parse(JSON.stringify(category2));\n if (!categories) return '';\n const competences = categories\n ?.map(\n (comp) =>\n `
  • ${comp?.symbol || [...comp.name][0]}${\n comp.name\n }
  • `\n )\n .join('');\n return `
      ${competences}
    `;\n};\n\nconst getCompetences = (course) => {\n const badges = JSON.parse(JSON.stringify(course.course_category2));\n //\n const npoBadges = badges\n .filter((badge) => badge?.name.toLowerCase().includes('npo'))\n .map((badge) => ({ ...badge, ...{ symbol: badge.name, style: true } }));\n //\n const goBadges = badges\n .filter((badge) => badge?.name.toLowerCase() === 'groepsopdracht')\n .map((badge) => ({ ...badge, ...{ symbol: 'G', style: true } }));\n //\n const veBadges = badges\n .filter((badge) => badge?.symbol?.toLowerCase() === 've')\n .map((badge) => ({ ...badge, ...{ symbol: badge.name, style: true } }));\n //\n const aBadges = badges\n .filter((badge) => badge?.name.toLowerCase() === 'a1' || badge?.name.toLowerCase() === 'a2')\n .map((badge) => ({ ...badge, ...{ symbol: badge.name, style: true } }));\n //\n const restBadges = badges\n .filter(\n (badge) =>\n !badge?.name.toLowerCase().includes('npo') &&\n badge?.name.toLowerCase() !== 'groepsopdracht' &&\n badge?.symbol?.toLowerCase() !== 've' &&\n badge?.name.toLowerCase() !== 'a1' &&\n badge?.name.toLowerCase() !== 'a2'\n )\n .sort((a, b) => a.name.localeCompare(b.name));\n //\n const sortedBadges = [...goBadges, ...npoBadges, ...veBadges, ...aBadges, ...restBadges];\n //\n const competences = sortedBadges\n ?.map(\n (comp) =>\n `${\n comp?.symbol || [...comp.name][0]\n }`\n )\n .join('');\n return competences;\n};\n\nconst createHtmlDoc = (htmlOutput, theme, labelImage, overviewTitle, labelDomain, releaseDate, showSymbols) => `\n\n\n\nCursusoverzicht ${overviewTitle} \n\n\n\n\n\n\n\n\n\n
    \n \n \n \n \n \n
    Cursusoverzicht ${overviewTitle} \n \"${overviewTitle}-logo\"
    \n
    \n\n
    \n \n \n \n \n \n \n
    uitgave ${releaseDate[0]} ${releaseDate[1]} ${releaseDate[2]}www.${labelDomain} | info@${labelDomain} | (030) 26 44 100\"ewise-logo\"
    \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
    ${htmlOutput}
    \n
    \n \n \n
    \n\n\n`;\n","import { useStore } from 'hooks';\nimport { useTheme } from '@emotion/react';\nimport { observer } from 'mobx-react';\nimport { ListItemIcon, MenuItem } from '@mui/material';\nimport PrintIcon from '@mui/icons-material/Print';\nimport { createHtml } from 'helpers/pdfOverview.helper';\n\nconst MenuItemCreatePdf = () => {\n const store = useStore();\n const theme = useTheme();\n\n return (\n createHtml(store, theme)}>\n \n \n \n Print overzicht\n \n );\n};\n\nexport default observer(MenuItemCreatePdf);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { MenuItem } from '@mui/material';\n\nconst MenuItemEditCourse = ({ handleMenuSelect }) => {\n const { t } = useTranslation();\n\n return (\n \n {t('Admin courses')}\n \n );\n};\n\nMenuItemEditCourse.propTypes = {\n handleMenuSelect: PropTypes.func\n};\n\nexport default observer(MenuItemEditCourse);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Link, MenuItem } from '@mui/material';\n\nimport { getMarketingSiteUrl } from 'helpers/Helpers';\n\nconst MenuItemEwiseUser = () => {\n const { t } = useTranslation();\n\n return (\n \n \n {t('Publieke website')}\n \n \n );\n};\n\nexport default observer(MenuItemEwiseUser);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { MenuItem } from '@mui/material';\n\nimport { useStore } from 'hooks';\n\nconst MenuItemLogout = ({ handleMenuSelect }) => {\n const store = useStore();\n const { t } = useTranslation();\n\n const routeName = store.login.isImpersonation === true ? 'switchback' : 'logout';\n const title = store.login.isImpersonation === true ? t('Switchback') : t('Logout');\n\n return (\n \n {title}\n \n );\n};\n\nMenuItemLogout.propTypes = {\n handleMenuSelect: PropTypes.func\n};\n\nexport default observer(MenuItemLogout);\n","import { observer } from 'mobx-react';\n\nimport { Divider, Menu } from '@mui/material';\n\nimport { useStore } from 'hooks';\n\nimport MenuItemAccount from './MenuItemAccount';\nimport MenuItemAdminPanel from './MenuItemAdminPanel';\nimport MenuItemBackend from './MenuItemBackend';\nimport MenuItemXmlBrochure from './MenuItemXmlBrochure';\nimport MenuItemXmlPrint from './MenuItemXmlPrint';\nimport MenuItemCreatePdf from './MenuItemCreatePdf';\nimport MenuItemEditCourse from './MenuItemEditCourse';\nimport MenuItemEwiseUser from './MenuItemEwiseUser';\nimport MenuItemLogout from './MenuItemLogout';\n\nimport { useHeaderContext } from '../context';\n\nconst MainMenu = () => {\n const store = useStore();\n const { handleMenuSelect, anchorAccount, handleMenuClose, handlePopoverClose, isMenuAccountOpen } = useHeaderContext();\n\n return (\n \n {/*\n Doing every element with a separate condition here, because\n MUI Menu doesn't accept fragments (e.g. <> .... ) as children\n */}\n \n \n\n {store.isEwiseUser && }\n {store.isEwiseUser && }\n\n {store.isAdministrator && }\n {store.isAdministrator && }\n\n {store.canCreateXml && }\n {store.canCreateXml && }\n {store.canPrintCourseOverview && }\n {store.canCreateXml && }\n\n {store.canEditCourse && }\n {store.canEditCourse && }\n\n {store.canGotoAdminPanel && }\n {store.canGotoAdminPanel && }\n\n \n \n );\n};\n\nexport default observer(MainMenu);\n","import { Typography, Box, Button, Card, CardHeader, IconButton, CardContent, CardActions, Avatar, Chip } from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport AccessTimeIcon from '@mui/icons-material/AccessTime';\n\nconst Notifications = () => (\n \n \n \n \n Notifications\n \n \n 2 new Notifications\n \n \n \n \n \n \n \n \n \n \n \n }\n title=\"Some headings for the Notifications\"\n />\n \n \n Lorem Ipsum is simply dummy text of the printing and typesetting industry\n \n \n \n \n ER\n \n \n \n \n 45 minutes ago\n \n \n \n \n \n \n \n \n \n }\n title=\"Some headings for the Notifications\"\n />\n \n \n Lorem Ipsum is simply dummy text of the printing and typesetting industry\n \n \n \n \n ER\n \n \n \n \n 45 minutes ago\n \n \n \n \n \n \n \n \n \n }\n title=\"Some headings for the Notifications\"\n />\n \n \n Lorem Ipsum is simply dummy text of the printing and typesetting industry\n \n \n \n \n ER\n \n \n \n \n 45 minutes ago\n \n \n \n \n \n \n \n);\n\nexport default Notifications;\n","import { observer } from 'mobx-react';\nimport { useRef } from 'react';\n\nimport NotificationsIcon from '@mui/icons-material/Notifications';\nimport { IconButton, Popover, Tooltip } from '@mui/material';\n\nimport { useHeaderContext } from '../context';\nimport Notifications from './Notifications';\n\nconst NotificationsItem = () => {\n const notificationRef = useRef(null);\n\n const { anchorNotification, handleCloseNotification, handleNotification } = useHeaderContext();\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nNotificationsItem.propTypes = {};\n\nexport default observer(NotificationsItem);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Tooltip } from '@mui/material';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nimport * as Styled from './HeaderComponents.styles';\nimport { useHeaderContext } from '../context';\n\nconst MobileMenuButton = () => {\n const { t } = useTranslation();\n const { isMenuQuickLinksOpen, handleMenuQuickLinksOpen } = useHeaderContext();\n\n return (\n \n \n \n \n \n );\n};\n\nexport default observer(MobileMenuButton);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { Children } from 'react';\n\nimport { MenuItem } from '@mui/material';\nimport Menu from '@mui/material/Menu';\n\nimport MobileMenuButton from './MobileMenuButton';\nimport { useHeaderContext } from '../context';\n\nconst QuickLinksMenu = ({ children }) => {\n const { anchorQuickLinks, isMenuQuickLinksOpen, handleMenuClose, handlePopoverClose } = useHeaderContext();\n\n const arrayChildren = Children.toArray(children);\n if (arrayChildren.length === 0) return null;\n\n return (\n <>\n \n \n {arrayChildren.map((child, index) => (\n \n {child}\n \n ))}\n \n \n );\n};\n\nQuickLinksMenu.propTypes = {\n children: PropTypes.node\n};\n\nexport default observer(QuickLinksMenu);\n","import { useContext, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport MenuItem from '@mui/material/MenuItem';\n\nconst ProductMenuItems = forwardRef((props, ref) => {\n const store = useContext(Store);\n const { handleMenuSelect } = props;\n const { routerState } = store.routerStore;\n\n // create dynamic menu\n const menuLinks = [];\n if (store.subscriptions.subscriptions.length > 1) {\n const uniqueProductTitles = new Set();\n store.subscriptions.subscriptions.forEach((subscription, index) => {\n const productName = subscription.base_product_title.toLowerCase();\n if (!uniqueProductTitles.has(productName)) {\n menuLinks.push({\n routeName: 'courseOverview', // without packageId\n title: subscription.base_product_title,\n params: {\n productName: subscription.base_product_title.toLowerCase(),\n product: store.products[index].toString(),\n packageId: '0'\n },\n queryParams: {}\n });\n uniqueProductTitles.add(productName);\n }\n });\n }\n return menuLinks.map((link, index) => {\n if (\n link.params &&\n link.routeName === routerState.routeName &&\n link.params.product === routerState.params.product &&\n link.params.productName === routerState.params.productName &&\n link.params.packageId === routerState.params.packageId\n ) {\n return (\n \n {link.title}\n \n );\n }\n const handleChangeProduct = () => {\n store.setSelectedProduct(store.products[index], 0);\n store.setPrefProduct(store.products[index]);\n store.setState('init');\n };\n return (\n \n {link.title}\n \n );\n });\n});\n\nProductMenuItems.propTypes = {\n // eslint-disable-next-line react/no-unused-prop-types\n handleMenuSelect: PropTypes.func\n};\n\nProductMenuItems.displayName = 'ProductMenuItems';\nexport default observer(ProductMenuItems);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Menu, Tooltip } from '@mui/material';\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\n\nimport { useStore } from 'hooks';\nimport { useHeaderContext } from '../context';\nimport ProductMenuItems from './ProductMenuItems';\nimport * as Styled from './HeaderComponents.styles';\n\nconst SelectProductButton = () => {\n const { t } = useTranslation();\n const store = useStore();\n const isSearchRoute = store.routerStore?.getCurrentRoute().name === 'searchOverview';\n const isEwise = store.isEwiseUser ? 'EWISE ' : '';\n\n const {\n handleMenuClose,\n handlePopoverClose,\n handleMenuSelectProduct,\n isMenuProductsOpen,\n anchorProducts,\n handleMenuProductsOpen,\n showProductMenu,\n productName\n } = useHeaderContext();\n\n return (\n <>\n \n \n {store?.products?.length > 1 && showProductMenu ? (\n <>\n {productName?.base_product_title}\n {anchorProducts ? : }\n \n ) : (\n <>\n \n {isSearchRoute ? `${isEwise} ${store?.baseProduct?.title}` : store.subscriptions.subscriptions[0]?.base_product_title}\n {' '}\n \n )}\n \n \n\n {store?.products?.length > 1 && showProductMenu && (\n \n \n \n )}\n \n );\n};\n\nexport default observer(SelectProductButton);\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Tooltip } from '@mui/material';\n\nimport { useHeaderContext } from '../context';\nimport * as Styled from './HeaderComponents.styles';\n\nconst SpecialAccessButton = () => {\n const { t } = useTranslation();\n\n const { handleGoToSpecialAccessOverview } = useHeaderContext();\n\n return (\n \n \n {t('course.leftSidebar.specialAccess')}\n \n \n );\n};\n\nexport default observer(SpecialAccessButton);\n","import StarsIcon from '@mui/icons-material/Stars';\nimport { Chip, Tooltip } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nconst TotalPointsChip = ({ points, title }) => (\n \n \n \n \n
    \n \n {points}\n
    \n
    \n }\n />\n \n);\nTotalPointsChip.propTypes = {\n points: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n title: PropTypes.string.isRequired\n};\n\nexport default TotalPointsChip;\n","import { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport TotalPointsChip from './TotalPointsChip';\n\nconst TotalCompletedCourses = () => {\n const { t } = useTranslation();\n const store = useStore();\n const points = store.totalCompletedCourses;\n\n return ;\n};\n\nexport default observer(TotalCompletedCourses);\n","import { observer } from 'mobx-react';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Store } from 'state/ContextStore';\n\nimport { translatePoints } from 'helpers/Helpers';\nimport TotalPointsChip from './TotalPointsChip';\n\nconst TotalSubPoints = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n\n // NO ACTIVE SUBSCRIPTIONS return fragment\n // eslint-disable-next-line no-extra-boolean-cast\n if (!store?.subscriptions?.subscriptions?.length > 0) return null;\n\n // ACTIVE SUBSCRIPTIONS return total points\n const userPoints = `${store.subscriptions?.totalSubscriptionPoints(store?.baseProduct?.nid)}`;\n const accreditation = store?.baseProduct?.packages.find((subPackage) => subPackage.nid === store?.selectedPackageId);\n const accrUnit = accreditation?.accreditation?.accr_unit;\n\n let toolTipText = accrUnit !== 'punt' ? t('headerbar.earnedHours', 'Training hours') : t('headerbar.earnedPoints', 'Earned points');\n toolTipText = store?.isEwiseUser ? t('headerbar.unlimited', 'Unlimited') : toolTipText;\n\n const points = userPoints ? translatePoints(userPoints, t) : '0';\n\n return ;\n};\n\nexport default observer(TotalSubPoints);\n","import { observer } from 'mobx-react';\n\nimport { Box } from '@mui/material';\n\nimport { useStore } from 'hooks';\n\nimport { Fragment } from 'react';\nimport AccountButton from './components/AccountButton';\nimport AssistantButton from './components/AssistantButton';\nimport CourseOverviewButton from './components/CourseOverviewButton';\nimport CourseSearch from './components/CourseSearch';\nimport LmsButton from './components/LmsButton';\nimport MainMenu from './components/MainMenu';\nimport NotificationsItem from './components/NotificationsItem';\nimport QuickLinksMenu from './components/QuickLinksMenu';\nimport SelectProductButton from './components/SelectProductButton';\nimport SpecialAccessButton from './components/SpecialAccessButton';\nimport TotalCompletedCourses from './components/TotalCompletedCourses';\nimport TotalSubPoints from './components/TotalSubPoints';\nimport { useHeaderContext } from './context';\n\nconst CourseHeader = () => {\n const store = useStore();\n\n const { showSidebar, hasSubscriptions } = useHeaderContext();\n const { isMobile, isSmallScreen } = useHeaderContext();\n\n const showNotifications = false;\n const showPoints = store?.subscriptions?.subscriptions?.length > 0;\n const showLmsButton = store.showMenuItemLms && (!hasSubscriptions || !showSidebar) && !store.isEwiseUser;\n const showAssistantButton = store.showMenuAssistant && (!hasSubscriptions || !showSidebar) && !store.isEwiseUser;\n const showSpecialAccess = !showSidebar && store.login?.hasSpecialAccess;\n const showCourseOverview = !showSidebar && hasSubscriptions;\n const showSelectProduct = store?.product && (store?.products?.length > 1 || store.isEwiseUser);\n\n const QuickLinksComponent = isMobile ? QuickLinksMenu : Fragment;\n\n const isEwiseLabel = store.label === 'ewise';\n const isFreeProduct = store.product?.free_product === 1;\n\n const showTotalCompletedCourses = showPoints && isEwiseLabel && !isFreeProduct;\n const showTotalSubPoints = (showPoints && !isEwiseLabel) || (showPoints && isEwiseLabel && isFreeProduct);\n\n return (\n \n \n \n\n \n {showNotifications && }\n\n {showTotalCompletedCourses && }\n {showTotalSubPoints && }\n\n {!isSmallScreen && showSelectProduct && }\n\n \n {isSmallScreen && showSelectProduct && }\n {showCourseOverview && }\n {showSpecialAccess && }\n {showAssistantButton && }\n {showLmsButton && }\n \n\n \n \n \n \n \n );\n};\n\nexport default observer(CourseHeader);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { Box } from '@mui/material';\n\nimport { useStore } from 'hooks';\nimport Logo from 'components/common/Logo';\nimport IconButton from '@mui/material/IconButton';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport HeaderTitle from './components/HeaderTitle';\nimport { useHeaderContext } from './context';\nimport CourseHeader from './CourseHeader';\n\nconst CourseHeadline = ({ title, subtitle }) => {\n const store = useStore();\n\n const { showSidebar, isMobile } = useHeaderContext();\n\n // Check if the user is LTI and trying to reach this page\n if (store.isLtiSession() === 1 || store.getLtiSession() === '1') {\n return null;\n }\n\n const isIntroduction =\n store.routerStore?.routerState?.routeName === 'courseIntroduction' ||\n store.routerStore?.routerState?.routeName === 'defCourseIntroduction';\n\n return (\n \n {isMobile && showSidebar && (\n \n store.toggleDrawer()}>\n \n \n \n )}\n\n {(!showSidebar || isMobile) && (\n \n \n \n )}\n\n {(!isMobile || (isMobile && !isIntroduction)) && (\n \n \n \n )}\n\n \n \n \n \n );\n};\n\nCourseHeadline.propTypes = {\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n subtitle: PropTypes.string\n};\n\nexport default observer(CourseHeadline);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { Box } from '@mui/material';\n\nimport CourseHeadline from './CourseHeadline';\n\nconst Header = ({ title, subtitle }) => (\n \n \n \n);\n\nHeader.propTypes = {\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n subtitle: PropTypes.string\n};\n\nexport default observer(Header);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport { getLabelNameFromDomain } from 'helpers/Helpers';\n\n/* MUI */\nimport { Grid } from '@mui/material';\n\nconst AccreditationPartners = () => {\n const store = useContext(Store);\n const currentDomain = getLabelNameFromDomain();\n const selectedPackage = store?.baseProduct?.packages?.find((packag) => packag.nid === store.selectedPackageId);\n const selectedPackageTitle = selectedPackage?.tab_label?.toLowerCase() || '';\n const selectedProduct = store?.baseProduct?.title?.toLowerCase();\n\n return (\n <>\n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'advocatuur' && (\n \n \"\"\n \n )}\n {currentDomain === 'po' && selectedPackageTitle === 'archief' && (\n \n \"\"\n \n )}\n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'notariaat' && (\n \n \"\"\n \n )}\n {(currentDomain === 'po' || currentDomain === 'pe') && selectedPackageTitle === 'fiscaliteit' && (\n \n \"\"\n \n )}\n {currentDomain === 'pe' &&\n (selectedPackageTitle === 'accountancy' || selectedPackageTitle === 'archief') &&\n selectedProduct !== 'notaris' && (\n \n \"\"\n \n )}\n {currentDomain === 'pe' && selectedPackageTitle === 'juridisch medewerker notariaat' && (\n \n \"\"\n \n )}\n {currentDomain === 'pe' && selectedPackageTitle === 'archief' && selectedProduct === 'notaris' && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'ouderengeneeskunde' || selectedPackageTitle === 'huisarts' || selectedPackageTitle === 'ge-bu') && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' && (selectedPackageTitle === 'medicatiebeoordeling' || selectedPackageTitle === 'apotheker') && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'apothekersassistent' || selectedPackageTitle === 'farmaceutisch consulent') && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'fysiotherapeut' && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'mondhygiënist' && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'tandarts' && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' && selectedPackageTitle === 'verpleegkundig specialist' && (\n \n \"\"\n \n )}\n {currentDomain === 'cme' &&\n (selectedPackageTitle === 'VIG / Verpleegkundige' || selectedPackageTitle === 'Helpende plus / Verzorgende') && (\n \n \"\"\n \n )}\n {currentDomain === 'ewise' && (\n \n \n \"NRTO\"\n \n \n )}\n \n );\n};\nexport default observer(AccreditationPartners);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Dialog, DialogContent, Divider, DialogActions, Button } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\n\n/* Custom styling */\nimport 'theme/course/courseoverview/Quickview.scss';\nimport Logo from '../../../components/common/Logo';\n\n/* Custom components */\n\nconst TermsConditions = (props) => {\n const { open, onClose } = props;\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n\n return (\n <>\n \n \n \n \n \n General Terms\n \n \n \n \n \n \n \n \n Algemene voorwaarden beroep en bedrijf\n \n \n \n Voor iedereen die cursussen van E-WISE volgt voor de verplichte herregistratie in zijn beroepsregister.\n \n \n \n Algemene Voorwaarden Consumenten voor Particulier Onderwijs en Opleidingen (NRTO){' '}\n \n \n \n Voor iedereen die cursussen van E-WISE volgt niet vanuit een professionele verplichting.\n \n \n \n \n \n \n \n \n );\n};\n\nTermsConditions.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default observer(TermsConditions);\n","import { Button } from '@mui/material';\nimport { getFaqUrl } from 'helpers/Helpers';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport useJsonApi from 'hooks/useJsonApi';\n\nconst FaqLink = () => {\n const { t } = useTranslation();\n const store = useStore();\n const baseProductId = store?.baseProduct?.uuid;\n const currentLabel = store.label;\n // HOOK\n const fetchUrl = `base_product/${baseProductId}`;\n const fetchQuery = `include=profession&fields[profession]=name`;\n const { response, loading, error } = useJsonApi(fetchUrl, fetchQuery);\n\n if (loading) return null;\n if (error) return null;\n\n const profession = response?.included?.[0]?.attributes?.name?.replace(/ /g, '-').replace('/', '').toLowerCase();\n const url = profession ? getFaqUrl(currentLabel, profession) : '';\n\n return (\n \n {t('footer.faq')}\n \n );\n};\n\nexport default FaqLink;\n","import { Button } from '@mui/material';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\n\nconst mapLabelToComplainsUrl = {\n ewise: 'https://www.e-wise.nl/klachtenprocedure',\n pe: 'https://www.pe-academy.nl/klachtenprocedure',\n po: 'https://www.po-online.nl/klachtenprocedure',\n cme: 'https://www.cme-online.nl/klachtenprocedure'\n};\n\nconst ComplaintsLink = () => {\n const { t } = useTranslation();\n const store = useStore();\n const { label } = store;\n const url = mapLabelToComplainsUrl[label];\n return (\n \n );\n};\n\nexport default ComplaintsLink;\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport { Grid, Typography, Box, Button } from '@mui/material';\n\n/* Custom styling */\nimport 'theme/base/Footer.scss';\n\nimport { setDataLeakUrl, setPrivacyStatementUrl } from 'helpers/Helpers';\nimport AccreditationPartners from 'components/common/AccreditationPartners';\nimport TermsConditions from './TermsConditions';\nimport { SecondaryLogo } from '../../../components/common/SecondaryLogo';\nimport FaqLink from './FaqLink';\nimport ComplaintsLink from './ComplaintsLink';\n\nconst Footer = () => {\n const { t } = useTranslation();\n const store = useStore();\n\n const [open, setOpen] = useState(false);\n\n const onClose = () => {\n setOpen(!open);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('footer.copyright.link2', 'Privacy & Cookie Policy')}\n \n \n \n \n {t('footer.copyright.link4', 'Report data breach')}\n \n \n\n \n\n {store?.baseProduct?.uuid && }\n\n \n \n \n \n {t('footer.copyright.iso', 'ISO 27001 & ISO 9001 certified')}\n \n \n \n \n {t('@ E-WISE')}\n \n \n {t('footer.copyright.rights', 'All rights reserved')}\n \n \n \n \n );\n};\nexport default observer(Footer);\n","import { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n\nimport { Box, Paper } from '@mui/material';\n\nimport ScrollUpButton from 'components/common/ScrollUpButton';\nimport MaintenanceModal from 'components/MaintenanceModal';\nimport LoadingPage from 'components/common/LoadingPage';\nimport { getThemeName, shouldShowSidebar } from 'helpers/Helpers';\nimport { useBreakpoint, useStore } from 'hooks';\nimport { useEffect } from 'react';\nimport LeftSideDrawer from './leftSideBar/LeftSideDrawer';\nimport { Header, HeaderContextProvider } from './header';\nimport Footer from './footer/Footer';\nimport 'theme/App.scss';\n\nconst MainLayout = ({ noSidebar, noPaper, children, footer, title, background, subtitle }) => {\n const store = useStore();\n const themeName = getThemeName();\n const showSidebar = shouldShowSidebar(store);\n const breakpoint = useBreakpoint();\n const isMobile = ['xs', 'sm'].includes(breakpoint);\n\n const extraClassOpenDrawer = showSidebar && store.openDrawer ? `open_drawer` : '';\n const extraClassMinDrawer = showSidebar && store.minDrawer ? `min_drawer` : '';\n const extraClassNoSidebar = !showSidebar ? `no_sidebar` : '';\n const extraClassIsMobile = isMobile ? `is_mobile` : '';\n const extraClassIsMicroLearning = store.isMicrolearning ? `is_microlearning` : '';\n\n useEffect(() => {\n store.setStoreValue('noSidebar', noSidebar);\n }, [store, noSidebar]);\n\n if (store.state === 'loading') {\n return ;\n }\n\n return (\n <>\n \n {showSidebar && }\n \n {noPaper ? (\n children\n ) : (\n \n \n
    \n \n {children}\n \n {footer &&
    }\n \n )}\n \n \n \n \n );\n};\n\nMainLayout.propTypes = {\n children: PropTypes.element,\n noSidebar: PropTypes.bool,\n noPaper: PropTypes.bool,\n footer: PropTypes.bool,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n subtitle: PropTypes.string,\n background: PropTypes.bool\n};\n\nexport default observer(MainLayout);\n","import { SvgIcon } from '@mui/material';\n\nconst Quiz = (props) => (\n \n \n \n {' '}\n \n);\n\nexport default Quiz;\n","import PropTypes from 'prop-types';\nimport { Box, Button } from '@mui/material';\nimport SwipeableViews from 'react-swipeable-views';\nimport { useState, useEffect, Children, cloneElement, useCallback, useRef } from 'react';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\n\nexport const CarouselItem = ({ children, className }) => (\n
    {children}
    \n);\n\nCarouselItem.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nconst Slider = ({ children }) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [isPaused, setIsPaused] = useState(false);\n\n const swipeState = useRef({ x: 0 });\n\n const handleMouseDown = (e) => {\n swipeState.current.x = e.screenX;\n };\n\n const handleClick = (e) => {\n const delta = Math.abs(e.screenX - swipeState.current.x);\n if (delta > 10) {\n e.preventDefault();\n }\n };\n\n const updateIndex = useCallback(\n (newIndex) => {\n const count = Children.count(children);\n if (newIndex < 0) {\n newIndex = count - 1;\n } else if (newIndex >= count) {\n newIndex = 0;\n }\n setActiveIndex(newIndex);\n },\n [children]\n ); // Depend on children as it defines the total number of slides\n\n useEffect(() => {\n let interval;\n if (!isPaused) {\n interval = setInterval(() => {\n updateIndex(activeIndex + 1);\n }, 4000); // Changes slide every 2 seconds\n }\n\n return () => clearInterval(interval); // Clean up the interval on component unmount\n }, [activeIndex, isPaused, updateIndex]); // Now includes updateIndex as a dependency\n\n return (\n setIsPaused(true)} onMouseLeave={() => setIsPaused(false)}>\n \n {Children.map(children, (child, index) => (\n setIsPaused(true)}\n onMouseLeave={() => setIsPaused(false)}\n >\n {cloneElement(child)}\n 1 ? 1 : 0 }}>\n {Children.map(children, (indicatorChild, buttonIndex) => (\n {\n updateIndex(buttonIndex);\n setIsPaused(true); // Keep paused state when an indicator is clicked\n }}\n >\n \n \n ))}\n \n \n ))}\n \n \n );\n};\n\nSlider.propTypes = {\n children: PropTypes.node\n};\n\nexport default Slider;\n","import { observer } from 'mobx-react';\nimport { Box, Button, Typography } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nconst NotFound = () => {\n const { t } = useTranslation();\n const PRIMARY_MAIN = 'rgb(0, 121, 107)';\n const PRIMARY_DARKER = 'rgb(0, 105, 92)';\n\n return (\n
    \n

    {t('notFoundPage.title')}

    \n \n

    {t('notFoundPage.message')}

    \n \n \n {/* */}\n {/* SUN */}\n \n \n \n \n \n \n {/* CLOUDS */}\n \n {/* HAND */}\n \n \n \n \n {/* 43 */}\n \n \n \n
    \n );\n};\n\nexport default observer(NotFound);\n","import PropTypes from 'prop-types';\nimport SaveIcon from '@mui/icons-material/Save';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { useTranslation } from 'react-i18next';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport classNames from 'classnames';\nimport { makeStyles } from '@mui/styles';\nimport { Button } from '@mui/material';\nimport { green } from '@mui/material/colors';\n\nconst useStyles = makeStyles({\n buttonSuccess: {\n backgroundColor: green[500],\n '&:hover': {\n backgroundColor: green[700]\n }\n },\n fab: {\n position: 'relative',\n backgroundColor: green[500],\n marginLeft: '6px',\n marginTop: '15px',\n '&:hover': {\n backgroundColor: green[700]\n }\n },\n fabProgress: {\n color: green[500],\n marginTop: '15px',\n position: 'absolute',\n right: '-6px'\n },\n wrapper: {\n marginBottom: '10px',\n position: 'relative'\n }\n});\n\n// renders a save button with a tooltip\nconst SaveButton = (props) => {\n const classes = useStyles();\n const { canSave, isSubmitting } = props;\n const { t } = useTranslation('widget');\n return (\n \n : }\n >\n {t('edit.widget.save', 'Save widget')}\n \n \n );\n};\n\nSaveButton.propTypes = {\n canSave: PropTypes.bool.isRequired,\n isSubmitting: PropTypes.bool.isRequired\n};\n\nexport default SaveButton;\n","import PropTypes from 'prop-types';\nimport { Button } from '@mui/material';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconDelete from '@mui/icons-material/Delete';\nimport { useTranslation } from 'react-i18next';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport classNames from 'classnames';\nimport { makeStyles } from '@mui/styles';\nimport { red } from '@mui/material/colors';\n\n// renders a delete button with a tooltip\nconst useStyles = makeStyles((theme) => ({\n name: {\n margin: ''\n },\n fabDelete: { marginTop: '15px' },\n fabRed: {\n width: '100%',\n maxWidth: '200px',\n color: theme.palette.common.white,\n backgroundColor: red[700],\n marginTop: '15px',\n '&:hover': {\n backgroundColor: red[900]\n }\n }\n}));\n\nconst DeleteButton = (props) => {\n const classes = useStyles();\n const { item, onClick, disabled } = props;\n const tooltipText = `Delete this ${item}`;\n const isDisabled = !!disabled;\n const { t } = useTranslation('widget');\n\n return (\n \n \n }\n >\n {t('edit.widget.delete', 'Delete widget')}\n \n \n \n );\n};\n\nDeleteButton.propTypes = {\n item: PropTypes.any,\n disabled: PropTypes.any,\n onClick: PropTypes.func\n};\n\nexport default DeleteButton;\n","/* Core */\nimport { useState } from 'react';\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Accordion, AccordionDetails, AccordionSummary, ClickAwayListener } from '@mui/material';\n\n/* MUI - Icons */\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\n\n/*\nIn summary, the AccordionComponent is a reusable component for creating accordions with customizable titles, content, and expand/collapse behavior. \nIt can be used to display and hide content sections, and it provides the flexibility to customize the expand/collapse icon. \nAdditionally, it allows for the accordion to be collapsed by clicking away from it when the clickAway prop is set to true.\n*/\nconst AccordionComponent = ({ title, body, open, addIcon, clickAway }) => {\n const [expand, setExpand] = useState(open);\n\n const handleChange = () => {\n setExpand(!expand);\n };\n const handleClickAway = () => {\n if (clickAway) {\n setExpand(false);\n }\n };\n\n return (\n \n \n }\n sx={{ [`.MuiAccordionSummary-expandIconWrapper`]: { backgroundColor: addIcon && 'background.main' } }}\n >\n {title}\n \n {body}\n \n \n );\n};\n\nAccordionComponent.propTypes = {\n title: PropTypes.any,\n body: PropTypes.any,\n addIcon: PropTypes.any,\n open: PropTypes.bool,\n clickAway: PropTypes.bool\n};\n\nexport default AccordionComponent;\n","import { Suspense, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport MainLayout from '../../pages/mainLayout/MainLayout';\n\n// TODO: centreren CircularProgress\n// renders a CircularProgress while the children are being loaded\nconst Lazy = ({ children, noLayout, title }) => {\n const Suspended = useMemo(\n () => (\n \n \n
    \n }\n >\n {children}\n \n ),\n [children]\n );\n\n return noLayout ? Suspended : {Suspended};\n};\n\nLazy.propTypes = {\n children: PropTypes.object.isRequired,\n noLayout: PropTypes.bool,\n title: PropTypes.element\n};\n\nLazy.defaultProps = {\n noLayout: false\n};\n\nexport default Lazy;\n","/* Core */\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport LinearProgress from '@mui/material/LinearProgress';\n\n// renders a LinearProgress with a label\nconst LinearProgressWithLabel = ({ value, color, ...props }) => (\n \n \n \n \n \n {`${Math.round(value)}%`}\n \n \n);\n\nLinearProgressWithLabel.propTypes = {\n value: PropTypes.number.isRequired,\n color: PropTypes.string\n};\n\nexport default LinearProgressWithLabel;\n","import { IconButton } from '@mui/material';\nimport { Fingerprint } from '@mui/icons-material';\nimport { observer } from 'mobx-react';\nimport { useStore, useCustomTheme } from 'hooks';\n\n/*\nIn summary, the ToggleColorMode component provides a simple user interface for switching between different color themes for the application. \nWhen a user clicks one of the themed buttons, it not only changes the color theme but may also initiate the retrieval of theme-specific content. \nThis feature allows for a dynamic and customized user experience based on the selected theme.\n*/\nconst ToggleColorMode = () => {\n const { setThemeName } = useCustomTheme();\n const store = useStore();\n\n return (\n
    \n {\n setThemeName('ewiseTheme');\n store.fetchFaqByLabel('ewise');\n }}\n >\n \n \n {\n setThemeName('cmeTheme');\n store.fetchFaqByLabel('cme');\n }}\n >\n \n \n {\n setThemeName('poTheme');\n store.fetchFaqByLabel('po');\n }}\n >\n \n \n
    \n );\n};\nexport default observer(ToggleColorMode);\n","import PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport { red, green } from '@mui/material/colors';\n\n/*\nIn summary, the ErrorBox component provides a visually appealing way to present error information to users. \nIt can display a title, a message, and the status of the error, with sensible default values for cases where specific error information is not provided. \nThe component's styling is determined by the external styles defined in the classes variable, which are not shown in the provided code snippet.\n*/\nconst useStyles = makeStyles(() => ({\n card: {\n minWidth: 275,\n marginBottom: '50px',\n width: '80%'\n },\n cardError: {\n backgroundColor: red[50],\n color: red[700]\n },\n cardInfo: {\n backgroundColor: green[700],\n color: 'white'\n },\n message: {\n fontSize: 18,\n textAlign: 'center',\n color: 'black'\n }\n}));\n\nexport const ErrorBox = ({ error }) => {\n const classes = useStyles();\n\n return (\n \n \n \n {error.title || error.name || 'Er is iets fout gegaan'}\n \n \n {error.message || 'Onbekende fout'}\n \n
    \n \n Status: {error.status}\n \n
    \n
    \n );\n};\n\nErrorBox.propTypes = {\n error: PropTypes.object.isRequired\n};\n","import { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\nimport Card from '@mui/material/Card';\n\nconst useStyles = makeStyles({\n root: {\n height: '100%'\n },\n center: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n card: {\n minWidth: 375,\n minHeight: 375\n },\n load: {\n textAlign: 'center'\n }\n});\n\n// renders a CircularProgress while the children are being loaded\nconst Load = ({ state }) => {\n const store = useContext(Store);\n const classes = useStyles();\n\n if (state === 'error') {\n return (\n
    \n
    {store.error && `${store.error.name} : ${store.error.message} status: ${store.error.status}`}
    \n
    \n );\n }\n return (\n
    \n \n
    \n \n Retrieving the pages....\n \n
    \n

    \n \n \n \n

    \n \n
    \n );\n};\n\nLoad.propTypes = {\n state: PropTypes.string\n};\n\nexport default Load;\n","import PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { makeStyles } from '@mui/styles';\n\nimport CircularProgress from '@mui/material/CircularProgress';\n\nconst useStyles = makeStyles({\n container: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n display: 'block',\n zIndex: '1003'\n },\n innerText: {\n textAlign: 'center',\n width: '100%',\n height: '100%',\n fontSize: '15px',\n fontWeight: '300',\n background: 'whitesmoke',\n color: 'black'\n }\n});\n\n// renders a CircularProgress while the children are being loaded\nconst Loading = (props) => {\n const { isLoading, msg } = props;\n const classes = useStyles();\n return (\n <>\n {isLoading && (\n
    \n
    \n
    \n \n
    \n
    {msg}
    \n
    \n
    \n )}\n \n );\n};\n\nLoading.propTypes = {\n isLoading: PropTypes.bool,\n msg: PropTypes.string\n};\n\nexport default observer(Loading);\n","/* Core */\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, Tabs, Tab } from '@mui/material';\n\n/*\nIn summary, the TabComponent is a flexible tabbed interface component that allows developers to create tabbed navigation elements. \nIt can render tabs as interactive elements with click handlers or as links that navigate to specific sections on the page. \nThe component provides control over the appearance and behavior of the tabs through its props, making it suitable for a variety of use cases.\n*/\nconst TabComponent = (props) => {\n const { tabs, variant, orientation, selectedTab, indicatorColor, ...rest } = props;\n return (\n \n \n {tabs.map(\n (item) =>\n item &&\n (selectedTab ? (\n \n ) : (\n \n ))\n )}\n \n \n );\n};\n\nTabComponent.propTypes = {\n tabs: PropTypes.array,\n variant: PropTypes.string,\n orientation: PropTypes.string,\n selectedTab: PropTypes.any,\n indicatorColor: PropTypes.string\n};\n\nexport default TabComponent;\n","import { Alert, Snackbar, IconButton, Box } from '@mui/material';\nimport { useState, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\n\n/*\nIn summary, the ToastItem component is used to create customizable and dismissible toast messages in a web application. \nIt listens to changes in a global state for toast notifications and provides a consistent way to display feedback or information to the user.\n*/\nconst ToastItem = (props) => {\n const { message, variant, courseIntroduction, horizontal, vertical } = props;\n\n const store = useContext(Store);\n\n const [open, setOpen] = useState(store.isToastvisible);\n\n useEffect(() => {\n // eslint-disable-next-line no-unused-expressions\n store.isToastvisible && setOpen(true);\n }, [store.toastStates, store.isToastvisible]);\n\n const handleClose = () => {\n setOpen(false);\n store.hideToast();\n };\n\n const icons = {\n success: ,\n info: ,\n warning: ,\n error: \n };\n return (\n \n \n \n \n }\n >\n \n {icons[variant]} \n {message}\n \n \n \n );\n};\n\nToastItem.propTypes = {\n message: PropTypes.string,\n variant: PropTypes.oneOf(['success', 'info', 'warning', 'error']),\n courseIntroduction: PropTypes.bool,\n horizontal: PropTypes.string,\n vertical: PropTypes.string\n};\nexport default observer(ToastItem);\n","import { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\nimport { Stack } from '@mui/material';\nimport { uniqueId } from 'lodash';\nimport ToastItem from './Toast';\nimport 'theme/components/toast.scss';\n\n/*\nIn summary, the ToastContainer component is responsible for rendering toast messages within a stack.\nIt listens for changes in the global state and dynamically displays toast messages based on the content and configuration stored in the toastStates array.\nThe component ensures that a reasonable number of toast messages are displayed, even when there are many in the array.\n*/\nconst ToastContainer = () => {\n const store = useContext(Store);\n const { isToastvisible, toastStates } = store;\n\n return isToastvisible && toastStates.length ? (\n \n {toastStates.length < 3\n ? toastStates.map((toast) => )\n : toastStates.filter((item, index) => index > toastStates.length - 4).map((toast) => )}\n \n ) : null;\n};\n\nexport default observer(ToastContainer);\n","import { Tooltip } from '@mui/material';\nimport PropTypes from 'prop-types';\n\n// TODO: Only used in customTable and openInvitesLyout.If we decide to not use it remove from components\n\nconst EnhancedTooltip = ({ tooltipText, icon }) => (\n \n {!!icon && icon}\n \n);\n\nEnhancedTooltip.propTypes = {\n tooltipText: PropTypes.string,\n icon: PropTypes.element\n};\n\nexport default EnhancedTooltip;\n","/**\n * Allows for nested properties to be accessed\n *\n * @param {*} propName - the property name to access, for example 'name', 'attributes.name', or 'attributes.child.name'\n * @param {*} el - the element to access the property from, for example { id: 1, type: 'user', attributes: { name: 'John Doe' } }\n * @returns\n */\nexport const getObjectPropValue = (propName, el) => {\n if (propName.indexOf('.') === -1) {\n return el[propName];\n }\n\n return propName.split('.').reduce((acc, val) => {\n if (!acc) return undefined;\n\n if (Object.hasOwn(acc, val)) {\n return acc[val];\n }\n\n return undefined;\n }, el);\n};\n","import { TableCell } from '@mui/material';\nimport { PropTypes } from 'prop-types';\n\nconst CustomCell = ({ sx, classes, children, ...rest }) => (\n \n {children}\n \n);\n\nexport default CustomCell;\n\nCustomCell.propTypes = {\n sx: PropTypes.any,\n classes: PropTypes.string,\n children: PropTypes.any\n};\n","import { TableCell, Button, Popover } from '@mui/material';\nimport { Icon } from '@iconify/react';\nimport { PropTypes } from 'prop-types';\nimport { useState } from 'react';\n\n/*\nIn summary, the CustomCell component creates a table cell with a button that, when clicked, displays custom content in a popover. \nIt's a flexible and reusable component for creating interactive tables or grids with popovers.\n*/\nconst CustomCell = ({ sx, children, ...rest }) => {\n const [acl, setAcl] = useState(null);\n return (\n \n {\n setAcl(e.currentTarget);\n }}\n >\n \n \n\n {\n setAcl(null);\n }}\n anchorOrigin={{\n vertical: 'center',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'center',\n horizontal: 'right'\n }}\n >\n {children}\n \n \n );\n};\n\nexport default CustomCell;\n\nCustomCell.propTypes = {\n sx: PropTypes.any,\n children: PropTypes.any\n};\n","import PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { useTranslation } from 'react-i18next';\n\n// TODO: Only used in customTable.If we decide to not use it remove from components\n/*\nIn summary, the DeleteDialog component is a customizable confirmation dialog for deleting a record. \nIt provides a clear and user-friendly way to confirm or cancel the delete action. \nIt also allows for styling customization to fit the application's design.\n*/\nconst DeleteDialog = ({ numberOfRecords, deleteOpen, handleDeleteDialogClose, handleDeleteRecord }) => {\n const { t } = useTranslation('datagrid');\n\n const text = {\n btnText: t('deleteModal.btnText'),\n title: t('deleteModal.title', { count: numberOfRecords }),\n content: t('deleteModal.content', { count: numberOfRecords }),\n closeBtn: t('deleteModal.closeBtn'),\n actionBtn: t('deleteModal.actionBtn')\n };\n\n return (\n
    \n \n \n {text.title}\n \n \n {text.content}\n \n \n \n \n {text.actionBtn}\n \n \n \n
    \n );\n};\n\nDeleteDialog.propTypes = {\n numberOfRecords: PropTypes.number,\n deleteOpen: PropTypes.bool,\n handleDeleteDialogClose: PropTypes.func,\n handleDeleteRecord: PropTypes.func\n};\n\nexport default DeleteDialog;\n","import { CSVLink } from 'react-csv';\nimport PropTypes from 'prop-types';\n\n// TODO: Only used in customTable.If we decide to not use it remove from components\n\nconst CSVExport = ({ data, children }) => {children};\n\nCSVExport.propTypes = {\n data: PropTypes.array,\n children: PropTypes.any\n};\n\nexport default CSVExport;\n","import { uniqueId } from 'lodash';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '@iconify/react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport LinearProgress, { linearProgressClasses } from '@mui/material/LinearProgress';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\n\nimport EnhancedTooltip from 'components/EnhancedTooltip';\nimport { getObjectPropValue } from 'helpers/getObjectPropValue';\nimport CustomTableCell from './CustomTableCell';\nimport ActionTableCell from './ActionTableCell';\nimport DeleteDialog from '../../DeleteDialogBox';\nimport CSVExport from '../../CSVExport';\n\nfunction descendingComparator(a, b, orderBy) {\n const valA = getObjectPropValue(orderBy, a);\n const valB = getObjectPropValue(orderBy, b);\n\n if (valB < valA) {\n return -1;\n }\n if (valB > valA) {\n return 1;\n }\n return 0;\n}\n\nfunction getComparator(order, orderBy) {\n return order === 'desc' ? (a, b) => descendingComparator(a, b, orderBy) : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\nfunction stableSort(array, comparator) {\n const stabilizedThis = array.map((el, index) => [el, index]);\n stabilizedThis.sort((a, b) => {\n const order = comparator(a[0], b[0]);\n if (order !== 0) {\n return order;\n }\n return a[1] - b[1];\n });\n return stabilizedThis.map((el) => el[0]);\n}\n\nconst EnhancedTableHead = (props) => {\n const { tableHeadData, onSelectAllClick, order, orderBy, numSelected, rowCount, onRequestSort, checkboxes, moreInfoBtn } = props;\n const createSortHandler = (property) => (event) => {\n onRequestSort(event, property);\n };\n return (\n \n \n {!!checkboxes && (\n \n 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n inputProps={{\n 'aria-label': 'select all names'\n }}\n />\n \n )}\n {tableHeadData.map((headCell) => (\n \n {!headCell?.hidden ? (\n \n {headCell.disableSorting === false && orderBy === headCell.id ? (\n \n {headCell.label}\n {/* {orderBy === headCell.id ? {order === 'desc' ? 'sorted descending' : 'sorted ascending'} : null} */}\n \n ) : (\n \n {headCell.label}\n \n )}\n \n ) : (\n <>\n )}\n \n ))}\n {!!moreInfoBtn && (\n \n  \n \n )}\n \n \n );\n};\n\nEnhancedTableHead.propTypes = {\n tableHeadData: PropTypes.array,\n numSelected: PropTypes.number.isRequired,\n onRequestSort: PropTypes.func.isRequired,\n onSelectAllClick: PropTypes.func.isRequired,\n order: PropTypes.oneOf(['asc', 'desc']).isRequired,\n orderBy: PropTypes.string.isRequired,\n rowCount: PropTypes.number.isRequired,\n checkboxes: PropTypes.bool,\n moreInfoBtn: PropTypes.bool\n};\n\nconst CustomTable = ({\n tableName,\n selectedButtons,\n additionalButtons: Buttons,\n tableHeadData,\n data,\n setData,\n setPresent,\n handleRowClick,\n checkboxes,\n moreInfoBtn,\n actions,\n actionProps,\n tableSx = {},\n rowsPerPage = 10,\n rowSx = () => {}\n}) => {\n const { t } = useTranslation('datagrid');\n const [order, setOrder] = React.useState('asc');\n const [orderBy, setOrderBy] = React.useState('email');\n const [selected, setSelected] = React.useState([]);\n const [page, setPage] = React.useState(0);\n // const [dense, setDense] = React.useState(false);\n const [_rowsPerPage, setRowsPerPage] = React.useState(rowsPerPage);\n const dense = false;\n const [deleteOpen, setDeleteOpen] = React.useState(false);\n const handleDeleteDialogOpen = () => setDeleteOpen(true);\n const handleDeleteDialogClose = () => setDeleteOpen(false);\n const handleRequestSort = (event, property) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n };\n const handleSelectAllClick = (event) => {\n if (event.target.checked) {\n const newSelected = data.map((n) => n.id);\n setSelected(newSelected);\n return;\n }\n setSelected([]);\n };\n const handleCheckBoxClick = (id) => {\n const selectedIndex = selected.indexOf(id);\n let newSelected = [];\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selected, id);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selected.slice(1));\n } else if (selectedIndex === selected.length - 1) {\n newSelected = newSelected.concat(selected.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));\n }\n setSelected(newSelected);\n };\n const handleChangePage = (event, newPage) => {\n setPage(newPage);\n };\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n const handleDeleteAll = () => {\n setData(\n data.filter((col) => !selected.includes(col.id)),\n selected\n );\n handleDeleteDialogClose();\n setSelected([]);\n };\n const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({\n height: 10,\n borderRadius: 5,\n [`&.${linearProgressClasses.colorPrimary}`]: {\n backgroundColor: theme.palette.grey[200]\n },\n [`& .${linearProgressClasses.bar}`]: {\n borderRadius: 5,\n backgroundColor: theme.palette.primary.main\n }\n }));\n const sliceText = (text, len) => {\n if (text && text.length > len) {\n return `${text.slice(0, len)}...`;\n }\n\n return text;\n };\n\n const getColumnContent = (row, column) => {\n const { id, type } = column;\n switch (type) {\n case 'text':\n return column.slice ? sliceText(getObjectPropValue(id, row), column.slice) : getObjectPropValue(id, row);\n case 'component':\n return column.component({ row, column });\n case 'progress-bar':\n return (\n \n \n \n {`${Math.round(getObjectPropValue(id, row))}%`}\n \n \n );\n default:\n return getObjectPropValue(id, row);\n }\n };\n const isSelected = (id) => selected.indexOf(id) !== -1;\n // Avoid a layout jump when reaching the last page with empty rows.\n const emptyRows = page > 0 ? Math.max(0, (1 + page) * _rowsPerPage - data.length) : 0;\n\n const firstColumnStyle = { borderLeft: '1px solid #EEEEEE', borderRadius: '20px 0 0 20px' };\n const lastColumnStyle = { padding: 0, borderRight: '1px solid #EEEEEE', borderRadius: '0 20px 20px 0', textAlign: 'right' };\n const cornerBorderStyles = (i) => ({\n borderLeft: i === 0 && !checkboxes ? '1px solid #EEEEEE' : '',\n borderTopLeftRadius: i === 0 && !checkboxes ? '15px' : '',\n borderBottomLeftRadius: i === 0 && !checkboxes ? '15px' : '',\n borderRight: i === tableHeadData.length - 1 && !moreInfoBtn ? '1px solid #EEEEEE' : '',\n borderTopRightRadius: i === tableHeadData.length - 1 && !moreInfoBtn ? '15px' : '',\n borderBottomRightRadius: i === tableHeadData.length - 1 && !moreInfoBtn ? '15px' : ''\n });\n\n const hasCheckedItems = !!selected.length;\n const hasSelectionActionButton = !!selectedButtons?.length;\n\n return (\n \n handleDeleteAll()}\n numberOfRecords={selected.length}\n />\n \n {hasCheckedItems && hasSelectionActionButton && (\n \n \n \n {selected.length} {t('general.selected')}\n \n\n {selectedButtons.includes('additionalButtons') && Buttons}\n\n {selectedButtons.includes('csv-download') && (\n \n selected.includes(col.id))}>\n \n \n \n )}\n\n {selectedButtons.includes('delete') && (\n handleDeleteDialogOpen()}\n >\n \n \n )}\n \n \n )}\n\n {hasCheckedItems && tableName === 'attendance' && (\n \n setPresent(selected)}\n >\n Mark Present\n \n \n )}\n\n \n \n\n \n {/* if you don't need to support IE11, you can replace the `stableSort` call with:\n rows.slice().sort(getComparator(order, orderBy)) */}\n {stableSort(data, getComparator(order, orderBy))\n .slice(page * _rowsPerPage, page * _rowsPerPage + _rowsPerPage)\n .map((row, index) => {\n const isItemSelected = isSelected(row.id);\n const labelId = `enhanced-table-checkbox-${index}`;\n return (\n \n {!!checkboxes && (\n handleCheckBoxClick(row.id)}>\n \n \n )}\n {!!tableHeadData &&\n tableHeadData.map((column, i) => (\n \n {!column?.hidden ? (\n handleRowClick(event, row.id) : undefined}\n >\n {tableName === 'courseStudents' && column.id === 'completed' && row[column.id] && (\n \n \n \n )}\n {tableName === 'courseStudents' && column.id === 'completed' && !row[column.id] && (\n \n \n \n )}\n {(() => {\n if (tableName === 'courseStudents' && column.id === 'completed') {\n // Display date if completed else display percentage\n if (row[column.id]) return `${row.completionDate}`;\n return `${row.completedPercentage}%`;\n }\n return getColumnContent(row, column);\n })()}\n \n ) : (\n <>\n )}\n \n ))}\n {!!moreInfoBtn && actions && (\n \n {actions({ ...actionProps, id: row.id })}\n \n )}\n \n );\n })}\n {emptyRows > 0 && (\n \n \n \n )}\n \n \n \n\n {rowsPerPage <= data.length && (\n \n )}\n \n );\n};\n\nCustomTable.propTypes = {\n tableSx: PropTypes.any,\n tableName: PropTypes.string,\n data: PropTypes.array,\n setData: PropTypes.func,\n setPresent: PropTypes.func,\n tableHeadData: PropTypes.array,\n selectedButtons: PropTypes.array,\n additionalButtons: PropTypes.any,\n handleRowClick: PropTypes.func,\n checkboxes: PropTypes.bool,\n moreInfoBtn: PropTypes.bool,\n actions: PropTypes.func,\n actionProps: PropTypes.shape({\n onDelete: PropTypes.func,\n onDownlaod: PropTypes.func\n }),\n rowsPerPage: PropTypes.oneOf([5, 10, 25, 50, 100]),\n rowSx: PropTypes.func\n};\n\nexport default CustomTable;\n","import { formatNumbersWithComma } from './Helpers';\n\n// Prepares table data (array of row objects) for export\n// by applying some necessary formatting for correct export results.\nexport const prepareTableData = (tableData) => tableData.map((row) => {\n // Format numeric values.\n const formatted = formatNumbersWithComma(row, ['points', 'sum_points']);\n // Prevent console errors by replacing null values with empty strings.\n return Object.fromEntries(Object.entries(formatted).map(([key, value]) => [key, value === null ? '' : value]));\n})\n\n// Gets all data to be exported.\n// Either the already present data or remote data.\nexport const getExportData = (async (tableDef, originalData) => {\n let data = originalData || [];\n\n if (typeof tableDef?.props?.data === 'function') {\n const { query, pageSize } = tableDef.state;\n\n if ((query?.totalCount || 0) > pageSize) {\n data = await getAllRemoteData(tableDef);\n }\n }\n\n return data;\n});\n\n// Gets all data to be exported. Formatted.\n// Either the already present data or remote data.\nexport const getExportDataFormatted = (async (tableRef, data = []) => {\n const exportData = await getExportData(tableRef, data);\n return prepareTableData(exportData);\n});\n\n// Gets all data from remote source.\n// All data is loaded and preprocessed based on\n// the current table definition, ignoring table pager settings.\nconst getAllRemoteData = (async (tableDef) => {\n let data = [];\n\n if (typeof tableDef?.props?.data === 'function') {\n const { query } = tableDef.state;\n const { dataManager } = tableDef;\n const pageSize = tableDef?.props?.options?.pageSizeOptions?.slice(-1) || 50;\n const totalPages = Math.ceil((query?.totalCount || 0) / pageSize);\n\n const promises = [];\n for (let i = 0; i < totalPages; i++) {\n const result = tableDef?.props?.data({ ...query, page: i, pageSize });\n promises.push(result);\n }\n\n const results = await Promise.all(promises);\n results.forEach((result) => {\n data = [...data, ...result?.data || []];\n });\n\n data = data.map(row => {\n const newRow = [];\n dataManager.columns.forEach((colDef) => {\n newRow.push([colDef.field, dataManager.getFieldValue(row, colDef)]);\n });\n return Object.fromEntries(newRow);\n });\n }\n\n return data;\n});\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook to make an arbitrary fetch api request\n *\n * @returns {{response: unknown, error: unknown, loading: boolean}}\n * @param url\n * @param params\n */\nconst useAPI = (url, params) => {\n const [response, setResponse] = useState(null);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const doFetch = async () => {\n setLoading(true);\n try {\n const res = await window.authedClient.get(url, params);\n setResponse(res.data);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n };\n doFetch();\n }, [url, params]);\n return { response, error, loading };\n};\nexport default useAPI;\n","import { endOfYear, getDate, getMonth, getYear, isToday, isValid, startOfYear } from 'date-fns';\n\nfunction isAugustFirst(date) {\n return getMonth(date) === 7 && getDate(date) === 1;\n}\n\n// a school year is defined as last year 1st of August to this year 1st of August\n// this fuction checks if the given start date is 1st of August and the end date doesn't exceed 1 year\n// 01/08/2023 - 01/08/2024 all dates that are in this interval are valide school year dates\nexport function isSchoolYear(startDate, endDate) {\n // check if both dates are valid\n if (!isValid(startDate) || !isValid(endDate)) {\n return false;\n }\n // check if the difference in years is 1 or 0\n if (getYear(endDate) - getYear(startDate) !== 0 && getYear(endDate) - getYear(startDate) !== 1) {\n return false;\n }\n\n return isAugustFirst(startDate) && (isAugustFirst(endDate) || isToday(endDate));\n}\n\nexport function isFullYear(startDate, endDate) {\n // check if both dates are valid\n if (!isValid(startDate) || !isValid(endDate)) {\n return false;\n }\n // check if both dates are in the same year\n if (getYear(startDate) !== getYear(endDate)) {\n return false;\n }\n if (startDate.getTime() !== startOfYear(startDate).getTime()) {\n return false;\n }\n\n return isToday(endDate) || endDate.getTime() === endOfYear(endDate).getTime();\n}\n","import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport {\n Box,\n Button,\n FormControl,\n InputAdornment,\n InputLabel,\n MenuItem,\n Popover,\n Select,\n Stack,\n TextField,\n Typography\n} from '@mui/material';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { endOfYear, format, set, startOfYear } from 'date-fns';\nimport { range as lodashRange } from 'lodash';\nimport nl from 'date-fns/locale/nl';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isFullYear, isSchoolYear } from '../utils';\n\nconst OPTIONS = {\n year: 'year',\n schoolYear: 'schoolYear',\n custom: 'custom'\n};\n\nfunction getRangeInput({ from, to, translation, isEwiseLabel }) {\n if (!from || !to) return '';\n const fromDate = new Date(from);\n const toDate = new Date(to);\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n\n if (isEwiseLabel && isSchoolYear(fromDate, toDate)) {\n const shoolYear = toDate.getFullYear() === fromDate.getFullYear() ? toDate.getFullYear() + 1 : toDate.getFullYear();\n return `${translation.schoolYear}-${shoolYear - 1}/${shoolYear}`;\n }\n\n return `${format(fromDate, 'dd-MM-yyyy')} - ${format(toDate, 'dd-MM-yyyy')}`;\n}\n\nconst DateRange = ({ handleRangeDate, from, to }) => {\n const store = useStore();\n const { t } = useTranslation();\n const [anchorEl, setAnchorEl] = useState(null);\n const isEwiseLabel = store?.label === 'ewise';\n\n // _________ set range ___________\n const [range, setRange] = useState(() => {\n if (!from || !to) return null;\n const fromDate = new Date(from);\n const toDate = new Date(to);\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n if (!isEwiseLabel && isFullYear(fromDate, toDate)) {\n return OPTIONS.year;\n }\n if (isEwiseLabel && isSchoolYear(fromDate, toDate)) {\n return OPTIONS.schoolYear;\n }\n return OPTIONS.custom;\n });\n\n const maxDate = new Date();\n const minDate = new Date(2022, 0, 1);\n\n // _________ set fromDate ___________\n const [fromDate, setFromDate] = useState(() => {\n if (!from || !to) return minDate;\n const _fromDate = new Date(from);\n const currentDate = new Date();\n return _fromDate.getTime() < currentDate.getTime() ? _fromDate : minDate;\n });\n\n // _________ set toDate ___________\n const [toDate, setToDate] = useState(() => {\n if (!from || !to) return maxDate;\n const _toDate = new Date(to);\n return _toDate.getTime() < maxDate.getTime() ? _toDate : maxDate;\n });\n\n // _________ set schoolYear ___________\n const [schoolYear, setSchoolYear] = useState(from ? set(new Date(from), { year: new Date(from).getFullYear() + 1 }) : new Date());\n\n // _________ get range input ___________\n const rangeInputValue = getRangeInput({\n from,\n to,\n translation: {\n year: t('lms.toolBar.dateRange.year'),\n schoolYear: t('lms.toolBar.dateRange.schoolYear')\n },\n isEwiseLabel\n });\n\n const openPopover = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const closePopover = () => {\n setAnchorEl(null);\n };\n\n const handleClickApply = () => {\n if (typeof handleRangeDate !== 'function') {\n return console.error('date range handleRangeDate should be a function');\n }\n if (range === OPTIONS.year) {\n const startDate = startOfYear(toDate);\n const endDate = toDate.getFullYear() === maxDate.getFullYear() ? maxDate : endOfYear(toDate);\n handleRangeDate({ from: startDate, to: endDate });\n } else if (range === OPTIONS.schoolYear) {\n handleRangeDate({ from: fromDate, to: toDate });\n } else if (range === OPTIONS.custom) {\n handleRangeDate({ from: fromDate, to: toDate });\n } else {\n handleRangeDate({ from: '', to: '' });\n }\n return closePopover();\n };\n\n const open = Boolean(anchorEl);\n\n const handClickResetDefault = () => {\n const currentDate = new Date();\n let startDate;\n const endDate = currentDate;\n if (isEwiseLabel) {\n startDate =\n currentDate.getMonth() < 7\n ? set(currentDate, { year: currentDate.getFullYear() - 1, month: 7, date: 1 })\n : set(currentDate, { year: currentDate.getFullYear(), month: 7, date: 1 });\n\n setRange(OPTIONS.schoolYear);\n } else {\n startDate = set(currentDate, { month: 0, date: 1, hours: 0, minutes: 0, seconds: 0 });\n setRange(OPTIONS.year);\n }\n\n setFromDate(startDate);\n setToDate(endDate);\n handleRangeDate({ from: startDate, to: endDate });\n closePopover();\n };\n\n return (\n <>\n \n \n \n ),\n readOnly: true\n }}\n InputLabelProps={{\n shrink: true\n }}\n fullWidth\n />\n \n \n {/* Popover top including reset button */}\n \n {t('lms.toolBar.dateRange.title')}\n \n \n\n {/* SELECT DATE RANGE */}\n \n \n {t('lms.toolBar.dateRange.label')}\n \n {\n const { value } = event.target;\n setRange(value);\n if (value === OPTIONS.custom) {\n setFromDate(minDate);\n setToDate(maxDate);\n }\n }}\n >\n {(isEwiseLabel ? Object.keys(OPTIONS) : Object.keys(OPTIONS).filter((opt) => opt !== OPTIONS.schoolYear)).map((option) => (\n \n {t(`lms.toolBar.dateRange.${option}`)}\n \n ))}\n \n \n\n {/* SELECT second range */}\n {[OPTIONS.schoolYear, OPTIONS.year].includes(range) && (\n \n \n {t('lms.toolBar.dateRange.year')}\n \n \n {range === OPTIONS.schoolYear ? (\n {\n const value = set(schoolYear, { year: event.target.value });\n setSchoolYear(value);\n setFromDate(set(value, { year: value.getFullYear() - 1, month: 7, date: 1 }));\n setToDate(value, { year: value.getFullYear(), month: 7, date: 1 });\n }}\n >\n {lodashRange(minDate.getFullYear(), maxDate.getFullYear() + 1).map((year) => (\n \n {`${year}/${year + 1}`}\n \n ))}\n \n ) : (\n \n {\n setFromDate(value);\n setToDate(value);\n }}\n renderInput={(params) => }\n PopperProps={{\n sx: {\n '& .MuiYearPicker-root': {\n flexDirection: 'column',\n '& button': {\n fontSize: '18px',\n lineHeight: '18px',\n margin: '5px 0'\n }\n }\n }\n }}\n />\n \n )}\n \n \n )}\n\n {range === OPTIONS.custom && (\n <>\n \n \n {t('lms.toolBar.dateRange.from')}\n \n \n \n {\n if (value) {\n value.setHours(0, 0, 0);\n }\n setFromDate(value);\n }}\n renderInput={(params) => }\n />\n \n \n \n\n \n \n {t('lms.toolBar.dateRange.to')}\n \n \n \n {\n if (value) {\n value.setHours(23, 59, 59);\n }\n setToDate(value);\n }}\n renderInput={(params) => }\n />\n \n \n \n \n )}\n\n \n \n \n \n \n \n \n );\n};\n\nexport default DateRange;\n\nDateRange.propTypes = {\n handleRangeDate: PropTypes.func,\n from: PropTypes.string,\n to: PropTypes.string\n};\n","import PropTypes from 'prop-types';\nimport { Autocomplete, FormControl, TextField } from '@mui/material';\n\nconst DropDown = ({ value, handleChange, options, label, placeholder }) => (\n option?.profession_id === parseInt(value) || option?.organisation_id === parseInt(value)) || null}\n onChange={handleChange}\n options={options || []}\n getOptionLabel={(option) => option?.name}\n renderInput={(params) => (\n \n \n \n )}\n />\n);\n\nexport default DropDown;\nDropDown.propTypes = {\n handleChange: PropTypes.func,\n options: PropTypes.array,\n label: PropTypes.string,\n placeholder: PropTypes.string,\n value: PropTypes.any\n};\n","import { Grid, Box, Typography } from '@mui/material';\nimport { format } from 'date-fns';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport { useRouterStore } from 'mobx-state-router';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport DateRange from './DateRange';\nimport DropDown from './DropDown';\n\nconst LmsToolbar = ({ title, orgType, profType, dateType }) => {\n const { t } = useTranslation();\n const store = useStore();\n const routerStore = useRouterStore();\n\n const urlQueries = routerStore.routerState.queryParams;\n\n const handleChangeOrganisation = (event, newValue) => {\n const { queryParams } = routerStore.routerState; // Get the current query parameters\n const updatedParams = { ...queryParams, org_id: newValue?.organisation_id.toString() }; // Merge with new parameters\n routerStore.goTo(routerStore.routerState.routeName, { queryParams: updatedParams }); // Update the URL\n };\n const handleChangeProfession = (event, newValue) => {\n const { queryParams } = routerStore.routerState; // Get the current query parameters\n const updatedParams = { ...queryParams, profession: newValue?.profession_id.toString() }; // Merge with new parameters\n routerStore.goTo(routerStore.routerState.routeName, { queryParams: updatedParams }); // Update the URL\n };\n const handleRangeDate = ({ from, to }) => {\n const startdate = from ? format(from, 'yyyy-MM-dd') : undefined;\n const enddate = to ? format(to, 'yyyy-MM-dd') : undefined;\n const { queryParams, params } = routerStore.routerState; // Get the current query parameters\n const updatedParams = { ...queryParams, startdate, enddate }; // Merge with new parameters\n routerStore.goTo(routerStore.routerState.routeName, { queryParams: updatedParams }, { ...params }); // Update the URL\n };\n\n const parentOrgId = store.LmsDashboard?.parentOrgId;\n\n return (\n \n \n {title && (\n \n \n {title}\n \n \n )}\n {orgType === 1 && !store.showMenuAssistant && (\n \n \n \n )}\n {profType === 1 && !store.showMenuAssistant && (\n \n \n \n )}\n {dateType === 1 && (\n \n \n \n )}\n \n \n );\n};\n\nexport default observer(LmsToolbar);\n\nLmsToolbar.propTypes = {\n title: PropTypes.string,\n orgType: PropTypes.number,\n profType: PropTypes.number,\n dateType: PropTypes.number\n};\n","import { observer } from 'mobx-react';\nimport { useContext, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useScrollPosition } from 'hooks';\nimport { IconButton } from '@mui/material';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\n\n// renders a button that scrolls to the top of the page\nconst ScrollUpButton = () => {\n const store = useContext(Store);\n\n const defaultColor = '#ffa601';\n const defaultColorHover = '#d88204e8';\n\n const scrolling = useScrollPosition();\n\n const isScrolled = scrolling > 1100;\n\n const scrolltop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n const saveScrollPosition = store.routerStore.routerState.routeName === 'courseOverview' && scrolling > 20 && store.loadingCourses;\n\n useEffect(() => {\n if (saveScrollPosition) {\n store.setScrollingPosition(scrolling);\n }\n }, [saveScrollPosition, scrolling, store]);\n\n return (\n <>\n {isScrolled && (\n \n \n \n )}\n \n );\n};\n\nexport default observer(ScrollUpButton);\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Typography, Stack } from '@mui/material';\nimport { rawHTML } from 'helpers/Helpers';\n\nconst PollStats = ({ options, title }) => {\n const { t } = useTranslation('widget');\n const total = options.reduce((acc, opt) => acc + opt.count, 0);\n return (\n \n \n {rawHTML(title)}\n \n \n {options.map((opt, i) => {\n const percentage = Math.round((opt.count * 100) / total);\n return (\n \n \n {opt.value}\n \n \n \n {percentage}% ({opt.count} {t(`votes`, `Votes`)})\n \n \n );\n })}\n \n \n {t(`total`, `Total`)}: {total}\n \n \n );\n};\n\nPollStats.propTypes = {\n options: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string\n};\n\nexport default PollStats;\n\nconst Progress = ({ percentage }) => {\n const [style, setStyle] = useState({ width: '1%' });\n setTimeout(() => {\n const newStyle = {\n opacity: 1,\n width: `${percentage}%`\n };\n setStyle(newStyle);\n }, 1000);\n return (\n \n \n \n );\n};\n\nProgress.propTypes = {\n percentage: PropTypes.number\n};\n","import PropTypes from 'prop-types';\nimport { Typography } from '@mui/material';\n\nimport ComponentProps from 'helpers/ComponentProps';\n\n// renders a page title with a bottom border\nconst PageTitle = (props) => {\n const { title } = props;\n const style = ComponentProps();\n\n return {title};\n};\n\nPageTitle.propTypes = {\n title: PropTypes.string,\n classes: PropTypes.object,\n theme: PropTypes.object\n};\n\nexport default PageTitle;\n","import { useForm } from 'react-hook-form';\nimport { observer } from 'mobx-react';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport PropTypes from 'prop-types';\nimport { FormHelperText } from '@mui/material';\n/*\nIn summary, the Form component provides an abstraction for managing forms in a React application. \nIt leverages the react-hook-form library for efficient form management, validation, and submission. \nThe component allows flexibility in defining form content and behavior through the children render prop. \nAdditionally, it incorporates local storage for data persistence and offers built-in form reset functionality.\n*/\nconst Form = (props) => {\n const { children, onSubmit, initialValues, validationSchema, id, formProps, storageKey } = props;\n\n const {\n control,\n watch,\n handleSubmit,\n onBlur,\n setValue,\n getValues,\n getFieldState,\n reset,\n resetField,\n register,\n setError,\n clearErrors,\n trigger,\n formState,\n formState: { errors, isSubmitting, isDirty, dirtyFields }\n } = useForm({\n defaultValues: initialValues,\n resolver: yupResolver(validationSchema)\n });\n\n const handleSubmitWithReset = async (values) => {\n const result = await onSubmit(values);\n\n if (result?.success === false) {\n result.errors.forEach((err) => {\n if (!err.status) {\n setError(err.name, err.error, err.options || {});\n } else {\n // basic API server error handling\n const status = parseInt(err.status, 10);\n switch (true) {\n case status >= 500:\n setError('root.serverError', { type: 'server', message: 'Er is helaas iets fout gegaan op de server.' });\n break;\n\n case status === 422:\n setError('root.serverError', { type: 'server', message: 'Er is helaas iets mis met de ingevoerde data.' });\n break;\n\n default:\n setError('root.serverError', { type: 'server', message: 'Er is helaas iets fout gegaan.' });\n break;\n }\n }\n });\n } else {\n localStorage.removeItem(storageKey);\n reset(values);\n }\n };\n\n return (\n
    \n {errors?.root?.serverError && (\n \n {errors.root.serverError.message}\n \n )}\n\n {children({\n clearErrors,\n control,\n dirty: isDirty,\n dirtyFields,\n errors,\n getValues,\n isSubmitting,\n onBlur,\n register,\n reset,\n resetField,\n setError,\n setValue,\n values: initialValues,\n watch,\n getFieldState,\n trigger,\n formState\n })}\n
    \n );\n};\n\nForm.propTypes = {\n children: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n initialValues: PropTypes.object,\n validationSchema: PropTypes.object,\n formProps: PropTypes.object,\n id: PropTypes.string,\n storageKey: PropTypes.string\n};\n\nexport default observer(Form);\n","import { SvgIcon } from '@mui/material';\n\nconst PodcastsIcon = (props) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {' '}\n \n);\n\nexport default PodcastsIcon;\n","/* Course image */\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\n\n/* MUI */\nimport { CardMedia, Skeleton } from '@mui/material';\n\n// renders the course image\nconst CourseImage = (props) => {\n const store = useContext(Store);\n const { visible, src, alt } = props;\n const courseImage = src?.replace(/%20/g, '%2520') || store.defaultCourseGridImage;\n if (!visible) return ;\n return ;\n};\n\nCourseImage.propTypes = {\n visible: PropTypes.bool,\n src: PropTypes.string,\n alt: PropTypes.string\n};\n\nexport default CourseImage;\n","/* Course title */\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Box, Tooltip, Typography } from '@mui/material';\nimport { IsLtiDeeplinker } from 'helpers/Helpers';\nimport CourseLtiButton from './CourseLtiButton';\n\n// renders the course title\nconst CourseTitle = (props) => {\n const { courseTitle, courseId, extraLabel } = props;\n return (\n \n {IsLtiDeeplinker() && }\n \n \n {courseTitle}\n \n \n {extraLabel && (\n \n \n {extraLabel}\n \n \n )}\n \n );\n};\n\nCourseTitle.propTypes = {\n courseTitle: PropTypes.string,\n courseId: PropTypes.any,\n extraLabel: PropTypes.any\n};\n\nexport default CourseTitle;\n","/* Course points */\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Box, Badge } from '@mui/material';\nimport { translatePoints, GetTimeLabel } from 'helpers/Helpers';\n\n// renders the course points\nconst CoursePoints = (props) => {\n const { points } = props;\n const { t } = useTranslation();\n const noBadge = true;\n const coursePoints = points.split(' + ');\n const splitPoints = points.split(' ');\n const getHours = parseFloat(splitPoints[0]);\n const isMinutes = getHours < 1 && splitPoints[1]?.includes('ur');\n let badgeContent = 0;\n\n if (coursePoints.length > 1) {\n // eslint-disable-next-line prefer-destructuring\n badgeContent = coursePoints[1];\n }\n\n if (points === '') {\n return '';\n }\n\n if (noBadge) {\n return (\n \n {isMinutes ? GetTimeLabel(getHours, true) : translatePoints(points, t)}\n \n );\n }\n\n return (\n \n \n {isMinutes ? GetTimeLabel(getHours, true) : translatePoints(points, t)}\n \n \n );\n};\n\nCoursePoints.propTypes = {\n points: PropTypes.string\n};\n\nexport default CoursePoints;\n","/* eslint-disable camelcase */\n/* eslint-disable react/no-danger */\n/* Core */\nimport React from 'react';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport { uniqueId } from 'lodash';\n\n/* MUI */\nimport { Grid, Typography, Button, Box } from '@mui/material';\n\n/* Helpers */\nimport { getCourseCardProps } from 'helpers/Helpers';\n\n/* Custom components */\nimport BasicCard from '../Card/CourseGridCard';\n\n// The CourseGrid component is responsible for rendering a grid of courses.\nconst CourseGrid = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n if (store.courses.courses.length === 0) {\n return (\n \n \n {t('courseoverview.noCourses', 'No courses available')}\n \n \n );\n }\n\n const isFiltering = store.courses?.isFiltering;\n const currentCourses = store.courses?.courseList;\n const categories = store.courses?.categories;\n\n const handleClearFilters = () => {\n store.courses?.resetFilter();\n };\n\n if (store.courses.isSpecialAccessView) {\n return (\n \n \n \n \n \n );\n }\n\n return (\n \n \n {isFiltering ? (\n <>\n \n \n \n {t('courseoverview.filteredResults', 'Filtered results')}: {currentCourses.length}\n \n {store.courses.isFiltering && !store.isfilterVisible && (\n \n )}\n \n \n \n \n ) : (\n categories\n .sort((a, b) => a.weight - b.weight)\n .map((category) => {\n const courses = store.courses.coursesByCategoryId(category.tid);\n const categoryDescription = category.description !== null;\n return (\n \n \n \n {category.name}\n \n {categoryDescription && (\n \n
    \n \n )}\n \n \n \n );\n })\n )}\n \n \n );\n};\n\nexport default observer(CourseGrid);\n\nconst CourseList = ({ courses, isFiltering }) =>\n courses.map((course) => {\n const propsBasicCard = getCourseCardProps(course);\n return (\n \n \n \n );\n });\n","/* Core */\nimport { useContext, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Box, Grid } from '@mui/material';\nimport Card from '@mui/material/Card';\n\n/* Helpers */ /* Custom components */\nimport { urlify } from 'state/Utils';\nimport { useIntersection } from 'hooks';\n/* CARD Elements */\nimport CourseSymbols from './elements/CourseSymbols';\nimport PodcastIcon from './elements/PodcastIcon';\nimport CourseReactions from './elements/CourseReactions';\nimport HideCourse from './elements/HideCourse';\nimport CourseImage from './elements/CourseImage';\nimport CourseStatus from './elements/CourseStatus';\nimport CourseCategories from './elements/CourseCategories';\nimport CourseTitle from './elements/CourseTitle';\nimport CourseAuthors from './elements/CourseAuthors';\nimport CoursePoints from './elements/CoursePoints';\n\n// Renders a course card with essential course information in a minimal list view.\nconst BasicCardListMin = (props) => {\n const store = useContext(Store);\n\n const {\n chip,\n categoriesArray,\n duration,\n courseTitle,\n authors,\n id,\n nid,\n courseImage,\n podcast,\n badges,\n extraLabel,\n lessons,\n hideCourse,\n reviewers,\n isTrialCourse\n } = props;\n const [visible, setVisible] = useState(false);\n\n const isCourseExpiring = store.courses.isCourseExpiring(nid);\n const nonTrialCourse = store?.product?.free_product && store?.trialCourses && !isTrialCourse ? 'nonTrialCourse' : '';\n\n const imgRef = useRef();\n useIntersection(imgRef, () => setVisible(true)); // Updated arrow function here\n\n // eslint-disable-next-line arrow-body-style\n const gotoCourse = (courseId, title) => {\n if (store.courses.isSpecialAccessView) {\n return store.routerStore.goTo('specialAccessCourseIntroduction', {\n params: {\n sa: 'my',\n productName: 'special',\n product: 'access',\n packageId: '0',\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n }\n // microlearnings\n if (store.isMicrolearning && lessons[0]?.nid) {\n return store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: courseId.toString(),\n lessonId: lessons[0].nid?.toString(),\n pageNo: store?.lesson_results?.getLessonPageIdMax(+lessons[0].nid).toString() || '1'\n }\n });\n }\n return store.routerStore.goTo('courseIntroduction', {\n params: {\n productName: store.baseProduct.unique_name,\n product: store.selectedProductId.toString(),\n packageId: store.selectedPackageId.toString(),\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n };\n\n return (\n
    \n \n \n \n \n gotoCourse(nid, courseTitle)}>\n \n \n \n \n \n \n \n gotoCourse(nid, courseTitle)}>\n \n \n \n {categoriesArray && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n {podcast && }\n {duration && }\n \n \n \n \n \n {hideCourse && }\n \n
    \n );\n};\n\n/* Our logo props */\nBasicCardListMin.propTypes = {\n chip: PropTypes.string,\n categoriesArray: PropTypes.array,\n duration: PropTypes.string,\n badges: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n courseTitle: PropTypes.string,\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n nid: PropTypes.number,\n id: PropTypes.string,\n courseImage: PropTypes.string,\n podcast: PropTypes.any,\n extraLabel: PropTypes.any,\n lessons: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n hideCourse: PropTypes.bool,\n reviewers: PropTypes.array,\n isTrialCourse: PropTypes.bool\n};\n\nexport default observer(BasicCardListMin);\n","/* eslint-disable camelcase */\n/* eslint-disable react/no-danger */\n/* Core */\nimport React, { useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport { uniqueId } from 'lodash';\n\n/* MUI */\nimport { Grid, Typography, Button, Box } from '@mui/material';\n\n/* Helpers */\nimport { courseOverviewImgSize, getCourseCardProps } from 'helpers/Helpers';\n\n/* Custom components */\nimport BasicCardListMin from '../Card/CourseGridCardListMin';\n\n// The CourseGrid component is responsible for rendering a grid of courses.\nconst CourseGridListMin = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n useEffect(() => {\n courseOverviewImgSize();\n }); // Run this effect when the loads\n\n if (store.courses?.courses?.length === 0 || store.courses?.courses === undefined) {\n return (\n \n \n {t('courseoverview.noCourses', 'No courses available')}\n \n \n );\n }\n\n const isFiltering = store.courses?.isFiltering;\n const currentCourses = store.courses?.courseList;\n const categories = store.courses?.categories;\n\n const handleClearFilters = () => {\n store.courses?.resetFilter();\n };\n\n if (store.courses?.isSpecialAccessView) {\n return (\n \n \n \n \n \n );\n }\n\n return (\n \n \n {isFiltering ? (\n <>\n \n \n \n {t('courseoverview.filteredResults', 'Filtered results')}: {currentCourses.length}\n \n {store.courses.isFiltered && !store.isfilterVisible && (\n \n )}\n \n \n \n \n ) : (\n categories\n .sort((a, b) => a.weight - b.weight)\n .map((category) => {\n const courses = store.courses.coursesByCategoryId(category.tid);\n const categoryDescription = category.description !== null;\n return (\n \n \n \n {category.name}\n \n {categoryDescription && (\n \n
    \n \n )}\n \n \n \n );\n })\n )}\n \n \n );\n};\n\nexport default observer(CourseGridListMin);\n\nconst CourseList = ({ courses, isFiltering }) =>\n courses.map((course) => {\n const propsBasicCard = getCourseCardProps(course);\n return (\n \n \n \n );\n });\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { observer } from 'mobx-react-lite';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport { Box, Badge } from '@mui/material';\nimport { TabComponent } from 'components';\nimport { useStore } from 'hooks';\n\n// Renders the tabs for the course overview page\nconst CourseTabs = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n const changeCourseOverview = (mode) => () => {\n store.setStoreValue('courseHeaderTabs', mode);\n if (mode === 'All' && store.courses.isFiltering) {\n store.courses.resetFilter();\n }\n };\n\n const courseTotal = !store.loadingCourses ? '0' : store.courses?.coursesCount?.toString();\n const favoriteTotal = !store.loadingCourses || store.favorites === null ? '0' : store.favorites.favorite_courses.length.toString();\n const finishedTotal = !store.loadingCourses ? '0' : store.courseResults?.getFinishedCourses().length.toString();\n const afterHide = store.hidden?.hidden_courses.length\n ? store.courseResults?.getShownCourses(store.hiddenIds).length.toString()\n : store.courseResults?.getStartedCourses().length.toString();\n const startedTotal = !store.loadingCourses ? '0' : afterHide;\n\n const tabDefaultItems = [\n {\n id: 'All',\n label: (\n \n {t('courseoverview.tabs.tab1_label', 'All courses')}\n \n ),\n callback: changeCourseOverview('All')\n },\n {\n id: 'Started',\n label: (\n \n {t('courseoverview.tabs.tab2_label', 'Started')}\n \n ),\n callback: changeCourseOverview('Started')\n }\n ];\n const tabExtraItems = [\n {\n id: 'Favourites',\n label: (\n \n {t('courseoverview.tabs.tab3_label', 'My favourites')}\n \n ),\n callback: changeCourseOverview('Favourites')\n },\n {\n id: 'Finished',\n label: (\n \n {t('courseoverview.tabs.tab4_label', 'Finished')}\n \n ),\n callback: changeCourseOverview('Finished')\n }\n ];\n const tabItems = store.courses?.isSpecialAccessView ? [...tabDefaultItems] : [...tabDefaultItems, ...tabExtraItems];\n\n return (\n \n \n \n );\n};\n\nexport default observer(CourseTabs);\n","/* Course status */\nimport PropTypes from 'prop-types';\n\n/* MUI */\nimport { Box, IconButton, Typography } from '@mui/material';\n\n// displays a message when there are no courses\nconst NoCourses = (props) => {\n const { text, icon } = props;\n\n return (\n \n \n {icon}\n \n \n {text}\n \n \n );\n};\n\nNoCourses.propTypes = {\n text: PropTypes.string,\n icon: PropTypes.any\n};\n\nexport default NoCourses;\n","import { Box, CardMedia, Chip, Typography } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useContext, useRef, useState } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTheme } from '@mui/styles';\nimport { urlify } from 'state/Utils';\nimport { IsLtiDeeplinker, GetTimeLabel } from 'helpers/Helpers';\nimport CourseStatus from '../../Card/elements/CourseStatus';\nimport Progress from './Progress';\nimport { FavoriteButton } from './FavoriteButton';\nimport HideCourse from '../../Card/elements/HideCourse';\nimport CourseCategories from '../../Card/elements/CourseCategories';\nimport CourseLtiButton from '../../Card/elements/CourseLtiButton';\nimport CourseAuthors from '../../Card/elements/CourseAuthors';\nimport CourseSymbols from '../../Card/elements/CourseSymbols';\nimport PodcastIcon from '../../Card/elements/PodcastIcon';\nimport { useIntersection } from '../../../../../../hooks';\n\nconst CourseTableRow = (props) => {\n const store = useContext(Store);\n const { propsBasicCard, hideCourse, trialCoursesView = false } = props;\n const { lessons } = propsBasicCard;\n const theme = useTheme();\n\n const gotoSpecialAccessCourse = (courseId, title) =>\n store.routerStore.goTo('specialAccessCourseIntroduction', {\n params: {\n sa: 'my',\n productName: 'special',\n product: 'access',\n packageId: '0',\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n\n // eslint-disable-next-line consistent-return\n const gotoCourse = (courseId, title) => {\n if (store.courses.isSpecialAccessView) {\n return gotoSpecialAccessCourse(courseId, title);\n }\n\n if (store.isMicrolearning && lessons[0]?.nid) {\n return store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: courseId.toString(),\n lessonId: lessons[0].nid?.toString(),\n pageNo: store?.lesson_results?.getLessonPageIdMax(+lessons[0].nid).toString() || '1'\n }\n });\n }\n\n return store.routerStore.goTo('courseIntroduction', {\n params: {\n productName: store.baseProduct.unique_name,\n product: store.selectedProductId.toString(),\n packageId: store.selectedPackageId.toString(),\n courseId: courseId.toString(),\n title: urlify(title)\n }\n });\n };\n const isCourseExpiring = store.courses.isCourseExpiring(propsBasicCard.nid);\n const isCourseFavorite = store.favorites && store.favorites.isCourseFavorite(propsBasicCard.nid);\n const isNotSpecialAccessView = !store.courses.isSpecialAccessView;\n\n const sxAuthorChip = {\n top: 0,\n left: 0,\n padding: 0,\n margin: 0,\n marginTop: '5px',\n height: 'auto',\n position: 'relative',\n border: 'none',\n borderRadius: '5px',\n background: '#f8f8f8',\n color: '#2c3331',\n marginRight: '5px'\n };\n\n const points = propsBasicCard.duration;\n const splitPoints = points.split(' ');\n const getHours = parseFloat(splitPoints[0]);\n const isMinutes = getHours < 1 && splitPoints[1]?.includes('ur');\n // check if product is trial product and course is not part of the trialcourses but in all courses\n const isNonTrialCourse = store.isTrialProduct && propsBasicCard.isTrialCourse === false ? 'nonTrialCourse' : '';\n\n const courseImage = propsBasicCard?.courseImage?.replace(/%20/g, '%2520') || store.defaultCourseGridImage;\n\n const [visible, setVisible] = useState(false);\n const imgRef = useRef();\n useIntersection(imgRef, () => {\n setVisible(true);\n });\n\n return (\n gotoCourse(propsBasicCard.nid, propsBasicCard.courseTitle)}\n >\n \n \n \n \n \n \n \n {propsBasicCard.courseTitle}\n \n {propsBasicCard.podcast && }\n \n {IsLtiDeeplinker() && }\n \n {propsBasicCard.extraLabel && (\n \n {propsBasicCard.extraLabel}\n \n )}\n \n \n \n\n {(store.courses?.isFiltering || trialCoursesView) && (\n \n \n \n )}\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n {isNotSpecialAccessView && !isNonTrialCourse && (\n \n \n \n )}\n \n {hideCourse && }\n \n );\n};\n\nCourseTableRow.propTypes = {\n propsBasicCard: PropTypes.any,\n hideCourse: PropTypes.bool,\n trialCoursesView: PropTypes.bool\n};\n\nexport default observer(CourseTableRow);\n","/* eslint-disable camelcase */\n/* Core */\nimport { observer } from 'mobx-react';\nimport React, { useContext, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n\n/* Custom styling */\nimport { Box, Grid } from '@mui/material';\nimport FavoriteIcon from '@mui/icons-material/Favorite';\n\n/* Custom components */\nimport { courseOverviewImgSize, getCourseCardProps, ThemeBrandTitle } from 'helpers/Helpers';\nimport BasicCard from './Card/CourseGridCard';\nimport BasicCardListMin from './Card/CourseGridCardListMin';\nimport NoCourses from './Card/elements/NoCourses';\nimport CourseTableCell from './Grid/CourseTable/CourseTableRow';\n\n/**\nThe component first extracts the favorites array from the store context,\nsorts it alphabetically by course title, and stores it in favoriteData.\nIt then sets some grid layout properties based on whether the courseoverview property in the store context is set to 3.\nIf there are no favorite courses, the component returns a NoCourses component with a message and an icon.\nOtherwise, the component returns a Grid component with the favorite courses mapped to\nBasicCardListMin, BasicCardList, or BasicCard components, depending on the courseoverview property.\nThe getCourseCardProps function is used to extract the necessary props for each course.\nThe key prop is set to the course ID, and the grid item properties are set based on the grid layout properties defined earlier.\n */\nconst CourseFavorites = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n const brandTitle = ThemeBrandTitle();\n const { U, ww } = brandTitle !== 'E-WISE' ? { U: 'U', ww: 'heeft' } : { U: 'Je', ww: 'hebt' };\n\n useEffect(() => {\n if (store.courseoverview === 1) {\n courseOverviewImgSize();\n }\n }, [store.courseoverview]); // Run this effect when the loads\n\n const favoriteData =\n store.favorites &&\n store.favorites.favorite_courses.slice().sort((a, b) => a.target_id.course_title.localeCompare(b.target_id.course_title));\n\n const isGridLayout = store.courseoverview === 3;\n\n // Container\n const gridContainerXS = 12;\n const gridContainerSM = isGridLayout ? 8 : 12;\n const gridContainerMD = 12;\n const gridContainerLg = 12;\n const gridContainerXl = 12;\n\n // Items\n const gridItemXs = 12;\n const gridItemSm = isGridLayout ? 4 : 12;\n const gridItemMd = isGridLayout ? 3 : 12;\n const gridItemLg = isGridLayout ? 6 : 12;\n const gridItemXl = isGridLayout ? 3 : 12;\n\n const setColumns = { xs: gridContainerXS, sm: gridContainerSM, md: gridContainerMD, lg: gridContainerLg, xl: gridContainerXl };\n\n if (!store?.favorites?.favorite_courses?.length) {\n return (\n \n } />\n \n );\n }\n\n return (\n \n \n {favoriteData &&\n favoriteData.map((courses, index) => {\n const propsBasicCard = getCourseCardProps(courses.target_id);\n\n return (\n \n {store.courseoverview === 1 && (\n \n \n \n )}\n {store.courseoverview === 2 && (\n \n \n \n )}\n {store.courseoverview === 3 && (\n \n \n \n )}\n \n );\n })}\n \n \n );\n};\n\nexport default observer(CourseFavorites);\n","/* eslint-disable camelcase */\n/* Core */\nimport { observer } from 'mobx-react';\nimport React, { useContext, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n\n/* Custom styling */\nimport { Box, Grid } from '@mui/material';\nimport RocketLaunchIcon from '@mui/icons-material/RocketLaunch';\n\n/* Custom components */\nimport { getCourseCardProps, courseOverviewImgSize } from 'helpers/Helpers';\nimport BasicCard from './Card/CourseGridCard';\nimport BasicCardListMin from './Card/CourseGridCardListMin';\nimport NoCourses from './Card/elements/NoCourses';\nimport CourseTableCell from './Grid/CourseTable/CourseTableRow';\n\n/*\nIn summary, the CourseStarted component is responsible for rendering a list of Started courses.\nThe layout and appearance of these courses are determined by the value of store.courseoverview.\nIf no courses are started, it displays a message encouraging the user to start a new course.\nIf there are started courses, it generates a grid layout and populates it with course cards based on the selected layout style.\n*/\nconst CourseStarted = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (store.courseoverview === 1) {\n courseOverviewImgSize();\n }\n }, [store.courseoverview]); // Run this effect when the loads\n\n const startedId =\n store.hidden?.hidden_courses.length > 0\n ? store.courseResults.getShownCourses(store.hiddenIds).map((cr) => cr.id)\n : store.courseResults.getStartedCourses().map((cr) => cr.id);\n //\n const lessonResultSorted = store.lesson_results.lessonResults\n .filter((ls) => startedId.includes(ls.course_result.id))\n .sort((a, b) => b.changed - a.changed)\n .map((course) => course.course_result);\n //\n const startedCourses = [...new Map(lessonResultSorted.map((m) => [m.id, m])).values()];\n const isGridLayout = store.courseoverview === 3;\n\n // Items\n const gridItemXs = 12;\n const gridItemSm = isGridLayout ? 6 : 12;\n const gridItemMd = isGridLayout ? 4 : 12;\n const gridItemLg = isGridLayout ? 6 : 12;\n const gridItemXl = isGridLayout ? 3 : 12;\n\n const setColumns = { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 };\n\n if (!startedCourses.length) {\n return (\n \n } />\n \n );\n }\n\n return (\n \n \n {startedCourses &&\n startedCourses.map((course, index) => {\n const propsBasicCard = getCourseCardProps(course.course_id);\n return (\n \n {store.courseoverview === 1 && (\n \n \n \n )}\n {store.courseoverview === 2 && (\n \n \n \n )}\n {store.courseoverview === 3 && (\n \n \n \n )}\n \n );\n })}\n \n \n );\n};\n\nexport default observer(CourseStarted);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { observer } from 'mobx-react';\nimport {\n Accordion,\n Autocomplete,\n Box,\n Button,\n TextField,\n Typography,\n Switch,\n AccordionSummary,\n AccordionDetails,\n FormControlLabel,\n Grid\n} from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\n\nimport { useTranslation } from 'react-i18next';\nimport { useBreakpoint, useStore } from 'hooks';\n\nconst mapSortByLabels = {\n New: 'course.badges.badge1',\n Expected: 'course.badges.badge2',\n Ending: 'course.badges.badge3',\n Update: 'course.badges.badge4'\n};\n\n/*\nIn summary, the CourseFilters component is responsible for rendering a set of filters for courses.\nIt allows users to filter courses by author, categories, statuses, competencies, and the presence of podcasts.\nUsers can also clear all filters and view all available courses.\nThe appearance and behavior of these filters are determined by data from the application's store and user interactions.\n*/\nconst CourseFilters = ({ onClose }) => {\n const store = useStore();\n const { t } = useTranslation();\n const currentBreakpoint = useBreakpoint();\n const desktopMode = currentBreakpoint === 'xl';\n const expanded = currentBreakpoint === 'sm' || currentBreakpoint === 'xs';\n // if (store.courses.isSpecialAccessView) return null;\n\n const [searchAuthorInput, setSearchAuthorInput] = React.useState(() => {\n const authorId = store.courses?.filter.authorId;\n if (authorId !== undefined) {\n const author = store.authors.getAuthorById(authorId);\n\n return author || null;\n }\n return null;\n });\n\n const isFiltering = store.courses?.isFiltering;\n const authors = store.authors.sortedByFullName;\n\n const categories = (store.courses?.categories || []).sort((a, b) => a.name.localeCompare(b.name, 'nl', { ignorePunctuation: true }));\n const statuses = store.courses?.statuses;\n const competencies = store.courses?.competencies;\n const countPodcastes = store.courses?.countPodcastes;\n const countExpiringCourses = store.courses?.countExpiringCourses;\n\n const filterByCategories = store.courses?.filter.categories;\n const filterByStatuses = store.courses?.filter.statuses;\n const filterByCompetencies = store.courses?.filter.competencies;\n const filterByPodcasts = store.courses?.filter.hasPodcast;\n const filterByExpiringCourses = store.courses?.filter.isExpiring;\n\n const handleClearFilters = () => {\n store.courses.resetFilter();\n setSearchAuthorInput(null);\n };\n const handleSearchAuthor = (event, value) => {\n if (value) {\n store.courses.filterByAuthor(value.id);\n } else {\n store.courses.filterByAuthor(null);\n }\n setSearchAuthorInput(value);\n };\n\n return (\n \n \n \n {t('course.filters.title')}\n \n {isFiltering && }\n \n\n {authors.length > 0 && (\n \n \n \n option.fullName}\n value={searchAuthorInput}\n onChange={handleSearchAuthor}\n renderInput={(params) => }\n />\n \n {\n const { product, productName, packageId } = store.params;\n store.routerStore.goTo('teachersOverview', { params: { product, productName, packageId } });\n if (!desktopMode && store.isfilterVisible) {\n onClose();\n }\n }}\n className=\"teacherButton\"\n >\n {t('course.filters.viewAll')}\n \n \n )}\n\n \n {categories?.length > 0 && (\n \n }>{t('course.filters.category.title')}\n \n {categories.map((category) => (\n \n \n store.courses.filterByCategories(category.tid)}\n color=\"primary\"\n />\n }\n label={\n \n {category.name}\n \n }\n />\n \n \n \n {category.count}\n \n \n \n ))}\n \n \n )}\n\n {(statuses?.length > 0 || countExpiringCourses > 0) && (\n \n \n }>{t('course.filters.sort.title')}\n \n {statuses.map((status) => (\n \n \n store.courses.filterByStatuses(status.name)}\n color=\"primary\"\n />\n }\n label={\n \n {t(mapSortByLabels[status.name])}\n \n }\n />\n \n \n \n {status.count}\n \n \n \n ))}\n {countExpiringCourses > 0 && (\n \n \n store.courses.filterByExpiringCourses()}\n color=\"primary\"\n />\n }\n label={\n \n {t('course.filters.expiring.label')}\n \n }\n />\n \n \n \n {countExpiringCourses}\n \n \n \n )}\n \n \n \n )}\n\n {competencies?.length > 0 && (\n \n \n }>{t('course.filters.compentence.title')}\n \n {competencies.map((competence) => (\n \n \n store.courses.filterByCompetencies(competence.tid)}\n color=\"primary\"\n />\n }\n label={\n \n {competence.name}\n \n }\n />\n \n \n \n {competence.count}\n \n \n \n ))}\n \n \n \n )}\n\n {countPodcastes > 0 && (\n \n \n }>{t('course.filters.podcast.title')}\n \n \n \n store.courses.filterByPodcasts()} color=\"primary\" />}\n label={\n \n {t('course.filters.podcast.label')}\n \n }\n />\n \n \n \n {countPodcastes}\n \n \n \n \n \n \n )}\n \n \n );\n};\n\nCourseFilters.propTypes = {\n onClose: PropTypes.func\n};\n\nexport default observer(CourseFilters);\n","/* Core */\nimport { useState, useEffect } from 'react';\nimport { useStore, useBreakpoint } from 'hooks';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Box, IconButton, Button, Dialog, DialogActions } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport CloseIcon from '@mui/icons-material/Close';\nimport FilterListIcon from '@mui/icons-material/FilterList';\n\n/* Custom components */\nimport CourseFilters from './CourseFilters';\n\nexport const FilterContainer = ({ onClose }) => (\n \n \n \n \n \n \n \n \n);\nFilterContainer.propTypes = {\n onClose: PropTypes.func\n};\n\nconst Filter = () => {\n const store = useStore();\n const { t } = useTranslation();\n const breakpoints = useBreakpoint();\n const mobileMode = breakpoints === 'xl';\n const mobileFilterPopup = breakpoints === 'sm' || breakpoints === 'xs';\n const [anchorFilter, setAnchorFilter] = useState(null);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (anchorFilter === null && mobileMode === false && breakpoints !== '') {\n store.hideFilter(false);\n }\n }, [anchorFilter, store, breakpoints, mobileMode]);\n\n const handleClickFilter = (event) => {\n store.showFilter();\n if (mobileFilterPopup) {\n setOpen(true);\n }\n setAnchorFilter(event.currentTarget);\n };\n\n const handleClickFilterFull = (event) => {\n store.showFilter();\n if (mobileFilterPopup) {\n setOpen(true);\n }\n setAnchorFilter(event.currentTarget);\n };\n\n const handleCloseFilter = () => {\n if (mobileFilterPopup) {\n setOpen(false);\n }\n setAnchorFilter(null);\n };\n\n const shouldShowFilterInPopover = !mobileMode && store.isfilterVisible;\n const filterButonStyling = store.isfilterVisible ? 'filter_button_active' : 'filter_button';\n\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n\n if (!store.courses) {\n return <>;\n }\n\n if (store.courses.courses.length === 0) {\n return <>;\n }\n\n return (\n <>\n \n {(mobileMode || breakpoints === 'lg') && (\n }\n >\n {t('course.filters.buttonTitle')}\n \n )}\n {!mobileMode && !(breakpoints === 'lg') && !(breakpoints === 'xs') && (\n \n \n \n )}\n {!mobileMode && breakpoints === 'xs' && (\n }\n >\n {breakpoints === 'xs' && t('course.filters.buttonTitle')}\n \n )}\n \n {shouldShowFilterInPopover && !store?.courses?.isSpecialAccessView && (\n <>\n {mobileFilterPopup ? (\n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n};\n\nexport default observer(Filter);\n","/* Core */\nimport { useContext, useRef } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Box, Button, ButtonGroup, IconButton, MenuItem, MenuList, Tooltip, Typography } from '@mui/material';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport GridOnIcon from '@mui/icons-material/GridViewSharp';\nimport ListIcon from '@mui/icons-material/List';\nimport ListAlt from '@mui/icons-material/ListAlt';\nimport { AccordionComponent } from 'components';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\nimport { useTranslation } from 'react-i18next';\nimport Filter from './RightSideBar/FilterContainer';\n\nconst CourseView = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n const anchorRef = useRef(null);\n const isSpecialAccessView = store.routerState.routeName.includes('specialAccess');\n\n const selectedIndex = store.courseoverview - 1;\n\n const options = [\n { id: 'view-list-condensed', icon: },\n { id: 'view-grid', icon: },\n { id: 'view-table', icon: }\n ];\n const handleMenuItemClick = (index) => {\n store.setStoreValue('courseoverview', index + 1);\n store.setOverviewType(index + 1);\n };\n\n const handleClick = () => {\n store.patchData(store.hidden, {\n id: store.hidden.uuid,\n type: 'hidden_courses',\n relationships: {\n hidden_courses: {\n data: []\n }\n }\n });\n };\n\n return (\n \n {store.courseHeaderTabs === 'Started' && !isSpecialAccessView && (\n \n \n \n \n {store.hiddenIds?.length ? : }\n {t('courseoverview.showHidden', 'show hidden!')}\n \n \n \n \n )}\n {store.courseHeaderTabs === 'All' && !isSpecialAccessView && }\n \n \n \n \n }\n body={\n \n {options.map((option, index) => (\n handleMenuItemClick(index)}\n >\n {index === selectedIndex ? '' : option.icon}\n \n ))}\n \n }\n addIcon={}\n open={false}\n clickAway\n />\n \n \n );\n};\nexport default observer(CourseView);\n","/* eslint-disable camelcase */\nimport Carusel, { CarouselItem } from 'components/common/Carousel';\nimport { rawHTML } from 'helpers/Helpers';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { Box, Typography, Grid } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nimport BasicCard from '../Card/CourseGridCard';\nimport 'theme/course/courseoverview/CourseSwipable.scss';\n\n/*\nIn summary, the GridCardSwipe component is responsible for rendering a grid of courses with swipable categories.\nIt supports both filtered and unfiltered views, displaying courses organized by categories.\nUsers can swipe through courses in the same category within a responsive layout.\nThe appearance and behavior of this grid are determined by data from the application's store and user interactions.\n*/\nconst GridCardSwipe = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n if (store.courses.courses.length === 0) {\n return (\n \n \n No courses available yet\n \n \n );\n }\n\n const isFiltering = store.courses?.isFiltering;\n const currentCourses = store.courses?.courseList;\n const categories = store.courses?.categories;\n\n return (\n \n \n {isFiltering ? (\n <>\n \n \n {t('courseoverview.filteredResults', 'Filtered results')}: {currentCourses.length}\n \n \n \n \n ) : (\n categories.map((category) => {\n const courses = store.courses.coursesByCategoryId(category.tid);\n\n return (\n \n \n \n {category.name}\n \n \n \n \n \n \n );\n })\n )}\n \n \n );\n};\n\nexport default observer(GridCardSwipe);\n\nconst CourseList = ({ courses, isFiltering }) =>\n courses.map((course) => {\n const {\n course_id,\n course_information,\n lc_author_id,\n course_category2,\n lc_podcast_html,\n course_status,\n course_title,\n course_uuid,\n lc_extra_label,\n lessons,\n categoryLabel,\n categoryLabelArray,\n points,\n imageUrl\n } = course;\n const description = course_information ? rawHTML(course_information) : '';\n const label = lc_extra_label?.match('podcast');\n return (\n \n \n \n );\n });\n","import { useStore } from 'hooks';\n\nexport const DefaultBanner = () => {\n const store = useStore();\n const profession = store.profession.name;\n const professionLower = profession.toLowerCase();\n // PE/PO\n if (professionLower.includes('adv')) return '/profBanners/advocaten.jpg';\n if (professionLower.includes('nota')) return '/profBanners/notaris.jpg';\n if (professionLower.includes('fisc')) return '/profBanners/fiscalist.jpg';\n if (professionLower.includes('accou')) return '/profBanners/accountant.jpg';\n // CME\n if (professionLower.includes('fysio')) return '/profBanners/fysio.jpg';\n if (professionLower.includes('tandartsass')) return '/profBanners/ta_as.jpg';\n if (professionLower.includes('tandarts')) return '/profBanners/ta_mo.jpg';\n if (professionLower.includes('mondh')) return '/profBanners/ta_mo.jpg';\n if (professionLower.includes('apotheker')) return '/profBanners/apotheker.jpg';\n if (professionLower.includes('gehandicapten')) return '/profBanners/huisarts.jpg';\n if (professionLower.includes('huisarts')) return '/profBanners/huisarts.jpg';\n if (professionLower.includes('ouderen')) return '/profBanners/so_eme.jpg';\n if (professionLower.includes('verpleegkundig')) return '/profBanners/vs.jpg';\n if (professionLower.includes('consulent')) return '/profBanners/apotheker.jpg';\n return '/profBanners/elearn.jpg';\n};\n","/* eslint-disable camelcase */\n/* Core */\nimport { Store } from 'state/ContextStore';\nimport { useContext, useEffect, useState, memo } from 'react';\n\n/* MUI */\nimport { Box, Typography, Button, Chip, Skeleton } from '@mui/material';\nimport Slider, { CarouselItem } from 'components/common/Slider';\nimport { replaceSliderCssClass, minifyCss } from 'helpers/Helpers';\nimport Link from '@mui/material/Link';\nimport { DefaultBanner } from '../../../../helpers/profBanners.helper';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\nconst Banner = () => {\n const store = useContext(Store);\n const [loading, setLoading] = useState(false);\n const selProductId = store.bannerProducts.length > 0 ? store.bannerProducts.join() : store.selectedProductId.toString();\n\n useEffect(() => {\n const fetchBannerData = async () => {\n setLoading(true);\n await store.fetchBanner(selProductId);\n setLoading(false);\n };\n\n fetchBannerData();\n }, [selProductId, store]);\n\n const getLinkAttributes = (url) => {\n if (!url) return null;\n\n const currentUrl = new URL(window.location.href);\n const targetUrl = new URL(url);\n\n return {\n href: currentUrl.hostname === targetUrl.hostname ? targetUrl.pathname + targetUrl.search + targetUrl.hash : targetUrl.toString(),\n target: currentUrl.hostname === targetUrl.hostname ? '_self' : '_blank',\n draggable: false\n };\n };\n\n return (\n <>\n {loading && }\n\n {!loading && (!store?.banners || store?.banners?.length === 0) && (\n \n \n \"Banner\"\n \n \n )}\n\n {!loading && store?.banners && store?.banners?.length > 0 && (\n \n \n \n {store.banners.map((banner, index) => {\n const { description, title, button_link, button_title } = banner.attributes;\n const image = banner.relationships.background_image.data;\n const bannerImage = image && image.attributes.uri.url;\n const imageUrl = `${drupalBaseUrl}${bannerImage}`;\n const customCss = banner.attributes?.field_custom_css || '';\n const chipLabel = banner.attributes?.chip || '';\n\n const colorScheme = {\n title: banner.attributes?.title_color || 'primary',\n button: banner.attributes?.button_color || 'primary',\n chip: banner.attributes?.chip_color || 'primary'\n };\n\n const ContainerComponent = button_link ? Link : Box;\n\n return (\n \n \n \n {chipLabel && }\n {title && (\n \n {title}\n \n )}\n {description && (\n \n {description}\n \n )}\n {button_title && (\n \n )}\n \n \n \n \n );\n })}\n \n \n \n )}\n \n );\n};\n\nexport default memo(Banner);\n","/* Course status */\nimport { Store } from 'state/ContextStore';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Button, Typography } from '@mui/material';\n\n// displays a message when there are no courses\nconst ViewAllCertificates = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n\n return (\n \n \n {t('courseoverview.tabFinished.showAllCertificates')}\n \n store.routerStore.goTo('certificates')}\n className=\"btnShowAllCertificates\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n >\n {t('account.certificate.tab')}\n \n \n );\n};\n\nconst sxMyCertificates = {\n justifyContent: 'end',\n alignItems: 'center',\n padding: '10px 0px',\n paddingTop: '0px',\n display: 'flex',\n gap: '10px',\n '.txtShowAllCertificates': {\n color: '#0000008f',\n fontWeight: '500',\n '@media screen and (max-width: 440px)': {\n fontSize: '12px',\n lineHeight: '12px',\n textAlign: 'right'\n }\n },\n '.btnShowAllCertificates': {\n textTransform: 'math-auto',\n whiteSpace: 'nowrap'\n }\n};\n\nexport default ViewAllCertificates;\n","/* eslint-disable camelcase */\n/* Core */\nimport { observer } from 'mobx-react';\nimport React, { useContext, useEffect } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n\n/* Custom styling */\nimport { Box, Grid } from '@mui/material';\nimport RocketLaunchIcon from '@mui/icons-material/RocketLaunch';\n\n/* Custom components */\nimport { getCourseCardProps, courseOverviewImgSize } from 'helpers/Helpers';\nimport BasicCard from './Card/CourseGridCard';\nimport BasicCardListMin from './Card/CourseGridCardListMin';\nimport CourseTableCell from './Grid/CourseTable/CourseTableRow';\nimport NoCourses from './Card/elements/NoCourses';\nimport ViewAllCertificates from './Card/elements/ViewAllCertificates';\n\n/*\nIn summary, the CourseFinished component is responsible for rendering a list of finished courses.\nThe layout and appearance of these courses are determined by the value of store.courseoverview.\nIf no courses are finished, it displays a message encouraging the user to start a new course.\nIf there are finished courses, it generates a grid layout and populates it with course cards based on the selected layout style.\n*/\nconst CourseFinished = () => {\n const store = useContext(Store);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (store.courseoverview === 1) {\n courseOverviewImgSize();\n }\n }, [store.courseoverview]); // Run this effect when the loads\n\n const finishedCourses = store.courseResults\n .getFinishedCourses()\n .slice()\n .sort((a, b) => a.course_title?.localeCompare(b.course_title));\n\n const isGridLayout = store.courseoverview === 3;\n\n // Container\n const gridContainerXS = 12;\n const gridContainerSM = isGridLayout ? 8 : 12;\n const gridContainerMD = 12;\n const gridContainerLg = 12;\n const gridContainerXl = 12;\n\n // Items\n const gridItemXs = 12;\n const gridItemSm = isGridLayout ? 4 : 12;\n const gridItemMd = isGridLayout ? 3 : 12;\n const gridItemLg = isGridLayout ? 6 : 12;\n const gridItemXl = isGridLayout ? 3 : 12;\n\n const setColumns = { xs: gridContainerXS, sm: gridContainerSM, md: gridContainerMD, lg: gridContainerLg, xl: gridContainerXl };\n\n if (!finishedCourses.length) {\n return (\n \n \n } />\n \n );\n }\n\n return (\n \n \n \n {finishedCourses &&\n finishedCourses.map((course, index) => {\n const propsBasicCard = getCourseCardProps(course.course_id);\n\n return (\n \n {store.courseoverview === 1 && (\n \n \n \n )}\n {store.courseoverview === 2 && (\n \n \n \n )}\n {store.courseoverview === 3 && (\n \n \n \n )}\n \n );\n })}\n \n \n );\n};\n\nexport default observer(CourseFinished);\n","import { useContext, useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { getThemeName, rawHTML } from 'helpers/Helpers';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles, useTheme } from '@mui/styles';\nimport { keyframes } from '@emotion/react';\n/* Custom styling */\nimport { Alert, AlertTitle, Button, Dialog, DialogActions, DialogContent, useMediaQuery, Box } from '@mui/material';\nimport AlertIcon from '@mui/icons-material/HelpOutline';\n\nconst pulse = keyframes`\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n`;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '& h2': { color: theme?.palette?.primary?.main },\n '& a': { color: theme?.palette?.primary?.main }\n }\n}));\n\n/**\n * This component is responsible for displaying an introductory message from a package to the user, providing the option to access more information in a popup dialog,\n * and managing the presentation of additional content.\n */\nconst CourseOverviewIntro = () => {\n const store = useContext(Store); // Use useContext to access the store\n const { t } = useTranslation();\n const classes = useStyles();\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n const selectedPackage = store.packages.filter((pack) => pack.nid === store.selectedPackageId);\n const selectedPackageBody = selectedPackage[0]?.body || '';\n\n const selectedPackageTitle = selectedPackage[0]?.tab_label?.toLowerCase() || '';\n const isArchive = !!(selectedPackageTitle !== '' && selectedPackageTitle?.includes('archief'));\n const themeName = getThemeName();\n const [openPopup, setOpenPopup] = useState(false);\n\n const handleOpenPopup = () => {\n setOpenPopup(true);\n };\n\n const handleClosePopup = () => {\n setOpenPopup(false);\n };\n\n return isArchive ? (\n {rawHTML(selectedPackageBody)}\n ) : (\n selectedPackageBody !== '' && (\n <>\n }\n severity=\"info\"\n variant=\"filled\"\n color=\"warning\"\n sx={{ justifyContent: 'center', alignItems: 'center', animation: `${pulse} 1s 1` }}\n >\n \n {t('courseoverview.intro.title', 'There is important information for you to read')}{' '}\n \n \n \n \n \n {/* Add more information content here */}\n {rawHTML(selectedPackageBody)}\n \n \n \n \n \n \n )\n );\n};\n\nexport default observer(CourseOverviewIntro);\n","import { useContext } from 'react';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n/* Custom styling */\nimport { Box, Alert, AlertTitle } from '@mui/material';\nimport { ThemeBrandTitle } from 'helpers/Helpers';\n\n/**\n * This component is responsible for displaying an introductory message from a package to the user, providing the option to access more information in a popup dialog, and managing the presentation of additional content.\n */\nconst CourseOverviewIntroAccr = () => {\n const store = useContext(Store); // Use useContext to access the store\n const { t } = useTranslation();\n const brandTitle = ThemeBrandTitle();\n\n const selectedPackage = store.packages.filter((pack) => pack.nid === store.selectedPackageId);\n const selectedPackageBody = selectedPackage[0]?.body || '';\n const selectedPackageAccr = selectedPackage[0]?.accredited || '';\n const cssMargin = selectedPackageBody !== '' ? '16px' : '';\n const { u, kunt, heeft } = brandTitle !== 'E-WISE' ? { u: 'U', kunt: 'kunt', heeft: 'heeft' } : { u: 'Je', kunt: 'kan', heeft: 'hebt' };\n\n return (\n !selectedPackageAccr && (\n \n \n \n {store.routerState.routeName.includes('specialAccess')\n ? t('courseoverview.intro.accrSpecial', { u, heeft })\n : t('courseoverview.intro.accr', { u, kunt })}\n \n \n \n )\n );\n};\nexport default observer(CourseOverviewIntroAccr);\n","import { useTranslation } from 'react-i18next';\nimport { useEffect } from 'react';\nimport introJs from 'intro.js';\nimport { useTheme } from '@mui/styles';\nimport { useStore } from '../../hooks';\nimport { ThemeBrandTitle } from '../../helpers/Helpers';\nimport useAPI from '../../hooks/useAPI';\n\nexport function useOnboarding() {\n const { t } = useTranslation('onboarding');\n const store = useStore();\n const theme = useTheme();\n\n const { response, loading } = useAPI(`/jsonapi/user/${store.login?.uuid}`, undefined);\n\n const skipTour = response?.data.attributes.field_skip_tour;\n\n useEffect(() => {\n if (!response || loading) {\n return;\n }\n\n // Localstorage is not supported\n if (typeof Storage === 'undefined') {\n return;\n }\n\n if (skipTour) {\n return;\n }\n\n const brandTitle = ThemeBrandTitle();\n const accreditation = store?.baseProduct?.packages.find((subPackage) => subPackage.nid === store?.selectedPackageId);\n const accrUnit = accreditation?.accreditation?.accr_unit;\n const unitText = !accrUnit?.includes('punt') ? t('hours') : t('points');\n const yourText = brandTitle === 'E-WISE' ? t('informalYour') : t('formalYour');\n\n const steps = [\n {\n intro: t('intro1', { brandTitle })\n },\n {\n element: document.querySelector('.onboarding-navbar-packages') ?? 'NOT_FOUND',\n intro: t('intro2')\n },\n {\n element: document.querySelector('.onboarding-filters-bar') ?? 'NOT_FOUND',\n intro: t('intro3', { yourText })\n },\n {\n element: document.querySelector('.onboarding-search') ?? 'NOT_FOUND',\n intro: t('intro4')\n },\n {\n element: document.querySelector('.onboarding-points') ?? 'NOT_FOUND',\n intro: t('intro5', { unitText, yourText })\n },\n {\n element: document.querySelector('.onboarding-avatar') ?? 'NOT_FOUND',\n intro: t('intro6', { yourText })\n }\n ].filter((step) => step.element !== 'NOT_FOUND');\n\n const handleClose = async () => {\n await window.authedClient.patch(`/jsonapi/user/${store.login?.uuid}`, {\n data: {\n type: 'user',\n id: store.login?.uuid,\n attributes: {\n field_skip_tour: true\n }\n }\n });\n };\n\n introJs()\n .setOptions({\n tooltipClass: 'custom-onboarding',\n nextLabel: t('next'),\n prevLabel: t('previous'),\n showButtons: true,\n steps\n })\n .onbeforeexit(() => {\n handleClose();\n })\n .start();\n\n const nextButton = document.getElementsByClassName('introjs-nextbutton')?.item(0);\n\n nextButton.setAttribute('style', `background-color: ${theme?.custom?.onboarding?.buttonBackgroundColor}`);\n }, [store?.baseProduct?.packages, store?.selectedPackageId, t, skipTour, response, loading, theme, store.login?.uuid]);\n}\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { getCourseCardProps } from 'helpers/Helpers';\nimport CourseTableRow from './CourseTableRow';\n\nconst CourseList = ({ courses, trialCoursesView = false }) => (\n \n {courses.map((course) => {\n const propsBasicCard = getCourseCardProps(course);\n\n return (\n \n \n \n );\n })}\n \n);\n\nCourseList.propTypes = {\n courses: PropTypes.any,\n trialCoursesView: PropTypes.any\n};\n\nexport default observer(CourseList);\n","/* eslint-disable react/no-danger */\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport React, { useEffect } from 'react';\nimport { Box, Button, Grid, Typography } from '@mui/material';\nimport { courseOverviewImgSize } from '../../../../../../helpers/Helpers';\nimport { useStore } from '../../../../../../hooks';\nimport CourseList from './CourseList';\n\nconst CourseTable = () => {\n const store = useStore();\n const { t } = useTranslation();\n\n useEffect(() => {\n courseOverviewImgSize();\n }); // Run this effect when the loads\n\n if (store.courses?.courses?.length === 0 || store.courses?.courses === undefined) {\n return (\n \n \n {t('courseoverview.noCourses', 'No courses available')}\n \n \n );\n }\n\n const isFiltering = store.courses?.isFiltering;\n const currentCourses = store.courses?.courseList;\n const categories = store.courses?.categories;\n\n const handleClearFilters = () => {\n store.courses?.resetFilter();\n };\n\n if (store.courses?.isSpecialAccessView) {\n return (\n \n \n \n \n \n );\n }\n\n return (\n \n \n {isFiltering ? (\n <>\n \n \n \n {t('courseoverview.filteredResults', 'Filtered results')}: {currentCourses.length}\n \n {store.courses.isFiltered && !store.isfilterVisible && (\n \n )}\n \n \n \n \n ) : (\n categories\n .sort((a, b) => a.weight - b.weight)\n .map((category) => {\n const courses = store.courses.coursesByCategoryId(category.tid);\n const categoryDescription = category.description !== null;\n return (\n \n \n \n {category.name}\n \n {categoryDescription && (\n \n
    \n \n )}\n \n \n \n );\n })\n )}\n \n \n );\n};\n\nexport default observer(CourseTable);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport { rawHTML } from 'helpers/Helpers';\n/* MUI */\nimport { Box, Typography } from '@mui/material';\n\nconst TrialCoursesBaseProdIntroText = () => {\n const { t } = useTranslation();\n const store = useStore();\n const { product } = store;\n\n if (!product?.free_product) return null;\n\n const subscribeText = product?.trial_overview_text ? rawHTML(product?.trial_overview_text) : t('trials.coursesView.subscriptionText');\n\n return (\n \n \n \n {t('trials.coursesView.allCourses')}: {store.courses.courses.length}\n \n \n \n {!product?.trial_overview_text && {t('trials.coursesView.allcoursesText')}}\n \n {subscribeText}\n \n \n \n );\n};\n\nexport default observer(TrialCoursesBaseProdIntroText);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\n/* MUI */\nimport { Box, Typography } from '@mui/material';\nimport CourseList from './Grid/CourseTable/CourseList';\nimport TrialCoursesBaseProdIntroText from './TrialCoursesBaseProdIntroText';\n\nconst TrialCourses = () => {\n const { t } = useTranslation();\n const store = useStore();\n const { trialCourses } = store;\n\n if (!trialCourses) return null;\n\n return (\n \n \n \n {t('trials.coursesView.trialCourses')}: {store.trialCourses.length}\n \n \n \n \n \n );\n};\n\n// TrialCourses.propTypes = {\n// current: PropTypes.string\n// };\n\nexport default observer(TrialCourses);\n","/* Core */\nimport { useEffect } from 'react';\nimport { observer } from 'mobx-react';\n\n/* Custom components */\nimport { Box, CircularProgress, Grid, Typography } from '@mui/material';\nimport { useBreakpoint, useStore } from 'hooks';\nimport 'intro.js/introjs.css';\nimport { useTranslation } from 'react-i18next';\nimport CourseGrid from './components/CourseOverview/Grid/CourseGrid';\nimport CourseGridListMin from './components/CourseOverview/Grid/CourseGridListMin';\nimport CourseTabs from './components/CourseOverview/CourseTabs';\nimport CourseFavorites from './components/CourseOverview/CourseFavorites';\nimport CourseStarted from './components/CourseOverview/CourseStarted';\n\nimport CourseView from './components/CourseOverview/CourseView';\nimport { FilterContainer } from './components/CourseOverview/RightSideBar/FilterContainer';\nimport GridCardSwipe from './components/CourseOverview/Grid/GridCardSwipe';\nimport Banner from './components/CourseOverview/Banner';\nimport CourseFinished from './components/CourseOverview/CourseFinished';\nimport CourseOverviewIntro from './components/CourseOverview/Intro/CourseOverviewIntro';\nimport CourseOverviewIntroAccr from './components/CourseOverview/Intro/CourseOverviewIntroAccr';\nimport { useOnboarding } from './useOnboarding';\nimport TopLinks from './components/CourseOverview/TopLinks';\nimport CourseTable from './components/CourseOverview/Grid/CourseTable/CourseTable';\nimport TrialCourses from './components/CourseOverview/TrialCourses';\n\n/**\n * CourseOverview\n *\n * The CourseOverview component is the main component for displaying courses.\n * It provides a user interface for selecting tabs, viewing courses, and applying filters.\n * The component's behavior is influenced by the state managed by MobX, and it's designed to be responsive to different screen sizes.\n */\nconst CourseOverview = () => {\n const { t } = useTranslation('onboarding');\n\n const store = useStore();\n\n const isSpecialAccessView = store.routerState.routeName.includes('specialAccess');\n\n const mobileBreakpoint = useBreakpoint();\n const showFilter = !isSpecialAccessView && store.isfilterVisible && mobileBreakpoint === 'xl' && store.courseHeaderTabs === 'All';\n const boxClassName = `course_overview_box ${isSpecialAccessView ? 'special_access' : ''}`;\n\n useEffect(() => {\n if (mobileBreakpoint === 'md') {\n store.setFilter(false);\n }\n if (store.selectedPackageId === store.prevTab) {\n window.scroll(0, store.scrollPosition);\n }\n }, [mobileBreakpoint, store]);\n useOnboarding(store, t);\n\n const courseHeaderTabs =\n store.courseHeaderTabs === 'Started' || store.courseHeaderTabs === 'Favourites' || store.courseHeaderTabs === 'Finished';\n\n const getClassName = {\n 1: 'course_overview_list_min',\n 2: 'course_overview_grid',\n 3: 'course_overview_list'\n };\n\n const courseViewStyling = getClassName[store.courseoverview];\n\n if (\n store.login?.isVtbTeacher === 1 &&\n isSpecialAccessView &&\n (store.courses?.courses?.length === 0 || store.courses?.courses === undefined)\n ) {\n return (\n \n \n {t('isVtbTeacher', 'You can choose from the various options on the left side.')}\n \n \n );\n }\n\n return (\n \n {!isSpecialAccessView && }\n\n \n \n \n \n \n { store?.showBanner === true && () }\n \n \n \n \n \n \n \n \n \n {store.courseHeaderTabs === 'Favourites' && (\n
    \n \n
    \n )}\n {store.courseHeaderTabs === 'Started' && (\n
    \n \n
    \n )}\n {store.courseHeaderTabs === 'Finished' && (\n
    \n \n
    \n )}\n {!courseHeaderTabs && (\n <>\n \n \n \n )}\n
    \n {showFilter && }\n
    \n
    \n
    \n
    \n );\n};\n\nexport default observer(CourseOverview);\n\nconst Spinner = () => (\n \n \n \n);\n\nconst CourseViewAll = observer(() => {\n const store = useStore();\n const currentBreakpoint = useBreakpoint();\n\n const isSwipable = ['xs', 'sm'].includes(currentBreakpoint) && !store.courses?.isFiltering;\n\n if (store.loadingCourses === false) {\n return ;\n }\n\n if (store.courseoverview === 1) {\n return (\n \n \n \n \n \n );\n }\n if (store.courseoverview === 2) {\n return (\n
    \n {isSwipable ? (\n \n ) : (\n <>\n \n \n \n \n )}\n
    \n );\n }\n if (store.courseoverview === 3) {\n return (\n \n \n \n \n \n );\n }\n return null;\n});\n","/* eslint-disable camelcase */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useState, useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI */\nimport * as material from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { setPrivacyStatementUrl } from 'helpers/Helpers';\n\n/* Custom styling */\nimport 'theme/course/courseoverview/Quickview.scss';\n\n/* Custom components */\n\nconst NewUserTerms = (props) => {\n const [check, setChecked] = useState(false);\n const { open, onClose } = props;\n const store = useContext(Store);\n const { t } = useTranslation();\n\n const handleBackdropClick = (event) => {\n event.stopPropagation();\n };\n\n const getPatchUser = () => ({\n type: 'user',\n id: store.login.uuid,\n attributes: {\n field_accepted_gdpr: 1\n }\n });\n\n const saveGdpr = async () => {\n try {\n await store.lmsApi.patchpost(getPatchUser());\n store.showToast({ message: t('account.profile.gdpr', 'Thank you for accepting!'), variant: 'success' });\n store.setGdpr(true);\n } catch (error) {\n store.showToast({ message: t('account.profile.error', 'Something went wrong'), variant: 'error' });\n store.setGdpr(true);\n }\n onClose();\n };\n\n function handleClose(event, reason) {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n onClose();\n }\n }\n\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n\n return (\n <>\n \n \n \n \n Algemene verordening gegevensbescherming (AVG)\n \n \n Laats bijgewerkt April 2020\n \n \n \n \n \n \n \n Geachte deelnemer,\n \n \n In het kader van de nieuwe Europese privacywetgeving, de Algemene verordening gegevensbescherming (AVG) informeren wij u graag\n over de verwerking van uw resultaten.\n \n Wanneer u een cursus met succes heeft afgerond wordt dat in ons systeem geregistreerd. Per afgeronde cursus gaat het om de\n volgende gegevens:\n
      \n
    • Datum afronding van de cursus
    • \n
    • Titel van de cursus
    • \n
    • Certificaatnummer
    • \n
    • Uw naam
    • \n
    • Uw voorletters
    • \n
    • Uw geboortedatum
    • \n
    • Uw registratienummer (indien van toepassing)
    • \n
    • Uw praktijk
    • \n
    • Het e-mailadres waaronder u inlogt.
    • \n
    \n \n Er is géén administratie van het aantal pogingen dat u nodig heeft gehad om een cursus af te ronden en er is ook géén\n administratie van het percentage goed of fout beantwoorde vragen.\n \n \n De gegevens worden opgeslagen in uw eigen dossier dat u kunt openen onder “mijn certificaten”, alleen toegankelijk als u bent\n ingelogd met uw e-mailadres en wachtwoord. Afhankelijk van de afspraken met de verschillende beroepsregisters geven wij de\n door u afgeronde cursussen door. Indien uw werkgever dit product voor u heeft afgesloten krijgt uw werkgever ook inzicht in de\n door u afgeronde cursussen.\n \n \n Wilt u meer weten? Raadpleeg dan ons{' '}\n \n privacy statement\n \n .\n \n \n Wij verzoeken u vriendelijk om dit bericht te bevestigen door hieronder op akkoord te klikken zodat het niet meer verschijnt\n \n
    \n \n <>\n {\n setChecked(!check);\n }}\n />\n Ik heb het gelezen en ga ermee akkoord.\n \n \n
    \n \n \n Akkoord\n \n \n \n \n );\n};\n\nNewUserTerms.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default observer(NewUserTerms);\n","/* Core */\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\n/* MUI */\nimport { Box } from '@mui/material';\n\n// container component for the authors of a course\n// - renders a list of authors of a course to be displayed in the preview dialog\nconst CourseIntroductionAuthors = (props) => {\n const { authors } = props;\n if (!authors.length) return '';\n // Authors > 2: map and join titles to show in tooltip\n const showAuthors = authors.map((item) => item.fullName).join(', ');\n return {showAuthors};\n};\n\nCourseIntroductionAuthors.propTypes = {\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n};\n\nexport default observer(CourseIntroductionAuthors);\n","/* eslint-disable camelcase */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport Box from '@mui/material/Box';\nimport { Typography, Grid, CardMedia } from '@mui/material';\n\n/* Custom components */\nimport CalculateProgress from 'pages/course/components/Common/CalculateProgress';\nimport { LinearProgressWithLabel } from 'components';\nimport { isCourseFailed, getLabelNameFromDomain, IsLtiDeeplinker } from 'helpers/Helpers';\nimport { useTheme } from '@mui/styles';\nimport CourseSymbols from '../CourseOverview/Card/elements/CourseSymbols';\nimport CourseReactions from '../CourseOverview/Card/elements/CourseReactions';\nimport CourseIntroductionAuthors from './CourseIntroductionAuthors';\nimport CourseStatus from '../CourseOverview/Card/elements/CourseStatus';\nimport CourseLtiButton from '../CourseOverview/Card/elements/CourseLtiButton';\n\nconst CourseIntroductionHeader = (props) => {\n const { t } = useTranslation();\n const theme = useTheme();\n // eslint-disable-next-line camelcase\n const { title, subTitle, image, badges, id, uuid, lesson, chip, authors, isCourseExpiring } = props;\n const store = useContext(Store);\n const { isLessonFailed } = store.lesson_results;\n const { isCourseStarted } = store.courseResults;\n\n const isStarted = isCourseStarted(id);\n const isFailed = isCourseFailed(store.lesson_results, store.courseResults, id);\n const currentTheme = getLabelNameFromDomain();\n const showAuthors = currentTheme === 'po';\n const isNonTrialCourse = (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(id)) || false;\n\n return (\n <>\n \n {image && }\n \n \n \n {title}\n \n {subTitle !== '' && (\n \n {subTitle}\n \n )}\n {IsLtiDeeplinker() && }\n {showAuthors && authors && authors.length > 0 && }\n \n \n \n {lesson.length === 1 && isStarted && store.courseResults.courseResults.length && !isLessonFailed(id) && !isFailed && (\n \n \n \n \n {t('introduction.progress', 'Progress')}\n \n \n \n \n \n {store.courseResults.courseResults.length ? (\n <>\n %\n \n ) : (\n '0%'\n )}\n \n \n\n \n {store.courseResults.courseResults.length ? (\n \n ) : (\n \n )}\n \n \n \n \n )}\n \n \n \n \n \n \n {isNonTrialCourse ? '' : }\n \n \n \n \n );\n};\n\nCourseIntroductionHeader.propTypes = {\n image: PropTypes.string,\n title: PropTypes.string,\n subTitle: PropTypes.string,\n badges: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n id: PropTypes.number,\n uuid: PropTypes.string,\n lesson: PropTypes.any,\n chip: PropTypes.string,\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n isCourseExpiring: PropTypes.any\n};\n\nexport default observer(CourseIntroductionHeader);\n","import { SvgIcon } from '@mui/material';\n\nconst Information = (props) => (\n \n \n \n \n);\n\nexport default Information;\n","import { SvgIcon } from '@mui/material';\n\nconst AuthorIcon = (props) => (\n \n \n \n \n \n);\n\nexport default AuthorIcon;\n","import { SvgIcon } from '@mui/material';\n\nconst goals = (props) => (\n \n \n \n);\n\nexport default goals;\n","/* eslint-disable camelcase */\nimport PropTypes from 'prop-types';\nimport { Box } from '@mui/material';\nimport { useStore } from 'hooks';\nimport Carusel, { CarouselItem } from 'components/common/Carousel';\nimport { getCourseCardProps } from 'helpers/Helpers';\n// import { getCourseCardProps } from 'helpers/Helpers';\n\nimport BasicCard from '../CourseOverview/Card/CourseGridCard';\n\nconst RelatedCourses = (props) => {\n const { category, courseId } = props;\n const store = useStore();\n const courses = store.courses.coursesByCategory('course');\n const relatedCourses = courses[category].filter((course) => course.course_id !== courseId);\n const showArrows = relatedCourses.length > 2;\n\n return (\n \n {relatedCourses && relatedCourses.length && (\n \n {relatedCourses.map((course, index) => {\n const propsBasicCard = getCourseCardProps(course);\n return (\n \n \n \n );\n })}\n \n )}\n \n );\n};\n\nRelatedCourses.propTypes = {\n category: PropTypes.string,\n courseId: PropTypes.number\n};\n\nexport default RelatedCourses;\n","import { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport { rawHTML } from 'helpers/Helpers';\n/* MUI */\nimport { Alert, AlertTitle, Box } from '@mui/material';\n\nconst NonTrialCourseAlert = () => {\n const { t } = useTranslation();\n const store = useStore();\n const { product } = store;\n\n const subscriptionText = product?.trial_detail_text ? rawHTML(product?.trial_detail_text) : t('trials.courseIntro.subscriptionText');\n\n return (\n \n \n {t('trials.courseIntro.trialTitle')}\n {subscriptionText}\n \n \n );\n};\n\nexport default observer(NonTrialCourseAlert);\n","import PropTypes from 'prop-types';\nimport { Alert } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nconst CourseAccrEndDate = (props) => {\n const { t } = useTranslation();\n const { endDate } = props;\n\n if (!endDate) return null;\n\n const formattedEndDate = new Date(endDate).toLocaleDateString('nl-NL', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n });\n return (\n \n {t('introduction.accreditationEndDate', { endDate: formattedEndDate })}\n \n );\n};\n\nCourseAccrEndDate.propTypes = {\n endDate: PropTypes.string\n};\n\nexport default CourseAccrEndDate;\n","/* eslint-disable jsx-a11y/media-has-caption */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useRef } from 'react';\nimport { useScrollPosition, useStore } from 'hooks';\nimport { RouterLink } from 'mobx-state-router';\n\n/* MUI */\nimport { Typography, Avatar, SvgIcon, CardMedia } from '@mui/material';\nimport Box from '@mui/material/Box';\nimport PodcastsIcon from 'components/icons/PodcastsIcon';\nimport PlayCircleOutlineIcon from '@mui/icons-material/PlayCircleOutline';\nimport Information from 'components/icons/Information';\nimport AuthorIcon from 'components/icons/AuthorIcon';\nimport Goals from 'components/icons/goals';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\n\n/* Custom components */\nimport { TabComponent } from 'components';\nimport ReactPlayer from 'react-player';\nimport Video from 'components/widgets/Video';\nimport { rawHTML, embedVideo } from 'helpers/Helpers';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport ScrollSpy from 'react-ui-scrollspy';\nimport RelatedCourses from './RelatedCourses';\nimport NonTrialCourseAlert from './NonTrialCourseAlert';\nimport CourseAccrEndDate from './CourseAccrEndDate';\n\nconst CourseIntroductionTabs = (props) => {\n const store = useStore();\n const { t } = useTranslation();\n\n const { authors, goals, description, data, category, video, podcast, courseId, reviewers, endDate } = props;\n const { product, productName, packageId } = store.params;\n\n const tab = useRef(null);\n\n const goToScroll = (e) => {\n e.preventDefault();\n const target = window.document.getElementById(e.currentTarget.href?.split('#')[1]);\n\n if (target) {\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n };\n\n const position = useScrollPosition();\n\n const previewVideo = video && embedVideo(video);\n const categoryCourses = store?.courses?.isSpecialAccessView ? false : store?.courses?.coursesByCategory('course')[category]?.length > 1;\n const initialPosition = position === 0 && tab.current && tab.current.getBoundingClientRect().top;\n const isUrlCorrect = ReactPlayer.canPlay(previewVideo);\n const isNonTrialCourse = (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(courseId)) || false;\n\n const isSticky = () => {\n let sticky = false;\n if (position > tab.current?.getBoundingClientRect().bottom) {\n sticky = true;\n if (initialPosition) {\n sticky = false;\n }\n }\n return sticky;\n };\n\n const VideoError = () => (\n \n \n {t('course.tabs.videoError', 'Something went wrong loading the video')}\n \n );\n\n const tabItems = [\n {\n id: 'Information',\n label: (\n \n \n {t('course.tabs.information')}\n \n ),\n callback: goToScroll\n },\n podcast && {\n id: 'Podcast',\n label: (\n \n \n {t('course.tabs.podcast')}\n \n ),\n callback: goToScroll\n },\n previewVideo && {\n id: 'Preview',\n label: (\n \n \n {t('course.tabs.preview')}\n \n ),\n callback: goToScroll\n },\n goals && {\n id: 'Goals',\n label: (\n \n \n {t('course.tabs.goals')}\n \n ),\n callback: goToScroll\n },\n authors &&\n authors.length && {\n id: 'Authors',\n label: (\n \n \n {t('course.tabs.author')}\n \n ),\n callback: goToScroll\n },\n reviewers &&\n reviewers.length && {\n id: 'Reviewers',\n label: (\n \n \n {t('course.tabs.reviewers')}\n \n ),\n callback: goToScroll\n }\n ];\n\n return (\n \n \n \n \n {isNonTrialCourse && }\n \n \n {description && (\n \n {rawHTML(description)}\n \n )}\n {store.showCourseAccrEndDate && }\n\n {podcast && (\n \n \n {t('course.tabs.podcast')}\n \n \n {data?.attributes?.podcast_title}\n \n \n
    \n {rawHTML(podcast)}\n \n \n )}\n {previewVideo && (\n \n \n {t('course.tabs.preview')}\n \n {!isUrlCorrect && }\n {isUrlCorrect && (\n \n \n )}\n \n )}\n {goals && (\n \n \n {t('course.tabs.goals')}\n \n {rawHTML(goals)}\n \n )}\n {authors && authors.length > 0 && (\n \n \n {t('course.tabs.author')}\n \n {authors &&\n authors.length > 0 &&\n authors.map((author) => {\n const authorDetail = store.authors.getAuthorByUuid(author.uuid);\n const { id, fullName, img, bio, disclosure } = authorDetail;\n\n return (\n \n \n {img ? (\n \n ) : (\n \n )}\n \n \n \n \n {fullName}\n \n \n \n {bio}\n \n {disclosure && (\n <>\n \n Disclosure\n \n \n {disclosure}\n \n \n )}\n \n \n );\n })}\n \n )}\n {reviewers && reviewers.length > 0 && (\n \n \n {t('course.tabs.reviewers')}\n \n {reviewers &&\n reviewers.length > 0 &&\n reviewers.map((author) => {\n const authorDetail = store.authors.getAuthorByUuid(author.uuid);\n const { id, fullName, img, bio } = authorDetail;\n\n return (\n \n \n \n \n \n \n {fullName}\n \n \n {bio}\n \n \n \n );\n })}\n \n )}\n \n\n {categoryCourses && (\n \n \n {t('introduction.related')}\n \n \n \n )}\n \n \n );\n};\n\nCourseIntroductionTabs.propTypes = {\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n reviewers: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n goals: PropTypes.any,\n description: PropTypes.any,\n category: PropTypes.string,\n video: PropTypes.any,\n podcast: PropTypes.string,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n courseId: PropTypes.number,\n endDate: PropTypes.string\n};\n\nexport default CourseIntroductionTabs;\n","/* eslint-disable jsx-a11y/media-has-caption */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'hooks';\nimport { RouterLink } from 'mobx-state-router';\n\n/* MUI */\nimport { Typography, Avatar, CardMedia } from '@mui/material';\nimport Box from '@mui/material/Box';\n\n/* Custom components */\nimport { rawHTML } from 'helpers/Helpers';\nimport CourseAccrEndDate from '../CourseAccrEndDate';\nimport RelatedCourses from '../RelatedCourses';\n\nconst MobileCourseIntroductionTabs = (props) => {\n const store = useStore();\n const { t } = useTranslation();\n const { authors, category, courseId, goals, description, data, podcast, reviewers, endDate } = props;\n const { product, productName, packageId } = store.params;\n\n const categoryCourses = store?.courses?.isSpecialAccessView ? false : store?.courses?.coursesByCategory('course')[category]?.length > 1;\n\n return (\n \n \n {podcast && (\n \n \n {data?.attributes?.podcast_title}\n \n \n
    \n {rawHTML(podcast)}\n \n \n )}\n {description && (\n \n {rawHTML(description)}\n \n )}\n {store.showCourseAccrEndDate && }\n {goals && (\n \n \n {t('course.tabs.goals')}\n \n {rawHTML(goals)}\n \n )}\n {authors && authors.length > 0 && (\n \n \n {t('course.tabs.author')}\n \n {authors &&\n authors.length > 0 &&\n authors.map((author) => {\n const authorDetail = store.authors.getAuthorByUuid(author.uuid);\n const { id, fullName, img, bio, disclosure } = authorDetail;\n\n return (\n \n \n {img ? (\n \n ) : (\n \n )}\n \n \n \n \n {fullName}\n \n \n \n {bio}\n \n {disclosure && (\n <>\n \n Disclosure\n \n \n {disclosure}\n \n \n )}\n \n \n );\n })}\n \n )}\n {reviewers && reviewers.length > 0 && (\n \n \n {t('course.tabs.reviewers')}\n \n {reviewers &&\n reviewers.length > 0 &&\n reviewers.map((author) => {\n const authorDetail = store.authors.getAuthorByUuid(author.uuid);\n const { id, fullName, img, bio } = authorDetail;\n\n return (\n \n \n \n \n \n \n {fullName}\n \n \n {bio}\n \n \n \n );\n })}\n \n )}\n {categoryCourses && (\n \n \n {t('introduction.related')}\n \n \n \n )}\n \n \n );\n};\n\nMobileCourseIntroductionTabs.propTypes = {\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n category: PropTypes.string,\n courseId: PropTypes.number,\n\n reviewers: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n goals: PropTypes.any,\n description: PropTypes.any,\n podcast: PropTypes.string,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n endDate: PropTypes.string\n};\n\nexport default MobileCourseIntroductionTabs;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport { Alert } from '@mui/material';\n\nconst CourseExpiredSection = (props) => {\n const { endDate, courseStatus } = props;\n const { t } = useTranslation();\n const options = { day: 'numeric', month: 'long', year: 'numeric' };\n const availableDate = new Date(endDate).toLocaleDateString('nl-NL', options);\n const expirationDate = new Date(endDate).setHours(23, 0, 0, 0);\n const showNotification = new Date().getTime() >= new Date(expirationDate - 60 * 24 * 60 * 60 * 1000).getTime();\n const isExpected = courseStatus.toLowerCase() === 'expected';\n\n return (\n showNotification &&\n !isExpected && (\n \n {t('introduction.sidebar.endDateAlert', { availableDate })}\n \n )\n );\n};\n\nCourseExpiredSection.propTypes = {\n endDate: PropTypes.string,\n courseStatus: PropTypes.string\n};\n\nexport default observer(CourseExpiredSection);\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport { Box, Typography, IconButton } from '@mui/material';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\n\nimport { uniqueId } from 'lodash';\n\nconst SpecialAccessSection = (props) => {\n const { lessons } = props;\n const store = useStore();\n const { t } = useTranslation();\n\n const toLesson = (lesson) => {\n store.routerStore.goTo('lessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: lesson.nid.toString(),\n pageNo: '0'\n }\n });\n };\n\n return (\n \n \n {t('introduction.sidebar.specialAccess')}\n \n {lessons &&\n lessons.map((lesson) => (\n toLesson(lesson)} sx={{ cursor: 'pointer' }}>\n \n {lesson.lesson_type}\n \n \n \n \n \n \n \n ))}\n \n );\n};\n\nSpecialAccessSection.propTypes = {\n lessons: PropTypes.any\n};\n\nexport default observer(SpecialAccessSection);\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport { useStore } from 'hooks';\n\n/* MUI */\nimport { Box, Typography } from '@mui/material';\nimport LoadingButton from '@mui/lab/LoadingButton';\n\nconst DownloadCertificateSection = (props) => {\n const { title } = props;\n const store = useStore();\n const { t } = useTranslation();\n const { findCourseResultByCourseNid } = store.courseResults;\n const [isFetching, setIsFetching] = useState(false);\n\n const fetchCertificate = async () => {\n try {\n setIsFetching(true);\n const courseResultUuid = findCourseResultByCourseNid(Number(store.params.courseId)).uuid;\n const code = await store.lmsApi.downloadCertificate(courseResultUuid);\n window.open(`${window.clientInstance.authorizationDomain}/course-result/${courseResultUuid}/${code}/certificate`, '_blank');\n } catch (error) {\n store.showToast({ message: t('introduction.sidebar.certificateError'), variant: 'error' });\n } finally {\n setIsFetching(false);\n }\n };\n\n return (\n \n \n {t('introduction.sidebar.certificate')}\n \n \n \n \n {title}\n \n\n }\n loading={isFetching}\n loadingPosition=\"end\"\n variant=\"contained\"\n sx={{ alignSelf: 'flex-end' }}\n >\n {t('introduction.sidebar.certificate')}\n \n \n \n \n );\n};\n\nDownloadCertificateSection.propTypes = {\n title: PropTypes.string\n};\n\nexport default observer(DownloadCertificateSection);\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport { useStore } from 'hooks';\nimport { uniqueId } from 'lodash';\n/* MUI */\nimport { Box, Typography, CircularProgress, IconButton } from '@mui/material';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport { LessonArrayProgress } from 'helpers/Helpers';\n\nconst CourseLessonSection = (props) => {\n const { lessons } = props;\n const store = useStore();\n const { t } = useTranslation();\n const { isLessonFailed, findLessonByCourseNid, isLessonSuccess } = store.lesson_results;\n\n const lessonResult = lessons && lessons.length > 1 && findLessonByCourseNid(Number(store.params.courseId));\n const lessonProgress = lessonResult && LessonArrayProgress(lessonResult, lessons);\n\n const toLesson = (lesson) => {\n store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: lesson.nid.toString()\n }\n });\n };\n return (\n \n \n {t('introduction.sidebar.lessons')}\n \n {lessons &&\n lessons.length > 1 &&\n lessons.map((lesson, index) => (\n \n \n {index + 1}\n \n \n \n \n {lesson.lesson_type}\n \n \n {isLessonSuccess(lesson.nid) && }\n \n \n {(index === 0 || (lessonProgress[index - 1] === 100 && !isLessonFailed(lesson.nid)) || store.isEwiseUser) && (\n toLesson(lesson)}>\n \n \n )}\n \n \n ))}\n \n );\n};\n\nCourseLessonSection.propTypes = {\n lessons: PropTypes.any\n};\n\nexport default observer(CourseLessonSection);\n","import { Button, CircularProgress } from '@mui/material';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\n\n/* MUI - Icons */\nimport IconPlay from '@mui/icons-material/PlayCircleFilled';\nimport { isCourseFailed } from 'helpers/Helpers';\nimport { useState } from 'react';\nimport CoursePointsAlert from './CoursePointsAlert';\n\nconst CourseButton = () => {\n const store = useStore();\n const { t } = useTranslation();\n // Get course\n const course = store.findCourseByNid(Number(store.params.courseId));\n // Get accreditation\n const accredited =\n store.selectedPackageId !== 0\n ? store?.baseProduct?.packages?.find((packag) => packag.nid === store?.selectedPackageId).accredited\n : false;\n // Calculate enough points\n const coursePoints = store?.subscriptions?.enoughPoints(store?.baseProduct?.nid, store?.params?.courseId);\n const maxPoints = store?.subscriptions?.maxPointsReached(store?.baseProduct?.nid);\n const lessons = course?.lessons;\n const msg = maxPoints ? 'msg-2' : 'msg-1';\n const [open, setOpen] = useState(false);\n\n const handleButtonClick = () => {\n // Check if we need to show the popup based on accreditation\n // We check if we have enough points to finish the course\n // If not show popup, or just continue automatically\n if (!store.isEwiseUser && accredited && !coursePoints) {\n setOpen(true);\n } else {\n playLesson();\n }\n };\n\n const handleConfirm = () => {\n setOpen(false);\n playLesson();\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const { isCourseStarted, isCourseFinished } = store.courseResults;\n\n /* Check for enddate */\n const endDate = course?.valid_period_end;\n const courseExpired = new Date().getTime() >= new Date(endDate).setHours(23, 0, 0, 0);\n\n if (store.lessonState === 'pending') {\n return (\n \n );\n }\n\n // const playSpecialAccessLesson = () => {\n // store.routerStore.goTo('defLessonPlay', {\n // params: {\n // productName: 'special',\n // product: 'access',\n // packageId: '0',\n // courseId: store.params.courseId,\n // lessonId: lessons[0].nid?.toString(),\n // pageNo: '1'\n // }\n // });\n // };\n\n // ONCLICK BUTTON TO PLAY LESSON\n // eslint-disable-next-line consistent-return\n const playLesson = () => {\n // if (store.courses.isSpecialAccessView) return playSpecialAccessLesson();\n if (lessons && Array.isArray(lessons) && lessons.length) {\n if (lessons.length > 1) {\n const lastStartedCourse = store?.lesson_results?.findLessonByCourseNid(Number(store.params.courseId)).length;\n if (lastStartedCourse) {\n store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: lessons[lastStartedCourse - 1].nid?.toString(),\n pageNo: '1'\n }\n });\n }\n }\n store.routerStore.goTo('defLessonPlay', {\n params: {\n product: store.params.product,\n productName: store.params.productName,\n packageId: store.params.packageId,\n courseId: store.params.courseId,\n lessonId: lessons[0].nid?.toString(),\n pageNo: '1'\n }\n });\n }\n };\n const sequenceNo = store?.lesson_results?.findLessonByCourseNid(course.course_id)[0]?.sequence_no;\n const maxAttemptsReached = lessons[0]?.max_attempts && lessons[0]?.max_attempts - 1 <= sequenceNo;\n const retry =\n isCourseFailed(store.lesson_results, store.courseResults, course.course_id) && !maxAttemptsReached\n ? t('course.button.label4')\n : t('course.button.label5');\n const isFinished = isCourseFinished(course.course_id) ? t('course.button.label2') : t('course.button.label1');\n const isFailed = isCourseFailed(store.lesson_results, store.courseResults, course.course_id) ? retry : t('course.button.label3');\n const courseBtn = isCourseStarted(course.course_id) ? isFailed : isFinished;\n const isExpected = course.course_status.toLowerCase() === 'expected';\n //\n // SET BTN LABEL\n let btn = '';\n if (courseBtn === 'Start') {\n btn = (\n <>\n \n \n \n );\n }\n if (courseBtn === 'Retry' || courseBtn === 'Herstart') {\n btn = (\n <>\n \n \n \n );\n }\n if (courseBtn === 'Continue' || courseBtn === 'Hervat') {\n btn = (\n <>\n \n \n \n );\n }\n if (courseBtn === 'No more retries' || courseBtn === 'Geen pogingen meer') {\n btn = (\n \n );\n }\n if (courseBtn === 'Done' || courseBtn === 'Afgerond') {\n btn = (\n \n );\n }\n if (courseExpired) {\n btn = '';\n }\n if (isExpected && !store.isEwiseUser) {\n btn = '';\n }\n return btn;\n};\n\nexport default observer(CourseButton);\n","import { useState } from 'react';\nimport { useStore } from 'hooks';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport { useTranslation } from 'react-i18next';\nimport { SubscribeLink } from 'helpers/Helpers';\n// MUI\nimport { Box, Button, Typography, keyframes, Stack } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport IconPlay from '@mui/icons-material/PlayCircleFilled';\nimport NewReleasesIcon from '@mui/icons-material/NewReleases';\n\nconst TrialCourseButton = () => {\n const [open, setOpen] = useState(false);\n const handleButtonClick = () => setOpen(!open);\n const sxButton = { filter: 'grayscale(100%)' };\n\n return (\n <>\n \n \n \n );\n};\n\nexport default observer(TrialCourseButton);\n\nconst TrialAlertDialog = (props) => {\n const store = useStore();\n const { t } = useTranslation();\n const { open, handleClose } = props;\n\n const blinkAnimation = keyframes` from { opacity: 0; } to { opacity: 1; } `;\n const sxDialog = {\n [` .MuiPaper-root`]: { background: `linear-gradient(45deg, #ffd700, #ffa500)` },\n [` .trial_content`]: { alignSelf: 'flex-end', maxHeight: '500px', textAlign: 'center' },\n [` .blink_icon`]: { fontSize: '40px', animation: `${blinkAnimation} 2s linear infinite` }\n };\n\n return (\n \n \n \n \n \n \n \n \n\n \n {t('subscribe.title', 'Get access to all our courses')}\n \n\n \n \n \n \n \n \n );\n};\n\nTrialAlertDialog.propTypes = {\n open: PropTypes.bool,\n handleClose: PropTypes.func\n};\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport useStore from 'hooks/useStore';\n/* MUI */\nimport { Typography, Card, CardContent, Grid, SvgIcon, CardActions } from '@mui/material';\nimport AccessAlarmIcon from '@mui/icons-material/AccessAlarm';\nimport Quiz from 'components/icons/Quiz';\n\nimport CertificateTab from 'components/icons/CertificateTab';\nimport { getLabelNameFromDomain, GetTimeLabel } from 'helpers/Helpers';\nimport CourseButton from '../CourseButton';\nimport TrialCourseButton from '../TrialCourseButton';\n\nconst MobileTopbarCard = (props) => {\n const store = useStore();\n const { lessons, accreditation, duration, extraPoints, extraPointsDescr, isAccredited } = props;\n const { t } = useTranslation();\n const currentTheme = getLabelNameFromDomain();\n const certTitle =\n currentTheme && currentTheme === 'po' ? t('introduction.sidebar.certificationPo') : t('introduction.sidebar.certification');\n const timeLabel = GetTimeLabel(duration);\n\n const isNonTrialCourse =\n (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(Number(store.params.courseId))) || false;\n\n return (\n \n \n \n {!extraPoints && duration !== '' && parseFloat(duration) !== 0 && (\n \n \n \n \n \n \n \n {t('introduction.sidebar.duration')}\n \n \n {timeLabel}\n \n \n \n \n )}\n {isAccredited && (\n \n \n \n \n \n \n \n {certTitle}\n \n \n {extraPointsDescr || accreditation}\n \n \n \n \n )}\n {lessons && lessons.length > 0 && (\n \n \n \n \n \n \n \n {t('introduction.sidebar.quiz')}\n \n \n {lessons[0].minimum_score}%\n \n \n \n \n )}\n \n \n {isNonTrialCourse ? : }\n \n );\n};\n\nMobileTopbarCard.propTypes = {\n lessons: PropTypes.any,\n duration: PropTypes.any,\n extraPoints: PropTypes.any,\n extraPointsDescr: PropTypes.any,\n isAccredited: PropTypes.bool,\n accreditation: PropTypes.any\n};\n\nexport default observer(MobileTopbarCard);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\n/* MUI */\nimport Box from '@mui/material/Box';\n/* Custom components */\nimport CourseExpiredSection from '../CourseExpiredSection';\nimport SpecialAccessSection from '../SpecialAccessSection';\nimport DownloadCertificateSection from '../DownloadCertificateSection';\nimport CourseLessonSection from '../CourseLessonSection';\nimport MobileTopbarCard from './MobileTopbarCard';\n\nconst MobileTopbar = (props) => {\n // eslint-disable-next-line camelcase\n const {\n id,\n isAccredited,\n accreditation,\n title,\n lessons,\n duration,\n logo,\n endDate,\n courseStatus,\n extraPoints,\n extraPointsDescr,\n isTrialCourse\n } = props;\n const store = useStore();\n const { isCourseFinished } = store.courseResults;\n\n const showSpecialAccessCTA = store.login.hasSpecialAccess && store.specialAccessCourseIds?.includes(id);\n\n return (\n \n \n \n {lessons && lessons.length > 1 && }\n {isCourseFinished(Number(store.params.courseId)) && }\n {showSpecialAccessCTA && }\n {logo && }\n \n );\n};\nMobileTopbar.propTypes = {\n id: PropTypes.number,\n isAccredited: PropTypes.bool,\n accreditation: PropTypes.string,\n duration: PropTypes.number,\n extraPoints: PropTypes.number,\n extraPointsDescr: PropTypes.string,\n title: PropTypes.string,\n lessons: PropTypes.any,\n logo: PropTypes.string,\n endDate: PropTypes.string,\n courseStatus: PropTypes.string,\n isTrialCourse: PropTypes.bool\n};\nexport default observer(MobileTopbar);\n","/* eslint-disable camelcase */\n/* Core */\nimport PropTypes from 'prop-types';\nimport { useContext } from 'react';\nimport { Store } from 'state/ContextStore';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\n\n/* MUI */\nimport Box from '@mui/material/Box';\nimport { Typography, Grid } from '@mui/material';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\n\n/* Custom components */\nimport CalculateProgress from 'pages/course/components/Common/CalculateProgress';\nimport { LinearProgressWithLabel } from 'components';\nimport { isCourseFailed, getLabelNameFromDomain, embedVideo } from 'helpers/Helpers';\nimport Video from 'components/widgets/Video';\nimport ReactPlayer from 'react-player';\nimport CourseSymbols from '../../CourseOverview/Card/elements/CourseSymbols';\nimport CourseReactions from '../../CourseOverview/Card/elements/CourseReactions';\nimport CourseIntroductionAuthors from '../CourseIntroductionAuthors';\nimport MobileTopbar from './MobileTopbar';\nimport CourseStatus from '../../CourseOverview/Card/elements/CourseStatus';\nimport NonTrialCourseAlert from '../NonTrialCourseAlert';\n\nconst MobileCourseIntroductionHeader = (props) => {\n const { t } = useTranslation();\n // eslint-disable-next-line camelcase\n const {\n title,\n subTitle,\n badges,\n id,\n uuid,\n lesson,\n chip,\n authors,\n video,\n isAccredited,\n accreditation,\n lessons,\n duration,\n endDate,\n courseStatus,\n extraPoints,\n extraPointsDescr,\n isCourseExpiring,\n isTrialCourse\n } = props;\n\n const store = useContext(Store);\n const { isLessonFailed } = store.lesson_results;\n const { isCourseStarted } = store.courseResults;\n\n const isStarted = isCourseStarted(id);\n const isFailed = isCourseFailed(store.lesson_results, store.courseResults, id);\n const currentTheme = getLabelNameFromDomain();\n const showAuthors = currentTheme === 'po';\n\n const isNonTrialCourse =\n (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(Number(store.params.courseId))) || false;\n\n const previewVideo = video && embedVideo(video);\n const isUrlCorrect = ReactPlayer.canPlay(previewVideo);\n\n const VideoError = () => (\n \n \n {t('course.tabs.videoError', 'Something went wrong loading the video')}\n \n );\n\n return (\n <>\n \n {previewVideo && (\n \n {!isUrlCorrect && }\n {isUrlCorrect && (\n \n \n )}\n \n )}\n {isNonTrialCourse && }\n \n \n \n \n \n\n \n \n \n {title}\n \n {subTitle !== '' && (\n \n {subTitle}\n \n )}\n {showAuthors && authors && authors.length > 0 && }\n \n \n \n \n \n \n \n \n {!isNonTrialCourse && }\n \n \n {lesson.length === 1 && isStarted && store.courseResults.courseResults.length && !isLessonFailed(id) && !isFailed && (\n \n \n \n \n \n {store.courseResults.courseResults.length ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )}\n \n \n \n \n );\n};\n\nMobileCourseIntroductionHeader.propTypes = {\n title: PropTypes.string,\n subTitle: PropTypes.string,\n badges: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n id: PropTypes.number,\n uuid: PropTypes.string,\n lesson: PropTypes.any,\n chip: PropTypes.string,\n authors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n video: PropTypes.any,\n isAccredited: PropTypes.bool,\n accreditation: PropTypes.string,\n duration: PropTypes.number,\n extraPoints: PropTypes.number,\n extraPointsDescr: PropTypes.string,\n lessons: PropTypes.any,\n endDate: PropTypes.string,\n courseStatus: PropTypes.string,\n isCourseExpiring: PropTypes.bool,\n isTrialCourse: PropTypes.bool\n};\n\nexport default observer(MobileCourseIntroductionHeader);\n","import PropTypes from 'prop-types';\nimport { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { observer } from 'mobx-react';\nimport { Store } from 'state/ContextStore';\n/* MUI */\nimport { Box, Typography, Card, CardMedia, CardContent, Grid, SvgIcon, CardActions } from '@mui/material';\nimport AccessAlarmIcon from '@mui/icons-material/AccessAlarm';\nimport Quiz from 'components/icons/Quiz';\n\nimport CertificateTab from 'components/icons/CertificateTab';\nimport { getLabelNameFromDomain, GetTimeLabel } from 'helpers/Helpers';\nimport CourseButton from './CourseButton';\nimport TrialCourseButton from './TrialCourseButton';\n\nconst SidebarCard = (props) => {\n const { lessons, image, title, accreditation, duration, courseBtn, extraPoints, extraPointsDescr, isAccredited } = props;\n const { t } = useTranslation();\n const currentTheme = getLabelNameFromDomain();\n const store = useContext(Store);\n const certTitle =\n currentTheme && currentTheme === 'po' ? t('introduction.sidebar.certificationPo') : t('introduction.sidebar.certification');\n const timeLabel = GetTimeLabel(duration);\n const selectedPackage = store?.baseProduct?.packages?.find((packag) => packag.nid === store.selectedPackageId);\n const selectedPackageTitle = selectedPackage?.tab_label?.toLowerCase() || '';\n const isArchive = parseFloat(duration) === 0 && selectedPackageTitle === 'archief'; // This needs a bit of flavour for PE\n\n const selectedProduct = store?.baseProduct?.title?.toLowerCase();\n const showAccreditation = isAccredited && (store?.label !== 'ewise' || selectedProduct?.includes('schoolleiders po'));\n\n const isNonTrialCourse =\n (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(Number(store.params.courseId))) || false;\n\n return (\n \n \n \n {/* eslint-disable-next-line camelcase */}\n \n \n \n {!extraPoints && duration !== '' && parseFloat(duration) !== 0 && (\n \n \n \n \n \n \n \n {t('introduction.sidebar.duration')}\n \n \n {timeLabel}\n \n \n \n \n )}\n {isArchive && (\n \n \n \n \n \n \n \n {certTitle}\n \n \n {extraPointsDescr || GetTimeLabel(duration, false)}\n \n \n \n \n )}\n {showAccreditation && (\n \n \n \n \n \n \n \n {certTitle}\n \n \n {extraPointsDescr || accreditation}\n \n \n \n \n )}\n {lessons && lessons.length > 0 && (\n \n \n \n \n \n \n \n {t('introduction.sidebar.quiz')}\n \n \n {lessons[0].minimum_score}%\n \n \n \n \n )}\n \n \n {isNonTrialCourse ? : }\n \n );\n};\n\nSidebarCard.propTypes = {\n lessons: PropTypes.any,\n image: PropTypes.any,\n title: PropTypes.any,\n duration: PropTypes.any,\n extraPoints: PropTypes.any,\n extraPointsDescr: PropTypes.any,\n isAccredited: PropTypes.bool,\n accreditation: PropTypes.any,\n courseBtn: PropTypes.any\n};\n\nexport default observer(SidebarCard);\n","/* Core */\nimport PropTypes from 'prop-types';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\n/* MUI */\nimport Box from '@mui/material/Box';\n/* Custom components */\nimport CourseExpiredSection from './CourseExpiredSection';\nimport SpecialAccessSection from './SpecialAccessSection';\nimport DownloadCertificateSection from './DownloadCertificateSection';\nimport CourseLessonSection from './CourseLessonSection';\nimport SidebarCard from './SidebarCard';\n\nconst Sidebar = (props) => {\n // eslint-disable-next-line camelcase\n const {\n id,\n isAccredited,\n accreditation,\n courseBtn,\n image,\n title,\n lessons,\n duration,\n logo,\n endDate,\n courseStatus,\n extraPoints,\n extraPointsDescr\n } = props;\n const store = useStore();\n const { isCourseFinished } = store.courseResults;\n\n const showSpecialAccessCTA = store.login.hasSpecialAccess && store.specialAccessCourseIds?.includes(id);\n\n return (\n \n \n \n {lessons && lessons.length > 1 && }\n {isCourseFinished(Number(store.params.courseId)) && }\n {showSpecialAccessCTA && }\n {logo && }\n \n );\n};\nSidebar.propTypes = {\n id: PropTypes.number,\n courseBtn: PropTypes.string,\n isAccredited: PropTypes.bool,\n accreditation: PropTypes.string,\n duration: PropTypes.number,\n extraPoints: PropTypes.number,\n extraPointsDescr: PropTypes.string,\n image: PropTypes.string,\n title: PropTypes.string,\n lessons: PropTypes.any,\n logo: PropTypes.string,\n endDate: PropTypes.string,\n courseStatus: PropTypes.string\n};\nexport default observer(Sidebar);\n","/* eslint-disable camelcase */\n/* Core */\nimport { observer } from 'mobx-react';\nimport { useStore, useBreakpoint } from 'hooks';\nimport { useEffect, useState } from 'react';\n\n/* MUI */\nimport Box from '@mui/material/Box';\nimport { Grid } from '@mui/material';\n\n/* Helpers */\nimport { GetPoints } from 'helpers/Helpers';\n\n/* Custom components */\nimport ErrorPage from 'pages/misc/ErrorPage';\nimport NewUserTerms from 'pages/mainLayout/footer/NewUserTerms';\nimport CourseIntroductionHeader from './components/CourseIntroduction/CourseIntroductionHeader';\nimport CourseIntroductionTabs from './components/CourseIntroduction/CourseIntroductionTabs';\nimport MobileCourseIntroductionTabs from './components/CourseIntroduction/mobile/MobileCourseIntroductionTabs';\nimport MobileCourseIntroductionHeader from './components/CourseIntroduction/mobile/MobileCourseIntroductionHeader';\n\n// eslint-disable-next-line import/no-cycle\nimport Sidebar from './components/CourseIntroduction/SideBar';\n\nconst drupalBaseUrl = process.env.REACT_APP_JSONAPI;\n\n/*\nIn summary, the CourseIntroduction component appears to be responsible for rendering the introduction and details of a course. \nIt retrieves course information from the store, \nhandles different breakpoints for responsive design, \nand structures the content layout, \nincluding tabs and a sidebar, based on the screen size. \nIf there are issues with the course ID or if the course cannot be found, it renders an error page.\n*/\nconst CourseIntroduction = () => {\n const store = useStore();\n const mobileBreakpoint = useBreakpoint();\n const [openGdpr, setOpenGdpr] = useState(false);\n const isMobile = mobileBreakpoint === 'sm' || mobileBreakpoint === 'xs';\n\n const oncloseGdpr = () => {\n setOpenGdpr(!openGdpr);\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n window.scroll(0, 0);\n store.setPrevTab(store.selectedPackageId);\n if (!store?.login?.gdpr && !sessionStorage.getItem('gdpr')) {\n setOpenGdpr(true);\n store.setGdpr();\n }\n }, [store, store.params.courseId]);\n\n if (!store.params?.courseId) return ;\n const course = store.findCourseByNid(Number(store.params.courseId));\n const selectedPackage = store?.baseProduct?.packages?.find((packag) => packag.nid === store.selectedPackageId);\n const logo = selectedPackage?.accreditation?.accr_logo || '';\n const isAccreditated = selectedPackage?.accreditation !== null;\n if (!course) return ;\n // Course details\n const {\n course_category,\n course_category2,\n course_extra_points,\n course_id,\n course_points,\n course_extra_points_desc,\n course_status,\n course_title,\n course_uuid,\n coursephoto_url,\n headerphoto_url,\n lc_author_id,\n // lc_course_header_photo,\n lc_extra_label,\n lc_goals,\n lc_information,\n lc_podcast_html,\n lc_preview_video,\n lc_reviewer_id,\n valid_period_end,\n lessons,\n isTrialCourse\n } = course;\n\n const globalFallbackBanner = '/profBanners/elearn.jpg';\n const _introBanner = headerphoto_url?.replace(/%20/g, '%2520') || store.profession?.default_profession_banner;\n const introductionBanner = _introBanner ? `${drupalBaseUrl}${_introBanner}` : globalFallbackBanner;\n\n const _courseImage = coursephoto_url?.replace(/%20/g, '%2520') || store.defaultCourseGridImage;\n const courseImage = _courseImage.startsWith('/sites') ? `${drupalBaseUrl}${_courseImage}` : _courseImage;\n\n const isDrawerOpen = mobileBreakpoint === 'md' && !store.minDrawer;\n const isCourseExpiring = store.courses.isCourseExpiring(course_id);\n const isNonTrialCourse = (store.isTrialProduct && store.trialCourses && !store.trialCourseIds.includes(course_id)) || false;\n\n const MobileIntroHead = (\n \n );\n\n const MobileIntroBody = (\n \n \n category.name)[0]}\n courseId={course_id}\n goals={lc_goals}\n description={lc_information}\n podcast={isNonTrialCourse ? '' : lc_podcast_html}\n reviewers={lc_reviewer_id}\n isTrialCourse={isTrialCourse}\n endDate={valid_period_end}\n />\n \n \n );\n\n const DesktopIntroHead = (\n \n );\n\n const DesktopIntroBody = (\n <>\n \n category.name)[0]}\n courseId={course_id}\n reviewers={lc_reviewer_id}\n endDate={valid_period_end}\n />\n \n \n \n \n \n );\n\n return (\n <>\n
    \n {!isMobile ? DesktopIntroHead : MobileIntroHead}\n \n \n {!isMobile ? DesktopIntroBody : MobileIntroBody}\n \n \n
    \n \n \n );\n};\n\nexport default observer(CourseIntroduction);\n","import { createTheme } from '@mui/material';\n\n/* CME Colors */\nconst PrimaryColor = '#2a4a92';\nconst SecondaryColor = '#e3e9f5';\nconst BackgroundColor = 'rgba(0, 75, 150, 0.05);';\nconst RedColor = '#FF5B5B';\nconst SecondaryOrange = '#e27739';\n\nconst PrimaryBlue = '#004B96';\nconst TabPrimaryBlue = '#004B96';\n\n/* Margins */\nconst DefaultMargin = '10px';\n\nconst cmeTheme = createTheme({\n palette: {\n primary: {\n main: PrimaryColor\n },\n secondary: {\n main: SecondaryColor\n },\n secondaryOrange: {\n main: SecondaryOrange,\n dark: 'rgb(158, 83, 39)'\n },\n background: {\n main: BackgroundColor\n },\n primaryBlue: {\n main: PrimaryBlue\n },\n tabPrimaryBlue: {\n main: TabPrimaryBlue\n },\n favoriteRed: {\n main: RedColor\n }\n },\n typography: {\n h1: {\n fontSize: '40px',\n fontWeight: '600'\n },\n h2: {\n fontSize: '38px',\n fontWeight: '600'\n },\n h3: {\n fontSize: '36px',\n fontWeight: '600'\n },\n h4: {\n fontSize: '34px',\n fontWeight: '600'\n },\n h5: {\n fontSize: '30px',\n fontWeight: '600'\n },\n h6: {\n fontSize: '38px',\n fontWeight: '600'\n },\n subtitle1: {\n fontSize: '26px'\n },\n subtitle2: {\n fontSize: '26px'\n },\n button: {\n fontSize: '14px'\n },\n caption: {\n fontSize: '12px'\n },\n overline: {\n fontSize: '12px'\n }\n },\n components: {\n MuiToolbar: {\n styleOverrides: {\n root: {\n margin: '0 auto',\n width: '100%'\n }\n }\n },\n MuiAvatarGroup: {\n styleOverrides: {\n root: {\n justifyContent: 'flex-end',\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n background: BackgroundColor,\n color: PrimaryColor\n }\n }\n },\n MuiGrid: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiDivider: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'rgb(0 0 0 / 15%) 1.95px 1.95px 2.6px'\n }\n }\n },\n MuiCardHeader: {\n styleOverrides: {\n root: {\n color: PrimaryColor\n }\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n '&.Mui-checked.MuiSwitch-track': {\n background: PrimaryColor\n },\n '& .MuiSwitch-track': {\n background: '#E0E5F2'\n }\n }\n }\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n MuiListItem: {\n MuiTypography: {\n styleOverrides: {\n root: {\n margin: '0'\n }\n }\n }\n }\n },\n custom: {\n label: {\n primary: PrimaryColor,\n secondary: SecondaryColor\n },\n onboarding: {\n buttonBackgroundColor: PrimaryColor\n }\n }\n});\n\nexport default cmeTheme;\n","import { createTheme } from '@mui/material';\n\n/* PE Colors */\nconst PrimaryColor = '#006846';\nconst SecondaryColor = '#e27739';\nconst RedColor = '#FF5B5B';\nconst BackgroundColor = '#0068480D';\nconst PrimaryBlue = '#2B3674';\nconst TabPrimaryBlue = '#2B3674';\n\n/* Margins */\nconst DefaultMargin = '10px';\n\nconst peTheme = createTheme({\n palette: {\n primary: {\n main: PrimaryColor\n },\n secondary: {\n main: SecondaryColor\n },\n secondaryOrange: {\n main: SecondaryColor\n },\n favoriteRed: {\n main: RedColor\n },\n background: {\n main: BackgroundColor\n // gray: BackgroundGray\n },\n primaryBlue: {\n main: PrimaryBlue\n },\n tabPrimaryBlue: {\n main: TabPrimaryBlue\n }\n },\n typography: {\n h1: {\n fontSize: '40px',\n fontWeight: '600'\n // lineHeight: 1.75\n },\n h2: {\n fontSize: '38px',\n fontWeight: '600'\n // lineHeight: 1.16\n },\n h3: {\n fontSize: '36px',\n fontWeight: '600'\n },\n h4: {\n fontSize: '34px',\n fontWeight: '600'\n },\n h5: {\n fontSize: '30px',\n fontWeight: '600'\n },\n h6: {\n fontSize: '38px',\n fontWeight: '600'\n },\n subtitle1: {\n fontSize: '26px'\n },\n subtitle2: {\n fontSize: '26px'\n },\n button: {\n fontSize: '14px'\n },\n caption: {\n fontSize: '12px'\n },\n overline: {\n fontSize: '12px'\n }\n // count: {\n // fontSize: '30px',\n // fontWeight: 700\n // }\n },\n components: {\n MuiToolbar: {\n styleOverrides: {\n root: {\n margin: '0 auto',\n // maxWidth: '98%',\n width: '100%'\n }\n }\n },\n MuiAvatarGroup: {\n styleOverrides: {\n root: {\n justifyContent: 'flex-end',\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiGrid: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiDivider: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'rgb(0 0 0 / 15%) 1.95px 1.95px 2.6px'\n }\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n MuiCardHeader: {\n styleOverrides: {\n root: {\n color: PrimaryColor\n }\n }\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n background: BackgroundColor,\n color: PrimaryColor\n }\n }\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n '&.Mui-checked.MuiSwitch-track': {\n background: PrimaryColor\n },\n '& .MuiSwitch-track': {\n background: '#E0E5F2'\n }\n }\n }\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n\n MuiListItem: {\n MuiTypography: {\n styleOverrides: {\n root: {\n margin: '0px'\n }\n }\n }\n }\n },\n custom: {\n label: {\n primary: PrimaryColor,\n secondary: SecondaryColor\n },\n onboarding: {\n buttonBackgroundColor: PrimaryColor\n }\n }\n});\n\nexport default peTheme;\n","import { createTheme } from '@mui/material';\n\n/* PO Colors */\nconst PrimaryColor = '#006846';\nconst SecondaryColor = '#9C1915';\nconst SecondaryOrange = '#e27739';\n\nconst RedColor = '#FF5B5B';\n\nconst PrimaryBlue = '#2B3674';\nconst BackgroundColor = 'rgba(0, 104, 72, 0.05);';\nconst TabPrimaryBlue = '#004B96';\n\n/* Margins */\nconst DefaultMargin = '10px';\n\nconst poTheme = createTheme({\n palette: {\n primary: {\n main: PrimaryColor\n },\n secondary: {\n main: SecondaryColor\n },\n secondaryOrange: {\n main: SecondaryOrange\n },\n background: {\n main: BackgroundColor\n },\n favoriteRed: {\n main: RedColor\n },\n primaryBlue: {\n main: PrimaryBlue\n },\n tabPrimaryBlue: {\n main: TabPrimaryBlue\n }\n },\n typography: {\n h1: {\n fontSize: '40px',\n fontWeight: '600'\n },\n h2: {\n fontSize: '38px',\n fontWeight: '600'\n },\n h3: {\n fontSize: '36px',\n fontWeight: '600'\n },\n h4: {\n fontSize: '34px',\n fontWeight: '600'\n },\n h5: {\n fontSize: '30px',\n fontWeight: '600'\n },\n h6: {\n fontSize: '38px',\n fontWeight: '600'\n },\n subtitle1: {\n fontSize: '26px'\n },\n subtitle2: {\n fontSize: '26px'\n },\n button: {\n fontSize: '14px'\n },\n caption: {\n fontSize: '12px'\n },\n overline: {\n fontSize: '12px'\n }\n },\n components: {\n MuiToolbar: {\n styleOverrides: {\n root: {\n margin: '0 auto',\n width: '100%'\n }\n }\n },\n MuiAvatarGroup: {\n styleOverrides: {\n root: {\n justifyContent: 'flex-end',\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n background: BackgroundColor,\n color: PrimaryColor\n }\n }\n },\n MuiGrid: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiDivider: {\n styleOverrides: {\n root: {\n marginTop: DefaultMargin,\n marginBottom: DefaultMargin\n }\n }\n },\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'rgb(0 0 0 / 15%) 1.95px 1.95px 2.6px'\n }\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n MuiCardHeader: {\n styleOverrides: {\n root: {\n color: PrimaryColor\n }\n }\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n '&.Mui-checked.MuiSwitch-track': {\n background: PrimaryColor\n },\n '& .MuiSwitch-track': {\n background: '#E0E5F2'\n }\n }\n }\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: PrimaryColor\n }\n }\n }\n },\n MuiListItem: {\n MuiTypography: {\n styleOverrides: {\n root: {\n margin: '0px'\n }\n }\n }\n }\n },\n custom: {\n label: {\n primary: PrimaryColor,\n secondary: SecondaryColor\n },\n onboarding: {\n buttonBackgroundColor: PrimaryColor\n }\n }\n});\n\nexport default poTheme;\n","import ewiseTheme from './EwiseTheme';\nimport cmeTheme from './CmeTheme';\nimport peTheme from './PeTheme';\nimport poTheme from './PoTheme';\n\nconst themeMap = {\n ewiseTheme,\n cmeTheme,\n peTheme,\n poTheme\n};\n\nexport function getThemeByName(theme) {\n return themeMap[theme];\n}\n","import { createContext, useCallback, useMemo, useState } from 'react';\nimport { CssBaseline, StyledEngineProvider, ThemeProvider } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { getThemeByName } from 'theme';\nimport { getLabelNameFromDomain, getThemeName } from 'helpers/Helpers';\nimport merge from 'deepmerge';\n\nexport const CustomThemeContext = createContext(getThemeByName('cmeTheme'));\n\nexport const CustomThemeProvider = ({ children }) => {\n const [globalTheme, setGlobalTheme] = useState(getThemeByName(getThemeName()));\n const [customLogo, setCustomLogo] = useState();\n const labelLogo = `${process.env.PUBLIC_URL}/${getLabelNameFromDomain()}/assets/images/logo.svg`;\n\n const setThemeName = (name) => {\n setGlobalTheme(getThemeByName(name));\n };\n\n const setTheme = useCallback(\n (theme) => {\n if (!theme || !globalTheme) {\n return;\n }\n\n setGlobalTheme(merge(globalTheme, theme));\n },\n [globalTheme]\n );\n\n const value = useMemo(\n () => ({ setThemeName, setTheme, setCustomLogo, customLogo, labelLogo, globalTheme }),\n [setTheme, customLogo, labelLogo, globalTheme]\n );\n\n return (\n \n \n \n \n {children}\n \n \n \n );\n};\n\nCustomThemeProvider.propTypes = {\n children: PropTypes.object.isRequired\n};\n","import CircularProgress, { circularProgressClasses } from '@mui/material/CircularProgress';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport PropTypes from 'prop-types';\nimport DoneIcon from '@mui/icons-material/Done';\n\nexport const CircularProgressWithLabel = (props) => (\n \n theme.palette.grey[theme.palette.mode === 'light' ? 400 : 800]\n }}\n size={40}\n {...props}\n value={100}\n />\n \n \n {props.value === 100 ? (\n \n ) : (\n {`${Math.round(props.value)}%`}\n )}\n \n
    \n);\n\nCircularProgressWithLabel.propTypes = {\n value: PropTypes.number\n};\n","import { LessonArrayProgress, LessonProgress } from 'helpers/Helpers';\n\nexport function calculateCourseProgress(lessonProgressArray, lessons) {\n let total = 0;\n\n lessonProgressArray.forEach((lesson) => {\n total += lesson / lessons.length;\n });\n\n return Math.round(total);\n}\n\nexport function calculateProgressValue({ lessonResult, isCourseFinished, isCourseStarted, lessons }) {\n let progress = 0;\n\n if (lessons && lessons.length === 1) {\n progress = LessonProgress(lessonResult[0]);\n } else {\n const progressArray = lessons && LessonArrayProgress(lessonResult, lessons);\n progress = progressArray && calculateCourseProgress(progressArray, lessons);\n }\n if (progress < 2 && !isCourseStarted) {\n return 0;\n }\n\n let progressNumber = progress || 0;\n\n if (isCourseFinished) {\n progressNumber = 100;\n } else if (progress === 100 && !isCourseFinished) {\n progressNumber = 99;\n }\n return progressNumber;\n}\n","import { Box } from '@mui/material';\nimport { useStore } from 'hooks';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport { CircularProgressWithLabel } from './CircularProgressWithLabel';\nimport { calculateProgressValue } from './utils';\n\nconst Progress = ({ id, lessons }) => {\n const store = useStore();\n\n if (!store.courseResults.courseResults.length) {\n return null;\n }\n\n const lessonResult = store.lesson_results.findLessonByCourseNid(id);\n const isCourseFinished = store.courseResults.isCourseFinished(id);\n const isCourseStarted = !isCourseFinished && store.courseResults.isCourseStarted(id);\n const progressValue = calculateProgressValue({ lessonResult, isCourseFinished, isCourseStarted, lessons });\n if (progressValue < 1 && !isCourseFinished) {\n return null;\n }\n return (\n \n \n
    \n );\n};\n\nProgress.propTypes = {\n id: PropTypes.number,\n lessons: PropTypes.any\n};\nexport default observer(Progress);\n","import { IconButton, Tooltip } from '@mui/material';\nimport FavoriteIcon from '@mui/icons-material/Favorite';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { useFavourites } from './useFavourites';\n\nexport const FavoriteButton = ({ propsBasicCard, isCourseFavorite }) => {\n const { handleFavorite, isLoading } = useFavourites();\n const { t } = useTranslation();\n\n return (\n \n {\n event.stopPropagation();\n handleFavorite(propsBasicCard.id, propsBasicCard.nid);\n }}\n disabled={isLoading}\n style={isLoading ? { transform: 'scale(1)', animation: 'pulse 1s infinite' } : {}}\n >\n \n \n \n );\n};\n\nFavoriteButton.propTypes = {\n propsBasicCard: PropTypes.any,\n isCourseFavorite: PropTypes.bool\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { useStore } from '../../../../../../hooks';\n\nexport const useFavourites = () => {\n const store = useStore();\n const [isLoading, setIsLoading] = useState();\n\n const storeFavourite = useRef();\n\n const toggleFavorites = useCallback(\n async (courseId, courseNid) => {\n const removeFavorite = store.favoriteIds.filter((course) => course !== courseId);\n\n const removedFavorite = removeFavorite.map((course) => ({\n type: 'course',\n id: course\n }));\n\n const remodelData = store.favoriteIds.map((course) => ({\n type: 'course',\n id: course\n }));\n\n setIsLoading(true);\n\n if (!store.favorites.isCourseFavorite(courseNid)) {\n storeFavourite.current = await store.patchData(store.favorites, {\n id: store.favorites.uuid,\n type: 'course_favorites',\n relationships: {\n field_favorite_courses: {\n data: [\n ...remodelData,\n {\n type: 'course',\n id: courseId\n }\n ]\n }\n }\n });\n\n if (storeFavourite.current) {\n setIsLoading(false);\n }\n } else {\n storeFavourite.current = await store.patchData(store.favorites, {\n id: store.favorites.uuid,\n type: 'course_favorites',\n relationships: {\n field_favorite_courses: {\n data: removedFavorite\n }\n }\n });\n\n if (storeFavourite.current) {\n setIsLoading(false);\n }\n }\n return storeFavourite;\n },\n [store]\n );\n\n const handleFavorite = useCallback(\n (courseId, courseNid) => {\n setIsLoading(true);\n if (!store.favorites) {\n store.postData({\n type: 'course_favorites',\n attributes: {\n title: 'course_favorites'\n },\n relationships: {\n field_favorite_courses: {\n data: [\n {\n id: courseId,\n type: 'course'\n }\n ]\n }\n }\n });\n } else {\n toggleFavorites(courseId, courseNid);\n }\n },\n [store, toggleFavorites]\n );\n\n return { handleFavorite, isLoading };\n};\n","import { Controller } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport ReactQuill from 'react-quill';\nimport 'react-quill/dist/quill.snow.css';\nimport './custom-quill.css';\nimport { useMemo, useState } from 'react';\nimport { Switch, Stack, Box, FormControlLabel } from '@mui/material';\n\nconst Editor = ({\n field: { name },\n form: { control }, // also touched, errors, values, setXXXX, handleXXXX, dirty, isValid, status, etc.\n label,\n disabled,\n ...props\n}) => {\n const classes = useStyles();\n const [showHtml, setShowHtml] = useState(false);\n\n const modules = useMemo(\n () => ({\n clipboard: {\n matchVisual: false // prevents inserting unnecessary


    tags\n },\n toolbar: {\n container: [\n ['bold', 'italic', 'underline', 'strike'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['link'],\n ['clean'],\n ['showHtml']\n ],\n handlers: {\n showHtml: () => {\n setShowHtml(!showHtml);\n }\n }\n }\n }),\n [showHtml]\n );\n\n return (\n <>\n \n {label}\n setShowHtml(!showHtml)} />}\n label=\"Show html\"\n />\n \n {showHtml &&