{"version":3,"file":"student.35a7e367.js","sources":["../../../app/frontend/layouts/student/types/StudentTopNav__Types/StudentTopNav__NavLink.bs.js","../../../app/frontend/layouts/student/components/StudentTopNav__DropDown.bs.js","../../../app/frontend/layouts/student/components/StudentTopNav__UserControls.bs.js","../../../app/frontend/layouts/student/StudentTopNav.bs.js","../../../app/frontend/packs/StudentTopNavPack.bs.js","../../../app/frontend/packs/ConvertMarkdownPack.bs.js","../../../app/frontend/psj/home/index.js","../../../app/frontend/users/home/types/UsersDashboard__Course.bs.js","../../../app/frontend/users/home/types/UsersDashboard__Community.bs.js","../../../app/frontend/users/home/types/UsersDashboard__IssuedCertificate.bs.js","../../../app/frontend/users/home/components/UsersDashboard__Root.bs.js","../../../app/frontend/packs/UsersDashboardPack.bs.js","../../../app/frontend/users/images/permanent-delete.svg","../../../app/frontend/users/UsersDeleteAccount.bs.js","../../../app/frontend/packs/UsersDeleteAccountPack.bs.js","../../../app/frontend/shared/types/TopicCategory.bs.js","../../../app/frontend/communities/types/CommunitiesShow__TopicParticipant.bs.js","../../../app/frontend/communities/types/CommunitiesShow__Topic.bs.js","../../../app/frontend/communities/types/CommunitiesShow__Target.bs.js","../../../app/frontend/communities/types/CommunitiesShow__Topics.bs.js","../../../app/frontend/communities/components/CommunitiesShow__Participants.bs.js","../../../app/frontend/communities/CommunitiesShow__Root.bs.js","../../../app/frontend/packs/CommunitiesShowPack.bs.js","../../../app/frontend/shared/components/Radio.bs.js","../../../app/frontend/shared/utils/Locale.bs.js","../../../app/frontend/shared/components/ConfirmWindow.bs.js","../../../app/frontend/users/UserEdit.bs.js","../../../app/frontend/packs/UserEditPack.bs.js","../../../app/frontend/topics/types/TopicsShow__Post.bs.js","../../../app/frontend/topics/types/TopicsShow__Topic.bs.js","../../../app/frontend/topics/components/TopicsShow__UserShow.bs.js","../../../app/frontend/topics/components/TopicsShow__PostReply.bs.js","../../../app/frontend/topics/components/TopicsShow__PostEditor.bs.js","../../../app/frontend/topics/components/TopicsShow__LikeManager.bs.js","../../../app/frontend/topics/components/TopicsShow__PostShow.bs.js","../../../app/frontend/topics/types/TopicsShow__Community.bs.js","../../../app/frontend/topics/types/TopicsShow__LinkedTarget.bs.js","../../../app/frontend/topics/components/TopicsShow__SubscriptionManager.bs.js","../../../app/frontend/topics/TopicsShow__Root.bs.js","../../../app/frontend/packs/TopicsShowPack.bs.js","../../../app/frontend/communities/types/CommunitiesNewTopic__TopicSuggestion.bs.js","../../../app/frontend/communities/CommunitiesNewTopic__Root.bs.js","../../../app/frontend/packs/CommunitiesNewTopicPack.bs.js","../../../app/frontend/courses/curricula/images/level-lock.svg","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Level.bs.js","../../../app/frontend/courses/curricula/images/level-empty.svg","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Course.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Target.bs.js","../../../app/frontend/courses/review/types/SubmissionChecklistItem.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Submission.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__QuizQuestion.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Grade.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Feedback.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Community.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__TargetDetails.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__LevelUpEligibility.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Quiz.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__User.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Learn.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Discuss.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Student.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__TargetGroup.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__LatestSubmission.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__TargetStatus.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__CompletionInstructions.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__AutoVerify.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__ChecklistItem.bs.js","../../../node_modules/rescript/lib/es6/random.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__FileForm.bs.js","../../../node_modules/blob-polyfill/Blob.js","../../../node_modules/file-saver/dist/FileSaver.min.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__AudioNavigator.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__AudioRecorder.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__SubmissionItem.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__SubmissionBuilder.bs.js","../../../app/frontend/courses/review/components/SubmissionChecklistItemShow.bs.js","../../../app/frontend/courses/review/components/SubmissionChecklistShow.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Coach.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Grading.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__GradeBar.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__UndoButton.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__SubmissionsAndFeedback.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Overlay.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__LevelSelector.bs.js","../../../app/frontend/courses/curricula/images/level-up.svg","../../../app/frontend/courses/curricula/images/access-ended.svg","../../../app/frontend/courses/curricula/images/course-ended.svg","../../../app/frontend/courses/curricula/images/preview-mode.svg","../../../app/frontend/courses/curricula/images/course-complete.svg","../../../app/frontend/courses/curricula/images/level-up-blocked.svg","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Notice.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__LevelUpButton.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__NoticeManager.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum.bs.js","../../../app/frontend/packs/CoursesCurriculumPack.bs.js","../../../app/frontend/courses/report/types/CoursesReport__Coach.bs.js","../../../app/frontend/courses/report/types/CoursesReport__Level.bs.js","../../../app/frontend/courses/report/types/CoursesReport__EvaluationCriterion.bs.js","../../../app/frontend/courses/report/types/CoursesReport__StudentOverview.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__PersonalCoaches.bs.js","../../../app/frontend/courses/report/components/CoursesReport__Overview.bs.js","../../../app/frontend/courses/report/types/CoursesReport__Submission.bs.js","../../../app/frontend/courses/report/types/CoursesReport__Submissions.bs.js","../../../app/frontend/courses/report/components/CoursesReport__SubmissionsList.bs.js","../../../app/frontend/courses/report/components/CoursesReport__Root.bs.js","../../../app/frontend/packs/CoursesReportPack.bs.js","../../../app/frontend/shared/types/CourseInfo.bs.js","../../../app/frontend/layouts/student_course/components/StudentCourse__Header.bs.js","../../../app/frontend/packs/StudentCourseLayoutPack.bs.js","../../../app/frontend/issued_certificates/images/graduate-icon.svg","../../../app/frontend/issued_certificates/VerifyCertificate__Root.bs.js","../../../app/frontend/packs/IssuedCertificatesVerifyPack.bs.js","../../../app/frontend/faculty/types/CoachesIndex__Coach.bs.js","../../../app/frontend/faculty/types/CoachesIndex__Course.bs.js","../../../app/frontend/faculty/CoachesIndex__Root.bs.js","../../../app/frontend/packs/CoachesIndexPack.bs.js","../../../app/frontend/users/images/set-new-password-icon.svg","../../../app/frontend/users/UserSessionResetPassword.bs.js","../../../app/frontend/packs/UserSessionResetPasswordPack.bs.js","../../../app/frontend/layouts/app_router/types/AppRouter__Page.bs.js","../../../app/frontend/layouts/app_router/components/AppRouter__Dropdown.bs.js","../../../app/frontend/layouts/app_router/components/AppRouter__Header.bs.js","../../../app/frontend/layouts/app_router/components/AppRouter__CourseSelector.bs.js","../../../app/frontend/layouts/app_router/components/AppRouter__Nav.bs.js","../../../app/frontend/courses/review/types/CoursesReview__Filter.bs.js","../../../app/frontend/courses/review/types/CoursesReview__TargetInfo.bs.js","../../../app/frontend/courses/review/images/pending-empty.svg","../../../app/frontend/courses/review/types/CoursesReview__Grade.bs.js","../../../app/frontend/courses/review/types/CoursesReview__Feedback.bs.js","../../../app/frontend/courses/review/types/CoursesReview__OverlaySubmission.bs.js","../../../app/frontend/courses/review/types/CoursesReview__IndexSubmission.bs.js","../../../app/frontend/courses/shared/images/reviewed-empty.svg","../../../app/frontend/courses/review/components/CoursesReview__SubmissionCard.bs.js","../../../app/frontend/courses/review/CoursesReview__Root.bs.js","../../../app/frontend/shared/types/UserDetails.bs.js","../../../app/frontend/courses/students/types/CoursesStudents__StudentInfo.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__StudentsList.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__Root.bs.js","../../../app/frontend/courses/review/types/CoursesReview__Student.bs.js","../../../app/frontend/courses/review/types/CoursesReview__Reviewer.bs.js","../../../app/frontend/courses/review/types/CoursesReview__SubmissionMeta.bs.js","../../../app/frontend/courses/review/types/CoursesReview__SubmissionReport.bs.js","../../../app/frontend/courses/review/types/CoursesReview__ReviewChecklistResult.bs.js","../../../app/frontend/courses/review/types/CoursesReview__ReviewChecklistItem.bs.js","../../../app/frontend/courses/review/types/CoursesReview__SubmissionDetails.bs.js","../../../app/frontend/courses/review/components/CoursesReview__ChecklistShow.bs.js","../../../app/frontend/courses/review/components/CoursesReview__ChecklistEditor.bs.js","../../../app/frontend/courses/review/components/CoursesReview__Checklist.bs.js","../../../app/frontend/courses/review/components/CoursesReview__ReviewerManager.bs.js","../../../app/frontend/courses/review/components/CoursesReview__SubmissionInfoCard.bs.js","../../../app/frontend/courses/review/components/CoursesReview__Editor.bs.js","../../../app/frontend/courses/review/components/CoursesReview__SubmissionsRoot.bs.js","../../../app/frontend/shared/components/ClickToCopy.bs.js","../../../app/frontend/courses/students/types/CoursesStudents__CoachNote.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__CoachNoteShow.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__CoachNotes.bs.js","../../../app/frontend/courses/students/types/CoursesStudents__EvaluationCriterion.bs.js","../../../app/frontend/courses/students/types/CoursesStudents__StudentDetails.bs.js","../../../app/frontend/courses/students/types/CoursesStudents__Submission.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__SubmissionsList.bs.js","../../../app/frontend/courses/students/components/CoursesStudents__StudentOverlay.bs.js","../../../app/frontend/layouts/app_router/AppRouter.bs.js","../../../app/frontend/packs/AppRouterPack.bs.js"],"sourcesContent":["// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction url(t) {\n return t.url;\n}\n\nfunction local(t) {\n return t.local;\n}\n\nfunction decode(json) {\n return {\n title: Json_decode.field(\"title\", Json_decode.string, json),\n url: Json_decode.field(\"url\", Json_decode.string, json),\n local: Json_decode.field(\"local\", Json_decode.bool, json)\n };\n}\n\nexport {\n title ,\n url ,\n local ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as StudentTopNav__NavLink from \"../types/StudentTopNav__Types/StudentTopNav__NavLink.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.StudentTopNav__DropDown\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction handleToggle(setLinksVisible, param) {\n return Curry._1(setLinksVisible, (function (linksVisible) {\n return !linksVisible;\n }));\n}\n\nfunction additionalLinks(linksVisible, links) {\n if (linksVisible) {\n return React.createElement(\"div\", {\n className: \"dropdown__list dropdown__list-right bg-white shadow-lg rounded mt-3 border absolute w-40 z-50\"\n }, links.map(function (link, index) {\n return React.createElement(\"div\", {\n key: String(index),\n className: \"\"\n }, React.createElement(\"a\", {\n className: \"cursor-pointer block p-3 text-xs text-left font-medium text-gray-900 border-b border-gray-50 bg-white hover:text-primary-500 hover:bg-gray-50 focus:outline-none focus:text-primary-500 focus:bg-gray-50\",\n href: StudentTopNav__NavLink.url(link),\n rel: \"noopener\",\n target: \"_blank\"\n }, StudentTopNav__NavLink.title(link)));\n }));\n } else {\n return null;\n }\n}\n\nfunction StudentTopNav__DropDown(Props) {\n var links = Props.links;\n var match = React.useState(function () {\n return false;\n });\n var setLinksVisible = match[1];\n if (links.length !== 0) {\n return React.createElement(\"button\", {\n key: \"more-links\",\n className: \"whitespace-nowrap ml-2 font-medium text-sm p-4 md:px-3 md:py-2 cursor-pointer relative rounded-lg text-gray-900 hover:bg-gray-50 hover:text-primary-500 focus:outline-none focus:bg-gray-50 focus:text-primary-500\",\n title: t(undefined, undefined, \"show_links\"),\n onClick: (function (param) {\n return Curry._1(setLinksVisible, (function (linksVisible) {\n return !linksVisible;\n }));\n })\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"more\")), React.createElement(\"i\", {\n className: \"fas fa-caret-down ml-2\"\n }), additionalLinks(match[0], links));\n } else {\n return null;\n }\n}\n\nvar make = StudentTopNav__DropDown;\n\nexport {\n str ,\n t ,\n handleToggle ,\n additionalLinks ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as User from \"../../../shared/types/User.bs.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Dropdown from \"../../../shared/components/Dropdown.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.StudentTopNav__UserControls\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction showLink(icon, text, href) {\n return React.createElement(\"div\", {\n key: href,\n className: \"whitespace-nowrap\"\n }, React.createElement(\"a\", {\n className: \"cursor-pointer block p-3 text-xs font-semibold text-gray-900 border-b border-gray-50 bg-white hover:text-primary-500 hover:bg-gray-50\",\n href: href,\n rel: \"nofollow\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fw fa-\" + icon\n }), React.createElement(\"span\", {\n className: \"pl-2\"\n }, text)));\n}\n\nfunction links(param) {\n return [\n showLink(\"edit\", t(undefined, undefined, \"edit_profile\"), \"/user/edit\"),\n showLink(\"power-off\", t(undefined, undefined, \"sign_out\"), \"/users/sign_out\")\n ];\n}\n\nfunction selected(user) {\n return React.createElement(\"button\", {\n className: \"md:ml-2 h-10 w-10 rounded-full border-2 border-gray-300 hover:border-primary-500 focus:outline-none focus:border-primary-500 \",\n title: t(undefined, undefined, \"user_controls\")\n }, Belt_Option.mapWithDefault(user, React.createElement(Avatar.make, {\n name: \"Unknown User\",\n className: \"inline-block object-contain rounded-full text-tiny\"\n }), (function (u) {\n return Belt_Option.mapWithDefault(User.avatarUrl(u), React.createElement(Avatar.make, {\n name: User.name(u),\n className: \"inline-block object-contain rounded-full text-tiny\"\n }), (function (src) {\n return React.createElement(\"img\", {\n className: \"inline-block object-contain rounded-full text-tiny\",\n alt: User.name(u),\n src: src\n });\n }));\n })));\n}\n\nfunction StudentTopNav__UserControls(Props) {\n var user = Props.user;\n return React.createElement(Dropdown.make, {\n selected: selected(user),\n contents: links(undefined),\n right: true\n });\n}\n\nvar make = StudentTopNav__UserControls;\n\nexport {\n str ,\n t ,\n showLink ,\n links ,\n selected ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../shared/components/FaIcon.bs.js\";\nimport * as ReactUtils from \"../../shared/utils/ReactUtils.bs.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Notifications__Root from \"../../notifications/Notifications__Root.bs.js\";\nimport * as StudentTopNav__NavLink from \"./types/StudentTopNav__Types/StudentTopNav__NavLink.bs.js\";\nimport * as StudentTopNav__DropDown from \"./components/StudentTopNav__DropDown.bs.js\";\nimport * as StudentTopNav__UserControls from \"./components/StudentTopNav__UserControls.bs.js\";\n\nimport \"./StudentTopNav.css\"\n;\n\nvar partial_arg = \"components.StudentTopNav\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction headerLink(key, link) {\n var tmp = {\n className: \"whitespace-nowrap no-underline bg-gray-50 md:bg-white hover:bg-gray-50 text-gray-900 rounded-lg hover:text-primary-500 w-full p-4 md:px-3 md:py-2 focus:outline-none focus:bg-gray-50 focus:text-primary-500\",\n href: StudentTopNav__NavLink.url(link)\n };\n var tmp$1 = StudentTopNav__NavLink.local(link) ? undefined : \"noopener\";\n if (tmp$1 !== undefined) {\n tmp.rel = Caml_option.valFromOption(tmp$1);\n }\n var tmp$2 = StudentTopNav__NavLink.local(link) ? undefined : \"_blank\";\n if (tmp$2 !== undefined) {\n tmp.target = Caml_option.valFromOption(tmp$2);\n }\n return React.createElement(\"div\", {\n key: key,\n className: \"md:ml-2 text-sm font-medium text-center cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-r border-b md:border-0\"\n }, React.createElement(\"a\", tmp, StudentTopNav__NavLink.title(link)));\n}\n\nfunction signOutLink(param) {\n return React.createElement(\"div\", {\n key: \"Logout-button\",\n className: \"md:ml-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-r border-b md:border-0\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center\"\n }, React.createElement(\"a\", {\n className: \"border border-primary-500 rounded px-2 py-1 text-primary-500 text-xs md:text-sm md:leading-normal m-4 md:m-0 no-underline font-semibold\",\n href: \"/users/sign_out\",\n rel: \"nofollow\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-power-off\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"sign_out\")))));\n}\n\nfunction signInLink(param) {\n return React.createElement(\"div\", {\n key: \"SignIn-button\",\n className: \"md:ml-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-r border-b md:border-0\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center\"\n }, React.createElement(\"a\", {\n className: \"border border-primary-500 rounded px-2 py-1 text-primary-500 text-xs md:text-sm md:leading-normal m-4 md:m-0 no-underline font-semibold\",\n href: \"/users/sign_in\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-power-off\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"sign_in\")))));\n}\n\nfunction notificationButton(hasNotifications) {\n return React.createElement(Notifications__Root.make, {\n wrapperClasses: \"relative md:ml-1 pt-1 md:pt-0 text-sm font-semibold cursor-default flex w-8 h-8 md:w-9 md:h-9 justify-center items-center rounded-lg hover:bg-gray-50\",\n buttonClasses: \"font-semibold text-gray-900 hover:text-primary-500 w-full flex items-center justify-center focus:text-primary-500 \",\n iconClasses: \"student-navbar__notifications-unread-bullet\",\n hasNotifications: hasNotifications,\n key: \"notifications-button\"\n });\n}\n\nfunction isMobile(param) {\n return window.innerWidth < 768;\n}\n\nfunction headerLinks(links, isLoggedIn, user, hasNotifications) {\n var match = $$Array.to_list(links);\n var match$1 = window.innerWidth < 768;\n var match$2;\n if (match$1) {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n } else if (match) {\n var match$3 = match.tl;\n if (match$3) {\n var match$4 = match$3.tl;\n if (match$4) {\n var match$5 = match$4.tl;\n if (match$5) {\n var match$6 = match$5.tl;\n match$2 = match$6 ? [\n [\n match.hd,\n match$3.hd,\n match$4.hd\n ],\n [\n match$5.hd,\n match$6.hd\n ].concat($$Array.of_list(match$6.tl))\n ] : [\n $$Array.of_list(match),\n []\n ];\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n var match$7 = window.innerWidth < 768;\n return match$2[0].map(function (l, index) {\n return headerLink(String(index), l);\n }).concat([React.createElement(StudentTopNav__DropDown.make, {\n links: match$2[1],\n key: \"more-links\"\n })]).concat([ReactUtils.nullUnless(notificationButton(hasNotifications), isLoggedIn && window.innerWidth >= 768)]).concat([isLoggedIn ? (\n match$7 ? signOutLink(undefined) : React.createElement(StudentTopNav__UserControls.make, {\n user: user,\n key: \"user-controls\"\n })\n ) : signInLink(undefined)]);\n}\n\nfunction StudentTopNav(Props) {\n var schoolName = Props.schoolName;\n var logoUrl = Props.logoUrl;\n var links = Props.links;\n var isLoggedIn = Props.isLoggedIn;\n var currentUser = Props.currentUser;\n var hasNotifications = Props.hasNotifications;\n var match = React.useState(function () {\n return window.innerWidth < 768;\n });\n var toggleMenuHidden = match[1];\n var menuHidden = match[0];\n React.useEffect(function () {\n var resizeCB = function (param) {\n return Curry._1(toggleMenuHidden, (function (param) {\n return window.innerWidth < 768;\n }));\n };\n window.addEventListener(\"resize\", resizeCB);\n \n });\n return React.createElement(\"div\", {\n className: \"border-b\"\n }, React.createElement(\"div\", {\n className: \"container mx-auto px-3 lg:px-0 max-w-5xl\"\n }, React.createElement(\"nav\", {\n className: \"flex justify-between items-center h-20\"\n }, React.createElement(\"div\", {\n className: \"flex w-full items-center justify-between\"\n }, React.createElement(\"a\", {\n className: \"max-w-sm focus:outline-none\",\n href: isLoggedIn ? \"/dashboard\" : \"/\"\n }, logoUrl !== undefined ? React.createElement(\"img\", {\n className: \"h-9 md:h-12 object-contain flex text-sm items-center\",\n alt: \"Logo of \" + schoolName,\n src: logoUrl\n }) : React.createElement(\"div\", {\n className: \"p-2 rounded-lg bg-white text-gray-900 hover:bg-gray-50 hover:text-primary-600\"\n }, React.createElement(\"span\", {\n className: \"text-xl font-bold leading-tight\"\n }, schoolName))), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, ReactUtils.nullUnless(notificationButton(hasNotifications), isLoggedIn), React.createElement(\"div\", {\n onClick: (function (param) {\n return Curry._1(toggleMenuHidden, (function (menuHidden) {\n return !menuHidden;\n }));\n })\n }, React.createElement(\"div\", {\n className: \"student-navbar__menu-btn cursor-pointer hover:bg-gray-50 w-8 h-8 text-center relative focus:outline-none rounded-lg \" + (\n menuHidden ? \"\" : \"open\"\n )\n }, React.createElement(\"span\", {\n className: \"student-navbar__menu-icon\"\n }, React.createElement(\"span\", {\n className: \"student-navbar__menu-icon-bar\"\n }))))), window.innerWidth < 768)), !menuHidden && window.innerWidth >= 768 ? React.createElement(\"div\", {\n className: \"student-navbar__links-container flex justify-end items-center w-3/5 lg:w-3/4 flex-nowrap shrink-0\"\n }, headerLinks(links, isLoggedIn, currentUser, hasNotifications)) : null)), window.innerWidth < 768 && !menuHidden ? React.createElement(\"div\", {\n className: \"student-navbar__links-container flex flex-row border-t w-full flex-wrap shadow-lg\"\n }, headerLinks(links, isLoggedIn, currentUser, hasNotifications)) : null);\n}\n\nvar make = StudentTopNav;\n\nexport {\n t ,\n str ,\n headerLink ,\n signOutLink ,\n signInLink ,\n notificationButton ,\n isMobile ,\n headerLinks ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as User from \"../shared/types/User.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as StudentTopNav from \"../layouts/student/StudentTopNav.bs.js\";\nimport * as StudentTopNav__NavLink from \"../layouts/student/types/StudentTopNav__Types/StudentTopNav__NavLink.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"schoolName\", Json_decode.string, json),\n Caml_option.null_to_opt(Json_decode.field(\"logoUrl\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n Json_decode.field(\"links\", (function (param) {\n return Json_decode.array(StudentTopNav__NavLink.decode, param);\n }), json),\n Json_decode.field(\"isLoggedIn\", Json_decode.bool, json),\n Json_decode.field(\"currentUser\", (function (param) {\n return Json_decode.optional(User.decode, param);\n }), json),\n Json_decode.field(\"hasNotifications\", Json_decode.bool, json)\n ];\n}\n\nvar element = document.querySelector(\"#student-top-nav\");\n\nif (!(element == null)) {\n var match = decodeProps(DomUtils.parseJSONTag(\"student-top-nav-props\", undefined));\n ReactDom.render(React.createElement(StudentTopNav.make, {\n schoolName: match[0],\n logoUrl: match[1],\n links: match[2],\n isLoggedIn: match[3],\n currentUser: match[4],\n hasNotifications: match[5]\n }), element);\n}\n\nexport {\n decodeProps ,\n \n}\n/* element Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json from \"../../../node_modules/@glennsl/bs-json/src/Json.bs.js\";\nimport * as $$Array from \"../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as MarkdownBlock from \"../shared/components/MarkdownBlock.bs.js\";\nimport * as Caml_exceptions from \"../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar RootAttributeMissing = /* @__PURE__ */Caml_exceptions.create(\"ConvertMarkdownPack.RootAttributeMissing\");\n\nvar InvalidProfile = /* @__PURE__ */Caml_exceptions.create(\"ConvertMarkdownPack.InvalidProfile\");\n\nfunction decodeProps(json) {\n return {\n markdown: Json_decode.field(\"markdown\", Json_decode.string, json),\n profile: Json_decode.field(\"profile\", Json_decode.string, json)\n };\n}\n\nfunction parseElement(element, attribute) {\n var props = element.getAttribute(attribute);\n var tmp;\n if (props == null) {\n throw {\n RE_EXN_ID: RootAttributeMissing,\n _1: attribute,\n Error: new Error()\n };\n }\n tmp = props;\n return decodeProps(Json.parseOrRaise(tmp));\n}\n\nfunction profileType(profile) {\n switch (profile) {\n case \"areaOfText\" :\n return /* AreaOfText */1;\n case \"permissive\" :\n return /* Permissive */0;\n default:\n throw {\n RE_EXN_ID: InvalidProfile,\n _1: profile,\n Error: new Error()\n };\n }\n}\n\nfunction parseMarkdown(attributeNameOpt, attributeOpt, param) {\n var attributeName = attributeNameOpt !== undefined ? attributeNameOpt : \"convert-markdown\";\n var attribute = attributeOpt !== undefined ? attributeOpt : \"data-json-props\";\n return $$Array.map((function (element) {\n var props = parseElement(element, attribute);\n ReactDom.render(React.createElement(MarkdownBlock.make, {\n markdown: props.markdown,\n className: \"leading-normal text-sm\",\n profile: profileType(props.profile)\n }), element);\n \n }), Array.prototype.slice.call(document.getElementsByClassName(attributeName)));\n}\n\nparseMarkdown(undefined, undefined, undefined);\n\nexport {\n RootAttributeMissing ,\n InvalidProfile ,\n decodeProps ,\n parseElement ,\n profileType ,\n parseMarkdown ,\n \n}\n/* Not a pure module */\n","import \"~/home/assets/index.css\";\nimport { parseMarkdown } from \"~/packs/ConvertMarkdownPack.bs.js\";\nimport { match } from \"~/shared/utils/Psj.bs.js\";\n\nmatch(true, \"home#index\", () => {\n parseMarkdown();\n});\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction name(t) {\n return t.name;\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction review(t) {\n return t.review;\n}\n\nfunction author(t) {\n return t.author;\n}\n\nfunction description(t) {\n return t.description;\n}\n\nfunction exited(t) {\n return t.exited;\n}\n\nfunction thumbnailUrl(t) {\n return t.thumbnailUrl;\n}\n\nfunction linkedCommunities(t) {\n return t.linkedCommunities;\n}\n\nfunction accessEnded(t) {\n return t.accessEnded;\n}\n\nfunction ended(t) {\n return t.ended;\n}\n\nfunction enableLeaderboard(t) {\n return t.enableLeaderboard;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n review: Json_decode.field(\"review\", Json_decode.bool, json),\n author: Json_decode.field(\"author\", Json_decode.bool, json),\n enableLeaderboard: Json_decode.field(\"enableLeaderboard\", Json_decode.bool, json),\n description: Json_decode.field(\"description\", Json_decode.string, json),\n exited: Json_decode.field(\"exited\", Json_decode.bool, json),\n thumbnailUrl: Caml_option.null_to_opt(Json_decode.field(\"thumbnailUrl\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n linkedCommunities: Json_decode.field(\"linkedCommunities\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n accessEnded: Json_decode.field(\"accessEnded\", Json_decode.bool, json),\n ended: Json_decode.field(\"ended\", Json_decode.bool, json)\n };\n}\n\nexport {\n name ,\n id ,\n review ,\n author ,\n description ,\n exited ,\n thumbnailUrl ,\n linkedCommunities ,\n accessEnded ,\n ended ,\n enableLeaderboard ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as StringUtils from \"../../../shared/utils/StringUtils.bs.js\";\n\nfunction name(t) {\n return t.name;\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json)\n };\n}\n\nfunction path(t) {\n return \"/communities/\" + (t.id + (\"/\" + StringUtils.parameterize(t.name)));\n}\n\nexport {\n name ,\n id ,\n decode ,\n path ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction serialNumber(t) {\n return t.serialNumber;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction courseName(t) {\n return t.courseName;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n serialNumber: Json_decode.field(\"serialNumber\", Json_decode.string, json),\n createdAt: Json_decode.field(\"createdAt\", DateFns.decodeISO, json),\n courseName: Json_decode.field(\"courseName\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n serialNumber ,\n createdAt ,\n courseName ,\n decode ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as UsersDashboard__Course from \"../types/UsersDashboard__Course.bs.js\";\nimport * as UsersDashboard__Community from \"../types/UsersDashboard__Community.bs.js\";\nimport * as UsersDashboard__IssuedCertificate from \"../types/UsersDashboard__IssuedCertificate.bs.js\";\n\nimport \"./UserDashboard__Root.css\"\n;\n\nvar partial_arg = \"components.UsersDashboard__Root\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction headerSectiom(userName, preferredName, userTitle, avatarUrl, showUserEdit) {\n var name = Belt_Option.getWithDefault(preferredName, userName);\n return React.createElement(\"div\", {\n className: \"max-w-5xl mx-auto pt-12 flex items-center justify-between px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"w-16 h-16 rounded-full border object-cover border-gray-300 overflow-hidden shrink-0 mr-4\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: name,\n className: \"w-16 h-16 mr-4 border border-gray-300 rounded-full overflow-hidden shrink-0\"\n }), React.createElement(\"div\", {\n className: \"text-sm flex flex-col justify-center\"\n }, React.createElement(\"div\", {\n className: \"text-black font-bold inline-block\"\n }, name), React.createElement(\"div\", {\n className: \"text-gray-600 inline-block\"\n }, userTitle))), ReactUtils.nullUnless(React.createElement(\"a\", {\n className: \"btn\",\n href: \"/user/edit\"\n }, React.createElement(\"i\", {\n className: \"fas fa-edit text-xs md:text-sm mr-2\"\n }), React.createElement(\"span\", undefined, t(undefined, undefined, \"edit_profile\"))), showUserEdit));\n}\n\nfunction navButtonClasses(selected) {\n return \"font-semibold border-b-2 text-sm py-4 mr-6 hover:text-primary-500 hover:border-gray-300 focus:border-gray-300 focus:text-primary-500 focus:outline-none \" + (\n selected ? \"text-primary-500 border-primary-500\" : \"border-transparent\"\n );\n}\n\nfunction navSection(view, setView, communities, issuedCertificates) {\n return React.createElement(\"div\", {\n className: \"border-b mt-6\"\n }, React.createElement(\"div\", {\n className: \"flex max-w-5xl mx-auto px-3 lg:px-0\",\n role: \"tablist\"\n }, React.createElement(\"button\", {\n \"aria-selected\": view === /* ShowCourses */0,\n className: navButtonClasses(view === /* ShowCourses */0),\n role: \"tab\",\n onClick: (function (param) {\n return Curry._1(setView, (function (param) {\n return /* ShowCourses */0;\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-book text-xs md:text-sm mr-2\"\n }), React.createElement(\"span\", undefined, t(undefined, undefined, \"my_courses\"))), ReactUtils.nullUnless(React.createElement(\"button\", {\n \"aria-selected\": view === /* ShowCommunities */1,\n className: navButtonClasses(view === /* ShowCommunities */1),\n role: \"tab\",\n onClick: (function (param) {\n return Curry._1(setView, (function (param) {\n return /* ShowCommunities */1;\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-users text-xs md:text-sm mr-2\"\n }), React.createElement(\"span\", undefined, t(undefined, undefined, \"communities\"))), ArrayUtils.isNotEmpty(communities)), ReactUtils.nullUnless(React.createElement(\"button\", {\n \"aria-selected\": view === /* ShowCertificates */2,\n className: navButtonClasses(view === /* ShowCertificates */2),\n role: \"tab\",\n onClick: (function (param) {\n return Curry._1(setView, (function (param) {\n return /* ShowCertificates */2;\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-certificate text-xs md:text-sm mr-2\"\n }), React.createElement(\"span\", undefined, t(undefined, undefined, \"certificates\"))), ArrayUtils.isNotEmpty(issuedCertificates))));\n}\n\nfunction courseLink(href, title, icon) {\n return React.createElement(\"a\", {\n key: href,\n className: \"px-2 py-1 mr-2 mt-2 rounded text-sm bg-gray-50 text-gray-500 hover:bg-gray-50 hover:text-primary-500 focus:outline-none focus:bg-gray-50 focus:text-primary-500\",\n href: href\n }, React.createElement(\"i\", {\n className: icon\n }), React.createElement(\"span\", {\n className: \"font-medium ml-2\"\n }, title));\n}\n\nfunction ctaButton(title, href) {\n return React.createElement(\"a\", {\n className: \"w-full bg-primary-50 mt-4 px-6 py-4 flex text-sm font-semibold justify-between items-center cursor-pointer text-primary-500 hover:bg-primary-100 focus:outline-none focus:bg-primary-100\",\n href: href\n }, React.createElement(\"span\", undefined, React.createElement(\"i\", {\n className: \"fas fa-book\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, title)), React.createElement(\"i\", {\n className: \"fas fa-arrow-right\"\n }));\n}\n\nfunction ctaText(message, icon) {\n return React.createElement(\"div\", {\n className: \"w-full bg-red-100 text-red-600 mt-4 px-6 py-4 flex text-sm font-semibold justify-center items-center \"\n }, React.createElement(\"span\", undefined, React.createElement(\"i\", {\n className: icon\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, message)));\n}\n\nfunction studentLink(courseId, suffix) {\n return \"/courses/\" + (courseId + (\"/\" + suffix));\n}\n\nfunction callToAction(course, currentSchoolAdmin) {\n if (currentSchoolAdmin) {\n return \"ViewCourse\";\n } else if (UsersDashboard__Course.author(course)) {\n return \"EditCourse\";\n } else if (UsersDashboard__Course.review(course)) {\n return \"ReviewSubmissions\";\n } else if (UsersDashboard__Course.exited(course)) {\n return \"DroppedOut\";\n } else if (UsersDashboard__Course.ended(course)) {\n return \"CourseEnded\";\n } else if (UsersDashboard__Course.accessEnded(course)) {\n return \"AccessEnded\";\n } else {\n return \"ViewCourse\";\n }\n}\n\nfunction ctaFooter(course, currentSchoolAdmin) {\n var courseId = UsersDashboard__Course.id(course);\n var match = callToAction(course, currentSchoolAdmin);\n if (match === \"ReviewSubmissions\") {\n return ctaButton(t(undefined, undefined, \"cta.review_submissions\"), studentLink(courseId, \"review\"));\n } else if (match === \"ViewCourse\") {\n return ctaButton(t(undefined, undefined, \"cta.view_course\"), studentLink(courseId, \"curriculum\"));\n } else if (match === \"EditCourse\") {\n return ctaButton(t(undefined, undefined, \"cta.edit_curriculum\"), \"/school/courses/\" + (courseId + \"/curriculum\"));\n } else if (match === \"CourseEnded\") {\n return ctaText(t(undefined, undefined, \"cta.course_ended\"), \"fas fa-history\");\n } else if (match === \"DroppedOut\") {\n return ctaText(t(undefined, undefined, \"cta.dropped_out\"), \"fas fa-user-slash\");\n } else {\n return ctaText(t(undefined, undefined, \"cta.access_ended\"), \"fas fa-history\");\n }\n}\n\nfunction communityLinks(communityIds, communities) {\n return communityIds.map(function (id) {\n var community = communities.find(function (c) {\n return UsersDashboard__Community.id(c) === id;\n });\n if (community !== undefined) {\n return React.createElement(\"a\", {\n key: UsersDashboard__Community.id(community),\n className: \"px-2 py-1 mr-2 mt-2 rounded text-sm bg-gray-50 text-gray-500 hover:bg-gray-50 hover:text-primary-500 focus:outline-none focus:bg-gray-50 focus:text-primary-500\",\n href: UsersDashboard__Community.path(community)\n }, React.createElement(\"i\", {\n className: \"fas fa-users\"\n }), React.createElement(\"span\", {\n className: \"font-medium ml-2\"\n }, UsersDashboard__Community.name(community)));\n } else {\n return null;\n }\n });\n}\n\nfunction courseLinks(course, currentSchoolAdmin, communities) {\n var courseId = UsersDashboard__Course.id(course);\n var cta = callToAction(course, currentSchoolAdmin);\n return React.createElement(\"div\", {\n className: \"flex flex-wrap px-4 mt-2\"\n }, ReactUtils.nullUnless(courseLink(\"/school/courses/\" + (courseId + \"/curriculum\"), t(undefined, undefined, \"cta.edit_curriculum\"), \"fas fa-check-square\"), UsersDashboard__Course.author(course) && cta !== \"EditCourse\"), ReactUtils.nullUnless(courseLink(studentLink(courseId, \"curriculum\"), t(undefined, undefined, \"cta.view_curriculum\"), \"fas fa-book\"), cta !== \"ViewCourse\"), ReactUtils.nullUnless(courseLink(studentLink(courseId, \"leaderboard\"), t(undefined, undefined, \"cta.leaderboard\"), \"fas fa-calendar-alt\"), UsersDashboard__Course.enableLeaderboard(course)), ReactUtils.nullUnless(courseLink(studentLink(courseId, \"review\"), t(undefined, undefined, \"cta.review_submissions\"), \"fas fa-check-square\"), UsersDashboard__Course.review(course) && cta !== \"ReviewSubmissions\"), ReactUtils.nullUnless(courseLink(studentLink(courseId, \"students\"), t(undefined, undefined, \"cta.my_students\"), \"fas fa-user-friends\"), UsersDashboard__Course.review(course)), communityLinks(UsersDashboard__Course.linkedCommunities(course), communities));\n}\n\nfunction coursesSection(courses, communities, currentSchoolAdmin) {\n return React.createElement(\"div\", {\n className: \"w-full max-w-5xl mx-auto\"\n }, ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"flex flex-col mx-auto bg-white rounded-md border p-6 justify-center items-center mt-4\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-book text-5xl text-gray-400\"\n }), React.createElement(\"h4\", {\n className: \"mt-3 text-base md:text-lg text-center font-semibold\"\n }, t(undefined, undefined, \"empty_courses\"))), ArrayUtils.isEmpty(courses)), React.createElement(\"div\", {\n className: \"flex flex-wrap flex-1 lg:-mx-5\"\n }, courses.map(function (course) {\n var url = UsersDashboard__Course.thumbnailUrl(course);\n return React.createElement(\"div\", {\n key: UsersDashboard__Course.id(course),\n \"aria-label\": UsersDashboard__Course.name(course),\n className: \"w-full px-3 lg:px-5 md:w-1/2 mt-6 md:mt-10\"\n }, React.createElement(\"div\", {\n key: UsersDashboard__Course.id(course),\n className: \"flex overflow-hidden shadow bg-white rounded-lg flex flex-col justify-between h-full\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"relative\"\n }, React.createElement(\"div\", {\n className: \"relative pb-1/2 bg-gray-800\"\n }, url !== undefined ? React.createElement(\"img\", {\n className: \"absolute h-full w-full object-cover\",\n src: url\n }) : React.createElement(\"div\", {\n className: \"user-dashboard-course__cover absolute h-full w-full svg-bg-pattern-1\"\n })), React.createElement(\"div\", {\n key: UsersDashboard__Course.id(course),\n className: \"user-dashboard-course__title-container absolute w-full flex items-center h-16 bottom-0 z-50\"\n }, React.createElement(\"h4\", {\n className: \"user-dashboard-course__title text-white font-semibold leading-tight pl-6 pr-4 text-lg md:text-xl\"\n }, UsersDashboard__Course.name(course)))), React.createElement(\"div\", {\n className: \"user-dashboard-course__description text-sm px-6 pt-4 w-full leading-relaxed\"\n }, UsersDashboard__Course.description(course)), UsersDashboard__Course.exited(course) && !UsersDashboard__Course.review(course) && !UsersDashboard__Course.author(course) ? React.createElement(\"div\", {\n className: \"text-sm py-4 bg-red-100 rounded mt-2 px-6\"\n }, t(undefined, undefined, \"course_locked_message\")) : React.createElement(\"div\", undefined, courseLinks(course, currentSchoolAdmin, communities))), React.createElement(\"div\", undefined, ctaFooter(course, currentSchoolAdmin))));\n })));\n}\n\nfunction communitiesSection(communities) {\n return React.createElement(\"div\", {\n className: \"w-full max-w-5xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"flex flex-wrap flex-1 lg:-mx-5\"\n }, communities.map(function (community) {\n return React.createElement(\"div\", {\n key: UsersDashboard__Community.id(community),\n className: \"flex w-full px-3 lg:px-5 md:w-1/2 mt-6 md:mt-10\"\n }, React.createElement(\"a\", {\n className: \"w-full h-full shadow rounded-lg hover:shadow-lg\",\n href: UsersDashboard__Community.path(community)\n }, React.createElement(\"div\", {\n className: \"user-dashboard-community__cover flex w-full bg-gray-600 h-40 svg-bg-pattern-5 items-center justify-center p-4 shadow rounded-t-lg\"\n }), React.createElement(\"div\", {\n className: \"w-full flex justify-between items-center flex-wrap px-4 pt-2 pb-4\"\n }, React.createElement(\"h4\", {\n className: \"font-bold text-sm pt-2 leading-tight\"\n }, UsersDashboard__Community.name(community)), React.createElement(\"div\", {\n className: \"btn btn-small btn-primary-ghost mt-2\"\n }, t(undefined, undefined, \"cta.visit_community\")))));\n })));\n}\n\nfunction certificatesSection(issuedCertificates) {\n return React.createElement(\"div\", {\n className: \"w-full max-w-5xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"flex flex-wrap flex-1 lg:-mx-5\"\n }, issuedCertificates.map(function (issuedCertificate) {\n return React.createElement(\"div\", {\n key: UsersDashboard__IssuedCertificate.id(issuedCertificate),\n className: \"flex w-full px-3 lg:px-5 md:w-1/2 mt-6 md:mt-10\"\n }, React.createElement(\"a\", {\n className: \"w-full h-full shadow rounded-lg hover:shadow-lg\",\n href: \"/c/\" + UsersDashboard__IssuedCertificate.serialNumber(issuedCertificate)\n }, React.createElement(\"div\", {\n className: \"user-dashboard-community__cover flex w-full bg-gray-600 h-40 svg-bg-pattern-5 items-center justify-center p-4 shadow rounded-t-lg\"\n }), React.createElement(\"div\", {\n className: \"w-full flex justify-between items-center flex-wrap px-4 pt-2 pb-4\"\n }, React.createElement(\"div\", undefined, React.createElement(\"h4\", {\n className: \"font-bold text-sm pt-2 leading-tight\"\n }, UsersDashboard__IssuedCertificate.courseName(issuedCertificate)), React.createElement(\"div\", {\n className: \"text-xs\"\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"issued_on\")), React.createElement(\"span\", {\n className: \"ml-1\"\n }, DateFns.formatPreset(UsersDashboard__IssuedCertificate.createdAt(issuedCertificate), true, true, undefined, undefined)))), React.createElement(\"div\", {\n className: \"btn btn-small btn-primary-ghost mt-2\"\n }, t(undefined, undefined, \"cta.view_certificate\")))));\n })));\n}\n\nfunction UsersDashboard__Root(Props) {\n var currentSchoolAdmin = Props.currentSchoolAdmin;\n var courses = Props.courses;\n var communities = Props.communities;\n var showUserEdit = Props.showUserEdit;\n var userName = Props.userName;\n var preferredName = Props.preferredName;\n var userTitle = Props.userTitle;\n var avatarUrl = Props.avatarUrl;\n var issuedCertificates = Props.issuedCertificates;\n var match = React.useState(function () {\n return /* ShowCourses */0;\n });\n var view = match[0];\n var tmp;\n switch (view) {\n case /* ShowCourses */0 :\n tmp = coursesSection(courses, communities, currentSchoolAdmin);\n break;\n case /* ShowCommunities */1 :\n tmp = communitiesSection(communities);\n break;\n case /* ShowCertificates */2 :\n tmp = certificatesSection(issuedCertificates);\n break;\n \n }\n return React.createElement(\"div\", {\n className: \"bg-gray-50\"\n }, React.createElement(\"div\", {\n className: \"bg-white\"\n }, headerSectiom(userName, preferredName, userTitle, avatarUrl, showUserEdit), navSection(view, match[1], communities, issuedCertificates)), React.createElement(\"div\", {\n className: \"pb-8\"\n }, tmp));\n}\n\nvar make = UsersDashboard__Root;\n\nexport {\n t ,\n str ,\n headerSectiom ,\n navButtonClasses ,\n navSection ,\n courseLink ,\n ctaButton ,\n ctaText ,\n studentLink ,\n callToAction ,\n ctaFooter ,\n communityLinks ,\n courseLinks ,\n coursesSection ,\n communitiesSection ,\n certificatesSection ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as UsersDashboard__Root from \"../users/home/components/UsersDashboard__Root.bs.js\";\nimport * as UsersDashboard__Course from \"../users/home/types/UsersDashboard__Course.bs.js\";\nimport * as UsersDashboard__Community from \"../users/home/types/UsersDashboard__Community.bs.js\";\nimport * as UsersDashboard__IssuedCertificate from \"../users/home/types/UsersDashboard__IssuedCertificate.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"currentSchoolAdmin\", Json_decode.bool, json),\n Json_decode.field(\"courses\", (function (param) {\n return Json_decode.array(UsersDashboard__Course.decode, param);\n }), json),\n Json_decode.field(\"communities\", (function (param) {\n return Json_decode.array(UsersDashboard__Community.decode, param);\n }), json),\n Json_decode.field(\"showUserEdit\", Json_decode.bool, json),\n Json_decode.field(\"userName\", Json_decode.string, json),\n Caml_option.null_to_opt(Json_decode.field(\"preferredName\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n Json_decode.field(\"userTitle\", Json_decode.string, json),\n Json_decode.optional((function (param) {\n return Json_decode.field(\"avatarUrl\", Json_decode.string, param);\n }), json),\n Json_decode.field(\"issuedCertificates\", (function (param) {\n return Json_decode.array(UsersDashboard__IssuedCertificate.decode, param);\n }), json)\n ];\n}\n\nPsj.match(undefined, \"users#dashboard\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(\"users-dashboard-data\", undefined));\n var element = document.querySelector(\"#users-dashboard\");\n if (!(element == null)) {\n ReactDom.render(React.createElement(UsersDashboard__Root.make, {\n currentSchoolAdmin: match[0],\n courses: match[1],\n communities: match[2],\n showUserEdit: match[3],\n userName: match[4],\n preferredName: match[5],\n userTitle: match[6],\n avatarUrl: match[7],\n issuedCertificates: match[8]\n }), element);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__39effca3__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as GraphqlQuery from \"../shared/utils/GraphqlQuery.bs.js\";\nimport PermanentDeleteSvg from \"./images/permanent-delete.svg\";\n\nvar permanentDeleteIcon = PermanentDeleteSvg;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.UsersDeleteAccount\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation DeleteAccountMutation($token: String!) {\\ndeleteAccount(token: $token) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.deleteAccount;\n return {\n deleteAccount: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.deleteAccount;\n var value$2 = value$1.success;\n var deleteAccount = {\n success: value$2\n };\n return {\n deleteAccount: deleteAccount\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n token: inp.token\n };\n}\n\nfunction makeVariables(token, param) {\n return {\n token: token\n };\n}\n\nvar DeleteAccountQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar DeleteAccountQuery_Graphql_error = include.Graphql_error;\n\nvar DeleteAccountQuery_decodeNotification = include.decodeNotification;\n\nvar DeleteAccountQuery_decodeObject = include.decodeObject;\n\nvar DeleteAccountQuery_decodeNotifications = include.decodeNotifications;\n\nvar DeleteAccountQuery_decodeErrors = include.decodeErrors;\n\nvar DeleteAccountQuery_flashNotifications = include.flashNotifications;\n\nvar DeleteAccountQuery_sendQuery = include.sendQuery;\n\nvar DeleteAccountQuery_query = include.query;\n\nvar DeleteAccountQuery_make = include.make;\n\nvar DeleteAccountQuery = {\n DeleteAccountQuery_inner: DeleteAccountQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: DeleteAccountQuery_Graphql_error,\n decodeNotification: DeleteAccountQuery_decodeNotification,\n decodeObject: DeleteAccountQuery_decodeObject,\n decodeNotifications: DeleteAccountQuery_decodeNotifications,\n decodeErrors: DeleteAccountQuery_decodeErrors,\n flashNotifications: DeleteAccountQuery_flashNotifications,\n sendQuery: DeleteAccountQuery_sendQuery,\n query: DeleteAccountQuery_query,\n $$fetch: $$fetch,\n make: DeleteAccountQuery_make\n};\n\nfunction deleteAccount(token, setState, $$event) {\n $$event.preventDefault();\n Curry._1(setState, (function (param) {\n return /* Deleting */1;\n }));\n Curry._3($$fetch, undefined, undefined, {\n token: token\n }).then(function (result) {\n if (result.deleteAccount.success) {\n Curry._1(setState, (function (param) {\n return /* Deleted */2;\n }));\n setTimeout((function (param) {\n return DomUtils.redirect(\"/users/sign_out\");\n }), 5000);\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction UsersDeleteAccount(Props) {\n var token = Props.token;\n var match = React.useState(function () {\n return /* Waiting */0;\n });\n var setState = match[1];\n var tmp;\n switch (match[0]) {\n case /* Waiting */0 :\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col items-center justify-center text-center max-w-sm mx-auto\"\n }, React.createElement(\"h3\", undefined, t(undefined, undefined, \"head\")), React.createElement(\"p\", {\n className: \"mt-1\"\n }, t(undefined, undefined, \"click_button_below\")), React.createElement(\"div\", {\n className: \"flex mt-4 justify-center\"\n }, React.createElement(\"a\", {\n className: \"btn btn-default mr-2\",\n href: \"/dashboard\"\n }, t(undefined, undefined, \"cancel\")), React.createElement(\"button\", {\n className: \"btn btn-danger\",\n onClick: (function (param) {\n return deleteAccount(token, setState, param);\n })\n }, t(undefined, undefined, \"delete_account\"))));\n break;\n case /* Deleting */1 :\n tmp = React.createElement(\"div\", {\n className: \"text-center max-w-sm mx-auto font-semibold text-red-600\"\n }, React.createElement(\"p\", undefined, t(undefined, undefined, \"please_wait\")), React.createElement(\"i\", {\n className: \"my-3 text-3xl fa fa-spinner fa-pulse\"\n }), React.createElement(\"p\", undefined, t(undefined, undefined, \"queuing_deletion\")));\n break;\n case /* Deleted */2 :\n tmp = React.createElement(\"div\", {\n className: \"text-center max-w-sm mx-auto font-semibold text-red-600\"\n }, React.createElement(\"p\", undefined, t(undefined, undefined, \"deletion_progresss\")), React.createElement(\"i\", {\n className: \"my-3 text-3xl fa fa-spinner fa-pulse\"\n }), React.createElement(\"p\", undefined, t(undefined, undefined, \"signed_out_notified\")));\n break;\n \n }\n return React.createElement(\"div\", {\n className: \"m-6\"\n }, React.createElement(\"div\", {\n className: \"w-64 h-64 mx-auto\"\n }, React.createElement(\"img\", {\n className: \"object-contain mx-auto\",\n src: permanentDeleteIcon\n })), tmp);\n}\n\nvar make = UsersDeleteAccount;\n\nexport {\n permanentDeleteIcon ,\n str ,\n t ,\n ts ,\n DeleteAccountQuery ,\n deleteAccount ,\n make ,\n \n}\n/* permanentDeleteIcon Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as UsersDeleteAccount from \"../users/UsersDeleteAccount.bs.js\";\n\nfunction decodeProps(json) {\n return Json_decode.field(\"token\", Json_decode.string, json);\n}\n\nPsj.match(undefined, \"users#delete_account\", (function (param) {\n var json = DomUtils.parseJSONTag(\"user-delete-account__props\", undefined);\n var token = Json_decode.field(\"token\", Json_decode.string, json);\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(UsersDeleteAccount.make, {\n token: token\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as StringUtils from \"../utils/StringUtils.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json)\n };\n}\n\nfunction color(t) {\n return StringUtils.toColor(t.name);\n}\n\nexport {\n id ,\n name ,\n decode ,\n color ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction avatarUrl(t) {\n return t.avatarUrl;\n}\n\nfunction make(id, name, avatarUrl) {\n return {\n id: id,\n name: name,\n avatarUrl: avatarUrl\n };\n}\n\nfunction makeFromJs(jsObject) {\n return {\n id: jsObject.id,\n name: jsObject.name,\n avatarUrl: jsObject.avatarUrl\n };\n}\n\nexport {\n id ,\n name ,\n avatarUrl ,\n make ,\n makeFromJs ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as CommunitiesShow__TopicParticipant from \"./CommunitiesShow__TopicParticipant.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction solved(t) {\n return t.solved;\n}\n\nfunction views(t) {\n return t.views;\n}\n\nfunction lastActivityAt(t) {\n return t.lastActivityAt;\n}\n\nfunction liveRepliesCount(t) {\n return t.liveRepliesCount;\n}\n\nfunction likesCount(t) {\n return t.likesCount;\n}\n\nfunction topicCategoryId(t) {\n return t.topicCategoryId;\n}\n\nfunction creatorName(t) {\n return t.creatorName;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction participants(t) {\n return t.participants;\n}\n\nfunction participantsCount(t) {\n return t.participantsCount;\n}\n\nfunction make(id, title, lastActivityAt, liveRepliesCount, likesCount, views, topicCategoryId, creatorName, createdAt, solved, participantsCount, participants) {\n return {\n id: id,\n title: title,\n lastActivityAt: lastActivityAt,\n liveRepliesCount: liveRepliesCount,\n likesCount: likesCount,\n views: views,\n topicCategoryId: topicCategoryId,\n creatorName: creatorName,\n createdAt: createdAt,\n solved: solved,\n participantsCount: participantsCount,\n participants: participants\n };\n}\n\nfunction makeFromJS(topicData) {\n return make(topicData.id, topicData.title, Belt_Option.map(topicData.lastActivityAt, DateFns.decodeISO), topicData.liveRepliesCount, topicData.likesCount, topicData.views, topicData.topicCategoryId, Belt_Option.map(topicData.creator, (function (creator) {\n return creator.name;\n })), DateFns.decodeISO(topicData.createdAt), topicData.solved, topicData.participantsCount, topicData.participants.map(CommunitiesShow__TopicParticipant.makeFromJs));\n}\n\nexport {\n id ,\n title ,\n solved ,\n views ,\n lastActivityAt ,\n liveRepliesCount ,\n likesCount ,\n topicCategoryId ,\n creatorName ,\n createdAt ,\n participants ,\n participantsCount ,\n make ,\n makeFromJS ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n title: Json_decode.field(\"title\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n title ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction toArray(t) {\n if (typeof t === \"number\") {\n return [];\n } else {\n return t._0;\n }\n}\n\nexport {\n toArray ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../shared/Avatar.bs.js\";\nimport * as Tooltip from \"../../shared/components/Tooltip.bs.js\";\nimport * as CommunitiesShow__TopicParticipant from \"../types/CommunitiesShow__TopicParticipant.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction avatarClasses(size) {\n var mdSize = size[1];\n var defaultSize = size[0];\n return \"w-\" + (defaultSize + (\" h-\" + (defaultSize + (\" md:w-\" + (mdSize + (\" md:h-\" + (mdSize + \" text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\")))))));\n}\n\nfunction avatar(sizeOpt, avatarUrl, name) {\n var size = sizeOpt !== undefined ? sizeOpt : [\n \"8\",\n \"10\"\n ];\n if (avatarUrl !== undefined) {\n return React.createElement(\"img\", {\n className: avatarClasses(size),\n src: avatarUrl\n });\n } else {\n return React.createElement(Avatar.make, {\n name: name,\n className: avatarClasses(size)\n });\n }\n}\n\nfunction CommunitiesShow__Participants(Props) {\n var tooltipPositionOpt = Props.tooltipPosition;\n var defaultAvatarSizeOpt = Props.defaultAvatarSize;\n var mdAvatarSizeOpt = Props.mdAvatarSize;\n var title = Props.title;\n var className = Props.className;\n var participants = Props.participants;\n var participantsCount = Props.participantsCount;\n var tooltipPosition = tooltipPositionOpt !== undefined ? tooltipPositionOpt : \"Top\";\n var defaultAvatarSize = defaultAvatarSizeOpt !== undefined ? defaultAvatarSizeOpt : \"6\";\n var mdAvatarSize = mdAvatarSizeOpt !== undefined ? mdAvatarSizeOpt : \"8\";\n var otherParticipantsCount = participantsCount - participants.length | 0;\n return React.createElement(\"div\", {\n className: className\n }, React.createElement(\"div\", {\n className: \"text-xs\"\n }, title), React.createElement(\"div\", {\n className: \"inline-flex\"\n }, $$Array.map((function (participant) {\n return React.createElement(Tooltip.make, {\n tip: CommunitiesShow__TopicParticipant.name(participant),\n className: \"-mr-1\",\n position: tooltipPosition,\n children: avatar([\n defaultAvatarSize,\n mdAvatarSize\n ], CommunitiesShow__TopicParticipant.avatarUrl(participant), CommunitiesShow__TopicParticipant.name(participant)),\n key: CommunitiesShow__TopicParticipant.id(participant)\n });\n }), participants), otherParticipantsCount > 0 ? React.createElement(Avatar.make, {\n colors: [\n \"#EEE\",\n \"#000\"\n ],\n name: \"+ \" + String(otherParticipantsCount),\n className: avatarClasses([\n defaultAvatarSize,\n mdAvatarSize\n ])\n }) : null));\n}\n\nvar make = CommunitiesShow__Participants;\n\nexport {\n str ,\n avatarClasses ,\n avatar ,\n make ,\n \n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../shared/components/FaIcon.bs.js\";\nimport * as PfIcon from \"../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as Sorter from \"../shared/components/Sorter.bs.js\";\nimport * as $$String from \"../../../node_modules/rescript/lib/es6/string.js\";\nimport * as DateFns from \"../shared/utils/DateFns.bs.js\";\nimport * as Js_dict from \"../../../node_modules/rescript/lib/es6/js_dict.js\";\nimport * as Dropdown from \"../shared/components/Dropdown.bs.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../shared/utils/OptionUtils.bs.js\";\nimport * as StringUtils from \"../shared/utils/StringUtils.bs.js\";\nimport * as GraphqlQuery from \"../shared/utils/GraphqlQuery.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as LoadingSpinner from \"../shared/components/LoadingSpinner.bs.js\";\nimport * as SkeletonLoading from \"../shared/components/SkeletonLoading.bs.js\";\nimport * as MultiselectDropdown from \"../packages/multiselect-dropdown/src/components/MultiselectDropdown.bs.js\";\nimport * as RescriptReactRouter from \"../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CommunitiesShow__Topic from \"./types/CommunitiesShow__Topic.bs.js\";\nimport * as CommunitiesShow__Target from \"./types/CommunitiesShow__Target.bs.js\";\nimport * as CommunitiesShow__Topics from \"./types/CommunitiesShow__Topics.bs.js\";\nimport * as CommunitiesShow__Participants from \"./components/CommunitiesShow__Participants.bs.js\";\n\nimport \"./CommunitiesShow__Root.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CommunitiesShow__Root\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction getSearch(search) {\n return search._0;\n}\n\nfunction searchBy(search) {\n if (search.TAG === /* SearchContent */0) {\n return \"content\";\n } else {\n return \"title\";\n }\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n if (action === /* BeginLoadingMore */0) {\n return {\n loading: /* LoadingMore */2,\n topics: state.topics,\n filterString: state.filterString,\n totalTopicsCount: state.totalTopicsCount\n };\n } else {\n return {\n loading: /* Reloading */1,\n topics: state.topics,\n filterString: state.filterString,\n totalTopicsCount: state.totalTopicsCount\n };\n }\n }\n if (action.TAG === /* UpdateFilterString */0) {\n return {\n loading: state.loading,\n topics: state.topics,\n filterString: action._0,\n totalTopicsCount: state.totalTopicsCount\n };\n }\n var newTopics = action._2;\n var endCursor = action._0;\n var match = state.loading;\n var updatedTopics = match >= 2 ? $$Array.append(CommunitiesShow__Topics.toArray(state.topics), newTopics) : newTopics;\n return {\n loading: /* NotLoading */0,\n topics: action._1 && endCursor !== undefined ? ({\n TAG: /* PartiallyLoaded */0,\n _0: updatedTopics,\n _1: endCursor\n }) : ({\n TAG: /* FullyLoaded */1,\n _0: updatedTopics\n }),\n filterString: state.filterString,\n totalTopicsCount: action._3\n };\n}\n\nvar Raw = {};\n\nvar query = \"query TopicsFromCommunitiesShowRootQuery($communityId: ID!, $topicCategoryId: ID, $targetId: ID, $resolution: TopicResolutionFilter!, $searchFilter: CommunitySearchFilter, $after: String, $sortCriterion: TopicSortCriterion!, $sortDirection: SortDirection!) {\\ntopics(communityId: $communityId, topicCategoryId: $topicCategoryId, targetId: $targetId, search: $searchFilter, resolution: $resolution, sortDirection: $sortDirection, sortCriterion: $sortCriterion, first: 10, after: $after) {\\nnodes {\\nid \\nlastActivityAt \\ncreatedAt \\ncreator {\\nname \\n}\\n\\nlikesCount \\nliveRepliesCount \\nviews \\ntitle \\nsolved \\ntopicCategoryId \\nparticipantsCount \\nparticipants {\\nid \\nname \\navatarUrl \\n}\\n\\n}\\n\\npageInfo {\\nendCursor \\nhasNextPage \\n}\\n\\ntotalCount \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.topics;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n return {\n topics: {\n nodes: value$2.map(function (value) {\n var value$1 = value.lastActivityAt;\n var value$2 = value.creator;\n var value$3 = value.topicCategoryId;\n var value$4 = value.participants;\n return {\n id: value.id,\n lastActivityAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n createdAt: value.createdAt,\n creator: !(value$2 == null) ? ({\n name: value$2.name\n }) : undefined,\n likesCount: value.likesCount,\n liveRepliesCount: value.liveRepliesCount,\n views: value.views,\n title: value.title,\n solved: value.solved,\n topicCategoryId: !(value$3 == null) ? value$3 : undefined,\n participantsCount: value.participantsCount,\n participants: value$4.map(function (value) {\n var value$1 = value.avatarUrl;\n return {\n id: value.id,\n name: value.name,\n avatarUrl: !(value$1 == null) ? value$1 : undefined\n };\n })\n };\n }),\n pageInfo: {\n endCursor: !(value$4 == null) ? value$4 : undefined,\n hasNextPage: value$3.hasNextPage\n },\n totalCount: value$1.totalCount\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.topics;\n var value$2 = value$1.totalCount;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.hasNextPage;\n var value$5 = value$3.endCursor;\n var endCursor = value$5 !== undefined ? value$5 : null;\n var pageInfo = {\n endCursor: endCursor,\n hasNextPage: value$4\n };\n var value$6 = value$1.nodes;\n var nodes = value$6.map(function (value) {\n var value$1 = value.participants;\n var participants = value$1.map(function (value) {\n var value$1 = value.avatarUrl;\n var avatarUrl = value$1 !== undefined ? value$1 : null;\n var value$2 = value.name;\n var value$3 = value.id;\n return {\n id: value$3,\n name: value$2,\n avatarUrl: avatarUrl\n };\n });\n var value$2 = value.participantsCount;\n var value$3 = value.topicCategoryId;\n var topicCategoryId = value$3 !== undefined ? value$3 : null;\n var value$4 = value.solved;\n var value$5 = value.title;\n var value$6 = value.views;\n var value$7 = value.liveRepliesCount;\n var value$8 = value.likesCount;\n var value$9 = value.creator;\n var creator;\n if (value$9 !== undefined) {\n var value$10 = value$9.name;\n creator = {\n name: value$10\n };\n } else {\n creator = null;\n }\n var value$11 = value.createdAt;\n var value$12 = value.lastActivityAt;\n var lastActivityAt = value$12 !== undefined ? Caml_option.valFromOption(value$12) : null;\n var value$13 = value.id;\n return {\n id: value$13,\n lastActivityAt: lastActivityAt,\n createdAt: value$11,\n creator: creator,\n likesCount: value$8,\n liveRepliesCount: value$7,\n views: value$6,\n title: value$5,\n solved: value$4,\n topicCategoryId: topicCategoryId,\n participantsCount: value$2,\n participants: participants\n };\n });\n var topics = {\n nodes: nodes,\n pageInfo: pageInfo,\n totalCount: value$2\n };\n return {\n topics: topics\n };\n}\n\nfunction serializeInputObjectCommunitySearchFilter(inp) {\n var a = inp.searchBy;\n return {\n search: inp.search,\n searchBy: a === \"content\" ? \"content\" : \"title\"\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.topicCategoryId;\n var a$1 = inp.targetId;\n var a$2 = inp.resolution;\n var a$3 = inp.searchFilter;\n var a$4 = inp.after;\n var a$5 = inp.sortCriterion;\n var a$6 = inp.sortDirection;\n return {\n communityId: inp.communityId,\n topicCategoryId: a !== undefined ? a : undefined,\n targetId: a$1 !== undefined ? a$1 : undefined,\n resolution: a$2 === \"Unsolved\" ? \"Unsolved\" : (\n a$2 === \"Unselected\" ? \"Unselected\" : \"Solved\"\n ),\n searchFilter: a$3 !== undefined ? serializeInputObjectCommunitySearchFilter(a$3) : undefined,\n after: a$4 !== undefined ? a$4 : undefined,\n sortCriterion: a$5 === \"CreatedAt\" ? \"CreatedAt\" : (\n a$5 === \"LastActivityAt\" ? \"LastActivityAt\" : \"Views\"\n ),\n sortDirection: a$6 === \"Descending\" ? \"Descending\" : \"Ascending\"\n };\n}\n\nfunction makeVariables(communityId, topicCategoryId, targetId, resolution, searchFilter, after, sortCriterion, sortDirection, param) {\n return {\n communityId: communityId,\n topicCategoryId: topicCategoryId,\n targetId: targetId,\n resolution: resolution,\n searchFilter: searchFilter,\n after: after,\n sortCriterion: sortCriterion,\n sortDirection: sortDirection\n };\n}\n\nfunction makeInputObjectCommunitySearchFilter(search, searchBy, param) {\n return {\n search: search,\n searchBy: searchBy\n };\n}\n\nvar TopicsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n serializeInputObjectCommunitySearchFilter: serializeInputObjectCommunitySearchFilter,\n makeVariables: makeVariables,\n makeInputObjectCommunitySearchFilter: makeInputObjectCommunitySearchFilter\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar TopicsQuery_Graphql_error = include.Graphql_error;\n\nvar TopicsQuery_decodeNotification = include.decodeNotification;\n\nvar TopicsQuery_decodeObject = include.decodeObject;\n\nvar TopicsQuery_decodeNotifications = include.decodeNotifications;\n\nvar TopicsQuery_decodeErrors = include.decodeErrors;\n\nvar TopicsQuery_flashNotifications = include.flashNotifications;\n\nvar TopicsQuery_sendQuery = include.sendQuery;\n\nvar TopicsQuery_query = include.query;\n\nvar TopicsQuery_fetch = include.$$fetch;\n\nvar TopicsQuery = {\n TopicsQuery_inner: TopicsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n serializeInputObjectCommunitySearchFilter: serializeInputObjectCommunitySearchFilter,\n makeVariables: makeVariables,\n makeInputObjectCommunitySearchFilter: makeInputObjectCommunitySearchFilter,\n Graphql_error: TopicsQuery_Graphql_error,\n decodeNotification: TopicsQuery_decodeNotification,\n decodeObject: TopicsQuery_decodeObject,\n decodeNotifications: TopicsQuery_decodeNotifications,\n decodeErrors: TopicsQuery_decodeErrors,\n flashNotifications: TopicsQuery_flashNotifications,\n sendQuery: TopicsQuery_sendQuery,\n query: TopicsQuery_query,\n $$fetch: TopicsQuery_fetch,\n make: make\n};\n\nfunction getTopics(send, communityId, cursor, filter) {\n var topicCategoryId = OptionUtils.map(TopicCategory.id, filter.topicCategory);\n var targetId = OptionUtils.map(CommunitiesShow__Target.id, filter.target);\n var searchFilter = Belt_Option.map(filter.search, (function (search) {\n if (search.TAG === /* SearchContent */0) {\n return {\n search: search._0,\n searchBy: \"content\"\n };\n } else {\n return {\n search: search._0,\n searchBy: \"title\"\n };\n }\n }));\n var variables = makeVariables(communityId, topicCategoryId, targetId, filter.solution, searchFilter, cursor, filter.sortCriterion, filter.sortDirection, undefined);\n Curry._3(make, undefined, undefined, variables).then(function (response) {\n var newTopics = response.topics.nodes.map(CommunitiesShow__Topic.makeFromJS);\n Curry._1(send, {\n TAG: /* LoadTopics */1,\n _0: response.topics.pageInfo.endCursor,\n _1: response.topics.pageInfo.hasNextPage,\n _2: newTopics,\n _3: response.topics.totalCount\n });\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction reloadTopics(communityId, filter, send) {\n Curry._1(send, /* BeginReloading */1);\n return getTopics(send, communityId, undefined, filter);\n}\n\nfunction computeInitialState(param) {\n return {\n loading: /* NotLoading */0,\n topics: /* Unloaded */0,\n filterString: \"\",\n totalTopicsCount: 0\n };\n}\n\nfunction filterToQueryString(filter) {\n var match = filter.sortCriterion;\n var sortCriterion = match === \"CreatedAt\" ? \"CreatedAt\" : (\n match === \"LastActivityAt\" ? \"LastActivityAt\" : \"Views\"\n );\n var match$1 = filter.sortDirection;\n var sortDirection = match$1 === \"Descending\" ? \"Descending\" : \"Ascending\";\n var filterDict = Js_dict.fromArray([\n [\n \"sortCriterion\",\n sortCriterion\n ],\n [\n \"sortDirection\",\n sortDirection\n ]\n ]);\n Belt_Option.forEach(filter.search, (function (search) {\n filterDict[\"search\"] = search._0;\n filterDict[\"searchBy\"] = searchBy(search);\n \n }));\n Belt_Option.forEach(filter.topicCategory, (function (tc) {\n filterDict[\"topicCategory\"] = TopicCategory.id(tc);\n \n }));\n var match$2 = filter.solution;\n if (match$2 === \"Unsolved\") {\n filterDict[\"solution\"] = \"Unsolved\";\n } else if (match$2 === \"Unselected\") {\n \n } else {\n filterDict[\"solution\"] = \"Solved\";\n }\n return new URLSearchParams(filterDict).toString();\n}\n\nfunction updateParams(filter) {\n return RescriptReactRouter.push(\"?\" + filterToQueryString(filter));\n}\n\nfunction topicsList(topicCategories, topics) {\n if (ArrayUtils.isEmpty(topics)) {\n return React.createElement(\"div\", {\n className: \"flex flex-col mx-auto bg-white rounded-md border p-6 justify-center items-center\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-comments text-5xl text-gray-400\"\n }), React.createElement(\"h4\", {\n className: \"mt-3 text-base md:text-lg text-center font-semibold\"\n }, t(undefined, undefined, \"empty_topics\")));\n } else {\n return topics.map(function (topic) {\n var name = CommunitiesShow__Topic.creatorName(topic);\n var date = CommunitiesShow__Topic.lastActivityAt(topic);\n var id = CommunitiesShow__Topic.topicCategoryId(topic);\n var tmp;\n if (id !== undefined) {\n var topicCategory = ArrayUtils.unsafeFind((function (c) {\n return TopicCategory.id(c) === id;\n }), t(undefined, undefined, \"unable_find_id\") + id, topicCategories);\n var match = StringUtils.toColor(TopicCategory.name(topicCategory));\n var style = {\n backgroundColor: match[0]\n };\n tmp = React.createElement(\"span\", {\n className: \"flex items-center text-xs font-semibold py-1 mr-2\"\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-1\"\n }, TopicCategory.name(topicCategory)));\n } else {\n tmp = null;\n }\n return React.createElement(\"a\", {\n key: CommunitiesShow__Topic.id(topic),\n \"aria-label\": \"Topic \" + CommunitiesShow__Topic.id(topic),\n className: \"block\",\n href: \"/topics/\" + CommunitiesShow__Topic.id(topic)\n }, React.createElement(\"div\", {\n className: \"flex items-center border border-transparent hover:bg-gray-50 hover:text-primary-500 hover:border-primary-400\"\n }, React.createElement(\"div\", {\n className: \"flex-1\"\n }, React.createElement(\"div\", {\n className: \"cursor-pointer no-underline flex flex-col p-4 md:px-6 md:py-5\"\n }, React.createElement(\"span\", {\n className: \"block\"\n }, React.createElement(\"h4\", {\n className: \"community-topic__title text-base font-semibold inline-block break-words leading-snug\"\n }, CommunitiesShow__Topic.title(topic)), React.createElement(\"span\", {\n className: \"block text-xs text-gray-800 pt-1\"\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"topic_posted_by_text\")), React.createElement(\"span\", {\n className: \"font-semibold mr-2\"\n }, name !== undefined ? \" \" + (name + \" \") : \"Unknown \"), React.createElement(\"span\", {\n className: \"hidden md:inline-block md:mr-2\"\n }, \"on \" + DateFns.formatPreset(CommunitiesShow__Topic.createdAt(topic), undefined, true, undefined, undefined)), React.createElement(\"span\", {\n className: \"inline-block md:mt-0 md:px-2 md:border-l border-gray-300\"\n }, date !== undefined ? React.createElement(\"span\", undefined, React.createElement(\"span\", {\n className: \"hidden md:inline-block\"\n }, t(undefined, undefined, \"topic_last_updated_text\")), \" \" + DateFns.formatDistanceToNowStrict(Caml_option.valFromOption(date), true, undefined, undefined, undefined)) : null))), React.createElement(\"span\", {\n className: \"flex flex-row flex-wrap mt-2 items-center\"\n }, React.createElement(\"span\", {\n \"aria-label\": \"Likes\",\n className: \"flex text-center items-center mr-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-thumbs-up text-sm text-gray-600 mr-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ml-1 hidden md:inline\"\n }, t(undefined, CommunitiesShow__Topic.likesCount(topic), \"topic_stats_likes\")))), React.createElement(\"span\", {\n \"aria-label\": \"Replies\",\n className: \"flex justify-between text-center items-center mr-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-comment-dots text-sm text-gray-600 mr-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ml-1 hidden md:inline\"\n }, t(undefined, CommunitiesShow__Topic.liveRepliesCount(topic), \"topic_stats_replies\")))), React.createElement(\"span\", {\n \"aria-label\": \"Views\",\n className: \"flex justify-between text-center items-center mr-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-eye text-sm text-gray-600 mr-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ml-1 hidden md:inline\"\n }, t(undefined, CommunitiesShow__Topic.views(topic), \"topic_stats_views\")))), tmp, ReactUtils.nullUnless(React.createElement(\"span\", {\n \"aria-label\": \"Solved status icon\",\n className: \"flex items-center justify-center w-5 h-5 bg-green-200 text-green-800 rounded-full\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-solid text-xs\"\n })), CommunitiesShow__Topic.solved(topic))))), React.createElement(\"div\", {\n className: \"md:w-1/5\"\n }, React.createElement(CommunitiesShow__Participants.make, {\n title: null,\n className: \"flex shrink-0 items-center justify-end pr-4 md:pr-6\",\n participants: CommunitiesShow__Topic.participants(topic),\n participantsCount: CommunitiesShow__Topic.participantsCount(topic)\n }))));\n });\n }\n}\n\nfunction topicsLoadedData(totalTopicsCount, loadedTopicsCount) {\n return React.createElement(\"div\", {\n className: \"inline-block mt-2 mx-auto bg-gray-50 text-gray-800 text-xs p-2 text-center rounded font-semibold\"\n }, totalTopicsCount === loadedTopicsCount ? t([[\n \"total_topics\",\n String(totalTopicsCount)\n ]], undefined, \"topics_fully_loaded_text\") : t([\n [\n \"total_topics\",\n String(totalTopicsCount)\n ],\n [\n \"loaded_topics_count\",\n String(loadedTopicsCount)\n ]\n ], undefined, \"topics_partially_loaded_text\"));\n}\n\nfunction label(t) {\n switch (t.TAG | 0) {\n case /* TopicCategory */0 :\n return \"Category\";\n case /* Solution */1 :\n return \"Solution\";\n case /* Search */2 :\n if (t._0.TAG === /* SearchContent */0) {\n return \"Search by content\";\n } else {\n return \"Search by title\";\n }\n \n }\n}\n\nfunction value(t) {\n switch (t.TAG | 0) {\n case /* TopicCategory */0 :\n return TopicCategory.name(t._0);\n case /* Solution */1 :\n if (t._0) {\n return \"Solved\";\n } else {\n return \"Unsolved\";\n }\n case /* Search */2 :\n return t._0._0;\n \n }\n}\n\nfunction searchString(t) {\n switch (t.TAG | 0) {\n case /* TopicCategory */0 :\n return \"category \" + TopicCategory.name(t._0);\n case /* Solution */1 :\n return \"solution solved unsolved\";\n case /* Search */2 :\n return t._0._0;\n \n }\n}\n\nfunction color(t) {\n switch (t.TAG | 0) {\n case /* TopicCategory */0 :\n return \"orange\";\n case /* Solution */1 :\n return \"green\";\n case /* Search */2 :\n return \"gray\";\n \n }\n}\n\nfunction topicCategory(topicCategory$1) {\n return {\n TAG: /* TopicCategory */0,\n _0: topicCategory$1\n };\n}\n\nfunction search(search$1) {\n return {\n TAG: /* Search */2,\n _0: search$1\n };\n}\n\nfunction solution(on) {\n return {\n TAG: /* Solution */1,\n _0: on\n };\n}\n\nvar Selectable = {\n label: label,\n value: value,\n searchString: searchString,\n color: color,\n topicCategory: topicCategory,\n search: search,\n solution: solution\n};\n\nvar Multiselect = MultiselectDropdown.Make(Selectable);\n\nfunction unselected(topicCategories, filter, state) {\n var unselectedCategories = $$Array.map(topicCategory, topicCategories.filter(function (category) {\n return OptionUtils.mapWithDefault((function (selectedCategory) {\n return TopicCategory.id(category) !== TopicCategory.id(selectedCategory);\n }), true, filter.topicCategory);\n }));\n var trimmedFilterString = $$String.trim(state.filterString);\n var search = trimmedFilterString === \"\" ? [] : [\n {\n TAG: /* Search */2,\n _0: {\n TAG: /* SearchContent */0,\n _0: trimmedFilterString\n }\n },\n {\n TAG: /* Search */2,\n _0: {\n TAG: /* SearchTitle */1,\n _0: trimmedFilterString\n }\n }\n ];\n var match = filter.solution;\n var hasSolution = match === \"Unsolved\" ? [{\n TAG: /* Solution */1,\n _0: true\n }] : (\n match === \"Unselected\" ? [\n {\n TAG: /* Solution */1,\n _0: true\n },\n {\n TAG: /* Solution */1,\n _0: false\n }\n ] : [{\n TAG: /* Solution */1,\n _0: false\n }]\n );\n return unselectedCategories.concat(search).concat(hasSolution);\n}\n\nfunction selected(filter) {\n var selectedCategory = OptionUtils.mapWithDefault((function (selectedCategory) {\n return [{\n TAG: /* TopicCategory */0,\n _0: selectedCategory\n }];\n }), [], filter.topicCategory);\n var selectedSearchString = OptionUtils.mapWithDefault((function (search) {\n return [{\n TAG: /* Search */2,\n _0: search\n }];\n }), [], filter.search);\n var match = filter.solution;\n var selectedSolutionFilter = match === \"Unsolved\" ? [{\n TAG: /* Solution */1,\n _0: false\n }] : (\n match === \"Unselected\" ? [] : [{\n TAG: /* Solution */1,\n _0: true\n }]\n );\n return selectedCategory.concat(selectedSearchString).concat(selectedSolutionFilter);\n}\n\nfunction onSelectFilter(filter, send, selectable) {\n switch (selectable.TAG | 0) {\n case /* TopicCategory */0 :\n updateParams({\n topicCategory: selectable._0,\n solution: filter.solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n break;\n case /* Solution */1 :\n var solution = selectable._0 ? \"Solved\" : \"Unsolved\";\n updateParams({\n topicCategory: filter.topicCategory,\n solution: solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n break;\n case /* Search */2 :\n updateParams({\n topicCategory: filter.topicCategory,\n solution: filter.solution,\n search: selectable._0,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n break;\n \n }\n return Curry._1(send, {\n TAG: /* UpdateFilterString */0,\n _0: \"\"\n });\n}\n\nfunction onDeselectFilter(filter, selectable) {\n switch (selectable.TAG | 0) {\n case /* TopicCategory */0 :\n return updateParams({\n topicCategory: undefined,\n solution: filter.solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n case /* Solution */1 :\n return updateParams({\n topicCategory: filter.topicCategory,\n solution: \"Unselected\",\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n case /* Search */2 :\n return updateParams({\n topicCategory: filter.topicCategory,\n solution: filter.solution,\n search: undefined,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n \n }\n}\n\nfunction filterPlaceholder(filter, topicCategories) {\n var match = filter.topicCategory;\n var match$1 = filter.search;\n if (match !== undefined || match$1 !== undefined) {\n return \"\";\n } else if (ArrayUtils.isEmpty(topicCategories)) {\n return t(undefined, undefined, \"filter_input_placeholder_default\");\n } else {\n return t(undefined, undefined, \"filter_input_placeholder_categories\");\n }\n}\n\nfunction categoryDropdownSelected(topicCategory) {\n var tmp;\n if (topicCategory !== undefined) {\n var match = TopicCategory.color(topicCategory);\n var style = {\n backgroundColor: match[0]\n };\n tmp = React.createElement(\"div\", {\n className: \"inline-flex items-center\"\n }, React.createElement(\"div\", {\n className: \"h-3 w-3 border\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, TopicCategory.name(topicCategory)));\n } else {\n tmp = t(undefined, undefined, \"all_categories_button\");\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"Selected category filter\",\n className: \"text-sm bg-white border border-gray-300 rounded py-1 md:py-2 px-3 focus:outline-none focus:bg-white focus:border-primary-300 cursor-pointer\"\n }, tmp, React.createElement(FaIcon.make, {\n classes: \"ml-4 fas fa-caret-down\"\n }));\n}\n\nfunction categoryDropdownContents(availableTopicCategories, filter) {\n var selectableTopicCategories = Belt_Option.mapWithDefault(filter.topicCategory, availableTopicCategories, (function (topicCategory) {\n return availableTopicCategories.filter(function (availableTopicCategory) {\n return TopicCategory.id(availableTopicCategory) !== TopicCategory.id(topicCategory);\n });\n }));\n return selectableTopicCategories.map(function (topicCategory) {\n var match = TopicCategory.color(topicCategory);\n var style = {\n backgroundColor: match[0]\n };\n var categoryName = TopicCategory.name(topicCategory);\n return React.createElement(\"div\", {\n \"aria-label\": \"Select category \" + categoryName,\n className: \"pl-3 pr-4 py-2 font-normal flex items-center\",\n onClick: (function (param) {\n return updateParams({\n topicCategory: topicCategory,\n solution: filter.solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection\n });\n })\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-1\"\n }, categoryName));\n });\n}\n\nfunction criterion(c) {\n if (c === \"CreatedAt\") {\n return t(undefined, undefined, \"sort_criterion_posted_at\");\n } else if (c === \"LastActivityAt\") {\n return t(undefined, undefined, \"sort_criterion_last_activity\");\n } else {\n return t(undefined, undefined, \"sort_criterion_views\");\n }\n}\n\nfunction criterionType(_t) {\n return \"Number\";\n}\n\nvar Sortable = {\n criterion: criterion,\n criterionType: criterionType\n};\n\nvar TopicsSorter = Sorter.Make(Sortable);\n\nfunction topicsSorter(filter) {\n return React.createElement(\"div\", {\n \"aria-label\": \"Change topics sorting\",\n className: \"shrink-0\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase\"\n }, t(undefined, undefined, \"sort_criterion_input_label\")), React.createElement(TopicsSorter.make, {\n criteria: [\n \"CreatedAt\",\n \"LastActivityAt\",\n \"Views\"\n ],\n selectedCriterion: filter.sortCriterion,\n direction: filter.sortDirection,\n onDirectionChange: (function (sortDirection) {\n return updateParams({\n topicCategory: filter.topicCategory,\n solution: filter.solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: filter.sortCriterion,\n sortDirection: sortDirection\n });\n }),\n onCriterionChange: (function (sortCriterion) {\n return updateParams({\n topicCategory: filter.topicCategory,\n solution: filter.solution,\n search: filter.search,\n target: filter.target,\n sortCriterion: sortCriterion,\n sortDirection: filter.sortDirection\n });\n })\n }));\n}\n\nfunction filterFromQueryParams(search, target, topicCategories) {\n var params = new URLSearchParams(search);\n var criterion = params.get(\"solution\");\n var criterion$1 = params.get(\"sortCriterion\");\n var direction = params.get(\"sortDirection\");\n return {\n topicCategory: Belt_Option.flatMap(Caml_option.nullable_to_opt(params.get(\"topicCategory\")), (function (cat) {\n return Caml_option.undefined_to_opt(topicCategories.find(function (c) {\n return TopicCategory.id(c) === cat;\n }));\n })),\n solution: (criterion == null) ? \"Unselected\" : (\n criterion === \"Solved\" ? \"Solved\" : (\n criterion === \"Unsolved\" ? \"Unsolved\" : \"Unselected\"\n )\n ),\n search: Belt_Option.map(Caml_option.nullable_to_opt(params.get(\"search\")), (function (searchString) {\n var match = params.get(\"searchBy\");\n if (match == null) {\n return {\n TAG: /* SearchTitle */1,\n _0: searchString\n };\n }\n switch (match) {\n case \"content\" :\n return {\n TAG: /* SearchContent */0,\n _0: searchString\n };\n case \"title\" :\n return {\n TAG: /* SearchTitle */1,\n _0: searchString\n };\n default:\n return {\n TAG: /* SearchTitle */1,\n _0: searchString\n };\n }\n })),\n target: target,\n sortCriterion: (criterion$1 == null) ? \"CreatedAt\" : (\n criterion$1 === \"LastActivityAt\" ? \"LastActivityAt\" : (\n criterion$1 === \"Views\" ? \"Views\" : \"CreatedAt\"\n )\n ),\n sortDirection: !(direction == null) && !(direction === \"Descending\" || direction !== \"Ascending\") ? \"Ascending\" : \"Descending\"\n };\n}\n\nfunction CommunitiesShow__Root(Props) {\n var communityId = Props.communityId;\n var target = Props.target;\n var topicCategories = Props.topicCategories;\n var match = React.useReducer(reducer, {\n loading: /* NotLoading */0,\n topics: /* Unloaded */0,\n filterString: \"\",\n totalTopicsCount: 0\n });\n var send = match[1];\n var state = match[0];\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var filter = filterFromQueryParams(url.search, target, topicCategories);\n React.useEffect((function () {\n reloadTopics(communityId, filter, send);\n \n }), [url]);\n var topics = state.topics;\n var tmp;\n if (typeof topics === \"number\") {\n tmp = SkeletonLoading.multiple(10, SkeletonLoading.card(undefined, undefined));\n } else if (topics.TAG === /* PartiallyLoaded */0) {\n var cursor = topics._1;\n var topics$1 = topics._0;\n var match$1 = state.loading;\n var tmp$1;\n switch (match$1) {\n case /* NotLoading */0 :\n tmp$1 = React.createElement(\"button\", {\n className: \"btn btn-primary-ghost cursor-pointer w-full mt-4\",\n onClick: (function (param) {\n Curry._1(send, /* BeginLoadingMore */0);\n return getTopics(send, communityId, cursor, filter);\n })\n }, t(undefined, undefined, \"button_load_more\"));\n break;\n case /* Reloading */1 :\n tmp$1 = null;\n break;\n case /* LoadingMore */2 :\n tmp$1 = SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined));\n break;\n \n }\n tmp = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"shadow bg-white rounded-lg divide-y\"\n }, topicsList(topicCategories, topics$1)), React.createElement(\"div\", {\n className: \"text-center\"\n }, topicsLoadedData(state.totalTopicsCount, topics$1.length)), tmp$1);\n } else {\n var topics$2 = topics._0;\n tmp = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"shadow bg-white rounded-lg divide-y\"\n }, topicsList(topicCategories, topics$2)), React.createElement(\"div\", {\n className: \"text-center\"\n }, topicsLoadedData(state.totalTopicsCount, topics$2.length)));\n }\n var match$2 = state.topics;\n var tmp$2;\n if (typeof match$2 === \"number\") {\n tmp$2 = null;\n } else {\n var match$3 = state.loading;\n var loading = match$3 === 1;\n tmp$2 = React.createElement(LoadingSpinner.make, {\n loading: loading\n });\n }\n return React.createElement(\"div\", {\n className: \"flex-1 flex flex-col\"\n }, target !== undefined ? React.createElement(\"div\", {\n className: \"max-w-3xl w-full mt-5 mx-auto px-3 md:px-0\"\n }, React.createElement(\"div\", {\n className: \"flex py-4 px-4 md:px-6 w-full bg-yellow-100 border border-dashed border-yellow-400 rounded justify-between items-center\"\n }, React.createElement(\"p\", {\n className: \"w-3/5 md:w-4/5 font-semibold text-sm\"\n }, \"Target: \" + CommunitiesShow__Target.title(target)), React.createElement(\"a\", {\n className: \"no-underline bg-yellow-100 border border-yellow-400 px-3 py-2 hover:bg-yellow-200 rounded-lg cursor-pointer text-xs font-semibold\",\n href: \"/communities/\" + communityId\n }, \"Clear Filter\"))) : null, React.createElement(\"div\", {\n className: \"mt-5 flex flex-col flex-1 \"\n }, React.createElement(\"div\", {\n className: \"w-full sticky top-0 z-30 bg-gray-50 py-2\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl w-full mx-auto relative px-3 md:px-6\"\n }, React.createElement(\"div\", {\n className: \"pb-3 flex justify-between\"\n }, ReactUtils.nullIf(React.createElement(Dropdown.make, {\n selected: categoryDropdownSelected(filter.topicCategory),\n contents: categoryDropdownContents(topicCategories, filter),\n className: \"\"\n }), ArrayUtils.isEmpty(topicCategories)), React.createElement(\"div\", {\n className: \"\"\n })), React.createElement(\"div\", {\n className: \"flex w-full items-start flex-wrap\"\n }, React.createElement(\"div\", {\n className: \"flex-1 pr-2\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase pl-px\"\n }, t(undefined, undefined, \"filter_input_label\")), React.createElement(Multiselect.make, {\n id: \"filter\",\n placeholder: filterPlaceholder(filter, topicCategories),\n onChange: (function (filterString) {\n return Curry._1(send, {\n TAG: /* UpdateFilterString */0,\n _0: filterString\n });\n }),\n value: state.filterString,\n unselected: unselected(topicCategories, filter, state),\n selected: selected(filter),\n onSelect: (function (param) {\n return onSelectFilter(filter, send, param);\n }),\n onDeselect: (function (param) {\n return onDeselectFilter(filter, param);\n })\n })), topicsSorter(filter)))), React.createElement(\"div\", {\n className: \"max-w-3xl w-full mx-auto relative px-3 md:px-6 pb-4\"\n }, React.createElement(\"div\", {\n className: \"community-topic__list-container my-4\",\n id: \"topics\"\n }, tmp)), tmp$2));\n}\n\nvar make$1 = CommunitiesShow__Root;\n\nexport {\n str ,\n t ,\n getSearch ,\n searchBy ,\n reducer ,\n TopicsQuery ,\n getTopics ,\n reloadTopics ,\n computeInitialState ,\n filterToQueryString ,\n updateParams ,\n topicsList ,\n topicsLoadedData ,\n Selectable ,\n Multiselect ,\n unselected ,\n selected ,\n onSelectFilter ,\n onDeselectFilter ,\n filterPlaceholder ,\n categoryDropdownSelected ,\n categoryDropdownContents ,\n Sortable ,\n TopicsSorter ,\n topicsSorter ,\n filterFromQueryParams ,\n make$1 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as CommunitiesShow__Root from \"../communities/CommunitiesShow__Root.bs.js\";\nimport * as CommunitiesShow__Target from \"../communities/types/CommunitiesShow__Target.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"communityId\", Json_decode.string, json),\n Json_decode.optional((function (param) {\n return Json_decode.field(\"target\", CommunitiesShow__Target.decode, param);\n }), json),\n Json_decode.field(\"topicCategories\", (function (param) {\n return Json_decode.array(TopicCategory.decode, param);\n }), json)\n ];\n}\n\nPsj.match(undefined, \"communities#show\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(CommunitiesShow__Root.make, {\n communityId: match[0],\n target: match[1],\n topicCategories: match[2]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as React from \"react\";\n\nimport \"./Radio.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nfunction Radio(Props) {\n var id = Props.id;\n var label = Props.label;\n var onChange = Props.onChange;\n var checkedOpt = Props.checked;\n var checked = checkedOpt !== undefined ? checkedOpt : false;\n return React.createElement(\"div\", {\n className: \"relative\"\n }, React.createElement(\"input\", {\n className: \"w-0 h-0 absolute radio-input focus:outline-none\",\n id: id,\n checked: checked,\n type: \"radio\",\n onChange: onChange\n }), React.createElement(\"label\", {\n className: \"radio-label flex items-center\",\n htmlFor: id\n }, React.createElement(\"span\", undefined, React.createElement(\"svg\", {\n height: \"14px\",\n width: \"14px\",\n viewBox: \"0 0 14 14\"\n }, React.createElement(\"circle\", {\n cx: \"8\",\n cy: \"8\",\n fill: \"white\",\n r: \"3\"\n }))), React.createElement(\"span\", {\n className: \"text-sm flex-1 font-semibold leading-loose\"\n }, label)));\n}\n\nvar make = Radio;\n\nexport {\n str ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction toLanguageName(inputLanguage, outputLanguage) {\n var intlDisplayNames = new Intl.DisplayNames([outputLanguage], {\n type: \"language\"\n });\n return intlDisplayNames.of(inputLanguage);\n}\n\nfunction humanize(languageCode) {\n if (languageCode.startsWith(\"en\")) {\n return toLanguageName(languageCode, languageCode);\n } else {\n return toLanguageName(languageCode, \"en\") + \" - \" + toLanguageName(languageCode, languageCode);\n }\n}\n\nexport {\n toLanguageName ,\n humanize ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction ConfirmWindow(Props) {\n var title = Props.title;\n var body = Props.body;\n var confirmButtonText = Props.confirmButtonText;\n var cancelButtonText = Props.cancelButtonText;\n var onConfirm = Props.onConfirm;\n var onCancel = Props.onCancel;\n var disableConfirm = Props.disableConfirm;\n var alertTypeOpt = Props.alertType;\n var alertType = alertTypeOpt !== undefined ? alertTypeOpt : \"Normal\";\n var match = alertType === \"Critical\" ? [\n \"bg-red-200\",\n \"text-red-600\",\n \"btn btn-danger\"\n ] : [\n \"bg-green-200\",\n \"text-green-600\",\n \"btn btn-success\"\n ];\n return React.createElement(\"div\", {\n className: \"fixed bottom-0 inset-x-0 z-50 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center\"\n }, React.createElement(\"div\", {\n className: \"fixed inset-0\"\n }, React.createElement(\"div\", {\n className: \"absolute inset-0 bg-gray-800 opacity-75\"\n })), React.createElement(\"div\", {\n \"aria-modal\": true,\n \"aria-labelledby\": \"modal-headline\",\n className: \"relative z-50 bg-white rounded-lg px-4 pt-5 pb-4 overflow-hidden shadow-xl sm:max-w-lg sm:w-full sm:p-6\",\n role: \"dialog\"\n }, React.createElement(\"div\", {\n className: \"sm:flex sm:items-start\"\n }, React.createElement(\"div\", {\n className: \"mx-auto shrink-0 flex items-center justify-center h-12 w-12 rounded-full sm:mx-0 sm:h-10 sm:w-10 \" + match[0]\n }, React.createElement(\"svg\", {\n className: \"h-6 w-6 \" + match[1],\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\"\n }, React.createElement(\"path\", {\n d: \"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\"\n }))), React.createElement(\"div\", {\n className: \"mt-3 sm:mt-0 sm:ml-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg text-center sm:text-left font-semibold\",\n id: \"modal-headline\"\n }, title), React.createElement(\"div\", {\n className: \"mt-2\"\n }, body))), React.createElement(\"div\", {\n className: \"mt-5 sm:mt-4 sm:flex sm:flex-row-reverse\"\n }, React.createElement(\"span\", {\n className: \"flex w-full rounded-md shadow-sm sm:ml-3 sm:w-auto\"\n }, React.createElement(\"button\", {\n className: match[2] + \" w-full\",\n disabled: disableConfirm,\n type: \"button\",\n onClick: (function ($$event) {\n $$event.preventDefault();\n return Curry._1(onConfirm, undefined);\n })\n }, confirmButtonText)), React.createElement(\"span\", {\n className: \"mt-3 flex w-full rounded-md shadow-sm sm:mt-0 sm:w-auto\"\n }, React.createElement(\"button\", {\n className: \"inline-flex justify-center w-full rounded-md border border-gray-300 px-4 py-2 bg-white text-sm font-semibold text-gray-600 hover:bg-gray-50 hover:text-gray-600 focus:outline-none\",\n type: \"button\",\n onClick: (function ($$event) {\n $$event.preventDefault();\n return Curry._1(onCancel, undefined);\n })\n }, cancelButtonText)))));\n}\n\nvar make = ConfirmWindow;\n\nexport {\n str ,\n make ,\n \n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Api from \"../shared/Api.bs.js\";\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as Radio from \"../shared/components/Radio.bs.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../shared/components/FaIcon.bs.js\";\nimport * as Locale from \"../shared/utils/Locale.bs.js\";\nimport * as $$String from \"../../../node_modules/rescript/lib/es6/string.js\";\nimport * as Caml_array from \"../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as EmailUtils from \"../shared/utils/EmailUtils.bs.js\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as OptionUtils from \"../shared/utils/OptionUtils.bs.js\";\nimport * as GraphqlQuery from \"../shared/utils/GraphqlQuery.bs.js\";\nimport * as $$Notification from \"../shared/Notification.bs.js\";\nimport * as ConfirmWindow from \"../shared/components/ConfirmWindow.bs.js\";\nimport * as AuthenticityToken from \"../shared/utils/AuthenticityToken.bs.js\";\nimport * as School__InputGroupError from \"../schools/shared/components/School__InputGroupError.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.UserEdit\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* StartSaving */0 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: true,\n dirty: state.dirty\n };\n case /* ResetSaving */1 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: false,\n dirty: state.dirty\n };\n case /* StartDeletingAccount */2 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: true,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* FinishAccountDeletion */3 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: \"\",\n showDeleteAccountForm: false,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: false,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: state.dirty\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateName */0 :\n return {\n name: action._0,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdatePreferredName */1 :\n return {\n name: state.name,\n preferredName: action._0,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateAbout */2 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: action._0,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateEmail */3 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: action._0,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* SetDisableUpdateEmail */4 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: action._0,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* UpdateLocale */5 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: action._0,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateCurrentPassword */6 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: action._0,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateNewPassword */7 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: action._0,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateNewPassWordConfirm */8 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: action._0,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateEmailForDeletion */9 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: action._0,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* UpdateDailyDigest */10 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: action._0,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n case /* UpdateAvatarUrl */11 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: action._0,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: undefined,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* ChangeDeleteAccountFormVisibility */12 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: \"\",\n showDeleteAccountForm: action._0,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* SetAvatarUploadError */13 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: action._0,\n saving: state.saving,\n dirty: state.dirty\n };\n case /* FinishSaving */14 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: state.email,\n disableEmailInput: state.disableEmailInput,\n avatarUrl: state.avatarUrl,\n currentPassword: \"\",\n newPassword: \"\",\n confirmPassword: \"\",\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: action._0,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: false,\n dirty: false\n };\n case /* UpdateEmailAndDisableInput */15 :\n return {\n name: state.name,\n preferredName: state.preferredName,\n about: state.about,\n locale: state.locale,\n email: action._0,\n disableEmailInput: true,\n avatarUrl: state.avatarUrl,\n currentPassword: state.currentPassword,\n newPassword: state.newPassword,\n confirmPassword: state.confirmPassword,\n dailyDigest: state.dailyDigest,\n emailForAccountDeletion: state.emailForAccountDeletion,\n showDeleteAccountForm: state.showDeleteAccountForm,\n hasCurrentPassword: state.hasCurrentPassword,\n deletingAccount: state.deletingAccount,\n avatarUploadError: state.avatarUploadError,\n saving: state.saving,\n dirty: true\n };\n \n }\n }\n}\n\nvar Raw = {};\n\nvar query = \"mutation UpdateUserMutation($name: String!, $preferredName: String, $about: String, $locale: String!, $currentPassword: String, $newPassword: String, $confirmPassword: String, $dailyDigest: Boolean!) {\\nupdateUser(name: $name, preferredName: $preferredName, about: $about, locale: $locale, currentPassword: $currentPassword, newPassword: $newPassword, confirmNewPassword: $confirmPassword, dailyDigest: $dailyDigest) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.updateUser;\n return {\n updateUser: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.updateUser;\n var value$2 = value$1.success;\n var updateUser = {\n success: value$2\n };\n return {\n updateUser: updateUser\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.preferredName;\n var a$1 = inp.about;\n var a$2 = inp.currentPassword;\n var a$3 = inp.newPassword;\n var a$4 = inp.confirmPassword;\n return {\n name: inp.name,\n preferredName: a !== undefined ? a : undefined,\n about: a$1 !== undefined ? a$1 : undefined,\n locale: inp.locale,\n currentPassword: a$2 !== undefined ? a$2 : undefined,\n newPassword: a$3 !== undefined ? a$3 : undefined,\n confirmPassword: a$4 !== undefined ? a$4 : undefined,\n dailyDigest: inp.dailyDigest\n };\n}\n\nfunction makeVariables(name, preferredName, about, locale, currentPassword, newPassword, confirmPassword, dailyDigest, param) {\n return {\n name: name,\n preferredName: preferredName,\n about: about,\n locale: locale,\n currentPassword: currentPassword,\n newPassword: newPassword,\n confirmPassword: confirmPassword,\n dailyDigest: dailyDigest\n };\n}\n\nvar UpdateUserQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar UpdateUserQuery_Graphql_error = include.Graphql_error;\n\nvar UpdateUserQuery_decodeNotification = include.decodeNotification;\n\nvar UpdateUserQuery_decodeObject = include.decodeObject;\n\nvar UpdateUserQuery_decodeNotifications = include.decodeNotifications;\n\nvar UpdateUserQuery_decodeErrors = include.decodeErrors;\n\nvar UpdateUserQuery_flashNotifications = include.flashNotifications;\n\nvar UpdateUserQuery_sendQuery = include.sendQuery;\n\nvar UpdateUserQuery_query = include.query;\n\nvar UpdateUserQuery_make = include.make;\n\nvar UpdateUserQuery = {\n UpdateUserQuery_inner: UpdateUserQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: UpdateUserQuery_Graphql_error,\n decodeNotification: UpdateUserQuery_decodeNotification,\n decodeObject: UpdateUserQuery_decodeObject,\n decodeNotifications: UpdateUserQuery_decodeNotifications,\n decodeErrors: UpdateUserQuery_decodeErrors,\n flashNotifications: UpdateUserQuery_flashNotifications,\n sendQuery: UpdateUserQuery_sendQuery,\n query: UpdateUserQuery_query,\n $$fetch: $$fetch,\n make: UpdateUserQuery_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation InitiateAccountDeletionMutation($email: String!) {\\ninitiateAccountDeletion(email: $email) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.initiateAccountDeletion;\n return {\n initiateAccountDeletion: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.initiateAccountDeletion;\n var value$2 = value$1.success;\n var initiateAccountDeletion = {\n success: value$2\n };\n return {\n initiateAccountDeletion: initiateAccountDeletion\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n email: inp.email\n };\n}\n\nfunction makeVariables$1(email, param) {\n return {\n email: email\n };\n}\n\nvar InitiateAccountDeletionQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar InitiateAccountDeletionQuery_Graphql_error = include$1.Graphql_error;\n\nvar InitiateAccountDeletionQuery_decodeNotification = include$1.decodeNotification;\n\nvar InitiateAccountDeletionQuery_decodeObject = include$1.decodeObject;\n\nvar InitiateAccountDeletionQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar InitiateAccountDeletionQuery_decodeErrors = include$1.decodeErrors;\n\nvar InitiateAccountDeletionQuery_flashNotifications = include$1.flashNotifications;\n\nvar InitiateAccountDeletionQuery_sendQuery = include$1.sendQuery;\n\nvar InitiateAccountDeletionQuery_query = include$1.query;\n\nvar InitiateAccountDeletionQuery_make = include$1.make;\n\nvar InitiateAccountDeletionQuery = {\n InitiateAccountDeletionQuery_inner: InitiateAccountDeletionQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: InitiateAccountDeletionQuery_Graphql_error,\n decodeNotification: InitiateAccountDeletionQuery_decodeNotification,\n decodeObject: InitiateAccountDeletionQuery_decodeObject,\n decodeNotifications: InitiateAccountDeletionQuery_decodeNotifications,\n decodeErrors: InitiateAccountDeletionQuery_decodeErrors,\n flashNotifications: InitiateAccountDeletionQuery_flashNotifications,\n sendQuery: InitiateAccountDeletionQuery_sendQuery,\n query: InitiateAccountDeletionQuery_query,\n $$fetch: $$fetch$1,\n make: InitiateAccountDeletionQuery_make\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"mutation SendUpdateEmailToken($newEmail: String!) {\\nsendUpdateEmailToken(newEmail: $newEmail) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$2(value) {\n var value$1 = value.sendUpdateEmailToken;\n return {\n sendUpdateEmailToken: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.sendUpdateEmailToken;\n var value$2 = value$1.success;\n var sendUpdateEmailToken = {\n success: value$2\n };\n return {\n sendUpdateEmailToken: sendUpdateEmailToken\n };\n}\n\nfunction serializeVariables$2(inp) {\n return {\n newEmail: inp.newEmail\n };\n}\n\nfunction makeVariables$2(newEmail, param) {\n return {\n newEmail: newEmail\n };\n}\n\nvar SendEmailUpdateTokenQuery_inner = {\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2\n};\n\nvar include$2 = GraphqlQuery.Extender({\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$2 = include$2.$$fetch;\n\nvar SendEmailUpdateTokenQuery_Graphql_error = include$2.Graphql_error;\n\nvar SendEmailUpdateTokenQuery_decodeNotification = include$2.decodeNotification;\n\nvar SendEmailUpdateTokenQuery_decodeObject = include$2.decodeObject;\n\nvar SendEmailUpdateTokenQuery_decodeNotifications = include$2.decodeNotifications;\n\nvar SendEmailUpdateTokenQuery_decodeErrors = include$2.decodeErrors;\n\nvar SendEmailUpdateTokenQuery_flashNotifications = include$2.flashNotifications;\n\nvar SendEmailUpdateTokenQuery_sendQuery = include$2.sendQuery;\n\nvar SendEmailUpdateTokenQuery_query = include$2.query;\n\nvar SendEmailUpdateTokenQuery_make = include$2.make;\n\nvar SendEmailUpdateTokenQuery = {\n SendEmailUpdateTokenQuery_inner: SendEmailUpdateTokenQuery_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\n Graphql_error: SendEmailUpdateTokenQuery_Graphql_error,\n decodeNotification: SendEmailUpdateTokenQuery_decodeNotification,\n decodeObject: SendEmailUpdateTokenQuery_decodeObject,\n decodeNotifications: SendEmailUpdateTokenQuery_decodeNotifications,\n decodeErrors: SendEmailUpdateTokenQuery_decodeErrors,\n flashNotifications: SendEmailUpdateTokenQuery_flashNotifications,\n sendQuery: SendEmailUpdateTokenQuery_sendQuery,\n query: SendEmailUpdateTokenQuery_query,\n $$fetch: $$fetch$2,\n make: SendEmailUpdateTokenQuery_make\n};\n\nfunction uploadAvatar(send, formData) {\n return Api.sendFormData(\"/user/upload_avatar\", formData, (function (json) {\n $$Notification.success(I18n.ts(undefined, undefined, \"notifications.done_exclamation\"), t(undefined, undefined, \"avatar_uploaded_notification\"));\n var avatarUrl = Json_decode.field(\"avatarUrl\", Json_decode.string, json);\n return Curry._1(send, {\n TAG: /* UpdateAvatarUrl */11,\n _0: avatarUrl\n });\n }), (function (param) {\n return Curry._1(send, {\n TAG: /* SetAvatarUploadError */13,\n _0: t(undefined, undefined, \"upload_failed\")\n });\n }));\n}\n\nfunction updateEmail(send, email, newEmail) {\n Curry._1(send, {\n TAG: /* SetDisableUpdateEmail */4,\n _0: false\n });\n Curry._3($$fetch$2, undefined, undefined, {\n newEmail: newEmail\n }).then(function (param) {\n Curry._1(send, {\n TAG: /* SetDisableUpdateEmail */4,\n _0: true\n });\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */15,\n _0: email\n });\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction submitAvatarForm(send, formId) {\n var element = document.querySelector(\"#\" + formId);\n if (element == null) {\n Rollbar.error(\"Could not find form to upload file for content block: \" + formId);\n return ;\n } else {\n return uploadAvatar(send, new FormData(element));\n }\n}\n\nfunction handleAvatarInputChange(send, formId, $$event) {\n $$event.preventDefault();\n var files = $$event.target.files;\n if (files.length === 0) {\n return ;\n }\n var file = Caml_array.get(files, 0);\n var isInvalidImageFile = true;\n if (file.size <= window.pupilfirst.maxUploadFileSize) {\n var match = file.type;\n var tmp;\n switch (match) {\n case \"image/gif\" :\n case \"image/jpeg\" :\n case \"image/png\" :\n tmp = false;\n break;\n default:\n tmp = true;\n }\n isInvalidImageFile = tmp;\n }\n var error = isInvalidImageFile ? t(undefined, undefined, \"select_image_limit\") : undefined;\n if (error !== undefined) {\n return Curry._1(send, {\n TAG: /* SetAvatarUploadError */13,\n _0: error\n });\n } else {\n return submitAvatarForm(send, formId);\n }\n}\n\nfunction updateUser(state, send, $$event) {\n $$event.preventDefault();\n Curry._1(send, /* StartSaving */0);\n var variables = makeVariables(state.name, state.preferredName, state.about, state.locale, state.currentPassword, state.newPassword, state.confirmPassword, state.dailyDigest, undefined);\n Curry._3($$fetch, undefined, undefined, variables).then(function (result) {\n if (result.updateUser.success) {\n var hasCurrentPassword = state.newPassword.length !== 0;\n Curry._1(send, {\n TAG: /* FinishSaving */14,\n _0: hasCurrentPassword\n });\n } else {\n Curry._1(send, {\n TAG: /* FinishSaving */14,\n _0: state.hasCurrentPassword\n });\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(send, /* ResetSaving */1);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction initiateAccountDeletion(state, send) {\n Curry._1(send, /* StartDeletingAccount */2);\n Curry._3($$fetch$1, undefined, undefined, {\n email: state.emailForAccountDeletion\n }).then(function (result) {\n Curry._1(send, /* FinishAccountDeletion */3);\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(send, /* FinishAccountDeletion */3);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction hasInvalidPassword(state) {\n return !(state.newPassword === \"\" && state.confirmPassword === \"\" || state.newPassword === state.confirmPassword && state.newPassword.length >= 8);\n}\n\nfunction saveDisabled(state) {\n if (hasInvalidPassword(state) || $$String.trim(state.name).length === 0) {\n return true;\n } else {\n return !state.dirty;\n }\n}\n\nfunction confirmDeletionWindow(state, send) {\n if (!state.showDeleteAccountForm) {\n return null;\n }\n var body = React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"confirm_dialog_aria\")\n }, React.createElement(\"p\", {\n className: \"text-sm text-center sm:text-left text-gray-600\"\n }, t(undefined, undefined, \"account_delete_q\")), React.createElement(\"div\", {\n className: \"mt-3\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"email\"\n }, t(undefined, undefined, \"confirm_email\")), React.createElement(\"input\", {\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"email\",\n autoComplete: \"off\",\n placeholder: t(undefined, undefined, \"email_placeholder\"),\n type: \"email\",\n value: state.emailForAccountDeletion,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateEmailForDeletion */9,\n _0: $$event.target.value\n });\n })\n })));\n return React.createElement(ConfirmWindow.make, {\n title: t(undefined, undefined, \"delete_account\"),\n body: body,\n confirmButtonText: t(undefined, undefined, \"initiate_deletion\"),\n cancelButtonText: t(undefined, undefined, \"cancel\"),\n onConfirm: (function (param) {\n return initiateAccountDeletion(state, send);\n }),\n onCancel: (function (param) {\n return Curry._1(send, {\n TAG: /* ChangeDeleteAccountFormVisibility */12,\n _0: false\n });\n }),\n disableConfirm: state.deletingAccount,\n alertType: \"Critical\"\n });\n}\n\nfunction UserEdit(Props) {\n var name = Props.name;\n var preferredName = Props.preferredName;\n var hasCurrentPassword = Props.hasCurrentPassword;\n var about = Props.about;\n var locale = Props.locale;\n var availableLocales = Props.availableLocales;\n var avatarUrl = Props.avatarUrl;\n var dailyDigest = Props.dailyDigest;\n var isSchoolAdmin = Props.isSchoolAdmin;\n var hasValidDeleteAccountToken = Props.hasValidDeleteAccountToken;\n var email = Props.email;\n var initialState_dailyDigest = OptionUtils.mapWithDefault((function (d) {\n return d;\n }), false, dailyDigest);\n var initialState = {\n name: name,\n preferredName: preferredName,\n about: about,\n locale: locale,\n email: email,\n disableEmailInput: true,\n avatarUrl: avatarUrl,\n currentPassword: \"\",\n newPassword: \"\",\n confirmPassword: \"\",\n dailyDigest: initialState_dailyDigest,\n emailForAccountDeletion: \"\",\n showDeleteAccountForm: false,\n hasCurrentPassword: hasCurrentPassword,\n deletingAccount: false,\n avatarUploadError: undefined,\n saving: false,\n dirty: false\n };\n var match = React.useReducer(reducer, initialState);\n var send = match[1];\n var state = match[0];\n var url = state.avatarUrl;\n var error = state.avatarUploadError;\n return React.createElement(\"div\", {\n className: \"container mx-auto px-3 py-8 max-w-5xl\"\n }, confirmDeletionWindow(state, send), React.createElement(\"div\", {\n className: \"bg-white shadow sm:rounded-lg\"\n }, React.createElement(\"div\", {\n className: \"px-4 py-5 sm:p-6\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/3 pr-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"edit_profile\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"displayed_publicly\"))), React.createElement(\"div\", {\n className: \"mt-5 md:mt-0 w-full md:w-2/3\"\n }, React.createElement(\"div\", {\n className: \"\"\n }, React.createElement(\"div\", {\n className: \"\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"user_name\"\n }, I18n.ts(undefined, undefined, \"name\")))), React.createElement(\"input\", {\n className: \"appearance-none mb-2 block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"user_name\",\n autoFocus: true,\n name: \"name\",\n placeholder: t(undefined, undefined, \"name_placeholder\"),\n value: state.name,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateName */0,\n _0: $$event.target.value\n });\n })\n }), React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"name_error\"),\n active: $$String.trim(state.name).length < 2\n }), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"user_preferred_name\"\n }, I18n.ts(undefined, undefined, \"preferred_name\")), React.createElement(\"input\", {\n className: \"appearance-none mb-2 block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"user_preferred_name\",\n name: \"preferred_name\",\n placeholder: t(undefined, undefined, \"preferred_name_placeholder\"),\n value: state.preferredName,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdatePreferredName */1,\n _0: $$event.target.value\n });\n })\n })), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"about\"\n }, t(undefined, undefined, \"about\")), React.createElement(\"div\", undefined, React.createElement(\"textarea\", {\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"about\",\n placeholder: t(undefined, undefined, \"about_placeholder\"),\n rows: 3,\n value: state.about,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateAbout */2,\n _0: $$event.target.value\n });\n })\n }))), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"form\", {\n id: \"user-avatar-uploader\"\n }, React.createElement(\"input\", {\n name: \"authenticity_token\",\n type: \"hidden\",\n value: AuthenticityToken.fromHead(undefined)\n }), React.createElement(\"label\", {\n className: \"block text-sm font-semibold\"\n }, t(undefined, undefined, \"photo\")), React.createElement(\"div\", {\n className: \"mt-2 flex items-center\"\n }, React.createElement(\"span\", {\n className: \"inline-block h-14 w-14 rounded-full overflow-hidden bg-gray-50 border-2 boder-gray-400\"\n }, url !== undefined ? React.createElement(\"img\", {\n src: url\n }) : React.createElement(Avatar.make, {\n name: name\n })), React.createElement(\"span\", {\n className: \"ml-5 inline-flex\"\n }, React.createElement(\"input\", {\n \"aria-label\": \"User Avatar\",\n className: \"form-input__file-sr-only\",\n id: \"user-edit__avatar-input\",\n multiple: false,\n name: \"user[avatar]\",\n required: false,\n type: \"file\",\n onChange: (function (param) {\n return handleAvatarInputChange(send, \"user-avatar-uploader\", param);\n })\n }), React.createElement(\"label\", {\n \"aria-hidden\": true,\n className: \"form-input__file-label shadow-sm py-2 px-3 border border-gray-300 rounded-md text-sm font-semibold hover:text-gray-800 active:bg-gray-50 active:text-gray-800\",\n htmlFor: \"user-edit__avatar-input\"\n }, t(undefined, undefined, \"change_photo\"))), error !== undefined ? React.createElement(School__InputGroupError.make, {\n message: error,\n active: true\n }) : null))), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"user_email\",\n name: \"user_email\"\n }, t(undefined, undefined, \"email_label\")), React.createElement(\"div\", {\n className: \"mt-2 flex items-stretch gap-2\"\n }, React.createElement(\"input\", {\n \"aria-label\": \"User Email\",\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"user-update__email-input\",\n disabled: state.disableEmailInput,\n name: \"user_email\",\n required: true,\n type: \"email\",\n value: state.email,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateEmail */3,\n _0: $$event.target.value\n });\n })\n }), state.disableEmailInput ? React.createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: (function (evt) {\n return Curry._1(send, {\n TAG: /* SetDisableUpdateEmail */4,\n _0: false\n });\n })\n }, I18n.ts(undefined, undefined, \"edit\")) : React.createElement(\"div\", {\n className: \"flex gap-2\"\n }, React.createElement(\"button\", {\n className: \"btn btn-subtle\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */15,\n _0: email\n });\n })\n }, I18n.ts(undefined, undefined, \"cancel\")), React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: EmailUtils.isInvalid(false, state.email) || state.email === email,\n onClick: (function (param) {\n return updateEmail(send, email, state.email);\n })\n }, I18n.ts(undefined, undefined, \"update\"))))))), React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row mt-10 md:mt-12\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/3 pr-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"security\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"update_credentials\"))), React.createElement(\"div\", {\n className: \"mt-5 md:mt-0 w-full md:w-2/3\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, state.hasCurrentPassword ? t(undefined, undefined, \"change_password\") : t(undefined, undefined, \"set_password\")), state.hasCurrentPassword ? React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"current_password\"\n }, t(undefined, undefined, \"current_password\")), React.createElement(\"input\", {\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"current_password\",\n autoComplete: \"off\",\n placeholder: t(undefined, undefined, \"password_placeholder\"),\n type: \"password\",\n value: state.currentPassword,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateCurrentPassword */6,\n _0: $$event.target.value\n });\n })\n })) : null, React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"new_password\"\n }, t(undefined, undefined, \"new_password\")), React.createElement(\"input\", {\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"new_password\",\n autoComplete: \"off\",\n placeholder: t(undefined, undefined, \"new_password_placeholder\"),\n type: \"password\",\n value: state.newPassword,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateNewPassword */7,\n _0: $$event.target.value\n });\n })\n })), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n autoComplete: \"off\",\n htmlFor: \"confirm_password\"\n }, t(undefined, undefined, \"confirm_password\")), React.createElement(\"input\", {\n className: \"appearance-none block text-sm w-full shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"confirm_password\",\n autoComplete: \"off\",\n placeholder: t(undefined, undefined, \"confirm_password_placeholder\"),\n type: \"password\",\n value: state.confirmPassword,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateNewPassWordConfirm */8,\n _0: $$event.target.value\n });\n })\n }), React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"confirm_password_error\"),\n active: hasInvalidPassword(state)\n })))), React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row mt-10 md:mt-12\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/3 pr-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"notifications\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"update_email_notifications\"))), React.createElement(\"div\", {\n className: \"mt-5 md:mt-0 w-full md:w-2/3\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, \"Community Digest\"), React.createElement(\"p\", {\n className: \"text-sm text-gray-600\"\n }, t(undefined, undefined, \"community_digest_emails\")), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(Radio.make, {\n id: \"daily_mail_enable\",\n label: t(undefined, undefined, \"send_email_radio\"),\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateDailyDigest */10,\n _0: $$event.target.checked\n });\n }),\n checked: state.dailyDigest\n })), React.createElement(\"div\", {\n className: \"mt-4 flex items-center\"\n }, React.createElement(Radio.make, {\n id: \"daily_mail_disable\",\n label: t(undefined, undefined, \"disable_email_radio\"),\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateDailyDigest */10,\n _0: !$$event.target.checked\n });\n }),\n checked: !state.dailyDigest\n }))))), React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row mt-10 md:mt-12\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/3 pr-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"localization\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"update_locale\"))), React.createElement(\"div\", {\n className: \"mt-5 md:mt-0 w-full md:w-2/3\"\n }, React.createElement(\"label\", {\n className: \"font-semibold\",\n htmlFor: \"language\"\n }, t(undefined, undefined, \"language\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600\"\n }, t(undefined, undefined, \"select_language\")), React.createElement(\"div\", {\n className: \"mt-6\"\n }, React.createElement(\"select\", {\n className: \"select appearance-none block text-sm w-full bg-white shadow-sm border border-gray-300 rounded px-4 py-2 my-2 leading-relaxed focus:outline-none focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"language\",\n value: state.locale,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateLocale */5,\n _0: $$event.target.value\n });\n })\n }, availableLocales.map(function (availableLocale) {\n return React.createElement(\"option\", {\n key: availableLocale,\n \"aria-selected\": state.locale === availableLocale,\n value: availableLocale\n }, Locale.humanize(availableLocale));\n })))))), React.createElement(\"div\", {\n className: \"bg-gray-50 px-4 py-5 sm:p-6 flex rounded-b-lg justify-end\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: saveDisabled(state),\n onClick: (function (param) {\n return updateUser(state, send, param);\n })\n }, t(undefined, undefined, \"save_changes\")))), React.createElement(\"div\", {\n className: \"bg-white shadow sm:rounded-lg mt-10\"\n }, React.createElement(\"div\", {\n className: \"px-4 py-5 sm:p-6\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/3 pr-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"account\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"manage_account\"))), React.createElement(\"div\", {\n className: \"mt-5 md:mt-0 w-full md:w-2/3\"\n }, React.createElement(\"p\", {\n className: \"font-semibold text-red-700\"\n }, t(undefined, undefined, \"delete_account\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 mt-1\"\n }, t(undefined, undefined, \"deleting_account_warning\") + \" \"), React.createElement(\"div\", {\n className: \"mt-4\"\n }, isSchoolAdmin || hasValidDeleteAccountToken ? React.createElement(\"div\", {\n className: \"bg-orange-100 border-l-4 border-orange-400 p-4\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-orange-400\"\n }), React.createElement(\"div\", {\n className: \"ml-3\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-orange-900\"\n }, isSchoolAdmin ? t(undefined, undefined, \"you_admin_warning\") : t(undefined, undefined, \"already_iniated_deletion_warning\"))))) : React.createElement(\"button\", {\n className: \"py-2 px-3 border border-red-500 text-red-600 rounded text-xs font-semibold hover:bg-red-600 hover:text-white focus:outline-none active:bg-red-700 active:text-white\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* ChangeDeleteAccountFormVisibility */12,\n _0: true\n });\n })\n }, t(undefined, undefined, \"delete_your_account\"))))))));\n}\n\nvar ts = I18n.ts;\n\nvar make = UserEdit;\n\nexport {\n str ,\n t ,\n ts ,\n reducer ,\n UpdateUserQuery ,\n InitiateAccountDeletionQuery ,\n SendEmailUpdateTokenQuery ,\n uploadAvatar ,\n updateEmail ,\n submitAvatarForm ,\n handleAvatarInputChange ,\n updateUser ,\n initiateAccountDeletion ,\n hasInvalidPassword ,\n saveDisabled ,\n confirmDeletionWindow ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as UserEdit from \"../users/UserEdit.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"name\", Json_decode.string, json),\n Json_decode.field(\"preferredName\", Json_decode.string, json),\n Json_decode.field(\"about\", Json_decode.string, json),\n Json_decode.field(\"email\", Json_decode.string, json),\n Json_decode.field(\"locale\", Json_decode.string, json),\n Json_decode.field(\"availableLocales\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n Json_decode.field(\"avatarUrl\", (function (param) {\n return Json_decode.optional(Json_decode.string, param);\n }), json),\n Json_decode.field(\"dailyDigest\", (function (param) {\n return Json_decode.optional(Json_decode.bool, param);\n }), json),\n Json_decode.field(\"hasCurrentPassword\", Json_decode.bool, json),\n Json_decode.field(\"isSchoolAdmin\", Json_decode.bool, json),\n Json_decode.field(\"hasValidDeleteAccountToken\", Json_decode.bool, json)\n ];\n}\n\nPsj.match(undefined, \"users#edit\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(\"user-edit__props\", undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(UserEdit.make, {\n name: match[0],\n preferredName: match[1],\n hasCurrentPassword: match[8],\n about: match[2],\n locale: match[4],\n availableLocales: match[5],\n avatarUrl: match[6],\n dailyDigest: match[7],\n isSchoolAdmin: match[9],\n hasValidDeleteAccountToken: match[10],\n email: match[3]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as User from \"../../shared/types/User.bs.js\";\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction creatorId(t) {\n return t.creatorId;\n}\n\nfunction editorId(t) {\n return t.editorId;\n}\n\nfunction body(t) {\n return t.body;\n}\n\nfunction replies(t) {\n return t.replies;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction editedAt(t) {\n return t.editedAt;\n}\n\nfunction likedByUser(t) {\n return t.likedByUser;\n}\n\nfunction postNumber(t) {\n return t.postNumber;\n}\n\nfunction totalLikes(t) {\n return t.totalLikes;\n}\n\nfunction solution(t) {\n return t.solution;\n}\n\nfunction user(users, t) {\n return Belt_Option.map(t.creatorId, (function (creatorId) {\n return ArrayUtils.unsafeFind((function (user) {\n return User.id(user) === creatorId;\n }), \"Unable to user with id: \" + (creatorId + \" in TopicsShow__Post\"), users);\n }));\n}\n\nfunction sort(posts) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.postNumber - y.postNumber | 0;\n }), posts);\n}\n\nfunction repliesToPost(posts, post) {\n return sort(posts.filter(function (p) {\n return $$Array.mem(p.id, post.replies);\n }));\n}\n\nfunction addReply(newReplyId, t) {\n return {\n id: t.id,\n body: t.body,\n creatorId: t.creatorId,\n editorId: t.editorId,\n postNumber: t.postNumber,\n createdAt: t.createdAt,\n editedAt: t.editedAt,\n totalLikes: t.totalLikes,\n likedByUser: t.likedByUser,\n replies: $$Array.append([newReplyId], t.replies),\n solution: t.solution\n };\n}\n\nfunction addLike(t) {\n return {\n id: t.id,\n body: t.body,\n creatorId: t.creatorId,\n editorId: t.editorId,\n postNumber: t.postNumber,\n createdAt: t.createdAt,\n editedAt: t.editedAt,\n totalLikes: t.totalLikes + 1 | 0,\n likedByUser: true,\n replies: t.replies,\n solution: t.solution\n };\n}\n\nfunction removeLike(t) {\n return {\n id: t.id,\n body: t.body,\n creatorId: t.creatorId,\n editorId: t.editorId,\n postNumber: t.postNumber,\n createdAt: t.createdAt,\n editedAt: t.editedAt,\n totalLikes: t.totalLikes - 1 | 0,\n likedByUser: false,\n replies: t.replies,\n solution: t.solution\n };\n}\n\nfunction markAsSolution(replyId, replies) {\n return replies.map(function (reply) {\n if (reply.id === replyId) {\n return {\n id: reply.id,\n body: reply.body,\n creatorId: reply.creatorId,\n editorId: reply.editorId,\n postNumber: reply.postNumber,\n createdAt: reply.createdAt,\n editedAt: reply.editedAt,\n totalLikes: reply.totalLikes,\n likedByUser: reply.likedByUser,\n replies: reply.replies,\n solution: true\n };\n } else {\n return {\n id: reply.id,\n body: reply.body,\n creatorId: reply.creatorId,\n editorId: reply.editorId,\n postNumber: reply.postNumber,\n createdAt: reply.createdAt,\n editedAt: reply.editedAt,\n totalLikes: reply.totalLikes,\n likedByUser: reply.likedByUser,\n replies: reply.replies,\n solution: false\n };\n }\n });\n}\n\nfunction unmarkSolution(replies) {\n return replies.map(function (reply) {\n return {\n id: reply.id,\n body: reply.body,\n creatorId: reply.creatorId,\n editorId: reply.editorId,\n postNumber: reply.postNumber,\n createdAt: reply.createdAt,\n editedAt: reply.editedAt,\n totalLikes: reply.totalLikes,\n likedByUser: reply.likedByUser,\n replies: reply.replies,\n solution: false\n };\n });\n}\n\nfunction find(postId, posts) {\n return ArrayUtils.unsafeFind((function (post) {\n return post.id === postId;\n }), \"Unable for find post with ID: \" + (postId + \" in TopicShow__Post\"), posts);\n}\n\nfunction highestPostNumber(posts) {\n return posts.reduce((function (maxPostNumber, t) {\n if (t.postNumber > maxPostNumber) {\n return t.postNumber;\n } else {\n return maxPostNumber;\n }\n }), 0);\n}\n\nfunction make(id, body, creatorId, editorId, postNumber, createdAt, editedAt, totalLikes, likedByUser, replies, solution) {\n return {\n id: id,\n body: body,\n creatorId: creatorId,\n editorId: editorId,\n postNumber: postNumber,\n createdAt: createdAt,\n editedAt: editedAt,\n totalLikes: totalLikes,\n likedByUser: likedByUser,\n replies: replies,\n solution: solution\n };\n}\n\nfunction decodeReplyId(json) {\n return Json_decode.field(\"id\", Json_decode.string, json);\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n body: Json_decode.field(\"body\", Json_decode.string, json),\n creatorId: Json_decode.optional((function (param) {\n return Json_decode.field(\"creatorId\", Json_decode.string, param);\n }), json),\n editorId: Json_decode.optional((function (param) {\n return Json_decode.field(\"editorId\", Json_decode.string, param);\n }), json),\n postNumber: Json_decode.field(\"postNumber\", Json_decode.$$int, json),\n createdAt: Json_decode.field(\"createdAt\", DateFns.decodeISO, json),\n editedAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"editedAt\", DateFns.decodeISO, param);\n }), json),\n totalLikes: Json_decode.field(\"totalLikes\", Json_decode.$$int, json),\n likedByUser: Json_decode.field(\"likedByUser\", Json_decode.bool, json),\n replies: Json_decode.field(\"replies\", (function (param) {\n return Json_decode.array(decodeReplyId, param);\n }), json),\n solution: Json_decode.field(\"solution\", Json_decode.bool, json)\n };\n}\n\nexport {\n id ,\n creatorId ,\n editorId ,\n body ,\n replies ,\n createdAt ,\n editedAt ,\n likedByUser ,\n postNumber ,\n totalLikes ,\n solution ,\n user ,\n sort ,\n repliesToPost ,\n addReply ,\n addLike ,\n removeLike ,\n markAsSolution ,\n unmarkSolution ,\n find ,\n highestPostNumber ,\n make ,\n decodeReplyId ,\n decode ,\n \n}\n/* User Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction lockedAt(t) {\n return t.lockedAt;\n}\n\nfunction lockedById(t) {\n return t.lockedById;\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction topicCategoryId(t) {\n return t.topicCategoryId;\n}\n\nfunction updateTitle(title, t) {\n return {\n id: t.id,\n title: title,\n topicCategoryId: t.topicCategoryId,\n lockedAt: t.lockedAt,\n lockedById: t.lockedById\n };\n}\n\nfunction lock(lockedById, t) {\n return {\n id: t.id,\n title: t.title,\n topicCategoryId: t.topicCategoryId,\n lockedAt: Caml_option.some(new Date()),\n lockedById: lockedById\n };\n}\n\nfunction unlock(t) {\n return {\n id: t.id,\n title: t.title,\n topicCategoryId: t.topicCategoryId,\n lockedAt: undefined,\n lockedById: undefined\n };\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n title: Json_decode.field(\"title\", Json_decode.string, json),\n topicCategoryId: Json_decode.optional((function (param) {\n return Json_decode.field(\"topicCategoryId\", Json_decode.string, param);\n }), json),\n lockedAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"lockedAt\", DateFns.decodeISO, param);\n }), json),\n lockedById: Json_decode.optional((function (param) {\n return Json_decode.field(\"lockedById\", Json_decode.string, param);\n }), json)\n };\n}\n\nexport {\n title ,\n lockedAt ,\n lockedById ,\n id ,\n topicCategoryId ,\n updateTitle ,\n lock ,\n unlock ,\n decode ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as User from \"../../shared/types/User.bs.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../shared/Avatar.bs.js\";\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar avatarClasses = \"w-9 h-9 md:w-9 md:h-9 text-xs rounded-full overflow-hidden shrink-0 object-cover\";\n\nfunction avatar(avatarUrl, name) {\n if (avatarUrl !== undefined) {\n return React.createElement(\"img\", {\n className: avatarClasses,\n src: avatarUrl\n });\n } else {\n return React.createElement(Avatar.make, {\n name: name,\n className: avatarClasses\n });\n }\n}\n\nfunction TopicsShow__UserShow(Props) {\n var user = Props.user;\n var createdAt = Props.createdAt;\n var match = user !== undefined ? [\n User.name(user),\n User.avatarUrl(user),\n User.fullTitle(user)\n ] : [\n \"Unknown\",\n undefined,\n \"Unknown\"\n ];\n var name = match[0];\n return React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"hidden lg:block text-xs text-gray-800\"\n }, DateFns.format(createdAt, \"do MMMM, yyyy HH:mm\")), React.createElement(\"div\", {\n className: \"pl-0 py-2 lg:p-2 flex flex-row items-center lg:bg-gray-50 lg:border rounded-lg lg:mt-1\"\n }, React.createElement(\"div\", {\n className: \"w-9 h-9 rounded-full bg-gray-500 text-white border border-gray-300 flex items-center justify-center shrink-0 overflow-hidden\"\n }, avatar(match[1], name)), React.createElement(\"div\", {\n className: \"pl-2\"\n }, React.createElement(\"p\", {\n className: \"font-semibold text-xs\"\n }, name), React.createElement(\"p\", {\n className: \"text-xs leadig-normal\"\n }, match[2]))), React.createElement(\"p\", {\n className: \"block lg:hidden pb-2 text-xs text-gray-800\"\n }, DateFns.format(createdAt, \"do MMMM, yyyy HH:mm\")));\n}\n\nvar make = TopicsShow__UserShow;\n\nexport {\n str ,\n avatarClasses ,\n avatar ,\n make ,\n \n}\n/* User Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as User from \"../../shared/types/User.bs.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../shared/Avatar.bs.js\";\nimport * as Tooltip from \"../../shared/components/Tooltip.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as MarkdownBlock from \"../../shared/components/MarkdownBlock.bs.js\";\nimport * as TopicsShow__Post from \"../types/TopicsShow__Post.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.TopicsShow__PostReply\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nimport \"./TopicsShow__PostReply.css\"\n;\n\nvar avatarClasses = \"w-6 h-6 md:w-8 md:h-8 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\";\n\nfunction avatar(user) {\n var avatarUrl = Belt_Option.flatMap(user, User.avatarUrl);\n var name = Belt_Option.mapWithDefault(user, \"?\", User.name);\n if (avatarUrl !== undefined) {\n return React.createElement(\"img\", {\n className: avatarClasses,\n src: avatarUrl\n });\n } else {\n return React.createElement(Avatar.make, {\n name: name,\n className: avatarClasses\n });\n }\n}\n\nfunction navigateToPost(postId) {\n var elementId = \"post-show-\" + postId;\n var element = document.getElementById(elementId);\n if (element == null) {\n Rollbar.error(\"Could not find the post to scroll to.\");\n } else {\n element.scrollIntoView();\n element.className = \"topics-show__highlighted-item\";\n }\n \n}\n\nfunction TopicsShow__PostReply(Props) {\n var post = Props.post;\n var users = Props.users;\n var user = TopicsShow__Post.user(users, post);\n var tip = React.createElement(\"div\", {\n className: \"text-left\"\n }, t(undefined, undefined, \"jump_reply\"));\n return React.createElement(\"div\", {\n className: \"topics-post-reply-show__replies flex flex-col border bg-gray-50 rounded-lg mb-2 p-2 md:p-4\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, avatar(user), React.createElement(\"span\", {\n className: \"text-xs font-semibold ml-2\"\n }, Belt_Option.mapWithDefault(user, \"Unknown\", User.name))), React.createElement(Tooltip.make, {\n tip: tip,\n position: \"Left\",\n children: React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"navigate_post\") + \" \" + TopicsShow__Post.id(post),\n className: \"shrink-0 flex items-center justify-center w-7 h-7 rounded leading-tight border bg-gray-50 text-gray-600 cursor-pointer hover:bg-gray-300\",\n onClick: (function (param) {\n return navigateToPost(TopicsShow__Post.id(post));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-angle-double-down\"\n }))\n })), React.createElement(\"div\", {\n className: \"text-sm ml-9\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: TopicsShow__Post.body(post),\n className: \"leading-normal text-sm \",\n profile: /* Permissive */0\n })));\n}\n\nvar make = TopicsShow__PostReply;\n\nexport {\n str ,\n t ,\n avatarClasses ,\n avatar ,\n navigateToPost ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as User from \"../../shared/types/User.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../shared/Avatar.bs.js\";\nimport * as PfIcon from \"../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as $$String from \"../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../../shared/utils/OptionUtils.bs.js\";\nimport * as GraphqlQuery from \"../../shared/utils/GraphqlQuery.bs.js\";\nimport * as $$Notification from \"../../shared/Notification.bs.js\";\nimport * as MarkdownBlock from \"../../shared/components/MarkdownBlock.bs.js\";\nimport * as DisablingCover from \"../../shared/components/DisablingCover.bs.js\";\nimport * as MarkdownEditor from \"../../shared/components/MarkdownEditor.bs.js\";\nimport * as TopicsShow__Post from \"../types/TopicsShow__Post.bs.js\";\nimport * as TopicsShow__Topic from \"../types/TopicsShow__Topic.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nimport \"./TopicsShow__PostEditor.css\"\n;\n\nvar partial_arg = \"components.TopicsShow__PostEditor\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreatePostMutation($body: String!, $topicId: ID!, $replyToPostId: ID) {\\ncreatePost(body: $body, topicId: $topicId, replyToPostId: $replyToPostId) {\\npostId \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createPost;\n var value$2 = value$1.postId;\n return {\n createPost: {\n postId: !(value$2 == null) ? value$2 : undefined\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createPost;\n var value$2 = value$1.postId;\n var postId = value$2 !== undefined ? value$2 : null;\n var createPost = {\n postId: postId\n };\n return {\n createPost: createPost\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.replyToPostId;\n return {\n body: inp.body,\n topicId: inp.topicId,\n replyToPostId: a !== undefined ? a : undefined\n };\n}\n\nfunction makeVariables(body, topicId, replyToPostId, param) {\n return {\n body: body,\n topicId: topicId,\n replyToPostId: replyToPostId\n };\n}\n\nvar CreatePostQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar CreatePostQuery_Graphql_error = include.Graphql_error;\n\nvar CreatePostQuery_decodeNotification = include.decodeNotification;\n\nvar CreatePostQuery_decodeObject = include.decodeObject;\n\nvar CreatePostQuery_decodeNotifications = include.decodeNotifications;\n\nvar CreatePostQuery_decodeErrors = include.decodeErrors;\n\nvar CreatePostQuery_flashNotifications = include.flashNotifications;\n\nvar CreatePostQuery_sendQuery = include.sendQuery;\n\nvar CreatePostQuery_query = include.query;\n\nvar CreatePostQuery_make = include.make;\n\nvar CreatePostQuery = {\n CreatePostQuery_inner: CreatePostQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreatePostQuery_Graphql_error,\n decodeNotification: CreatePostQuery_decodeNotification,\n decodeObject: CreatePostQuery_decodeObject,\n decodeNotifications: CreatePostQuery_decodeNotifications,\n decodeErrors: CreatePostQuery_decodeErrors,\n flashNotifications: CreatePostQuery_flashNotifications,\n sendQuery: CreatePostQuery_sendQuery,\n query: CreatePostQuery_query,\n $$fetch: $$fetch,\n make: CreatePostQuery_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation UpdatePostMutation($id: ID!, $body: String!, $editReason: String) {\\nupdatePost(id: $id, body: $body, editReason: $editReason) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.updatePost;\n return {\n updatePost: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.updatePost;\n var value$2 = value$1.success;\n var updatePost = {\n success: value$2\n };\n return {\n updatePost: updatePost\n };\n}\n\nfunction serializeVariables$1(inp) {\n var a = inp.editReason;\n return {\n id: inp.id,\n body: inp.body,\n editReason: a !== undefined ? a : undefined\n };\n}\n\nfunction makeVariables$1(id, body, editReason, param) {\n return {\n id: id,\n body: body,\n editReason: editReason\n };\n}\n\nvar UpdatePostQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar UpdatePostQuery_Graphql_error = include$1.Graphql_error;\n\nvar UpdatePostQuery_decodeNotification = include$1.decodeNotification;\n\nvar UpdatePostQuery_decodeObject = include$1.decodeObject;\n\nvar UpdatePostQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar UpdatePostQuery_decodeErrors = include$1.decodeErrors;\n\nvar UpdatePostQuery_flashNotifications = include$1.flashNotifications;\n\nvar UpdatePostQuery_sendQuery = include$1.sendQuery;\n\nvar UpdatePostQuery_query = include$1.query;\n\nvar UpdatePostQuery_make = include$1.make;\n\nvar UpdatePostQuery = {\n UpdatePostQuery_inner: UpdatePostQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: UpdatePostQuery_Graphql_error,\n decodeNotification: UpdatePostQuery_decodeNotification,\n decodeObject: UpdatePostQuery_decodeObject,\n decodeNotifications: UpdatePostQuery_decodeNotifications,\n decodeErrors: UpdatePostQuery_decodeErrors,\n flashNotifications: UpdatePostQuery_flashNotifications,\n sendQuery: UpdatePostQuery_sendQuery,\n query: UpdatePostQuery_query,\n $$fetch: $$fetch$1,\n make: UpdatePostQuery_make\n};\n\nvar dateTime = new Date();\n\nfunction handlePostCreateResponse(id, body, postNumber, currentUserId, setState, handlePostCB) {\n var post = TopicsShow__Post.make(id, body, currentUserId, undefined, postNumber, dateTime, undefined, 0, false, [], false);\n Curry._1(setState, (function (param) {\n return {\n body: \"\",\n saving: false,\n editReason: undefined\n };\n }));\n return Curry._1(handlePostCB, post);\n}\n\nfunction handlePostUpdateResponse(id, body, currentUserId, setState, handleCloseCB, handlePostCB, post) {\n var updatedPost = TopicsShow__Post.make(id, body, TopicsShow__Post.creatorId(post), currentUserId, TopicsShow__Post.postNumber(post), TopicsShow__Post.createdAt(post), Caml_option.some(dateTime), TopicsShow__Post.totalLikes(post), TopicsShow__Post.likedByUser(post), TopicsShow__Post.replies(post), TopicsShow__Post.solution(post));\n Curry._1(setState, (function (param) {\n return {\n body: \"\",\n saving: false,\n editReason: undefined\n };\n }));\n OptionUtils.mapWithDefault((function (cb) {\n return Curry._1(cb, undefined);\n }), undefined, handleCloseCB);\n return Curry._1(handlePostCB, updatedPost);\n}\n\nfunction savePost(editReason, body, topic, setState, currentUserId, replyToPostId, handlePostCB, post, postNumber, handleCloseCB, $$event) {\n $$event.preventDefault();\n if (body === \"\") {\n return $$Notification.error(tr(undefined, undefined, \"empty\"), tr(undefined, undefined, \"cant_blank\"));\n }\n Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: true,\n editReason: state.editReason\n };\n }));\n if (post !== undefined) {\n var postId = TopicsShow__Post.id(post);\n var variables = {\n id: postId,\n body: body,\n editReason: editReason\n };\n Curry._3($$fetch$1, undefined, undefined, variables).then(function (response) {\n if (response.updatePost.success) {\n handlePostUpdateResponse(postId, body, currentUserId, setState, handleCloseCB, handlePostCB, post);\n } else {\n Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: false,\n editReason: state.editReason\n };\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: false,\n editReason: state.editReason\n };\n }));\n return Promise.resolve(undefined);\n });\n return ;\n }\n Curry._3($$fetch, undefined, undefined, {\n body: body,\n topicId: TopicsShow__Topic.id(topic),\n replyToPostId: replyToPostId\n }).then(function (response) {\n var postId = response.createPost.postId;\n if (postId !== undefined) {\n handlePostCreateResponse(postId, body, postNumber, currentUserId, setState, handlePostCB);\n } else {\n Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: false,\n editReason: state.editReason\n };\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: false,\n editReason: state.editReason\n };\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction onBorderAnimationEnd($$event) {\n var element = $$event.target;\n element.className = \"w-full flex flex-col\";\n \n}\n\nfunction replyToUserInfo(user) {\n var avatarUrl = Belt_Option.flatMap(user, User.avatarUrl);\n var name = Belt_Option.mapWithDefault(user, \"?\", User.name);\n return React.createElement(\"div\", {\n className: \"flex items-center border bg-white px-2 py-1 rounded-lg\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"w-6 h-6 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: name,\n className: \"w-6 h-6 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\"\n }), React.createElement(\"span\", {\n className: \"text-xs font-semibold ml-2\"\n }, name));\n}\n\nfunction TopicsShow__PostEditor(Props) {\n var editingOpt = Props.editing;\n var id = Props.id;\n var topic = Props.topic;\n var currentUserId = Props.currentUserId;\n var handlePostCB = Props.handlePostCB;\n var replies = Props.replies;\n var users = Props.users;\n var replyToPostId = Props.replyToPostId;\n var post = Props.post;\n var handleCloseCB = Props.handleCloseCB;\n var removeReplyToPostCB = Props.removeReplyToPostCB;\n var editing = editingOpt !== undefined ? editingOpt : false;\n var match = React.useState(function () {\n return {\n body: post !== undefined ? TopicsShow__Post.body(post) : \"\",\n saving: false,\n editReason: undefined\n };\n });\n var setState = match[1];\n var state = match[0];\n var updateMarkdownCB = function (body) {\n return Curry._1(setState, (function (state) {\n return {\n body: body,\n saving: state.saving,\n editReason: state.editReason\n };\n }));\n };\n var editReason = state.editReason;\n var setEditReason = function (editReason) {\n return Curry._1(setState, (function (state) {\n return {\n body: state.body,\n saving: state.saving,\n editReason: editReason\n };\n }));\n };\n var newPostNumber = ArrayUtils.isNotEmpty(replies) ? TopicsShow__Post.highestPostNumber(replies) + 1 | 0 : 2;\n var partial_arg = state.body;\n return React.createElement(DisablingCover.make, {\n disabled: state.saving,\n children: React.createElement(\"div\", {\n \"aria-label\": \"Add new reply\",\n className: \"py-2 lg:px-0 max-w-4xl w-full flex mx-auto items-center justify-center relative\"\n }, React.createElement(\"div\", {\n className: \"flex w-full\"\n }, React.createElement(\"div\", {\n className: \"w-full flex flex-col\",\n id: id,\n onAnimationEnd: onBorderAnimationEnd\n }, React.createElement(\"label\", {\n className: \"inline-block tracking-wide text-gray-900 text-sm font-semibold mb-2\",\n htmlFor: \"new-reply\"\n }, replyToPostId !== undefined ? tr(undefined, undefined, \"reply_to\") : tr(undefined, undefined, \"your_reply\")), Belt_Option.mapWithDefault(Belt_Option.flatMap(replyToPostId, (function (postId) {\n return Caml_option.undefined_to_opt(replies.find(function (reply) {\n return postId === TopicsShow__Post.id(reply);\n }));\n })), null, (function (reply) {\n return React.createElement(\"div\", {\n className: \"topics-post-editor__reply-to-preview max-w-md rounded border border-primary-200 p-3 bg-gray-50 mb-3 overflow-hidden\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between\"\n }, replyToUserInfo(TopicsShow__Post.user(users, reply)), React.createElement(\"div\", {\n className: \"flex w-6 h-6 p-2 items-center justify-center cursor-pointer border border-gray-300 rounded bg-gray-50 hover:bg-gray-400\",\n onClick: (function (param) {\n return OptionUtils.mapWithDefault((function (cb) {\n return Curry._1(cb, undefined);\n }), undefined, removeReplyToPostCB);\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-times-regular text-base\"\n }))), React.createElement(\"p\", {\n className: \"text-sm pt-2\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: TopicsShow__Post.body(reply),\n className: \"leading-normal text-sm\",\n profile: /* Permissive */0\n })), React.createElement(\"div\", {\n className: \"topics-post-editor__reply-to-preview-bottom-fadeout\"\n }));\n })), React.createElement(\"div\", undefined, React.createElement(MarkdownEditor.make, {\n value: state.body,\n onChange: updateMarkdownCB,\n profile: /* Permissive */0,\n textareaId: \"new-reply\",\n maxLength: 10000,\n placeholder: tr(undefined, undefined, \"type_reply\")\n }), editing ? React.createElement(\"input\", {\n className: \"mt-2 appearance-none block w-full bg-white text-gray-900 font-semibold border border-gray-300 rounded py-3 px-4 mb-2 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\",\n id: \"edit-reason\",\n maxLength: 500,\n placeholder: tr(undefined, undefined, \"reason_edit\"),\n value: editReason !== undefined ? editReason : \"\",\n onChange: (function ($$event) {\n var reason = $$event.target.value;\n if (reason === \"\") {\n return setEditReason(undefined);\n } else {\n return setEditReason(reason);\n }\n })\n }) : null), React.createElement(\"div\", {\n className: \"flex justify-end pt-3\"\n }, handleCloseCB !== undefined ? React.createElement(\"button\", {\n className: \"btn btn-subtle mr-2\",\n disabled: state.saving,\n onClick: (function (param) {\n return Curry._1(handleCloseCB, undefined);\n })\n }, tr(undefined, undefined, \"cancel\")) : null, React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: state.saving || $$String.trim(state.body) === \"\",\n onClick: (function (param) {\n return savePost(editReason, partial_arg, topic, setState, currentUserId, replyToPostId, handlePostCB, post, newPostNumber, handleCloseCB, param);\n })\n }, post !== undefined ? (\n TopicsShow__Post.postNumber(post) === 1 ? tr(undefined, undefined, \"update_post\") : tr(undefined, undefined, \"update_reply\")\n ) : tr(undefined, undefined, \"post_reply\"))))))\n });\n}\n\nvar make = TopicsShow__PostEditor;\n\nexport {\n str ,\n tr ,\n CreatePostQuery ,\n UpdatePostQuery ,\n dateTime ,\n handlePostCreateResponse ,\n handlePostUpdateResponse ,\n savePost ,\n onBorderAnimationEnd ,\n replyToUserInfo ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Tooltip from \"../../shared/components/Tooltip.bs.js\";\nimport * as GraphqlQuery from \"../../shared/utils/GraphqlQuery.bs.js\";\nimport * as TopicsShow__Post from \"../types/TopicsShow__Post.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.TopicsShow__LikeManager\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreatePostLikeMutation($postId: ID!) {\\ncreatePostLike(postId: $postId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createPostLike;\n return {\n createPostLike: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createPostLike;\n var value$2 = value$1.success;\n var createPostLike = {\n success: value$2\n };\n return {\n createPostLike: createPostLike\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n postId: inp.postId\n };\n}\n\nfunction makeVariables(postId, param) {\n return {\n postId: postId\n };\n}\n\nvar CreatePostLikeQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar CreatePostLikeQuery_Graphql_error = include.Graphql_error;\n\nvar CreatePostLikeQuery_decodeNotification = include.decodeNotification;\n\nvar CreatePostLikeQuery_decodeObject = include.decodeObject;\n\nvar CreatePostLikeQuery_decodeNotifications = include.decodeNotifications;\n\nvar CreatePostLikeQuery_decodeErrors = include.decodeErrors;\n\nvar CreatePostLikeQuery_flashNotifications = include.flashNotifications;\n\nvar CreatePostLikeQuery_sendQuery = include.sendQuery;\n\nvar CreatePostLikeQuery_query = include.query;\n\nvar CreatePostLikeQuery_make = include.make;\n\nvar CreatePostLikeQuery = {\n CreatePostLikeQuery_inner: CreatePostLikeQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreatePostLikeQuery_Graphql_error,\n decodeNotification: CreatePostLikeQuery_decodeNotification,\n decodeObject: CreatePostLikeQuery_decodeObject,\n decodeNotifications: CreatePostLikeQuery_decodeNotifications,\n decodeErrors: CreatePostLikeQuery_decodeErrors,\n flashNotifications: CreatePostLikeQuery_flashNotifications,\n sendQuery: CreatePostLikeQuery_sendQuery,\n query: CreatePostLikeQuery_query,\n $$fetch: $$fetch,\n make: CreatePostLikeQuery_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation DeletePostLikeMutation($postId: ID!) {\\ndeletePostLike(postId: $postId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.deletePostLike;\n return {\n deletePostLike: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.deletePostLike;\n var value$2 = value$1.success;\n var deletePostLike = {\n success: value$2\n };\n return {\n deletePostLike: deletePostLike\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n postId: inp.postId\n };\n}\n\nfunction makeVariables$1(postId, param) {\n return {\n postId: postId\n };\n}\n\nvar DeletePostLikeQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar DeletePostLikeQuery_Graphql_error = include$1.Graphql_error;\n\nvar DeletePostLikeQuery_decodeNotification = include$1.decodeNotification;\n\nvar DeletePostLikeQuery_decodeObject = include$1.decodeObject;\n\nvar DeletePostLikeQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar DeletePostLikeQuery_decodeErrors = include$1.decodeErrors;\n\nvar DeletePostLikeQuery_flashNotifications = include$1.flashNotifications;\n\nvar DeletePostLikeQuery_sendQuery = include$1.sendQuery;\n\nvar DeletePostLikeQuery_query = include$1.query;\n\nvar DeletePostLikeQuery_make = include$1.make;\n\nvar DeletePostLikeQuery = {\n DeletePostLikeQuery_inner: DeletePostLikeQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: DeletePostLikeQuery_Graphql_error,\n decodeNotification: DeletePostLikeQuery_decodeNotification,\n decodeObject: DeletePostLikeQuery_decodeObject,\n decodeNotifications: DeletePostLikeQuery_decodeNotifications,\n decodeErrors: DeletePostLikeQuery_decodeErrors,\n flashNotifications: DeletePostLikeQuery_flashNotifications,\n sendQuery: DeletePostLikeQuery_sendQuery,\n query: DeletePostLikeQuery_query,\n $$fetch: $$fetch$1,\n make: DeletePostLikeQuery_make\n};\n\nfunction iconClasses(liked, saving) {\n return \"text-lg\" + (\n saving ? \" fas fa-thumbs-up cursor-pointer text-primary-200\" : (\n liked ? \" fas fa-thumbs-up cursor-pointer text-primary-400\" : \" far fa-thumbs-up cursor-pointer\"\n )\n );\n}\n\nfunction handlePostLike(saving, liked, setSaving, postId, removeLikeCB, handleCreateResponse, addLikeCB, $$event) {\n $$event.preventDefault();\n if (saving) {\n return ;\n } else {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n if (liked) {\n Curry._3($$fetch$1, undefined, undefined, {\n postId: postId\n }).then(function (response) {\n if (response.deletePostLike.success) {\n Curry._1(removeLikeCB, undefined);\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n } else {\n Curry._3($$fetch, undefined, undefined, {\n postId: postId\n }).then(function (response) {\n if (response.createPostLike.success) {\n Curry._2(handleCreateResponse, setSaving, addLikeCB);\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n }\n return ;\n }\n}\n\nfunction handleCreateResponse(setSaving, addLikeCB) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Curry._1(addLikeCB, undefined);\n}\n\nfunction TopicsShow__LikeManager(Props) {\n var post = Props.post;\n var addPostLikeCB = Props.addPostLikeCB;\n var removePostLikeCB = Props.removePostLikeCB;\n var match = React.useState(function () {\n return false;\n });\n var setSaving = match[1];\n var saving = match[0];\n var liked = TopicsShow__Post.likedByUser(post);\n var tip = React.createElement(\"div\", {\n className: \"text-center\"\n }, t(undefined, undefined, \"like_button_tooltip\"));\n var partial_arg = TopicsShow__Post.id(post);\n return React.createElement(\"div\", {\n className: \"flex flex-row-reverse md:flex-row\"\n }, React.createElement(\"div\", {\n className: \"text-center pr-4 md:pt-4\"\n }, React.createElement(Tooltip.make, {\n tip: tip,\n position: \"Top\",\n children: React.createElement(\"button\", {\n \"aria-label\": (\n liked ? t(undefined, undefined, \"unlike\") : t(undefined, undefined, \"like\")\n ) + (\" \" + t(undefined, undefined, \"post\") + \" \" + TopicsShow__Post.id(post)),\n className: \"cursor-pointer flex md:flex-col items-center\",\n onClick: (function (param) {\n return handlePostLike(saving, liked, setSaving, partial_arg, removePostLikeCB, handleCreateResponse, addPostLikeCB, param);\n })\n }, React.createElement(\"div\", {\n key: iconClasses(liked, saving),\n className: \"flex items-center justify-center rounded-lg lg:rounded-full lg:bg-gray-50 hover:bg-gray-300 text-gray-600 hover:text-gray-900 h-8 w-8 md:h-10 md:w-10 p-1 md:p-2 mx-auto\"\n }, React.createElement(\"i\", {\n className: iconClasses(liked, saving)\n })), React.createElement(\"p\", {\n className: \"text-tiny lg:text-xs font-semibold\"\n }, String(TopicsShow__Post.totalLikes(post))))\n })));\n}\n\nvar make = TopicsShow__LikeManager;\n\nexport {\n str ,\n t ,\n CreatePostLikeQuery ,\n DeletePostLikeQuery ,\n iconClasses ,\n handlePostLike ,\n handleCreateResponse ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as User from \"../../shared/types/User.bs.js\";\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../shared/components/FaIcon.bs.js\";\nimport * as PfIcon from \"../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\nimport * as Tooltip from \"../../shared/components/Tooltip.bs.js\";\nimport * as Dropdown from \"../../shared/components/Dropdown.bs.js\";\nimport * as ArrayUtils from \"../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as WindowUtils from \"../../shared/utils/WindowUtils.bs.js\";\nimport * as GraphqlQuery from \"../../shared/utils/GraphqlQuery.bs.js\";\nimport * as MarkdownBlock from \"../../shared/components/MarkdownBlock.bs.js\";\nimport * as TopicsShow__Post from \"../types/TopicsShow__Post.bs.js\";\nimport * as TopicsShow__Topic from \"../types/TopicsShow__Topic.bs.js\";\nimport * as TopicsShow__UserShow from \"./TopicsShow__UserShow.bs.js\";\nimport * as TopicsShow__PostReply from \"./TopicsShow__PostReply.bs.js\";\nimport * as TopicsShow__PostEditor from \"./TopicsShow__PostEditor.bs.js\";\nimport * as TopicsShow__LikeManager from \"./TopicsShow__LikeManager.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nimport \"./TopicsShow__PostShow.css\"\n;\n\nvar partial_arg = \"components.TopicsShow__PostShow\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction findUser(userId, users) {\n return Belt_Option.map(userId, (function (userId) {\n return User.findById(userId, users);\n }));\n}\n\nvar Raw = {};\n\nvar query = \"mutation MarkAsSolutionMutation($id: ID!) {\\nmarkPostAsSolution(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.markPostAsSolution;\n return {\n markPostAsSolution: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.markPostAsSolution;\n var value$2 = value$1.success;\n var markPostAsSolution = {\n success: value$2\n };\n return {\n markPostAsSolution: markPostAsSolution\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables(id, param) {\n return {\n id: id\n };\n}\n\nvar MarkPostAsSolutionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar MarkPostAsSolutionQuery_Graphql_error = include.Graphql_error;\n\nvar MarkPostAsSolutionQuery_decodeNotification = include.decodeNotification;\n\nvar MarkPostAsSolutionQuery_decodeObject = include.decodeObject;\n\nvar MarkPostAsSolutionQuery_decodeNotifications = include.decodeNotifications;\n\nvar MarkPostAsSolutionQuery_decodeErrors = include.decodeErrors;\n\nvar MarkPostAsSolutionQuery_flashNotifications = include.flashNotifications;\n\nvar MarkPostAsSolutionQuery_sendQuery = include.sendQuery;\n\nvar MarkPostAsSolutionQuery_query = include.query;\n\nvar MarkPostAsSolutionQuery_make = include.make;\n\nvar MarkPostAsSolutionQuery = {\n MarkPostAsSolutionQuery_inner: MarkPostAsSolutionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: MarkPostAsSolutionQuery_Graphql_error,\n decodeNotification: MarkPostAsSolutionQuery_decodeNotification,\n decodeObject: MarkPostAsSolutionQuery_decodeObject,\n decodeNotifications: MarkPostAsSolutionQuery_decodeNotifications,\n decodeErrors: MarkPostAsSolutionQuery_decodeErrors,\n flashNotifications: MarkPostAsSolutionQuery_flashNotifications,\n sendQuery: MarkPostAsSolutionQuery_sendQuery,\n query: MarkPostAsSolutionQuery_query,\n $$fetch: $$fetch,\n make: MarkPostAsSolutionQuery_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation UnmarkAsSolutionMutation($id: ID!) {\\nunmarkPostAsSolution(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.unmarkPostAsSolution;\n return {\n unmarkPostAsSolution: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.unmarkPostAsSolution;\n var value$2 = value$1.success;\n var unmarkPostAsSolution = {\n success: value$2\n };\n return {\n unmarkPostAsSolution: unmarkPostAsSolution\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables$1(id, param) {\n return {\n id: id\n };\n}\n\nvar UnmarkPostAsSolutionQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar UnmarkPostAsSolutionQuery_Graphql_error = include$1.Graphql_error;\n\nvar UnmarkPostAsSolutionQuery_decodeNotification = include$1.decodeNotification;\n\nvar UnmarkPostAsSolutionQuery_decodeObject = include$1.decodeObject;\n\nvar UnmarkPostAsSolutionQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar UnmarkPostAsSolutionQuery_decodeErrors = include$1.decodeErrors;\n\nvar UnmarkPostAsSolutionQuery_flashNotifications = include$1.flashNotifications;\n\nvar UnmarkPostAsSolutionQuery_sendQuery = include$1.sendQuery;\n\nvar UnmarkPostAsSolutionQuery_query = include$1.query;\n\nvar UnmarkPostAsSolutionQuery_make = include$1.make;\n\nvar UnmarkPostAsSolutionQuery = {\n UnmarkPostAsSolutionQuery_inner: UnmarkPostAsSolutionQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: UnmarkPostAsSolutionQuery_Graphql_error,\n decodeNotification: UnmarkPostAsSolutionQuery_decodeNotification,\n decodeObject: UnmarkPostAsSolutionQuery_decodeObject,\n decodeNotifications: UnmarkPostAsSolutionQuery_decodeNotifications,\n decodeErrors: UnmarkPostAsSolutionQuery_decodeErrors,\n flashNotifications: UnmarkPostAsSolutionQuery_flashNotifications,\n sendQuery: UnmarkPostAsSolutionQuery_sendQuery,\n query: UnmarkPostAsSolutionQuery_query,\n $$fetch: $$fetch$1,\n make: UnmarkPostAsSolutionQuery_make\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"mutation ArchivePostMutation($id: ID!) {\\narchivePost(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$2(value) {\n var value$1 = value.archivePost;\n return {\n archivePost: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.archivePost;\n var value$2 = value$1.success;\n var archivePost = {\n success: value$2\n };\n return {\n archivePost: archivePost\n };\n}\n\nfunction serializeVariables$2(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables$2(id, param) {\n return {\n id: id\n };\n}\n\nvar ArchivePostQuery_inner = {\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2\n};\n\nvar include$2 = GraphqlQuery.Extender({\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$2 = include$2.$$fetch;\n\nvar ArchivePostQuery_Graphql_error = include$2.Graphql_error;\n\nvar ArchivePostQuery_decodeNotification = include$2.decodeNotification;\n\nvar ArchivePostQuery_decodeObject = include$2.decodeObject;\n\nvar ArchivePostQuery_decodeNotifications = include$2.decodeNotifications;\n\nvar ArchivePostQuery_decodeErrors = include$2.decodeErrors;\n\nvar ArchivePostQuery_flashNotifications = include$2.flashNotifications;\n\nvar ArchivePostQuery_sendQuery = include$2.sendQuery;\n\nvar ArchivePostQuery_query = include$2.query;\n\nvar ArchivePostQuery_make = include$2.make;\n\nvar ArchivePostQuery = {\n ArchivePostQuery_inner: ArchivePostQuery_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\n Graphql_error: ArchivePostQuery_Graphql_error,\n decodeNotification: ArchivePostQuery_decodeNotification,\n decodeObject: ArchivePostQuery_decodeObject,\n decodeNotifications: ArchivePostQuery_decodeNotifications,\n decodeErrors: ArchivePostQuery_decodeErrors,\n flashNotifications: ArchivePostQuery_flashNotifications,\n sendQuery: ArchivePostQuery_sendQuery,\n query: ArchivePostQuery_query,\n $$fetch: $$fetch$2,\n make: ArchivePostQuery_make\n};\n\nfunction markPostAsSolution(postId, markPostAsSolutionCB) {\n return WindowUtils.confirm(undefined, t(undefined, undefined, \"mark_solution_confirm\"), (function (param) {\n Curry._3($$fetch, undefined, undefined, {\n id: postId\n }).then(function (response) {\n if (response.markPostAsSolution.success) {\n Curry._1(markPostAsSolutionCB, undefined);\n }\n return Promise.resolve(undefined);\n });\n \n }));\n}\n\nfunction unmarkPostAsSolution(postId, unmarkPostAsSolutionCB) {\n return WindowUtils.confirm(undefined, t(undefined, undefined, \"unmark_solution_confirm\"), (function (param) {\n Curry._3($$fetch$1, undefined, undefined, {\n id: postId\n }).then(function (response) {\n if (response.unmarkPostAsSolution.success) {\n Curry._1(unmarkPostAsSolutionCB, undefined);\n }\n return Promise.resolve(undefined);\n });\n \n }));\n}\n\nfunction archivePost(isFirstPost, postId, archivePostCB) {\n if (window.confirm(isFirstPost ? t(undefined, undefined, \"delete_topic_confirm_dialog\") : t(undefined, undefined, \"delete_post_confirm_dialog\"))) {\n Curry._3($$fetch$2, undefined, undefined, {\n id: postId\n }).then(function (response) {\n if (response.archivePost.success) {\n Curry._1(archivePostCB, undefined);\n }\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction solutionIcon(userCanUnmarkSolution, unmarkPostAsSolutionCB, postId) {\n var tip = React.createElement(\"div\", {\n className: \"text-center\"\n }, t(undefined, undefined, \"unmark_solution\"));\n var solutionIcon$1 = React.createElement(\"div\", {\n className: \"flex items-center justify-center pr-2 pl-0 py-2 md:p-3 bg-green-200 text-green-800 rounded-full \" + (\n userCanUnmarkSolution ? \"hover:bg-gray-50 hover:text-gray-600\" : \"\"\n )\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-solid text-sm lg:text-base\"\n }));\n var iconWithTip = userCanUnmarkSolution ? React.createElement(Tooltip.make, {\n tip: tip,\n position: \"Top\",\n children: solutionIcon$1\n }) : solutionIcon$1;\n return React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"marked_solution_icon\"),\n className: \"flex lg:flex-col items-center px-2 lg:pl-0 lg:pr-4 bg-green-200 lg:bg-transparent rounded md:mt-4 \" + (\n userCanUnmarkSolution ? \"cursor-pointer\" : \"\"\n ),\n onClick: (function (param) {\n if (userCanUnmarkSolution) {\n return unmarkPostAsSolution(postId, unmarkPostAsSolutionCB);\n }\n \n })\n }, iconWithTip, React.createElement(\"div\", {\n className: \"text-xs lg:text-tiny font-semibold text-green-800 lg:pt-1 \"\n }, t(undefined, undefined, \"solution_icon_label\")));\n}\n\nfunction optionsDropdown(post, isPostCreator, isTopicCreator, moderator, isFirstPost, replies, toggleShowPostEdit, archivePostCB) {\n var selected = React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"options_post\") + \" \" + TopicsShow__Post.id(post),\n className: \"flex items-center justify-center w-8 h-8 rounded leading-tight border bg-gray-50 text-gray-800 cursor-pointer hover:bg-gray-50\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-ellipsis-h-regular text-base\"\n }));\n var editPostButton = React.createElement(\"button\", {\n className: \"flex w-full px-3 py-2 font-semibold items-center text-gray-600 whitespace-nowrap\",\n onClick: (function (param) {\n return Curry._1(toggleShowPostEdit, (function (param) {\n return true;\n }));\n })\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-edit fa-fw text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, isFirstPost ? t(undefined, undefined, \"edit_post_string\") : t(undefined, undefined, \"edit_reply_string\")));\n var showDelete = isFirstPost ? moderator || isPostCreator && ArrayUtils.isEmpty(replies) : moderator || isPostCreator;\n var deletePostButton = showDelete ? React.createElement(\"button\", {\n className: \"flex w-full px-3 py-2 font-semibold items-center text-gray-600 whitespace-nowrap\",\n onClick: (function (param) {\n return archivePost(isFirstPost, TopicsShow__Post.id(post), archivePostCB);\n })\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-trash-alt fa-fw text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, isFirstPost ? t(undefined, undefined, \"delete_topic_string\") : t(undefined, undefined, \"delete_reply_string\"))) : null;\n var _id = TopicsShow__Post.editorId(post);\n var historyButton = _id !== undefined ? React.createElement(\"a\", {\n className: \"flex w-full px-3 py-2 font-semibold items-center text-gray-600 whitespace-nowrap\",\n href: \"/posts/\" + (TopicsShow__Post.id(post) + \"/versions\")\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-history fa-fw text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"history_button_text\"))) : null;\n var contents = moderator ? [\n editPostButton,\n historyButton,\n deletePostButton\n ] : (\n isPostCreator ? [\n editPostButton,\n deletePostButton\n ] : []\n );\n return React.createElement(Dropdown.make, {\n selected: selected,\n contents: contents,\n right: true\n });\n}\n\nfunction onBorderAnimationEnd($$event) {\n var element = $$event.target;\n element.className = \"\";\n \n}\n\nfunction navigateToEditor(param) {\n var element = document.getElementById(\"add-reply-to-topic\");\n setTimeout((function (param) {\n if (element == null) {\n Rollbar.error(\"Could not find the post to scroll to.\");\n } else {\n element.scrollIntoView();\n element.className = \"w-full flex flex-col topics-show__highlighted-item\";\n }\n \n }), 50);\n \n}\n\nfunction TopicsShow__PostShow(Props) {\n var post = Props.post;\n var topic = Props.topic;\n var users = Props.users;\n var posts = Props.posts;\n var currentUserId = Props.currentUserId;\n var moderator = Props.moderator;\n var isTopicCreator = Props.isTopicCreator;\n var updatePostCB = Props.updatePostCB;\n var addNewReplyCB = Props.addNewReplyCB;\n var addPostLikeCB = Props.addPostLikeCB;\n var removePostLikeCB = Props.removePostLikeCB;\n var markPostAsSolutionCB = Props.markPostAsSolutionCB;\n var unmarkPostAsSolutionCB = Props.unmarkPostAsSolutionCB;\n var archivePostCB = Props.archivePostCB;\n var topicSolutionId = Props.topicSolutionId;\n var creator = findUser(TopicsShow__Post.creatorId(post), users);\n var editor = findUser(TopicsShow__Post.editorId(post), users);\n var isPostCreator = Belt_Option.mapWithDefault(TopicsShow__Post.creatorId(post), false, (function (creatorId) {\n return currentUserId === creatorId;\n }));\n var isFirstPost = TopicsShow__Post.postNumber(post) === 1;\n var repliesToPost = isFirstPost ? [] : TopicsShow__Post.repliesToPost(posts, post);\n var match = React.useState(function () {\n return false;\n });\n var toggleShowPostEdit = match[1];\n var match$1 = React.useState(function () {\n return false;\n });\n var toggleShowReplies = match$1[1];\n var showReplies = match$1[0];\n var userCanUnmarkSolution = moderator || isTopicCreator;\n var tip = React.createElement(\"div\", {\n className: \"text-center\"\n }, t(undefined, undefined, \"mark_solution\"));\n var tmp;\n if (match[0]) {\n tmp = React.createElement(\"div\", {\n className: \"flex-1\"\n }, React.createElement(TopicsShow__PostEditor.make, {\n editing: true,\n id: \"edit-post-\" + TopicsShow__Post.id(post),\n topic: topic,\n currentUserId: currentUserId,\n handlePostCB: updatePostCB,\n replies: posts,\n users: users,\n post: post,\n handleCloseCB: (function (param) {\n return Curry._1(toggleShowPostEdit, (function (param) {\n return false;\n }));\n })\n }));\n } else {\n var editedAt = TopicsShow__Post.editedAt(post);\n tmp = React.createElement(\"div\", {\n className: \"flex items-start justify-between min-w-0\"\n }, React.createElement(\"div\", {\n className: \"text-sm min-w-0 w-full\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: TopicsShow__Post.body(post),\n className: \"leading-normal text-sm \",\n profile: /* Permissive */0\n }), editedAt !== undefined ? React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"mt-1 inline-block px-2 py-1 rounded bg-gray-50 text-xs text-gray-800 \"\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"last_edited_by_label\")), React.createElement(\"span\", {\n className: \"font-semibold\"\n }, editor !== undefined ? User.name(editor) : t(undefined, undefined, \"deleted_user_name\")), React.createElement(\"span\", undefined, \" on \" + DateFns.format(Caml_option.valFromOption(editedAt), \"do MMMM, yyyy HH:mm\")))) : null), React.createElement(\"div\", {\n className: \"hidden lg:block shrink-0 ml-3\"\n }, isPostCreator || moderator || isTopicCreator ? optionsDropdown(post, isPostCreator, isTopicCreator, moderator, isFirstPost, posts, toggleShowPostEdit, archivePostCB) : null));\n }\n return React.createElement(\"div\", {\n id: \"post-show-\" + TopicsShow__Post.id(post),\n onAnimationEnd: onBorderAnimationEnd\n }, React.createElement(\"div\", {\n key: TopicsShow__Post.id(post),\n className: \"flex pt-4\"\n }, React.createElement(\"div\", {\n className: \"hidden lg:flex flex-col\"\n }, React.createElement(TopicsShow__LikeManager.make, {\n post: post,\n addPostLikeCB: addPostLikeCB,\n removePostLikeCB: removePostLikeCB\n }), TopicsShow__Post.solution(post) ? solutionIcon(userCanUnmarkSolution, unmarkPostAsSolutionCB, TopicsShow__Post.id(post)) : null, ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"hidden md:flex md:flex-col items-center text-center md:w-14 pr-3 md:pr-4 md:mt-4\"\n }, React.createElement(Tooltip.make, {\n tip: tip,\n position: \"Top\",\n children: React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"mark_solution\"),\n className: \"mark-as-solution__button bg-gray-50 flex items-center text-center rounded-full p-2 md:p-3 hover:bg-gray-50 text-gray-600\",\n onClick: (function (param) {\n return markPostAsSolution(TopicsShow__Post.id(post), markPostAsSolutionCB);\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-solid text-sm lg:text-base\"\n }))\n })), (moderator || isTopicCreator) && !(isFirstPost || TopicsShow__Post.solution(post)) && Belt_Option.isNone(topicSolutionId))), React.createElement(\"div\", {\n className: \"flex-1 pb-6 lg:pb-8 topics-post-show__post-body min-w-0\"\n }, React.createElement(\"div\", {\n className: \"pt-2\",\n id: \"body\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between lg:hidden\"\n }, React.createElement(TopicsShow__UserShow.make, {\n user: creator,\n createdAt: TopicsShow__Post.createdAt(post)\n }), React.createElement(\"div\", {\n className: \"shrink-0 mt-1\"\n }, isPostCreator || moderator || isTopicCreator ? optionsDropdown(post, isPostCreator, isTopicCreator, moderator, isFirstPost, posts, toggleShowPostEdit, archivePostCB) : null)), tmp), React.createElement(\"div\", {\n className: \"flex justify-between lg:items-end pt-4\"\n }, React.createElement(\"div\", {\n className: \"flex-1 lg:flex-initial mr-3\"\n }, React.createElement(\"div\", {\n className: \"hidden lg:block\"\n }, React.createElement(TopicsShow__UserShow.make, {\n user: creator,\n createdAt: TopicsShow__Post.createdAt(post)\n })), React.createElement(\"div\", {\n className: \"flex items-center lg:items-start justify-between lg:hidden\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(TopicsShow__LikeManager.make, {\n post: post,\n addPostLikeCB: addPostLikeCB,\n removePostLikeCB: removePostLikeCB\n }), React.createElement(\"div\", {\n className: \"pr-3\"\n }, ArrayUtils.isNotEmpty(repliesToPost) ? React.createElement(\"button\", {\n className: \"cursor-pointer flex items-center justify-center\",\n onClick: (function (param) {\n return Curry._1(toggleShowReplies, (function (showReplies) {\n return !showReplies;\n }));\n })\n }, React.createElement(\"span\", {\n className: \"flex items-center justify-center rounded-lg lg:bg-gray-50 hover:bg-gray-300 text-gray-600 hover:text-gray-900 h-8 w-8 md:h-10 md:w-10 p-1 md:p-2 mx-auto\"\n }, React.createElement(FaIcon.make, {\n classes: \"far fa-comment-alt\"\n })), React.createElement(\"span\", {\n className: \"text-tiny lg:text-xs font-semibold\"\n }, String(TopicsShow__Post.replies(post).length))) : null))), React.createElement(\"div\", {\n className: \"flex space-x-3\"\n }, ReactUtils.nullUnless(React.createElement(\"button\", {\n className: \"bg-gray-50 flex md:hidden items-center text-center rounded-lg p-2 hover:bg-gray-50 text-gray-600\",\n onClick: (function (param) {\n return markPostAsSolution(TopicsShow__Post.id(post), markPostAsSolutionCB);\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-solid text-sm lg:text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2 leading-tight text-xs md:text-tiny font-semibold block text-gray-900\"\n }, t(undefined, undefined, \"solution\"))), (moderator || isTopicCreator) && !(isFirstPost || TopicsShow__Post.solution(post)) && Belt_Option.isNone(topicSolutionId)), TopicsShow__Post.solution(post) ? solutionIcon(userCanUnmarkSolution, unmarkPostAsSolutionCB, TopicsShow__Post.id(post)) : null))), React.createElement(\"div\", {\n className: \"flex items-center text-sm font-semibold lg:mb-1\"\n }, topicSolutionId !== undefined && isFirstPost ? React.createElement(\"a\", {\n className: \"flex items-center px-3 py-2 bg-green-200 text-green-900 border border-transparent rounded mr-3 text-left focus:border-primary-400 hover:border-green-500 hover:bg-green-300\",\n href: \"#post-show-\" + topicSolutionId\n }, React.createElement(PfIcon.make, {\n className: \"if i-arrow-down-circle-regular text-sm lg:text-base\"\n }), React.createElement(\"div\", {\n className: \"text-xs font-semibold pl-2\"\n }, t(undefined, undefined, \"go_to_solution_button\"))) : null, React.createElement(\"div\", {\n className: \"hidden lg:block\"\n }, ArrayUtils.isNotEmpty(repliesToPost) ? React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"show_replies\") + \" \" + TopicsShow__Post.id(post),\n className: \"border bg-white mr-3 p-2 rounded text-xs font-semibold focus:border-primary-400 hover:bg-gray-50\",\n id: \"show-replies-\" + TopicsShow__Post.id(post),\n onClick: (function (param) {\n return Curry._1(toggleShowReplies, (function (showReplies) {\n return !showReplies;\n }));\n })\n }, t(undefined, TopicsShow__Post.replies(post).length, \"show_replies_button\"), React.createElement(FaIcon.make, {\n classes: \"ml-2 fas fa-chevron-\" + (\n showReplies ? \"up\" : \"down\"\n )\n })) : null), ReactUtils.nullIf(React.createElement(\"button\", {\n \"aria-label\": isFirstPost ? t(undefined, undefined, \"add_reply_topic\") : t(undefined, undefined, \"add_reply_post\") + TopicsShow__Post.id(post),\n className: \"bg-gray-50 lg:border lg:bg-gray-50 p-2 rounded text-xs font-semibold focus:border-primary-400 hover:bg-gray-300\",\n id: \"reply-button-\" + TopicsShow__Post.id(post),\n onClick: (function (param) {\n Curry._1(addNewReplyCB, undefined);\n return navigateToEditor(undefined);\n })\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-reply mr-2\"\n }), t(undefined, undefined, \"new_reply_button\")), Belt_Option.isSome(TopicsShow__Topic.lockedAt(topic))))), showReplies ? React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"replies_post\") + \" \" + TopicsShow__Post.id(post),\n className: \"lg:pl-10 pt-2 topics-post-show__replies-container\"\n }, $$Array.map((function (post) {\n return React.createElement(TopicsShow__PostReply.make, {\n post: post,\n users: users,\n key: TopicsShow__Post.id(post)\n });\n }), repliesToPost)) : null)));\n}\n\nvar make = TopicsShow__PostShow;\n\nexport {\n str ,\n t ,\n findUser ,\n MarkPostAsSolutionQuery ,\n UnmarkPostAsSolutionQuery ,\n ArchivePostQuery ,\n markPostAsSolution ,\n unmarkPostAsSolution ,\n archivePost ,\n solutionIcon ,\n optionsDropdown ,\n onBorderAnimationEnd ,\n navigateToEditor ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as StringUtils from \"../../shared/utils/StringUtils.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json)\n };\n}\n\nfunction path(t) {\n return \"/communities/\" + (t.id + (\"/\" + StringUtils.parameterize(t.name)));\n}\n\nexport {\n id ,\n name ,\n decode ,\n path ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n id: Caml_option.null_to_opt(Json_decode.field(\"id\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n title: Json_decode.field(\"title\", Json_decode.string, json)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nexport {\n decode ,\n id ,\n title ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../shared/components/FaIcon.bs.js\";\nimport * as GraphqlQuery from \"../../shared/utils/GraphqlQuery.bs.js\";\n\nvar partial_arg = \"components.TopicsShow__SubscriptionManager\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreateTopicSubscriptionMutation($topicId: ID!) {\\ncreateTopicSubscription(topicId: $topicId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createTopicSubscription;\n return {\n createTopicSubscription: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createTopicSubscription;\n var value$2 = value$1.success;\n var createTopicSubscription = {\n success: value$2\n };\n return {\n createTopicSubscription: createTopicSubscription\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n topicId: inp.topicId\n };\n}\n\nfunction makeVariables(topicId, param) {\n return {\n topicId: topicId\n };\n}\n\nvar CreateTopicSubscriptionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar CreateTopicSubscriptionQuery_Graphql_error = include.Graphql_error;\n\nvar CreateTopicSubscriptionQuery_decodeNotification = include.decodeNotification;\n\nvar CreateTopicSubscriptionQuery_decodeObject = include.decodeObject;\n\nvar CreateTopicSubscriptionQuery_decodeNotifications = include.decodeNotifications;\n\nvar CreateTopicSubscriptionQuery_decodeErrors = include.decodeErrors;\n\nvar CreateTopicSubscriptionQuery_flashNotifications = include.flashNotifications;\n\nvar CreateTopicSubscriptionQuery_sendQuery = include.sendQuery;\n\nvar CreateTopicSubscriptionQuery_query = include.query;\n\nvar CreateTopicSubscriptionQuery_make = include.make;\n\nvar CreateTopicSubscriptionQuery = {\n CreateTopicSubscriptionQuery_inner: CreateTopicSubscriptionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateTopicSubscriptionQuery_Graphql_error,\n decodeNotification: CreateTopicSubscriptionQuery_decodeNotification,\n decodeObject: CreateTopicSubscriptionQuery_decodeObject,\n decodeNotifications: CreateTopicSubscriptionQuery_decodeNotifications,\n decodeErrors: CreateTopicSubscriptionQuery_decodeErrors,\n flashNotifications: CreateTopicSubscriptionQuery_flashNotifications,\n sendQuery: CreateTopicSubscriptionQuery_sendQuery,\n query: CreateTopicSubscriptionQuery_query,\n $$fetch: $$fetch,\n make: CreateTopicSubscriptionQuery_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation DeleteTopicSubscriptionMutation($topicId: ID!) {\\ndeleteTopicSubscription(topicId: $topicId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.deleteTopicSubscription;\n return {\n deleteTopicSubscription: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.deleteTopicSubscription;\n var value$2 = value$1.success;\n var deleteTopicSubscription = {\n success: value$2\n };\n return {\n deleteTopicSubscription: deleteTopicSubscription\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n topicId: inp.topicId\n };\n}\n\nfunction makeVariables$1(topicId, param) {\n return {\n topicId: topicId\n };\n}\n\nvar DeleteTopicSubscriptionQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar DeleteTopicSubscriptionQuery_Graphql_error = include$1.Graphql_error;\n\nvar DeleteTopicSubscriptionQuery_decodeNotification = include$1.decodeNotification;\n\nvar DeleteTopicSubscriptionQuery_decodeObject = include$1.decodeObject;\n\nvar DeleteTopicSubscriptionQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar DeleteTopicSubscriptionQuery_decodeErrors = include$1.decodeErrors;\n\nvar DeleteTopicSubscriptionQuery_flashNotifications = include$1.flashNotifications;\n\nvar DeleteTopicSubscriptionQuery_sendQuery = include$1.sendQuery;\n\nvar DeleteTopicSubscriptionQuery_query = include$1.query;\n\nvar DeleteTopicSubscriptionQuery_make = include$1.make;\n\nvar DeleteTopicSubscriptionQuery = {\n DeleteTopicSubscriptionQuery_inner: DeleteTopicSubscriptionQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: DeleteTopicSubscriptionQuery_Graphql_error,\n decodeNotification: DeleteTopicSubscriptionQuery_decodeNotification,\n decodeObject: DeleteTopicSubscriptionQuery_decodeObject,\n decodeNotifications: DeleteTopicSubscriptionQuery_decodeNotifications,\n decodeErrors: DeleteTopicSubscriptionQuery_decodeErrors,\n flashNotifications: DeleteTopicSubscriptionQuery_flashNotifications,\n sendQuery: DeleteTopicSubscriptionQuery_sendQuery,\n query: DeleteTopicSubscriptionQuery_query,\n $$fetch: $$fetch$1,\n make: DeleteTopicSubscriptionQuery_make\n};\n\nfunction iconClasses(subscribed, saving) {\n return \"fa-fw\" + (\n saving ? \" fas fa-bell text-primary-200\" : (\n subscribed ? \" fas fa-bell-slash cursor-pointer text-red-400\" : \" far fa-bell cursor-pointer\"\n )\n );\n}\n\nfunction handleSubscription(saving, subscribed, setSaving, topicId, subscribeCB, unsubscribeCB, $$event) {\n $$event.preventDefault();\n if (saving) {\n return ;\n } else {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n if (subscribed) {\n Curry._3($$fetch$1, undefined, undefined, {\n topicId: topicId\n }).then(function (response) {\n if (response.deleteTopicSubscription.success) {\n Curry._1(unsubscribeCB, undefined);\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n } else {\n Curry._3($$fetch, undefined, undefined, {\n topicId: topicId\n }).then(function (response) {\n if (response.createTopicSubscription.success) {\n Curry._1(subscribeCB, undefined);\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n }\n return ;\n }\n}\n\nfunction TopicsShow__SubscriptionManager(Props) {\n var topicId = Props.topicId;\n var subscribed = Props.subscribed;\n var subscribeCB = Props.subscribeCB;\n var unsubscribeCB = Props.unsubscribeCB;\n var match = React.useState(function () {\n return false;\n });\n var setSaving = match[1];\n var saving = match[0];\n return React.createElement(\"button\", {\n className: \"inline-flex items-center font-semibold p-2 md:py-1 bg-gray-50 hover:bg-gray-300 border rounded text-xs shrink-0\",\n disabled: saving,\n onClick: (function (param) {\n return handleSubscription(saving, subscribed, setSaving, topicId, subscribeCB, unsubscribeCB, param);\n })\n }, React.createElement(FaIcon.make, {\n classes: iconClasses(subscribed, saving)\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, subscribed ? t(undefined, undefined, \"unsubscribe\") : t(undefined, undefined, \"subscribe\")));\n}\n\nvar make = TopicsShow__SubscriptionManager;\n\nexport {\n t ,\n str ,\n CreateTopicSubscriptionQuery ,\n DeleteTopicSubscriptionQuery ,\n iconClasses ,\n handleSubscription ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../shared/components/FaIcon.bs.js\";\nimport * as PfIcon from \"../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as Dropdown from \"../shared/components/Dropdown.bs.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as WindowUtils from \"../shared/utils/WindowUtils.bs.js\";\nimport * as GraphqlQuery from \"../shared/utils/GraphqlQuery.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as DisablingCover from \"../shared/components/DisablingCover.bs.js\";\nimport * as TopicsShow__Post from \"./types/TopicsShow__Post.bs.js\";\nimport * as TopicsShow__Topic from \"./types/TopicsShow__Topic.bs.js\";\nimport * as TopicsShow__PostShow from \"./components/TopicsShow__PostShow.bs.js\";\nimport * as TopicsShow__Community from \"./types/TopicsShow__Community.bs.js\";\nimport * as TopicsShow__PostEditor from \"./components/TopicsShow__PostEditor.bs.js\";\nimport * as TopicsShow__LinkedTarget from \"./types/TopicsShow__LinkedTarget.bs.js\";\nimport * as TopicsShow__SubscriptionManager from \"./components/TopicsShow__SubscriptionManager.bs.js\";\n\nimport \"./TopicsShow__Root.css\"\n;\n\nvar partial_arg = \"components.TopicsShow__Root\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* LikeFirstPost */0 :\n return {\n topic: state.topic,\n firstPost: TopicsShow__Post.addLike(state.firstPost),\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* RemoveLikeFromFirstPost */1 :\n return {\n topic: state.topic,\n firstPost: TopicsShow__Post.removeLike(state.firstPost),\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* RemoveReplyToPost */2 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: undefined,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UnmarkReplyAsSolution */3 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: TopicsShow__Post.unmarkSolution(state.replies),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* StartChangingLockStatus */4 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: true,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* FinishUnlockingTopic */5 :\n return {\n topic: TopicsShow__Topic.unlock(state.topic),\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: false,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* Subscribe */6 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: true\n };\n case /* Unsubscribe */7 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: false\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* SaveReply */0 :\n var replyToPostId = action._1;\n var newReply = action._0;\n if (replyToPostId === undefined) {\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: $$Array.append([newReply], state.replies),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n }\n var updatedParentPost = TopicsShow__Post.addReply(TopicsShow__Post.id(newReply), TopicsShow__Post.find(replyToPostId, state.replies));\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: $$Array.append([\n newReply,\n updatedParentPost\n ], state.replies.filter(function (r) {\n return TopicsShow__Post.id(r) !== replyToPostId;\n })),\n replyToPostId: undefined,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* AddNewReply */1 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: action._0,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* LikeReply */2 :\n var post = action._0;\n var updatedPost = TopicsShow__Post.addLike(post);\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: $$Array.append([updatedPost], state.replies.filter(function (reply) {\n return TopicsShow__Post.id(reply) !== TopicsShow__Post.id(post);\n })),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* RemoveLikeFromReply */3 :\n var post$1 = action._0;\n var updatedPost$1 = TopicsShow__Post.removeLike(post$1);\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: $$Array.append([updatedPost$1], state.replies.filter(function (reply) {\n return TopicsShow__Post.id(reply) !== TopicsShow__Post.id(post$1);\n })),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UpdateFirstPost */4 :\n return {\n topic: state.topic,\n firstPost: action._0,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UpdateReply */5 :\n var reply = action._0;\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: $$Array.append([reply], state.replies.filter(function (r) {\n return TopicsShow__Post.id(r) !== TopicsShow__Post.id(reply);\n })),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* ArchivePost */6 :\n var postId = action._0;\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies.filter(function (r) {\n return TopicsShow__Post.id(r) !== postId;\n }),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UpdateTopicTitle */7 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: action._0,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* SaveTopic */8 :\n return {\n topic: action._0,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: false,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: false,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* ShowTopicEditor */9 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: action._0,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UpdateSavingTopic */10 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: action._0,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* MarkReplyAsSolution */11 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: TopicsShow__Post.markAsSolution(action._0, state.replies),\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* FinishLockingTopic */12 :\n return {\n topic: TopicsShow__Topic.lock(action._0, state.topic),\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: false,\n showTopicEditor: state.showTopicEditor,\n topicCategory: state.topicCategory,\n subscribed: state.subscribed\n };\n case /* UpdateTopicCategory */13 :\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: state.replies,\n replyToPostId: state.replyToPostId,\n topicTitle: state.topicTitle,\n savingTopic: state.savingTopic,\n changingLockedStatus: state.changingLockedStatus,\n showTopicEditor: state.showTopicEditor,\n topicCategory: action._0,\n subscribed: state.subscribed\n };\n \n }\n }\n}\n\nfunction subscribe(send, param) {\n return Curry._1(send, /* Subscribe */6);\n}\n\nfunction unsubscribe(send, param) {\n return Curry._1(send, /* Unsubscribe */7);\n}\n\nfunction addNewReply(send, replyToPostId, param) {\n return Curry._1(send, {\n TAG: /* AddNewReply */1,\n _0: replyToPostId\n });\n}\n\nfunction updateReply(send, reply) {\n return Curry._1(send, {\n TAG: /* UpdateReply */5,\n _0: reply\n });\n}\n\nfunction updateFirstPost(send, post) {\n return Curry._1(send, {\n TAG: /* UpdateFirstPost */4,\n _0: post\n });\n}\n\nfunction saveReply(send, replyToPostId, reply) {\n return Curry._1(send, {\n TAG: /* SaveReply */0,\n _0: reply,\n _1: replyToPostId\n });\n}\n\nfunction isTopicCreator(firstPost, currentUserId) {\n return Belt_Option.mapWithDefault(TopicsShow__Post.creatorId(firstPost), false, (function (id) {\n return id === currentUserId;\n }));\n}\n\nfunction archiveTopic(community) {\n window.location = TopicsShow__Community.path(community);\n \n}\n\nvar Raw = {};\n\nvar query = \"mutation UpdateTopicMutation($id: ID!, $title: String!, $topicCategoryId: ID) {\\nupdateTopic(id: $id, title: $title, topicCategoryId: $topicCategoryId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.updateTopic;\n return {\n updateTopic: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.updateTopic;\n var value$2 = value$1.success;\n var updateTopic = {\n success: value$2\n };\n return {\n updateTopic: updateTopic\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.topicCategoryId;\n return {\n id: inp.id,\n title: inp.title,\n topicCategoryId: a !== undefined ? a : undefined\n };\n}\n\nfunction makeVariables(id, title, topicCategoryId, param) {\n return {\n id: id,\n title: title,\n topicCategoryId: topicCategoryId\n };\n}\n\nvar UpdateTopicQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar UpdateTopicQuery_Graphql_error = include.Graphql_error;\n\nvar UpdateTopicQuery_decodeNotification = include.decodeNotification;\n\nvar UpdateTopicQuery_decodeObject = include.decodeObject;\n\nvar UpdateTopicQuery_decodeNotifications = include.decodeNotifications;\n\nvar UpdateTopicQuery_decodeErrors = include.decodeErrors;\n\nvar UpdateTopicQuery_flashNotifications = include.flashNotifications;\n\nvar UpdateTopicQuery_sendQuery = include.sendQuery;\n\nvar UpdateTopicQuery_query = include.query;\n\nvar UpdateTopicQuery_make = include.make;\n\nvar UpdateTopicQuery = {\n UpdateTopicQuery_inner: UpdateTopicQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: UpdateTopicQuery_Graphql_error,\n decodeNotification: UpdateTopicQuery_decodeNotification,\n decodeObject: UpdateTopicQuery_decodeObject,\n decodeNotifications: UpdateTopicQuery_decodeNotifications,\n decodeErrors: UpdateTopicQuery_decodeErrors,\n flashNotifications: UpdateTopicQuery_flashNotifications,\n sendQuery: UpdateTopicQuery_sendQuery,\n query: UpdateTopicQuery_query,\n $$fetch: $$fetch,\n make: UpdateTopicQuery_make\n};\n\nfunction updateTopic(state, send, $$event) {\n $$event.preventDefault();\n Curry._1(send, {\n TAG: /* UpdateSavingTopic */10,\n _0: true\n });\n var topicCategoryId = Belt_Option.flatMap(state.topicCategory, (function (category) {\n return TopicCategory.id(category);\n }));\n var variables_id = TopicsShow__Topic.id(state.topic);\n var variables_title = state.topicTitle;\n var variables = {\n id: variables_id,\n title: variables_title,\n topicCategoryId: topicCategoryId\n };\n Curry._3($$fetch, undefined, undefined, variables).then(function (response) {\n if (response.updateTopic.success) {\n var topic = TopicsShow__Topic.updateTitle(state.topicTitle, state.topic);\n Curry._1(send, {\n TAG: /* SaveTopic */8,\n _0: topic\n });\n } else {\n Curry._1(send, {\n TAG: /* UpdateSavingTopic */10,\n _0: false\n });\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(send, {\n TAG: /* UpdateSavingTopic */10,\n _0: false\n });\n return Promise.resolve(undefined);\n });\n \n}\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation LockTopicMutation($id: ID!) {\\nlockTopic(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.lockTopic;\n return {\n lockTopic: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.lockTopic;\n var value$2 = value$1.success;\n var lockTopic = {\n success: value$2\n };\n return {\n lockTopic: lockTopic\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables$1(id, param) {\n return {\n id: id\n };\n}\n\nvar LockTopicQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar LockTopicQuery_Graphql_error = include$1.Graphql_error;\n\nvar LockTopicQuery_decodeNotification = include$1.decodeNotification;\n\nvar LockTopicQuery_decodeObject = include$1.decodeObject;\n\nvar LockTopicQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar LockTopicQuery_decodeErrors = include$1.decodeErrors;\n\nvar LockTopicQuery_flashNotifications = include$1.flashNotifications;\n\nvar LockTopicQuery_sendQuery = include$1.sendQuery;\n\nvar LockTopicQuery_query = include$1.query;\n\nvar LockTopicQuery_make = include$1.make;\n\nvar LockTopicQuery = {\n LockTopicQuery_inner: LockTopicQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: LockTopicQuery_Graphql_error,\n decodeNotification: LockTopicQuery_decodeNotification,\n decodeObject: LockTopicQuery_decodeObject,\n decodeNotifications: LockTopicQuery_decodeNotifications,\n decodeErrors: LockTopicQuery_decodeErrors,\n flashNotifications: LockTopicQuery_flashNotifications,\n sendQuery: LockTopicQuery_sendQuery,\n query: LockTopicQuery_query,\n $$fetch: $$fetch$1,\n make: LockTopicQuery_make\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"mutation UnlockTopicMutation($id: ID!) {\\nunlockTopic(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$2(value) {\n var value$1 = value.unlockTopic;\n return {\n unlockTopic: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.unlockTopic;\n var value$2 = value$1.success;\n var unlockTopic = {\n success: value$2\n };\n return {\n unlockTopic: unlockTopic\n };\n}\n\nfunction serializeVariables$2(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables$2(id, param) {\n return {\n id: id\n };\n}\n\nvar UnlockTopicQuery_inner = {\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2\n};\n\nvar include$2 = GraphqlQuery.Extender({\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$2 = include$2.$$fetch;\n\nvar UnlockTopicQuery_Graphql_error = include$2.Graphql_error;\n\nvar UnlockTopicQuery_decodeNotification = include$2.decodeNotification;\n\nvar UnlockTopicQuery_decodeObject = include$2.decodeObject;\n\nvar UnlockTopicQuery_decodeNotifications = include$2.decodeNotifications;\n\nvar UnlockTopicQuery_decodeErrors = include$2.decodeErrors;\n\nvar UnlockTopicQuery_flashNotifications = include$2.flashNotifications;\n\nvar UnlockTopicQuery_sendQuery = include$2.sendQuery;\n\nvar UnlockTopicQuery_query = include$2.query;\n\nvar UnlockTopicQuery_make = include$2.make;\n\nvar UnlockTopicQuery = {\n UnlockTopicQuery_inner: UnlockTopicQuery_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\n Graphql_error: UnlockTopicQuery_Graphql_error,\n decodeNotification: UnlockTopicQuery_decodeNotification,\n decodeObject: UnlockTopicQuery_decodeObject,\n decodeNotifications: UnlockTopicQuery_decodeNotifications,\n decodeErrors: UnlockTopicQuery_decodeErrors,\n flashNotifications: UnlockTopicQuery_flashNotifications,\n sendQuery: UnlockTopicQuery_sendQuery,\n query: UnlockTopicQuery_query,\n $$fetch: $$fetch$2,\n make: UnlockTopicQuery_make\n};\n\nfunction lockTopic(topicId, currentUserId, send) {\n return WindowUtils.confirm(undefined, t(undefined, undefined, \"lock_topic_confirm\"), (function (param) {\n Curry._1(send, /* StartChangingLockStatus */4);\n Curry._3($$fetch$1, undefined, undefined, {\n id: topicId\n }).then(function (response) {\n if (response.lockTopic.success) {\n Curry._1(send, {\n TAG: /* FinishLockingTopic */12,\n _0: currentUserId\n });\n }\n return Promise.resolve(undefined);\n });\n \n }));\n}\n\nfunction unlockTopic(topicId, send) {\n return WindowUtils.confirm(undefined, t(undefined, undefined, \"unlock_topic_confirm\"), (function (param) {\n Curry._1(send, /* StartChangingLockStatus */4);\n Curry._3($$fetch$2, undefined, undefined, {\n id: topicId\n }).then(function (response) {\n if (response.unlockTopic.success) {\n Curry._1(send, /* FinishUnlockingTopic */5);\n }\n return Promise.resolve(undefined);\n });\n \n }));\n}\n\nfunction communityLink(community) {\n return React.createElement(\"a\", {\n className: \"btn btn-subtle\",\n href: TopicsShow__Community.path(community)\n }, React.createElement(\"i\", {\n className: \"fas fa-users\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, TopicsShow__Community.name(community)));\n}\n\nfunction topicCategory(topicCategories, topicCategoryId) {\n if (topicCategoryId !== undefined) {\n return ArrayUtils.unsafeFind((function (category) {\n return TopicCategory.id(category) === topicCategoryId;\n }), \"Unable to find topic category with ID: \" + topicCategoryId, topicCategories);\n }\n \n}\n\nfunction categoryDropdownSelected(topicCategory) {\n var tmp;\n if (topicCategory !== undefined) {\n var match = TopicCategory.color(topicCategory);\n var style = {\n backgroundColor: match[0]\n };\n tmp = React.createElement(\"div\", {\n className: \"inline-flex items-center\"\n }, React.createElement(\"div\", {\n className: \"h-3 w-3 rounded mt-px\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, TopicCategory.name(topicCategory)));\n } else {\n tmp = ts(undefined, undefined, \"none\");\n }\n return React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"selected_category\"),\n className: \"flex justify-between text-sm bg-white border border-gray-300 rounded py-1 px-3 mt-1 focus:outline-none focus:bg-white focus:border-primary-300 cursor-pointer\"\n }, tmp, React.createElement(FaIcon.make, {\n classes: \"ml-4 fas fa-caret-down\"\n }));\n}\n\nfunction topicCategorySelector(send, selectedTopicCategory, availableTopicCategories) {\n var selectableTopicCategories = Belt_Option.mapWithDefault(selectedTopicCategory, availableTopicCategories, (function (topicCategory) {\n return availableTopicCategories.filter(function (availableTopicCategory) {\n return TopicCategory.id(availableTopicCategory) !== TopicCategory.id(topicCategory);\n });\n }));\n var topicCategoryList = selectableTopicCategories.map(function (topicCategory) {\n var match = TopicCategory.color(topicCategory);\n var style = {\n backgroundColor: match[0]\n };\n var categoryName = TopicCategory.name(topicCategory);\n return React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"select_category\") + \" \" + categoryName,\n className: \"px-3 py-2 font-normal flex items-center\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateTopicCategory */13,\n _0: topicCategory\n });\n })\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded mt-px\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, categoryName));\n });\n if (selectedTopicCategory !== undefined) {\n return [React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"select_no_category\"),\n className: \"px-3 py-2 font-normal flex items-center\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateTopicCategory */13,\n _0: undefined\n });\n })\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded bg-gray-300 mt-px\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, ts(undefined, undefined, \"none\")))].concat(topicCategoryList);\n } else {\n return topicCategoryList;\n }\n}\n\nfunction topicSolutionId(replies) {\n return Belt_Option.map(Caml_option.undefined_to_opt(replies.find(TopicsShow__Post.solution)), TopicsShow__Post.id);\n}\n\nfunction TopicsShow__Root(Props) {\n var topic = Props.topic;\n var firstPost = Props.firstPost;\n var replies = Props.replies;\n var users = Props.users;\n var currentUserId = Props.currentUserId;\n var moderator = Props.moderator;\n var community = Props.community;\n var target = Props.target;\n var topicCategories = Props.topicCategories;\n var subscribed = Props.subscribed;\n var match = React.useReducer(reducer, topic, (function (topic) {\n return {\n topic: topic,\n firstPost: firstPost,\n replies: replies,\n replyToPostId: undefined,\n topicTitle: TopicsShow__Topic.title(topic),\n savingTopic: false,\n changingLockedStatus: false,\n showTopicEditor: false,\n topicCategory: topicCategory(topicCategories, TopicsShow__Topic.topicCategoryId(topic)),\n subscribed: subscribed\n };\n }));\n var send = match[1];\n var state = match[0];\n var tmp;\n if (target !== undefined) {\n var id = TopicsShow__LinkedTarget.id(target);\n tmp = React.createElement(\"div\", {\n className: \"max-w-4xl w-full mt-5 lg:x-4 mx-auto\"\n }, React.createElement(\"div\", {\n className: \"flex py-4 px-4 md:px-5 mx-3 lg:mx-0 bg-white border border-primary-500 shadow-md rounded-lg justify-between items-center\"\n }, React.createElement(\"p\", {\n className: \"w-3/5 md:w-4/5 text-sm\"\n }, React.createElement(\"span\", {\n className: \"font-semibold block text-xs\"\n }, t(undefined, undefined, \"linked_target_label\")), React.createElement(\"span\", undefined, TopicsShow__LinkedTarget.title(target))), id !== undefined ? React.createElement(\"a\", {\n className: \"btn btn-default\",\n href: \"/targets/\" + id\n }, t(undefined, undefined, \"view_target_button\")) : null));\n } else {\n tmp = null;\n }\n var tmp$1;\n if (state.showTopicEditor) {\n tmp$1 = React.createElement(DisablingCover.make, {\n disabled: state.savingTopic,\n children: React.createElement(\"div\", {\n className: \"flex flex-col lg:ml-14 bg-gray-50 p-2 rounded border border-primary-200\"\n }, React.createElement(\"input\", {\n className: \"appearance-none block w-full bg-white text-gray-900 font-semibold border border-gray-300 rounded py-3 px-4 mb-2 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\",\n type: \"text\",\n value: state.topicTitle,\n onChange: (function ($$event) {\n return Curry._1(send, {\n TAG: /* UpdateTopicTitle */7,\n _0: $$event.target.value\n });\n })\n }), React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:justify-between md:items-end\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col items-left shrink-0\"\n }, React.createElement(\"span\", {\n className: \"inline-block text-gray-600 text-tiny font-semibold mr-2\"\n }, t(undefined, undefined, \"topic_category_label\")), React.createElement(Dropdown.make, {\n selected: categoryDropdownSelected(state.topicCategory),\n contents: topicCategorySelector(send, state.topicCategory, topicCategories),\n className: \"\"\n })), React.createElement(\"div\", {\n className: \"flex justify-end pt-4 md:pt-0\"\n }, React.createElement(\"button\", {\n className: \"btn btn-subtle mr-3\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* ShowTopicEditor */9,\n _0: false\n });\n })\n }, t(undefined, undefined, \"topic_editor_cancel_button\")), React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: state.topicTitle.trim() === \"\",\n onClick: (function (param) {\n return updateTopic(state, send, param);\n })\n }, t(undefined, undefined, \"update_topic_button\")))))\n });\n } else {\n var isLocked = Belt_Option.isSome(TopicsShow__Topic.lockedAt(state.topic));\n var topicId = TopicsShow__Topic.id(state.topic);\n var topicCategory$1 = state.topicCategory;\n var tmp$2;\n if (topicCategory$1 !== undefined) {\n var match$1 = TopicCategory.color(topicCategory$1);\n var style = {\n backgroundColor: match$1[0]\n };\n tmp$2 = React.createElement(\"div\", {\n className: \"py-2 flex items-center lg:pl-14 text-xs font-semibold\"\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, TopicCategory.name(topicCategory$1)));\n } else {\n tmp$2 = null;\n }\n tmp$1 = React.createElement(\"div\", {\n className: \"flex flex-col \"\n }, React.createElement(\"div\", {\n className: \"topics-show__title-container flex items-center md:items-start justify-between mb-2\"\n }, React.createElement(\"h3\", {\n \"aria-label\": t(undefined, undefined, \"topic_title\"),\n className: \"leading-snug lg:pl-14 text-base lg:text-2xl w-9/12\"\n }, TopicsShow__Topic.title(state.topic)), React.createElement(\"span\", {\n className: \"flex\"\n }, moderator || isTopicCreator(firstPost, currentUserId) ? React.createElement(\"button\", {\n className: \"topics-show__title-edit-button inline-flex items-center font-semibold p-2 md:py-1 bg-gray-50 hover:bg-gray-300 border rounded text-xs shrink-0 mt-2 ml-3\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* ShowTopicEditor */9,\n _0: true\n });\n })\n }, React.createElement(\"i\", {\n className: \"far fa-edit\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block ml-1\"\n }, t(undefined, undefined, \"edit_topic_button\"))) : null, moderator || isTopicCreator(firstPost, currentUserId) ? React.createElement(\"button\", {\n className: \"topics-show__title-edit-button inline-flex items-center font-semibold p-2 md:py-1 bg-gray-50 hover:bg-gray-300 border rounded text-xs shrink-0 mt-2 ml-2\",\n disabled: state.changingLockedStatus,\n onClick: (function (param) {\n if (isLocked) {\n return unlockTopic(topicId, send);\n } else {\n return lockTopic(topicId, currentUserId, send);\n }\n })\n }, React.createElement(PfIcon.make, {\n className: \"fa fa-\" + (\n isLocked ? \"unlock\" : \"lock\"\n )\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block ml-1\"\n }, isLocked ? t(undefined, undefined, \"unlock_topic_button\") : t(undefined, undefined, \"lock_topic_button\"))) : null)), tmp$2, React.createElement(\"div\", {\n className: \"lg:pl-14\"\n }, React.createElement(TopicsShow__SubscriptionManager.make, {\n topicId: TopicsShow__Topic.id(topic),\n subscribed: state.subscribed,\n subscribeCB: (function (param) {\n return Curry._1(send, /* Subscribe */6);\n }),\n unsubscribeCB: (function (param) {\n return Curry._1(send, /* Unsubscribe */7);\n })\n })));\n }\n var _lockedAt = TopicsShow__Topic.lockedAt(state.topic);\n var tmp$3;\n if (_lockedAt !== undefined) {\n tmp$3 = React.createElement(\"div\", {\n className: \"flex p-4 bg-yellow-100 text-yellow-900 border border-yellow-500 border-l-4 rounded-r-md mt-2 mx-auto w-full max-w-4xl mb-4 text-sm justify-center items-center\"\n }, React.createElement(\"div\", {\n className: \"w-6 h-6 text-yellow-500 shrink-0\"\n }, React.createElement(\"i\", {\n className: \"fa fa-lock\"\n })), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"locked_topic_notice\")));\n } else {\n var partial_arg = state.replyToPostId;\n var tmp$4 = {\n id: \"add-reply-to-topic\",\n topic: topic,\n currentUserId: currentUserId,\n handlePostCB: (function (param) {\n return Curry._1(send, {\n TAG: /* SaveReply */0,\n _0: param,\n _1: partial_arg\n });\n }),\n replies: state.replies,\n users: users,\n removeReplyToPostCB: (function (param) {\n return Curry._1(send, /* RemoveReplyToPost */2);\n })\n };\n if (state.replyToPostId !== undefined) {\n tmp$4.replyToPostId = Caml_option.valFromOption(state.replyToPostId);\n }\n tmp$3 = React.createElement(TopicsShow__PostEditor.make, tmp$4);\n }\n return React.createElement(\"div\", {\n className: \"bg-gray-50\"\n }, React.createElement(\"div\", {\n className: \"max-w-4xl w-full mt-5 pl-4 lg:pl-0 lg:mx-auto\"\n }, communityLink(community)), React.createElement(\"div\", {\n className: \"flex-col items-center justify-between\"\n }, tmp, React.createElement(\"div\", {\n className: \"max-w-4xl w-full mx-auto bg-white p-4 lg:p-8 my-4 border-t border-b md:border-0 lg:rounded-lg lg:shadow\"\n }, React.createElement(\"div\", {\n \"aria-label\": t(undefined, undefined, \"topic_details\")\n }, tmp$1, React.createElement(TopicsShow__PostShow.make, {\n post: state.firstPost,\n topic: state.topic,\n users: users,\n posts: state.replies,\n currentUserId: currentUserId,\n moderator: moderator,\n isTopicCreator: isTopicCreator(firstPost, currentUserId),\n updatePostCB: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateFirstPost */4,\n _0: param\n });\n }),\n addNewReplyCB: (function (param) {\n return Curry._1(send, {\n TAG: /* AddNewReply */1,\n _0: undefined\n });\n }),\n addPostLikeCB: (function (param) {\n return Curry._1(send, /* LikeFirstPost */0);\n }),\n removePostLikeCB: (function (param) {\n return Curry._1(send, /* RemoveLikeFromFirstPost */1);\n }),\n markPostAsSolutionCB: (function (param) {\n \n }),\n unmarkPostAsSolutionCB: (function (param) {\n \n }),\n archivePostCB: (function (param) {\n return archiveTopic(community);\n }),\n topicSolutionId: topicSolutionId(state.replies),\n key: TopicsShow__Post.id(state.firstPost)\n })), React.createElement(\"h5\", {\n className: \"pt-4 pb-2 lg:ml-14 border-b\"\n }, String(state.replies.length) + \" \" + ts(undefined, undefined, \"replies\")), $$Array.map((function (reply) {\n var partial_arg = TopicsShow__Post.id(reply);\n return React.createElement(\"div\", {\n key: TopicsShow__Post.id(reply),\n className: \"topics-show__replies-wrapper\"\n }, React.createElement(TopicsShow__PostShow.make, {\n post: reply,\n topic: state.topic,\n users: users,\n posts: state.replies,\n currentUserId: currentUserId,\n moderator: moderator,\n isTopicCreator: isTopicCreator(firstPost, currentUserId),\n updatePostCB: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateReply */5,\n _0: param\n });\n }),\n addNewReplyCB: (function (param) {\n return Curry._1(send, {\n TAG: /* AddNewReply */1,\n _0: partial_arg\n });\n }),\n addPostLikeCB: (function (param) {\n return Curry._1(send, {\n TAG: /* LikeReply */2,\n _0: reply\n });\n }),\n removePostLikeCB: (function (param) {\n return Curry._1(send, {\n TAG: /* RemoveLikeFromReply */3,\n _0: reply\n });\n }),\n markPostAsSolutionCB: (function (param) {\n return Curry._1(send, {\n TAG: /* MarkReplyAsSolution */11,\n _0: TopicsShow__Post.id(reply)\n });\n }),\n unmarkPostAsSolutionCB: (function (param) {\n return Curry._1(send, /* UnmarkReplyAsSolution */3);\n }),\n archivePostCB: (function (param) {\n return Curry._1(send, {\n TAG: /* ArchivePost */6,\n _0: TopicsShow__Post.id(reply)\n });\n }),\n topicSolutionId: topicSolutionId(state.replies)\n }));\n }), TopicsShow__Post.sort(state.replies))), React.createElement(\"div\", {\n className: \"mt-4 px-4\"\n }, tmp$3)));\n}\n\nvar make = TopicsShow__Root;\n\nexport {\n t ,\n ts ,\n str ,\n reducer ,\n subscribe ,\n unsubscribe ,\n addNewReply ,\n updateReply ,\n updateFirstPost ,\n saveReply ,\n isTopicCreator ,\n archiveTopic ,\n UpdateTopicQuery ,\n updateTopic ,\n LockTopicQuery ,\n UnlockTopicQuery ,\n lockTopic ,\n unlockTopic ,\n communityLink ,\n topicCategory ,\n categoryDropdownSelected ,\n topicCategorySelector ,\n topicSolutionId ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as User from \"../shared/types/User.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as TopicsShow__Post from \"../topics/types/TopicsShow__Post.bs.js\";\nimport * as TopicsShow__Root from \"../topics/TopicsShow__Root.bs.js\";\nimport * as TopicsShow__Topic from \"../topics/types/TopicsShow__Topic.bs.js\";\nimport * as TopicsShow__Community from \"../topics/types/TopicsShow__Community.bs.js\";\nimport * as TopicsShow__LinkedTarget from \"../topics/types/TopicsShow__LinkedTarget.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"topic\", TopicsShow__Topic.decode, json),\n Json_decode.field(\"firstPost\", TopicsShow__Post.decode, json),\n Json_decode.field(\"replies\", (function (param) {\n return Json_decode.array(TopicsShow__Post.decode, param);\n }), json),\n Json_decode.field(\"users\", (function (param) {\n return Json_decode.array(User.decode, param);\n }), json),\n Json_decode.field(\"currentUserId\", Json_decode.string, json),\n Json_decode.field(\"moderator\", Json_decode.bool, json),\n Json_decode.field(\"community\", TopicsShow__Community.decode, json),\n Json_decode.optional((function (param) {\n return Json_decode.field(\"target\", TopicsShow__LinkedTarget.decode, param);\n }), json),\n Json_decode.field(\"topicCategories\", (function (param) {\n return Json_decode.array(TopicCategory.decode, param);\n }), json),\n Json_decode.field(\"subscribed\", Json_decode.bool, json)\n ];\n}\n\nPsj.match(undefined, \"topics#show\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(TopicsShow__Root.make, {\n topic: match[0],\n firstPost: match[1],\n replies: match[2],\n users: match[3],\n currentUserId: match[4],\n moderator: match[5],\n community: match[6],\n target: match[7],\n topicCategories: match[8],\n subscribed: match[9]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction repliesCount(t) {\n return t.repliesCount;\n}\n\nfunction makeFromJs(jsObject) {\n return {\n id: jsObject.id,\n title: jsObject.title,\n createdAt: DateFns.decodeISO(jsObject.createdAt),\n repliesCount: jsObject.liveRepliesCount\n };\n}\n\nexport {\n id ,\n title ,\n createdAt ,\n repliesCount ,\n makeFromJs ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../shared/components/FaIcon.bs.js\";\nimport * as $$String from \"../../../node_modules/rescript/lib/es6/string.js\";\nimport * as DateFns from \"../shared/utils/DateFns.bs.js\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../shared/utils/OptionUtils.bs.js\";\nimport * as StringUtils from \"../shared/utils/StringUtils.bs.js\";\nimport * as GraphqlQuery from \"../shared/utils/GraphqlQuery.bs.js\";\nimport * as $$Notification from \"../shared/Notification.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as DisablingCover from \"../shared/components/DisablingCover.bs.js\";\nimport * as MarkdownEditor from \"../shared/components/MarkdownEditor.bs.js\";\nimport * as TopicsShow__LinkedTarget from \"../topics/types/TopicsShow__LinkedTarget.bs.js\";\nimport * as CommunitiesNewTopic__TopicSuggestion from \"./types/CommunitiesNewTopic__TopicSuggestion.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CommunitiesNewTopic__Root\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar initialState_similar = {\n search: \"\",\n suggestions: []\n};\n\nvar initialState = {\n title: \"\",\n titleTimeoutId: undefined,\n similar: initialState_similar,\n searching: false,\n body: \"\",\n selectedCategory: undefined,\n saving: false\n};\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* BeginSaving */0 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: state.searching,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: true\n };\n case /* FailSaving */1 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: state.searching,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: false\n };\n case /* BeginSearching */2 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: true,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n case /* FailSearching */3 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: false,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateTitle */0 :\n var title = action._0;\n var similar = $$String.trim(title) === \"\" ? ({\n search: \"\",\n suggestions: []\n }) : state.similar;\n return {\n title: title,\n titleTimeoutId: state.titleTimeoutId,\n similar: similar,\n searching: state.searching,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n case /* UpdateTitleAndTimeout */1 :\n return {\n title: action._0,\n titleTimeoutId: Caml_option.some(action._1),\n similar: state.similar,\n searching: state.searching,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n case /* UpdateBody */2 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: state.searching,\n body: action._0,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n case /* SelectCategory */3 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: state.similar,\n searching: state.searching,\n body: state.body,\n selectedCategory: action._0,\n saving: state.saving\n };\n case /* FinishSearching */4 :\n return {\n title: state.title,\n titleTimeoutId: state.titleTimeoutId,\n similar: {\n search: action._0,\n suggestions: action._1\n },\n searching: false,\n body: state.body,\n selectedCategory: state.selectedCategory,\n saving: state.saving\n };\n \n }\n }\n}\n\nvar Raw = {};\n\nvar query = \"query SimilarTopicsQuery($communityId: ID!, $title: String!) {\\nsimilarTopics(communityId: $communityId, title: $title) {\\nid \\ntitle \\ncreatedAt \\nliveRepliesCount \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.similarTopics;\n return {\n similarTopics: value$1.map(function (value) {\n return {\n id: value.id,\n title: value.title,\n createdAt: value.createdAt,\n liveRepliesCount: value.liveRepliesCount\n };\n })\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.similarTopics;\n var similarTopics = value$1.map(function (value) {\n var value$1 = value.liveRepliesCount;\n var value$2 = value.createdAt;\n var value$3 = value.title;\n var value$4 = value.id;\n return {\n id: value$4,\n title: value$3,\n createdAt: value$2,\n liveRepliesCount: value$1\n };\n });\n return {\n similarTopics: similarTopics\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n communityId: inp.communityId,\n title: inp.title\n };\n}\n\nfunction makeVariables(communityId, title, param) {\n return {\n communityId: communityId,\n title: title\n };\n}\n\nvar SimilarTopicsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar SimilarTopicsQuery_Graphql_error = include.Graphql_error;\n\nvar SimilarTopicsQuery_decodeNotification = include.decodeNotification;\n\nvar SimilarTopicsQuery_decodeObject = include.decodeObject;\n\nvar SimilarTopicsQuery_decodeNotifications = include.decodeNotifications;\n\nvar SimilarTopicsQuery_decodeErrors = include.decodeErrors;\n\nvar SimilarTopicsQuery_flashNotifications = include.flashNotifications;\n\nvar SimilarTopicsQuery_sendQuery = include.sendQuery;\n\nvar SimilarTopicsQuery_query = include.query;\n\nvar SimilarTopicsQuery_fetch = include.$$fetch;\n\nvar SimilarTopicsQuery = {\n SimilarTopicsQuery_inner: SimilarTopicsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: SimilarTopicsQuery_Graphql_error,\n decodeNotification: SimilarTopicsQuery_decodeNotification,\n decodeObject: SimilarTopicsQuery_decodeObject,\n decodeNotifications: SimilarTopicsQuery_decodeNotifications,\n decodeErrors: SimilarTopicsQuery_decodeErrors,\n flashNotifications: SimilarTopicsQuery_flashNotifications,\n sendQuery: SimilarTopicsQuery_sendQuery,\n query: SimilarTopicsQuery_query,\n $$fetch: SimilarTopicsQuery_fetch,\n make: make\n};\n\nfunction searchForSimilarTopics(send, title, communityId, param) {\n Curry._1(send, /* BeginSearching */2);\n var trimmedTitle = $$String.trim(title);\n Curry._3(make, undefined, undefined, {\n communityId: communityId,\n title: trimmedTitle\n }).then(function (result) {\n var suggestions = result.similarTopics.map(CommunitiesNewTopic__TopicSuggestion.makeFromJs);\n Curry._1(send, {\n TAG: /* FinishSearching */4,\n _0: trimmedTitle,\n _1: suggestions\n });\n return Promise.resolve(undefined);\n }).catch(function (e) {\n console.log(e);\n $$Notification.warn(tr(undefined, undefined, \"oops\"), tr(undefined, undefined, \"failed_fetch_similar\"));\n Curry._1(send, /* FailSaving */1);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction isInvalidString(s) {\n return $$String.trim(s) === \"\";\n}\n\nfunction updateTitleAndSearch(state, send, communityId, title) {\n Belt_Option.forEach(state.titleTimeoutId, (function (prim) {\n clearTimeout(prim);\n \n }));\n var trimmedTitle = $$String.trim(title);\n if ($$String.trim(title) === \"\" || trimmedTitle === state.similar.search) {\n return Curry._1(send, {\n TAG: /* UpdateTitle */0,\n _0: title\n });\n }\n var timeoutId = setTimeout((function (param) {\n return searchForSimilarTopics(send, trimmedTitle, communityId, param);\n }), 1500);\n return Curry._1(send, {\n TAG: /* UpdateTitleAndTimeout */1,\n _0: title,\n _1: timeoutId\n });\n}\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation CreateTopicQuery($title: String!, $body: String!, $communityId: ID!, $targetId: ID, $topicCategoryId: ID) {\\ncreateTopic(body: $body, title: $title, communityId: $communityId, targetId: $targetId, topicCategoryId: $topicCategoryId) {\\ntopicId \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.createTopic;\n var value$2 = value$1.topicId;\n return {\n createTopic: {\n topicId: !(value$2 == null) ? value$2 : undefined\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.createTopic;\n var value$2 = value$1.topicId;\n var topicId = value$2 !== undefined ? value$2 : null;\n var createTopic = {\n topicId: topicId\n };\n return {\n createTopic: createTopic\n };\n}\n\nfunction serializeVariables$1(inp) {\n var a = inp.targetId;\n var a$1 = inp.topicCategoryId;\n return {\n title: inp.title,\n body: inp.body,\n communityId: inp.communityId,\n targetId: a !== undefined ? a : undefined,\n topicCategoryId: a$1 !== undefined ? a$1 : undefined\n };\n}\n\nfunction makeVariables$1(title, body, communityId, targetId, topicCategoryId, param) {\n return {\n title: title,\n body: body,\n communityId: communityId,\n targetId: targetId,\n topicCategoryId: topicCategoryId\n };\n}\n\nvar CreateTopicQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include$1.$$fetch;\n\nvar CreateTopicQuery_Graphql_error = include$1.Graphql_error;\n\nvar CreateTopicQuery_decodeNotification = include$1.decodeNotification;\n\nvar CreateTopicQuery_decodeObject = include$1.decodeObject;\n\nvar CreateTopicQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar CreateTopicQuery_decodeErrors = include$1.decodeErrors;\n\nvar CreateTopicQuery_flashNotifications = include$1.flashNotifications;\n\nvar CreateTopicQuery_sendQuery = include$1.sendQuery;\n\nvar CreateTopicQuery_query = include$1.query;\n\nvar CreateTopicQuery_make = include$1.make;\n\nvar CreateTopicQuery = {\n CreateTopicQuery_inner: CreateTopicQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: CreateTopicQuery_Graphql_error,\n decodeNotification: CreateTopicQuery_decodeNotification,\n decodeObject: CreateTopicQuery_decodeObject,\n decodeNotifications: CreateTopicQuery_decodeNotifications,\n decodeErrors: CreateTopicQuery_decodeErrors,\n flashNotifications: CreateTopicQuery_flashNotifications,\n sendQuery: CreateTopicQuery_sendQuery,\n query: CreateTopicQuery_query,\n $$fetch: $$fetch,\n make: CreateTopicQuery_make\n};\n\nfunction redirectToNewTopic(id, title) {\n var redirectPath = \"/topics/\" + (id + (\"/\" + StringUtils.parameterize(title)));\n window.location = redirectPath;\n \n}\n\nfunction saveDisabled(state) {\n if ($$String.trim(state.body) === \"\") {\n return true;\n } else {\n return $$String.trim(state.title) === \"\";\n }\n}\n\nfunction handleCreateTopic(state, send, communityId, target, topicCategory, $$event) {\n $$event.preventDefault();\n if (saveDisabled(state)) {\n return $$Notification.error(tr(undefined, undefined, \"missing_info\"), tr(undefined, undefined, \"topic_body_present\"));\n }\n Curry._1(send, /* BeginSaving */0);\n var targetId = OptionUtils.flatMap(TopicsShow__LinkedTarget.id, target);\n var topicCategoryId = OptionUtils.flatMap((function (tc) {\n return TopicCategory.id(tc);\n }), topicCategory);\n Curry._3($$fetch, undefined, undefined, {\n title: state.title,\n body: state.body,\n communityId: communityId,\n targetId: targetId,\n topicCategoryId: topicCategoryId\n }).then(function (response) {\n var topicId = response.createTopic.topicId;\n if (topicId !== undefined) {\n $$Notification.success(tr(undefined, undefined, \"done\"), tr(undefined, undefined, \"redirecting\"));\n redirectToNewTopic(topicId, state.title);\n } else {\n Curry._1(send, /* FailSaving */1);\n }\n return Promise.resolve(undefined);\n }).catch(function (error) {\n console.log(error);\n $$Notification.error(ts(undefined, undefined, \"notifications.unexpected_error\"), tr(undefined, undefined, \"please_reload\"));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction suggestions(state) {\n var suggestions$1 = state.similar.suggestions;\n if (ArrayUtils.isNotEmpty(suggestions$1)) {\n return React.createElement(\"div\", {\n className: \"pt-3\"\n }, React.createElement(\"span\", {\n className: \"tracking-wide text-gray-900 text-xs font-semibold\"\n }, tr(undefined, undefined, \"similar_topics\")), state.searching ? React.createElement(\"span\", {\n className: \"ml-2\"\n }, React.createElement(FaIcon.make, {\n classes: \"fa fa-spinner fa-pulse\"\n })) : null, suggestions$1.map(function (suggestion) {\n var askedOn = DateFns.formatPreset(CommunitiesNewTopic__TopicSuggestion.createdAt(suggestion), true, true, undefined, undefined);\n var n = CommunitiesNewTopic__TopicSuggestion.repliesCount(suggestion);\n var match = n !== 0 ? (\n n !== 1 ? [\n String(n) + tr(undefined, undefined, \"count_replies_label\"),\n \"bg-green-500 text-white\"\n ] : [\n tr(undefined, undefined, \"one_reply\"),\n \"bg-green-500 text-white\"\n ]\n ) : [\n tr(undefined, undefined, \"no_replies\"),\n \"bg-gray-300 text-gray-600\"\n ];\n return React.createElement(\"a\", {\n key: CommunitiesNewTopic__TopicSuggestion.id(suggestion),\n className: \"flex w-full items-center justify-between mt-1 p-3 rounded cursor-pointer border bg-gray-50 hover:text-primary-500 hover:bg-gray-50\",\n href: \"/topics/\" + (CommunitiesNewTopic__TopicSuggestion.id(suggestion) + (\"/\" + StringUtils.parameterize(CommunitiesNewTopic__TopicSuggestion.title(suggestion)))),\n target: \"_blank\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col min-w-0\"\n }, React.createElement(\"h5\", {\n className: \"font-semibold text-sm leading-snug md:text-base pr-1 truncate flex-1\",\n title: CommunitiesNewTopic__TopicSuggestion.title(suggestion)\n }, CommunitiesNewTopic__TopicSuggestion.title(suggestion)), React.createElement(\"p\", {\n className: \"text-xs mt-1 leading-tight text-gray-800\"\n }, tr(undefined, undefined, \"asked_on\") + askedOn)), React.createElement(\"div\", {\n className: \"text-xs px-1 py-px ml-2 rounded font-semibold shrink-0 \" + match[1]\n }, match[0]));\n }));\n } else {\n return null;\n }\n}\n\nfunction searchingIndicator(state) {\n if (ArrayUtils.isEmpty(state.similar.suggestions) && state.searching) {\n return React.createElement(\"div\", {\n className: \"md:flex-1 pl-1 pb-3 md:p-0\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-pulse\"\n }));\n } else {\n return null;\n }\n}\n\nfunction handleSelectTopicCategory(send, topicCategories, $$event) {\n var target = $$event.target;\n var selectedCategoryId = target.value;\n var selectedCategory = selectedCategoryId === \"not_selected\" ? undefined : ArrayUtils.unsafeFind((function (category) {\n return TopicCategory.id(category) === selectedCategoryId;\n }), tr(undefined, undefined, \"no_category_found\") + selectedCategoryId, topicCategories);\n return Curry._1(send, {\n TAG: /* SelectCategory */3,\n _0: selectedCategory\n });\n}\n\nfunction CommunitiesNewTopic__Root(Props) {\n var communityId = Props.communityId;\n var target = Props.target;\n var topicCategories = Props.topicCategories;\n var match = React.useReducer(reducer, initialState);\n var send = match[1];\n var state = match[0];\n var category = state.selectedCategory;\n var __x = topicCategories.map(function (category) {\n return React.createElement(\"option\", {\n key: TopicCategory.id(category),\n value: TopicCategory.id(category)\n }, TopicCategory.name(category));\n });\n var partial_arg = state.selectedCategory;\n return React.createElement(DisablingCover.make, {\n disabled: state.saving,\n children: React.createElement(\"div\", {\n className: \"bg-gray-50\"\n }, React.createElement(\"div\", {\n className: \"flex-1 flex flex-col\"\n }, React.createElement(\"div\", {\n className: \"px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl w-full mx-auto mt-5 pb-2\"\n }, React.createElement(\"a\", {\n className: \"btn btn-subtle\",\n onClick: (function (param) {\n return DomUtils.goBack(undefined);\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-arrow-left\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, tr(undefined, undefined, \"back\"))))), target !== undefined ? React.createElement(\"div\", {\n className: \"max-w-3xl w-full mt-5 mx-auto px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"flex py-4 px-4 md:px-5 w-full bg-white border border-primary-500 shadow-md rounded-lg justify-between items-center mb-2\"\n }, React.createElement(\"p\", {\n className: \"w-3/5 md:w-4/5 text-sm\"\n }, React.createElement(\"span\", {\n className: \"font-semibold block text-xs\"\n }, tr(undefined, undefined, \"linked_target\")), React.createElement(\"span\", undefined, TopicsShow__LinkedTarget.title(target))), React.createElement(\"a\", {\n className: \"btn btn-default\",\n href: \"./new_topic\"\n }, tr(undefined, undefined, \"clear\")))) : null, React.createElement(\"h4\", {\n className: \"max-w-3xl w-full mx-auto pb-2 mt-2 px-3 lg:px-0\"\n }, tr(undefined, undefined, \"create_topic_discussion\")), React.createElement(\"div\", {\n className: \"md:px-3\"\n }, React.createElement(\"div\", {\n className: \"mb-8 max-w-3xl w-full mx-auto relative border-t border-b md:border-0 bg-white md:shadow md:rounded-lg\"\n }, React.createElement(\"div\", {\n className: \"flex w-full flex-col p-3 md:p-6\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"div\", {\n className: \"flex-1 mr-2\"\n }, React.createElement(\"label\", {\n className: \"inline-block tracking-wide text-gray-900 text-xs font-semibold mb-2\",\n htmlFor: \"title\"\n }, tr(undefined, undefined, \"title\")), React.createElement(\"input\", {\n className: \"appearance-none block w-full bg-white text-gray-900 font-semibold border border-gray-300 rounded py-3 px-4 mb-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\",\n id: \"title\",\n tabIndex: 1,\n placeholder: tr(undefined, undefined, \"title_placeholder\"),\n value: state.title,\n onChange: (function ($$event) {\n var newTitle = $$event.target.value;\n return updateTitleAndSearch(state, send, communityId, newTitle);\n })\n })), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"w-1/4\"\n }, React.createElement(\"label\", {\n className: \"inline-block tracking-wide text-gray-900 text-xs font-semibold mb-2\",\n htmlFor: \"topic_category\"\n }, tr(undefined, undefined, \"select_category\")), React.createElement(\"select\", {\n className: \"appearance-none block w-full bg-white text-gray-900 font-semibold border border-gray-300 rounded py-3 px-4 mb-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\",\n id: \"topic_category\",\n value: category !== undefined ? TopicCategory.id(category) : \"\",\n onChange: (function (param) {\n return handleSelectTopicCategory(send, topicCategories, param);\n })\n }, [React.createElement(\"option\", {\n key: \"not_selected\",\n value: \"not_selected\"\n }, tr(undefined, undefined, \"not_selected\"))].concat(__x))), ArrayUtils.isEmpty(topicCategories)), React.createElement(\"div\", undefined)), React.createElement(\"label\", {\n className: \"inline-block tracking-wide text-gray-900 text-xs font-semibold mb-2\",\n htmlFor: \"body\"\n }, tr(undefined, undefined, \"body\")), React.createElement(\"div\", {\n className: \"w-full flex flex-col\"\n }, React.createElement(MarkdownEditor.make, {\n value: state.body,\n onChange: (function (markdown) {\n return Curry._1(send, {\n TAG: /* UpdateBody */2,\n _0: markdown\n });\n }),\n profile: /* Permissive */0,\n textareaId: \"body\",\n maxLength: 10000,\n placeholder: tr(undefined, undefined, \"be_descriptive\"),\n tabIndex: 2\n }), React.createElement(\"div\", undefined, suggestions(state), React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row justify-end mt-3 items-center md:items-start\"\n }, searchingIndicator(state), React.createElement(\"button\", {\n className: \"btn btn-primary border border-transparent w-full md:w-auto\",\n tabIndex: 3,\n disabled: saveDisabled(state),\n onClick: (function (param) {\n return handleCreateTopic(state, send, communityId, target, partial_arg, param);\n })\n }, tr(undefined, undefined, \"create_topic\"))))))))))\n });\n}\n\nvar make$1 = CommunitiesNewTopic__Root;\n\nexport {\n str ,\n tr ,\n ts ,\n initialState ,\n reducer ,\n SimilarTopicsQuery ,\n searchForSimilarTopics ,\n isInvalidString ,\n updateTitleAndSearch ,\n CreateTopicQuery ,\n redirectToNewTopic ,\n saveDisabled ,\n handleCreateTopic ,\n suggestions ,\n searchingIndicator ,\n handleSelectTopicCategory ,\n make$1 as make,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as TopicCategory from \"../shared/types/TopicCategory.bs.js\";\nimport * as TopicsShow__LinkedTarget from \"../topics/types/TopicsShow__LinkedTarget.bs.js\";\nimport * as CommunitiesNewTopic__Root from \"../communities/CommunitiesNewTopic__Root.bs.js\";\n\nfunction decodeProps(json) {\n return {\n communityId: Json_decode.field(\"communityId\", Json_decode.string, json),\n target: Json_decode.optional((function (param) {\n return Json_decode.field(\"target\", TopicsShow__LinkedTarget.decode, param);\n }), json),\n topicCategories: Json_decode.field(\"topicCategories\", (function (param) {\n return Json_decode.array(TopicCategory.decode, param);\n }), json)\n };\n}\n\nPsj.match(undefined, \"communities#new_topic\", (function (param) {\n var props = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(CommunitiesNewTopic__Root.make, {\n communityId: props.communityId,\n target: props.target,\n topicCategories: props.topicCategories\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__278ebfcf__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n number: Json_decode.field(\"number\", Json_decode.$$int, json),\n unlockAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"unlockAt\", DateFns.decodeISO, param);\n }), json)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction number(t) {\n return t.number;\n}\n\nfunction unlockAt(t) {\n return t.unlockAt;\n}\n\nfunction isUnlocked(t) {\n var date = t.unlockAt;\n if (date !== undefined) {\n return DateFns.isPast(Caml_option.valFromOption(date));\n } else {\n return true;\n }\n}\n\nfunction isLocked(t) {\n return !isUnlocked(t);\n}\n\nfunction sort(levels) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.number - y.number | 0;\n }), levels);\n}\n\nfunction first(levels) {\n return ArrayUtils.unsafeFind((function (level) {\n return level.number === 1;\n }), \"Unable to find level one at CoursesCurriculum__Level\", levels);\n}\n\nfunction unlockDateString(t) {\n var unlockAt = t.unlockAt;\n if (unlockAt !== undefined) {\n return DateFns.format(Caml_option.valFromOption(unlockAt), \"MMM d\");\n } else {\n Rollbar.error(\"unlockDateString was called for a CoursesCurriculum__Level without unlockAt\");\n return \"\";\n }\n}\n\nfunction findByLevelNumber(levels, levelNumber) {\n return Caml_option.undefined_to_opt(levels.find(function (l) {\n return l.number === levelNumber;\n }));\n}\n\nfunction next(levels, t) {\n return findByLevelNumber(levels, t.number + 1 | 0);\n}\n\nfunction previous(levels, t) {\n var previousLevelNumber = t.number - 1 | 0;\n if (previousLevelNumber === 0) {\n return ;\n } else {\n return findByLevelNumber(levels, previousLevelNumber);\n }\n}\n\nexport {\n decode ,\n id ,\n name ,\n number ,\n unlockAt ,\n isUnlocked ,\n isLocked ,\n sort ,\n first ,\n unlockDateString ,\n findByLevelNumber ,\n next ,\n previous ,\n \n}\n/* DateFns Not a pure module */\n","export default \"__VITE_ASSET__874bd939__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar UnexpectedProgressionBehavior = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__Course.UnexpectedProgressionBehavior\");\n\nfunction ended(t) {\n return t.ended;\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction certificateSerialNumber(t) {\n return t.certificateSerialNumber;\n}\n\nfunction progressionBehavior(t) {\n var progressionLimit = t.progressionBehavior;\n if (typeof progressionLimit === \"number\") {\n if (progressionLimit !== 0) {\n return \"Strict\";\n } else {\n return \"Unlimited\";\n }\n } else {\n return {\n NAME: \"Limited\",\n VAL: progressionLimit._0\n };\n }\n}\n\nfunction decode(json) {\n var behavior = Json_decode.field(\"progressionBehavior\", Json_decode.string, json);\n var progressionBehavior;\n switch (behavior) {\n case \"Limited\" :\n var progressionLimit = Json_decode.field(\"progressionLimit\", Json_decode.$$int, json);\n progressionBehavior = /* Limited */{\n _0: progressionLimit\n };\n break;\n case \"Strict\" :\n progressionBehavior = /* Strict */1;\n break;\n case \"Unlimited\" :\n progressionBehavior = /* Unlimited */0;\n break;\n default:\n Rollbar.error(\"Unexpected progressionBehavior: \" + behavior);\n throw {\n RE_EXN_ID: UnexpectedProgressionBehavior,\n _1: behavior,\n Error: new Error()\n };\n }\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n ended: Json_decode.field(\"ended\", Json_decode.bool, json),\n certificateSerialNumber: Json_decode.optional((function (param) {\n return Json_decode.field(\"certificateSerialNumber\", Json_decode.string, param);\n }), json),\n progressionBehavior: progressionBehavior\n };\n}\n\nexport {\n UnexpectedProgressionBehavior ,\n ended ,\n id ,\n certificateSerialNumber ,\n progressionBehavior ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar CannotParseUnknownRole = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__Target.CannotParseUnknownRole\");\n\nfunction decode(json) {\n var unknownRole = Json_decode.field(\"role\", Json_decode.string, json);\n var tmp;\n switch (unknownRole) {\n case \"student\" :\n tmp = /* Student */0;\n break;\n case \"team\" :\n tmp = /* Team */1;\n break;\n default:\n throw {\n RE_EXN_ID: CannotParseUnknownRole,\n _1: unknownRole,\n Error: new Error()\n };\n }\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n role: tmp,\n title: Json_decode.field(\"title\", Json_decode.string, json),\n targetGroupId: Json_decode.field(\"targetGroupId\", Json_decode.string, json),\n sortIndex: Json_decode.field(\"sortIndex\", Json_decode.$$int, json),\n resubmittable: Json_decode.field(\"resubmittable\", Json_decode.bool, json),\n prerequisiteTargetIds: Json_decode.field(\"prerequisiteTargetIds\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n reviewed: Json_decode.field(\"reviewed\", Json_decode.bool, json)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction role(t) {\n return t.role;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction sortIndex(t) {\n return t.sortIndex;\n}\n\nfunction targetGroupId(t) {\n return t.targetGroupId;\n}\n\nfunction prerequisiteTargetIds(t) {\n return t.prerequisiteTargetIds;\n}\n\nfunction resubmittable(t) {\n return t.resubmittable;\n}\n\nfunction reviewed(t) {\n return t.reviewed;\n}\n\nexport {\n CannotParseUnknownRole ,\n decode ,\n id ,\n role ,\n title ,\n sortIndex ,\n targetGroupId ,\n prerequisiteTargetIds ,\n resubmittable ,\n reviewed ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Json_encode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction result(t) {\n return t.result;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction fileName(file) {\n return file.name;\n}\n\nfunction fileUrl(file) {\n return file.url;\n}\n\nfunction make(title, result, status) {\n return {\n title: title,\n result: result,\n status: status\n };\n}\n\nfunction makeFile(name, url, id) {\n return {\n id: id,\n name: name,\n url: url\n };\n}\n\nfunction makeFiles(data) {\n return data.map(function (a) {\n return {\n id: a.id,\n name: a.title,\n url: a.url\n };\n });\n}\n\nfunction findAudioFile(files, id) {\n return ArrayUtils.unsafeFind((function (file) {\n return file.id === id;\n }), \"Unable to find file with ID: \" + id, files);\n}\n\nfunction findFiles(files, ids) {\n return files.filter(function (file) {\n return ids.includes(file.id);\n });\n}\n\nfunction makeResult(json, kind, files) {\n switch (kind) {\n case \"audio\" :\n return {\n TAG: /* AudioRecord */5,\n _0: findAudioFile(files, Json_decode.field(\"result\", Json_decode.string, json))\n };\n case \"files\" :\n return {\n TAG: /* Files */3,\n _0: findFiles(files, Json_decode.field(\"result\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json))\n };\n case \"link\" :\n return {\n TAG: /* Link */2,\n _0: Json_decode.field(\"result\", Json_decode.string, json)\n };\n case \"longText\" :\n return {\n TAG: /* LongText */1,\n _0: Json_decode.field(\"result\", Json_decode.string, json)\n };\n case \"multiChoice\" :\n return {\n TAG: /* MultiChoice */4,\n _0: Json_decode.field(\"result\", Json_decode.string, json)\n };\n case \"shortText\" :\n return {\n TAG: /* ShortText */0,\n _0: Json_decode.field(\"result\", Json_decode.string, json)\n };\n default:\n Rollbar.error(\"Unkown kind: \" + (kind + \"recived in CurriculumEditor__TargetChecklistItem\"));\n return {\n TAG: /* ShortText */0,\n _0: \"Error\"\n };\n }\n}\n\nfunction makeStatus(data) {\n switch (data) {\n case \"failed\" :\n return /* Failed */1;\n case \"noAnswer\" :\n return /* NoAnswer */2;\n case \"passed\" :\n return /* Passed */0;\n default:\n Rollbar.error(\"Unkown status:\" + (data + \"recived in CourseReview__SubmissionChecklist\"));\n return /* NoAnswer */2;\n }\n}\n\nfunction decodeFile(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n url: Json_decode.field(\"url\", Json_decode.string, json)\n };\n}\n\nfunction decode(files, json) {\n return {\n title: Json_decode.field(\"title\", Json_decode.string, json),\n result: makeResult(json, Json_decode.field(\"kind\", Json_decode.string, json), files),\n status: makeStatus(Json_decode.field(\"status\", Json_decode.string, json))\n };\n}\n\nfunction updateStatus(checklist, index, status) {\n return $$Array.mapi((function (i, t) {\n if (i === index) {\n return {\n title: t.title,\n result: t.result,\n status: status\n };\n } else {\n return t;\n }\n }), checklist);\n}\n\nfunction makeNoAnswer(index, checklist) {\n return updateStatus(checklist, index, /* NoAnswer */2);\n}\n\nfunction makeFailed(index, checklist) {\n return updateStatus(checklist, index, /* Failed */1);\n}\n\nfunction makePassed(index, checklist) {\n return updateStatus(checklist, index, /* Passed */0);\n}\n\nfunction encodeKind(t) {\n var match = t.result;\n switch (match.TAG | 0) {\n case /* ShortText */0 :\n return \"shortText\";\n case /* LongText */1 :\n return \"longText\";\n case /* Link */2 :\n return \"link\";\n case /* Files */3 :\n return \"files\";\n case /* MultiChoice */4 :\n return \"multiChoice\";\n case /* AudioRecord */5 :\n return \"audio\";\n \n }\n}\n\nfunction encodeResult(t) {\n var file = t.result;\n switch (file.TAG | 0) {\n case /* Files */3 :\n return file._0.map(function (file) {\n return file.id;\n });\n case /* AudioRecord */5 :\n return file._0.id;\n default:\n return file._0;\n }\n}\n\nfunction encodeStatus(t) {\n var match = t.status;\n switch (match) {\n case /* Passed */0 :\n return \"passed\";\n case /* Failed */1 :\n return \"failed\";\n case /* NoAnswer */2 :\n return \"noAnswer\";\n \n }\n}\n\nfunction encode(t) {\n return Json_encode.object_({\n hd: [\n \"title\",\n t.title\n ],\n tl: {\n hd: [\n \"kind\",\n encodeKind(t)\n ],\n tl: {\n hd: [\n \"status\",\n encodeStatus(t)\n ],\n tl: {\n hd: [\n \"result\",\n encodeResult(t)\n ],\n tl: /* [] */0\n }\n }\n }\n });\n}\n\nfunction encodeArray(checklist) {\n return Json_encode.array(encode, checklist);\n}\n\nexport {\n title ,\n result ,\n status ,\n fileName ,\n fileUrl ,\n make ,\n makeFile ,\n makeFiles ,\n findAudioFile ,\n findFiles ,\n makeResult ,\n makeStatus ,\n decodeFile ,\n decode ,\n updateStatus ,\n makeNoAnswer ,\n makeFailed ,\n makePassed ,\n encodeKind ,\n encodeResult ,\n encodeStatus ,\n encode ,\n encodeArray ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as SubmissionChecklistItem from \"../../review/types/SubmissionChecklistItem.bs.js\";\n\nvar UnexpectedStatusValue = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__Submission.UnexpectedStatusValue\");\n\nfunction id(t) {\n return t.id;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction checklist(t) {\n return t.checklist;\n}\n\nfunction pending(t) {\n var match = t.status;\n return match === 1;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction sort(ts) {\n return ArrayUtils.copyAndSort((function (t1, t2) {\n return DateFns.differenceInSeconds(t2.createdAt, t1.createdAt);\n }), ts);\n}\n\nfunction decode(json) {\n var unknownValue = Json_decode.field(\"status\", Json_decode.string, json);\n var tmp;\n switch (unknownValue) {\n case \"failed\" :\n tmp = /* Rejected */3;\n break;\n case \"marked_as_complete\" :\n tmp = /* MarkedAsComplete */0;\n break;\n case \"passed\" :\n tmp = /* Completed */2;\n break;\n case \"pending\" :\n tmp = /* Pending */1;\n break;\n default:\n throw {\n RE_EXN_ID: UnexpectedStatusValue,\n _1: unknownValue,\n Error: new Error()\n };\n }\n var partial_arg = Json_decode.field(\"files\", (function (param) {\n return Json_decode.array(SubmissionChecklistItem.decodeFile, param);\n }), json);\n var partial_arg$1 = function (param) {\n return SubmissionChecklistItem.decode(partial_arg, param);\n };\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n createdAt: Json_decode.field(\"createdAt\", DateFns.decodeISO, json),\n status: tmp,\n checklist: Json_decode.field(\"checklist\", (function (param) {\n return Json_decode.array(partial_arg$1, param);\n }), json)\n };\n}\n\nfunction make(id, createdAt, status, checklist) {\n return {\n id: id,\n createdAt: createdAt,\n status: status,\n checklist: checklist\n };\n}\n\nexport {\n UnexpectedStatusValue ,\n id ,\n createdAt ,\n status ,\n checklist ,\n pending ,\n createdAtPretty ,\n sort ,\n decode ,\n make ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decodeAnswerOption(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n value: Json_decode.field(\"value\", Json_decode.string, json)\n };\n}\n\nfunction decode(json) {\n return {\n index: Json_decode.field(\"index\", Json_decode.$$int, json),\n question: Json_decode.field(\"question\", Json_decode.string, json),\n answerOptions: Json_decode.field(\"answerOptions\", (function (param) {\n return Json_decode.array(decodeAnswerOption, param);\n }), json)\n };\n}\n\nfunction index(t) {\n return t.index;\n}\n\nfunction question(t) {\n return t.question;\n}\n\nfunction answerOptions(t) {\n return t.answerOptions;\n}\n\nfunction answerId(answerOption) {\n return answerOption.id;\n}\n\nfunction answerValue(answerOption) {\n return answerOption.value;\n}\n\nfunction lastQuestion(questions) {\n var maxIndex = ArrayUtils.last(ArrayUtils.copyAndSort((function (q1, q2) {\n return q1.index - q2.index | 0;\n }), questions)).index;\n return ArrayUtils.unsafeFind((function (q) {\n return q.index === maxIndex;\n }), \"Could not find last question at index \" + String(maxIndex), questions);\n}\n\nfunction nextQuestion(questions, question) {\n return ArrayUtils.unsafeFind((function (q) {\n return q.index === (question.index + 1 | 0);\n }), \"Could not find a question at index \" + String(question.index + 1 | 0), questions);\n}\n\nfunction isLastQuestion(questions, question) {\n return Caml_obj.caml_equal(lastQuestion(questions), question);\n}\n\nexport {\n decodeAnswerOption ,\n decode ,\n index ,\n question ,\n answerOptions ,\n answerId ,\n answerValue ,\n lastQuestion ,\n nextQuestion ,\n isLastQuestion ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\n\nfunction decode(json) {\n return {\n submissionId: Json_decode.field(\"submissionId\", Json_decode.string, json),\n evaluationCriterionId: Json_decode.field(\"evaluationCriterionId\", Json_decode.string, json),\n grade: Json_decode.field(\"grade\", Json_decode.$$int, json)\n };\n}\n\nfunction sort(criteria, grades) {\n return ArrayUtils.copyAndSort((function (g1, g2) {\n var ec1 = ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === g1.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with ID: \" + (g1.evaluationCriterionId + \" in CoursesCurriculum__Grade\"), criteria);\n var ec2 = ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === g2.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with ID: \" + (g2.evaluationCriterionId + \" in CoursesCurriculum__Grade\"), criteria);\n return $$String.compare(EvaluationCriterion.name(ec1), EvaluationCriterion.name(ec2));\n }), grades);\n}\n\nfunction grade(t) {\n return t.grade;\n}\n\nfunction submissionId(t) {\n return t.submissionId;\n}\n\nfunction evaluationCriterionId(t) {\n return t.evaluationCriterionId;\n}\n\nexport {\n decode ,\n sort ,\n grade ,\n submissionId ,\n evaluationCriterionId ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction coachId(t) {\n return t.coachId;\n}\n\nfunction submissionId(t) {\n return t.submissionId;\n}\n\nfunction feedback(t) {\n return t.feedback;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n coachId: Json_decode.field(\"coachId\", (function (param) {\n return Json_decode.optional(Json_decode.string, param);\n }), json),\n submissionId: Json_decode.field(\"submissionId\", Json_decode.string, json),\n feedback: Json_decode.field(\"feedback\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n coachId ,\n submissionId ,\n feedback ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decodeQuestion(json) {\n return {\n topicId: Json_decode.field(\"id\", Json_decode.string, json),\n topicTitle: Json_decode.field(\"title\", Json_decode.string, json)\n };\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n topics: Json_decode.field(\"topics\", (function (param) {\n return Json_decode.array(decodeQuestion, param);\n }), json)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction topics(t) {\n return t.topics;\n}\n\nfunction topicId(topic) {\n return topic.topicId;\n}\n\nfunction topicTitle(question) {\n return question.topicTitle;\n}\n\nexport {\n decodeQuestion ,\n decode ,\n id ,\n name ,\n topics ,\n topicId ,\n topicTitle ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as ContentBlock from \"../../../shared/types/ContentBlock.bs.js\";\nimport * as TargetChecklistItem from \"../../../schools/courses/types/curriculum_editor/TargetChecklistItem.bs.js\";\nimport * as CoursesCurriculum__Grade from \"./CoursesCurriculum__Grade.bs.js\";\nimport * as CoursesCurriculum__Feedback from \"./CoursesCurriculum__Feedback.bs.js\";\nimport * as CoursesCurriculum__Community from \"./CoursesCurriculum__Community.bs.js\";\nimport * as CoursesCurriculum__Submission from \"./CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__QuizQuestion from \"./CoursesCurriculum__QuizQuestion.bs.js\";\n\nfunction submissions(t) {\n return t.submissions;\n}\n\nfunction pendingUserIds(t) {\n return t.pendingUserIds;\n}\n\nfunction feedback(t) {\n return t.feedback;\n}\n\nfunction navigation(t) {\n return [\n t.navigation.previous,\n t.navigation.next\n ];\n}\n\nfunction checklist(t) {\n return t.checklist;\n}\n\nfunction decodeNavigation(json) {\n return {\n previous: Json_decode.optional((function (param) {\n return Json_decode.field(\"previous\", Json_decode.string, param);\n }), json),\n next: Json_decode.optional((function (param) {\n return Json_decode.field(\"next\", Json_decode.string, param);\n }), json)\n };\n}\n\nfunction decode(json) {\n return {\n pendingUserIds: Json_decode.field(\"pendingUserIds\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n submissions: Json_decode.field(\"submissions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Submission.decode, param);\n }), json),\n feedback: Json_decode.field(\"feedback\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Feedback.decode, param);\n }), json),\n quizQuestions: Json_decode.field(\"quizQuestions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__QuizQuestion.decode, param);\n }), json),\n contentBlocks: Json_decode.field(\"contentBlocks\", (function (param) {\n return Json_decode.array(ContentBlock.decode, param);\n }), json),\n communities: Json_decode.field(\"communities\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Community.decode, param);\n }), json),\n linkToComplete: Caml_option.null_to_opt(Json_decode.field(\"linkToComplete\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n evaluated: Json_decode.field(\"evaluated\", Json_decode.bool, json),\n grading: Json_decode.field(\"grading\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Grade.decode, param);\n }), json),\n completionInstructions: Caml_option.null_to_opt(Json_decode.field(\"completionInstructions\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n navigation: Json_decode.field(\"navigation\", decodeNavigation, json),\n checklist: Json_decode.field(\"checklist\", (function (param) {\n return Json_decode.array(TargetChecklistItem.decode, param);\n }), json)\n };\n}\n\nfunction computeCompletionType(targetDetails) {\n var evaluated = targetDetails.evaluated;\n var hasQuiz = targetDetails.quizQuestions.length > 0;\n var match = targetDetails.linkToComplete;\n var hasLinkToComplete = match !== undefined;\n if (evaluated) {\n return /* Evaluated */0;\n } else if (hasQuiz) {\n return /* TakeQuiz */1;\n } else if (hasLinkToComplete) {\n return /* LinkToComplete */2;\n } else {\n return /* MarkAsComplete */3;\n }\n}\n\nfunction contentBlocks(t) {\n return t.contentBlocks;\n}\n\nfunction quizQuestions(t) {\n return t.quizQuestions;\n}\n\nfunction communities(t) {\n return t.communities;\n}\n\nfunction linkToComplete(t) {\n return t.linkToComplete;\n}\n\nfunction completionInstructions(t) {\n return t.completionInstructions;\n}\n\nfunction grades(submissionId, t) {\n return t.grading.filter(function (grade) {\n return CoursesCurriculum__Grade.submissionId(grade) === submissionId;\n });\n}\n\nfunction addSubmission(submission, t) {\n return {\n pendingUserIds: t.pendingUserIds,\n submissions: t.submissions.concat([submission]),\n feedback: t.feedback,\n quizQuestions: t.quizQuestions,\n contentBlocks: t.contentBlocks,\n communities: t.communities,\n linkToComplete: t.linkToComplete,\n evaluated: t.evaluated,\n grading: t.grading,\n completionInstructions: t.completionInstructions,\n navigation: t.navigation,\n checklist: t.checklist\n };\n}\n\nfunction clearPendingUserIds(t) {\n return {\n pendingUserIds: [],\n submissions: t.submissions,\n feedback: t.feedback,\n quizQuestions: t.quizQuestions,\n contentBlocks: t.contentBlocks,\n communities: t.communities,\n linkToComplete: t.linkToComplete,\n evaluated: t.evaluated,\n grading: t.grading,\n completionInstructions: t.completionInstructions,\n navigation: t.navigation,\n checklist: t.checklist\n };\n}\n\nexport {\n submissions ,\n pendingUserIds ,\n feedback ,\n navigation ,\n checklist ,\n decodeNavigation ,\n decode ,\n computeCompletionType ,\n contentBlocks ,\n quizQuestions ,\n communities ,\n linkToComplete ,\n completionInstructions ,\n grades ,\n addSubmission ,\n clearPendingUserIds ,\n \n}\n/* ContentBlock Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar UnexpectedEligibilityString = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__LevelUpEligibility.UnexpectedEligibilityString\");\n\nfunction decode(json) {\n var stringValue = Json_decode.string(json);\n switch (stringValue) {\n case \"AtMaxLevel\" :\n return /* AtMaxLevel */1;\n case \"CurrentLevelIncomplete\" :\n return /* CurrentLevelIncomplete */3;\n case \"DateLocked\" :\n return /* DateLocked */6;\n case \"Eligible\" :\n return /* Eligible */0;\n case \"NoMilestonesInLevel\" :\n return /* NoMilestonesInLevel */2;\n case \"PreviousLevelIncomplete\" :\n return /* PreviousLevelIncomplete */4;\n case \"TeamMembersPending\" :\n return /* TeamMembersPending */5;\n default:\n Rollbar.error(\"Unexpected eligibility encountered: \" + stringValue);\n throw {\n RE_EXN_ID: UnexpectedEligibilityString,\n _1: stringValue,\n Error: new Error()\n };\n }\n}\n\nfunction isEligible(t) {\n return t === 0;\n}\n\nfunction makeOptionFromJs(js) {\n return Belt_Option.map(js, (function (eligibility) {\n if (typeof eligibility !== \"object\") {\n if (eligibility === \"DateLocked\") {\n return /* DateLocked */6;\n } else if (eligibility === \"TeamMembersPending\") {\n return /* TeamMembersPending */5;\n } else if (eligibility === \"Eligible\") {\n return /* Eligible */0;\n } else if (eligibility === \"PreviousLevelIncomplete\") {\n return /* PreviousLevelIncomplete */4;\n } else if (eligibility === \"NoMilestonesInLevel\") {\n return /* NoMilestonesInLevel */2;\n } else if (eligibility === \"CurrentLevelIncomplete\") {\n return /* CurrentLevelIncomplete */3;\n } else {\n return /* AtMaxLevel */1;\n }\n }\n var string = eligibility.VAL;\n Rollbar.error(\"Unexpected eligibility encountered: \" + string);\n throw {\n RE_EXN_ID: UnexpectedEligibilityString,\n _1: string,\n Error: new Error()\n };\n }));\n}\n\nexport {\n UnexpectedEligibilityString ,\n decode ,\n isEligible ,\n makeOptionFromJs ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as SubmissionChecklistItem from \"../../review/types/SubmissionChecklistItem.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__QuizQuestion from \"../types/CoursesCurriculum__QuizQuestion.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport * as CoursesCurriculum__LevelUpEligibility from \"../types/CoursesCurriculum__LevelUpEligibility.bs.js\";\n\nimport \"./CoursesCurriculum__Quiz.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__Quiz\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreateQuizSubmissionMutation($targetId: ID!, $answerIds: [ID!]!) {\\ncreateQuizSubmission(targetId: $targetId, answerIds: $answerIds) {\\nsubmission {\\nid \\ncreatedAt \\nchecklist \\n}\\n\\nlevelUpEligibility \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createQuizSubmission;\n var value$2 = value$1.submission;\n var value$3 = value$1.levelUpEligibility;\n var tmp;\n if (value$3 == null) {\n tmp = undefined;\n } else {\n var tmp$1;\n switch (value$3) {\n case \"AtMaxLevel\" :\n tmp$1 = \"AtMaxLevel\";\n break;\n case \"CurrentLevelIncomplete\" :\n tmp$1 = \"CurrentLevelIncomplete\";\n break;\n case \"DateLocked\" :\n tmp$1 = \"DateLocked\";\n break;\n case \"Eligible\" :\n tmp$1 = \"Eligible\";\n break;\n case \"NoMilestonesInLevel\" :\n tmp$1 = \"NoMilestonesInLevel\";\n break;\n case \"PreviousLevelIncomplete\" :\n tmp$1 = \"PreviousLevelIncomplete\";\n break;\n case \"TeamMembersPending\" :\n tmp$1 = \"TeamMembersPending\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$3\n };\n }\n tmp = tmp$1;\n }\n return {\n createQuizSubmission: {\n submission: !(value$2 == null) ? ({\n id: value$2.id,\n createdAt: value$2.createdAt,\n checklist: value$2.checklist\n }) : undefined,\n levelUpEligibility: tmp\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createQuizSubmission;\n var value$2 = value$1.levelUpEligibility;\n var levelUpEligibility = value$2 !== undefined ? (\n typeof value$2 === \"object\" ? value$2.VAL : (\n value$2 === \"DateLocked\" ? \"DateLocked\" : (\n value$2 === \"TeamMembersPending\" ? \"TeamMembersPending\" : (\n value$2 === \"Eligible\" ? \"Eligible\" : (\n value$2 === \"PreviousLevelIncomplete\" ? \"PreviousLevelIncomplete\" : (\n value$2 === \"NoMilestonesInLevel\" ? \"NoMilestonesInLevel\" : (\n value$2 === \"CurrentLevelIncomplete\" ? \"CurrentLevelIncomplete\" : \"AtMaxLevel\"\n )\n )\n )\n )\n )\n )\n ) : null;\n var value$3 = value$1.submission;\n var submission;\n if (value$3 !== undefined) {\n var value$4 = value$3.checklist;\n var value$5 = value$3.createdAt;\n var value$6 = value$3.id;\n submission = {\n id: value$6,\n createdAt: value$5,\n checklist: value$4\n };\n } else {\n submission = null;\n }\n var createQuizSubmission = {\n submission: submission,\n levelUpEligibility: levelUpEligibility\n };\n return {\n createQuizSubmission: createQuizSubmission\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.answerIds;\n return {\n targetId: inp.targetId,\n answerIds: a.map(function (b) {\n return b;\n })\n };\n}\n\nfunction makeVariables(targetId, answerIds, param) {\n return {\n targetId: targetId,\n answerIds: answerIds\n };\n}\n\nvar CreateQuizSubmissionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar CreateQuizSubmissionQuery_Graphql_error = include.Graphql_error;\n\nvar CreateQuizSubmissionQuery_decodeNotification = include.decodeNotification;\n\nvar CreateQuizSubmissionQuery_decodeObject = include.decodeObject;\n\nvar CreateQuizSubmissionQuery_decodeNotifications = include.decodeNotifications;\n\nvar CreateQuizSubmissionQuery_decodeErrors = include.decodeErrors;\n\nvar CreateQuizSubmissionQuery_flashNotifications = include.flashNotifications;\n\nvar CreateQuizSubmissionQuery_sendQuery = include.sendQuery;\n\nvar CreateQuizSubmissionQuery_query = include.query;\n\nvar CreateQuizSubmissionQuery_fetch = include.$$fetch;\n\nvar CreateQuizSubmissionQuery = {\n CreateQuizSubmissionQuery_inner: CreateQuizSubmissionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateQuizSubmissionQuery_Graphql_error,\n decodeNotification: CreateQuizSubmissionQuery_decodeNotification,\n decodeObject: CreateQuizSubmissionQuery_decodeObject,\n decodeNotifications: CreateQuizSubmissionQuery_decodeNotifications,\n decodeErrors: CreateQuizSubmissionQuery_decodeErrors,\n flashNotifications: CreateQuizSubmissionQuery_flashNotifications,\n sendQuery: CreateQuizSubmissionQuery_sendQuery,\n query: CreateQuizSubmissionQuery_query,\n $$fetch: CreateQuizSubmissionQuery_fetch,\n make: make\n};\n\nfunction createQuizSubmission(target, selectedAnswersIds, setSaving, addSubmissionCB) {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Curry._3(make, undefined, undefined, {\n targetId: CoursesCurriculum__Target.id(target),\n answerIds: selectedAnswersIds\n }).then(function (response) {\n var submission = response.createQuizSubmission.submission;\n if (submission !== undefined) {\n var submission$1 = Caml_option.valFromOption(submission);\n var partial_arg = [];\n var checklist = Json_decode.array((function (param) {\n return SubmissionChecklistItem.decode(partial_arg, param);\n }), submission$1.checklist);\n var levelUpEligibility = CoursesCurriculum__LevelUpEligibility.makeOptionFromJs(response.createQuizSubmission.levelUpEligibility);\n Curry._2(addSubmissionCB, CoursesCurriculum__Submission.make(submission$1.id, DateFns.decodeISO(submission$1.createdAt), /* MarkedAsComplete */0, checklist), levelUpEligibility);\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction answerOptionClasses(answerOption, selectedAnswer) {\n var defaultClasses = \"quiz-root__answer bg-white flex items-center shadow border border-transparent rounded p-3 mt-3 cursor-pointer text-left \";\n if (selectedAnswer !== undefined && Caml_obj.caml_equal(Caml_option.valFromOption(selectedAnswer), answerOption)) {\n return \"quiz-root__answer bg-white flex items-center shadow border border-transparent rounded p-3 mt-3 cursor-pointer text-left bg-primary-100 border-primary-500 text-primary-500 shadow-md quiz-root__answer-selected \";\n } else {\n return defaultClasses;\n }\n}\n\nfunction iconClasses(answerOption, selectedAnswer) {\n if (selectedAnswer !== undefined && Caml_obj.caml_equal(Caml_option.valFromOption(selectedAnswer), answerOption)) {\n return \"quiz-root__answer-option-icon far fa-check-circle text-lg text-primary-500\";\n } else {\n return \"quiz-root__answer-option-icon far fa-check-circle text-lg text-gray-500\";\n }\n}\n\nfunction handleSubmit(answer, target, selectedAnswersIds, setSaving, addSubmissionCB, $$event) {\n $$event.preventDefault();\n var answerIds = [CoursesCurriculum__QuizQuestion.answerId(answer)].concat(selectedAnswersIds);\n return createQuizSubmission(target, answerIds, setSaving, addSubmissionCB);\n}\n\nfunction CoursesCurriculum__Quiz(Props) {\n var target = Props.target;\n var targetDetails = Props.targetDetails;\n var addSubmissionCB = Props.addSubmissionCB;\n var preview = Props.preview;\n var quizQuestions = CoursesCurriculum__TargetDetails.quizQuestions(targetDetails);\n var match = React.useState(function () {\n return false;\n });\n var setSaving = match[1];\n var match$1 = React.useState(function () {\n return Caml_array.get(quizQuestions, 0);\n });\n var setSelectedQuestion = match$1[1];\n var selectedQuestion = match$1[0];\n var match$2 = React.useState(function () {\n \n });\n var setSelectedAnswer = match$2[1];\n var selectedAnswer = match$2[0];\n var match$3 = React.useState(function () {\n return [];\n });\n var setSelectedAnswersIds = match$3[1];\n var selectedAnswersIds = match$3[0];\n var tmp;\n if (selectedAnswer !== undefined) {\n var tmp$1;\n if (CoursesCurriculum__QuizQuestion.isLastQuestion(quizQuestions, selectedQuestion)) {\n tmp$1 = React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: match[0] || preview,\n onClick: (function (param) {\n return handleSubmit(selectedAnswer, target, selectedAnswersIds, setSaving, addSubmissionCB, param);\n })\n }, tr(undefined, undefined, \"submit_quiz\"));\n } else {\n var nextQuestion = CoursesCurriculum__QuizQuestion.nextQuestion(quizQuestions, selectedQuestion);\n tmp$1 = React.createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: (function (param) {\n Curry._1(setSelectedQuestion, (function (param) {\n return nextQuestion;\n }));\n Curry._1(setSelectedAnswersIds, (function (param) {\n return [CoursesCurriculum__QuizQuestion.answerId(selectedAnswer)].concat(selectedAnswersIds);\n }));\n return Curry._1(setSelectedAnswer, (function (param) {\n \n }));\n })\n }, tr(undefined, undefined, \"next_question\"));\n }\n tmp = React.createElement(\"div\", {\n className: \"quiz-root__answer-submit-section flex justify-center rounded-b-lg text-center p-4 border-t border-gray-200 w-full\"\n }, tmp$1);\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n className: \"bg-gray-50 rounded overflow-hidden relative mb-18 mt-4\"\n }, React.createElement(\"div\", {\n className: \"p-2 md:p-5\"\n }, React.createElement(\"span\", {\n className: \"font-semibold text-xs block uppercase text-gray-600\"\n }, tr(undefined, undefined, \"question\") + \" #\", String(CoursesCurriculum__QuizQuestion.index(selectedQuestion) + 1 | 0)), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__QuizQuestion.question(selectedQuestion),\n className: \"text-lg md:text-xl\",\n profile: /* Permissive */0\n }), React.createElement(\"div\", {\n className: \"pt-2 flex flex-col\"\n }, CoursesCurriculum__QuizQuestion.answerOptions(selectedQuestion).map(function (answerOption) {\n return React.createElement(\"button\", {\n key: CoursesCurriculum__QuizQuestion.answerId(answerOption),\n className: answerOptionClasses(answerOption, selectedAnswer),\n onClick: (function (param) {\n return Curry._1(setSelectedAnswer, (function (param) {\n return answerOption;\n }));\n })\n }, React.createElement(FaIcon.make, {\n classes: iconClasses(answerOption, selectedAnswer)\n }), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__QuizQuestion.answerValue(answerOption),\n className: \"overflow-auto ml-2 w-full\",\n profile: /* Permissive */0\n }));\n }))), tmp);\n}\n\nvar make$1 = CoursesCurriculum__Quiz;\n\nexport {\n str ,\n tr ,\n CreateQuizSubmissionQuery ,\n createQuizSubmission ,\n answerOptionClasses ,\n iconClasses ,\n handleSubmit ,\n make$1 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction avatarUrl(t) {\n return t.avatarUrl;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n avatarUrl: Json_decode.optional((function (param) {\n return Json_decode.field(\"avatarUrl\", Json_decode.string, param);\n }), json),\n title: Caml_option.null_to_opt(Json_decode.field(\"title\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json))\n };\n}\n\nfunction avatar(t) {\n return Belt_Option.mapWithDefault(t.avatarUrl, React.createElement(Avatar.make, {\n name: t.name,\n className: \"w-full h-full\"\n }), (function (src) {\n return React.createElement(\"img\", {\n src: src\n });\n }));\n}\n\nexport {\n id ,\n name ,\n avatarUrl ,\n title ,\n decode ,\n avatar ,\n \n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as React from \"react\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as ContentBlock from \"../../../shared/types/ContentBlock.bs.js\";\nimport * as TargetContentView from \"../../../shared/components/TargetContentView.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\n\nimport \"./CoursesCurriculum__Learn.css\"\n;\n\nvar partial_arg = \"components.CoursesCurriculum__Learn\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction CoursesCurriculum__Learn(Props) {\n var targetDetails = Props.targetDetails;\n var author = Props.author;\n var courseId = Props.courseId;\n var targetId = Props.targetId;\n return React.createElement(\"div\", {\n id: \"learn-component\"\n }, ReactUtils.nullUnless(React.createElement(\"a\", {\n className: \"btn btn-primary-ghost btn-small course-curriculum__learn-edit-content-btn\",\n href: \"/school/courses/\" + courseId + \"/targets/\" + targetId + \"/content\"\n }, React.createElement(\"i\", {\n className: \"fas fa-pencil-alt\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"edit_target_button\"))), author), React.createElement(TargetContentView.make, {\n contentBlocks: ContentBlock.sort(CoursesCurriculum__TargetDetails.contentBlocks(targetDetails))\n }));\n}\n\nvar make = CoursesCurriculum__Learn;\n\nexport {\n t ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as CoursesCurriculum__Community from \"../types/CoursesCurriculum__Community.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__Discuss\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction linkToCommunity(communityId, targetId) {\n return \"/communities/\" + (communityId + (\"?target_id=\" + targetId));\n}\n\nfunction linkToNewPost(communityId, targetId) {\n return \"/communities/\" + (communityId + (\"/new_topic?target_id=\" + targetId));\n}\n\nfunction topicCard(topic) {\n var topicId = CoursesCurriculum__Community.topicId(topic);\n var topicLink = \"/topics/\" + topicId;\n return React.createElement(\"div\", {\n key: topicId,\n className: \"flex justify-between items-center px-5 py-4 bg-white border-t\",\n href: topicLink\n }, React.createElement(\"span\", {\n className: \"text-sm font-semibold\"\n }, CoursesCurriculum__Community.topicTitle(topic)), React.createElement(\"a\", {\n className: \"btn btn-primary-ghost btn-small\",\n href: topicLink\n }, \"View\"));\n}\n\nfunction handleEmpty(param) {\n return React.createElement(\"div\", {\n className: \"flex flex-col justify-center items-center bg-white px-3 py-10\"\n }, React.createElement(\"i\", {\n className: \"fa fa-comments text-5xl text-gray-600 mb-2 \"\n }), React.createElement(\"div\", {\n className: \"text-center\"\n }, React.createElement(\"h4\", {\n className: \"font-bold\"\n }, tr(undefined, undefined, \"no_discussion\")), React.createElement(\"p\", undefined, tr(undefined, undefined, \"use_community\"))));\n}\n\nfunction actionButtons(community, targetId) {\n var communityId = CoursesCurriculum__Community.id(community);\n var communityName = CoursesCurriculum__Community.name(community);\n return React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"a\", {\n className: \"btn btn-default mr-3\",\n title: \"Browse all topics about this target in the \" + (communityName + \" community\"),\n href: linkToCommunity(communityId, targetId)\n }, tr(undefined, undefined, \"go_to\")), React.createElement(\"a\", {\n className: \"btn btn-primary\",\n title: \"Create a topic in the \" + (communityName + \" community\"),\n href: linkToNewPost(communityId, targetId)\n }, tr(undefined, undefined, \"create\")));\n}\n\nfunction communityTitle(community) {\n return React.createElement(\"h5\", {\n className: \"font-bold\"\n }, tr(undefined, undefined, \"topics_pre\") + (CoursesCurriculum__Community.name(community) + tr(undefined, undefined, \"topics_post\")));\n}\n\nfunction CoursesCurriculum__Discuss(Props) {\n var targetId = Props.targetId;\n var communities = Props.communities;\n return React.createElement(\"div\", {\n className: \"\"\n }, communities.map(function (community) {\n var communityId = CoursesCurriculum__Community.id(community);\n var topics = CoursesCurriculum__Community.topics(community);\n return React.createElement(\"div\", {\n key: communityId,\n className: \"mt-12 bg-gray-50 px-6 py-4 rounded-lg\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row w-full justify-between pb-3 items-center\"\n }, React.createElement(\"div\", undefined, communityTitle(community)), actionButtons(community, targetId)), React.createElement(\"div\", {\n className: \"justify-between rounded-lg overflow-hidden shadow\"\n }, topics.length !== 0 ? $$Array.map(topicCard, topics) : handleEmpty(undefined)));\n }));\n}\n\nvar make = CoursesCurriculum__Discuss;\n\nexport {\n str ,\n tr ,\n linkToCommunity ,\n linkToNewPost ,\n topicCard ,\n handleEmpty ,\n actionButtons ,\n communityTitle ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n levelId: Json_decode.field(\"levelId\", Json_decode.string, json),\n endsAt: Belt_Option.map(Json_decode.optional((function (param) {\n return Json_decode.field(\"endsAt\", Json_decode.string, param);\n }), json), DateFns.parseISO)\n };\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction endsAt(t) {\n return t.endsAt;\n}\n\nfunction accessEnded(t) {\n return Belt_Option.mapWithDefault(t.endsAt, false, DateFns.isPast);\n}\n\nexport {\n decode ,\n levelId ,\n endsAt ,\n accessEnded ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n levelId: Json_decode.field(\"levelId\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n description: Json_decode.field(\"description\", Json_decode.string, json),\n sortIndex: Json_decode.field(\"sortIndex\", Json_decode.$$int, json),\n milestone: Json_decode.field(\"milestone\", Json_decode.bool, json)\n };\n}\n\nfunction sort(targetGroups) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.sortIndex - y.sortIndex | 0;\n }), targetGroups);\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction milestone(t) {\n return t.milestone;\n}\n\nfunction description(t) {\n return t.description;\n}\n\nexport {\n decode ,\n sort ,\n id ,\n name ,\n levelId ,\n milestone ,\n description ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n targetId: Json_decode.field(\"targetId\", Json_decode.string, json),\n passedAt: Belt_Option.map(Json_decode.optional((function (param) {\n return Json_decode.field(\"passedAt\", Json_decode.string, param);\n }), json), DateFns.parseISO),\n evaluatedAt: Belt_Option.map(Json_decode.optional((function (param) {\n return Json_decode.field(\"evaluatedAt\", Json_decode.string, param);\n }), json), DateFns.parseISO)\n };\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction hasPassed(t) {\n return t.passedAt !== undefined;\n}\n\nfunction hasBeenEvaluated(t) {\n return t.evaluatedAt !== undefined;\n}\n\nfunction make(pending, targetId) {\n return {\n targetId: targetId,\n passedAt: pending ? undefined : Caml_option.some(new Date()),\n evaluatedAt: undefined\n };\n}\n\nexport {\n decode ,\n targetId ,\n hasPassed ,\n hasBeenEvaluated ,\n make ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Array from \"../../../../../node_modules/rescript/lib/es6/belt_Array.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as CoursesCurriculum__Level from \"./CoursesCurriculum__Level.bs.js\";\nimport * as CoursesCurriculum__Course from \"./CoursesCurriculum__Course.bs.js\";\nimport * as CoursesCurriculum__Target from \"./CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Student from \"./CoursesCurriculum__Student.bs.js\";\nimport * as CoursesCurriculum__TargetGroup from \"./CoursesCurriculum__TargetGroup.bs.js\";\nimport * as CoursesCurriculum__LatestSubmission from \"./CoursesCurriculum__LatestSubmission.bs.js\";\n\nvar partial_arg = \"components.CoursesCurriculum__TargetStatus\";\n\nfunction tc(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction isPast(date) {\n return Belt_Option.mapWithDefault(date, false, DateFns.isPast);\n}\n\nfunction makePending(targets) {\n return targets.map(function (t) {\n return {\n targetId: CoursesCurriculum__Target.id(t),\n status: /* Pending */0\n };\n });\n}\n\nfunction lockTargets(targets, reason) {\n return targets.map(function (t) {\n return {\n targetId: CoursesCurriculum__Target.id(t),\n status: /* Locked */{\n _0: reason\n }\n };\n });\n}\n\nfunction allTargetsComplete(targetCache, targetIds) {\n return Belt_Array.every(targetIds, (function (targetId) {\n return Belt_Option.mapWithDefault(Caml_option.undefined_to_opt(targetCache.find(function (ct) {\n return ct.targetId === targetId;\n })), true, (function (target) {\n return target.submissionStatus === /* SubmissionCompleted */2;\n }));\n }));\n}\n\nfunction compute(preview, student, course, levels, targetGroups, targets, submissions) {\n if (preview) {\n return makePending(targets);\n }\n if (CoursesCurriculum__Course.ended(course)) {\n return lockTargets(targets, /* CourseLocked */0);\n }\n var date = CoursesCurriculum__Student.endsAt(student);\n if (Belt_Option.mapWithDefault(date, false, DateFns.isPast)) {\n return lockTargets(targets, /* AccessLocked */1);\n }\n var studentLevelNumber = CoursesCurriculum__Level.number(ArrayUtils.unsafeFind((function (l) {\n return CoursesCurriculum__Level.id(l) === CoursesCurriculum__Student.levelId(student);\n }), \"Could not student's level with ID \" + CoursesCurriculum__Student.levelId(student), levels));\n var targetCache = targets.map(function (target) {\n var targetId = CoursesCurriculum__Target.id(target);\n var targetGroup = ArrayUtils.unsafeFind((function (tg) {\n return CoursesCurriculum__TargetGroup.id(tg) === CoursesCurriculum__Target.targetGroupId(target);\n }), \"Could not find target group with ID \" + (CoursesCurriculum__Target.targetGroupId(target) + \" to create target cache\"), targetGroups);\n var milestone = CoursesCurriculum__TargetGroup.milestone(targetGroup);\n var levelNumber = CoursesCurriculum__Level.number(ArrayUtils.unsafeFind((function (l) {\n return CoursesCurriculum__Level.id(l) === CoursesCurriculum__TargetGroup.levelId(targetGroup);\n }), \"Could not find level with ID \" + (CoursesCurriculum__Student.levelId(student) + \" to create target cache\"), levels));\n var submission = submissions.find(function (s) {\n return CoursesCurriculum__LatestSubmission.targetId(s) === targetId;\n });\n var submissionStatus = submission !== undefined ? (\n CoursesCurriculum__LatestSubmission.hasPassed(submission) ? /* SubmissionCompleted */2 : (\n CoursesCurriculum__LatestSubmission.hasBeenEvaluated(submission) ? /* SubmissionRejected */3 : /* SubmissionPendingReview */1\n )\n ) : /* SubmissionMissing */0;\n return {\n targetId: targetId,\n targetReviewed: CoursesCurriculum__Target.reviewed(target),\n levelNumber: levelNumber,\n milestone: milestone,\n submissionStatus: submissionStatus,\n prerequisiteTargetIds: CoursesCurriculum__Target.prerequisiteTargetIds(target)\n };\n });\n return targetCache.map(function (ct) {\n var match = ct.submissionStatus;\n var status;\n switch (match) {\n case /* SubmissionMissing */0 :\n status = ct.levelNumber > studentLevelNumber && ct.targetReviewed ? /* Locked */({\n _0: /* LevelLocked */{\n _0: String(studentLevelNumber)\n }\n }) : (\n allTargetsComplete(targetCache, ct.prerequisiteTargetIds) ? /* Pending */0 : /* Locked */({\n _0: /* PrerequisitesIncomplete */2\n })\n );\n break;\n case /* SubmissionPendingReview */1 :\n status = /* PendingReview */1;\n break;\n case /* SubmissionCompleted */2 :\n status = /* Completed */2;\n break;\n case /* SubmissionRejected */3 :\n status = /* Rejected */3;\n break;\n \n }\n return {\n targetId: ct.targetId,\n status: status\n };\n });\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction isPending(t) {\n return t.status === /* Pending */0;\n}\n\nfunction isAccessEnded(t) {\n var reason = t.status;\n if (typeof reason === \"number\") {\n return false;\n } else {\n return reason._0 === /* AccessLocked */1;\n }\n}\n\nfunction lockReasonToString(lockReason) {\n if (typeof lockReason !== \"number\") {\n return tc([[\n \"current_level\",\n lockReason._0\n ]], undefined, \"level_locked\");\n }\n switch (lockReason) {\n case /* CourseLocked */0 :\n return tc(undefined, undefined, \"course_locked\");\n case /* AccessLocked */1 :\n return tc(undefined, undefined, \"access_locked\");\n case /* PrerequisitesIncomplete */2 :\n return tc(undefined, undefined, \"prerequisites_incomplete\");\n \n }\n}\n\nfunction statusToString(t) {\n var match = t.status;\n if (typeof match !== \"number\") {\n return tc(undefined, undefined, \"status.locked\");\n }\n switch (match) {\n case /* Pending */0 :\n return tc(undefined, undefined, \"status.pending\");\n case /* PendingReview */1 :\n return tc(undefined, undefined, \"status.pending_review\");\n case /* Completed */2 :\n return tc(undefined, undefined, \"status.completed\");\n case /* Rejected */3 :\n return tc(undefined, undefined, \"status.rejected\");\n \n }\n}\n\nfunction statusClassesSufix(t) {\n var match = t.status;\n if (typeof match !== \"number\") {\n return \"locked\";\n }\n switch (match) {\n case /* Pending */0 :\n return \"pending\";\n case /* PendingReview */1 :\n return \"pending-review\";\n case /* Completed */2 :\n return \"completed\";\n case /* Rejected */3 :\n return \"rejected\";\n \n }\n}\n\nfunction canSubmit(resubmittable, t) {\n var match = t.status;\n if (resubmittable) {\n if (match === 2) {\n return true;\n }\n \n } else if (match === 2) {\n return false;\n }\n if (typeof match === \"number\") {\n return match !== 1;\n } else {\n return false;\n }\n}\n\nfunction allAttempted(ts) {\n return Belt_Array.every(ts, (function (t) {\n return [\n /* PendingReview */1,\n /* Completed */2,\n /* Rejected */3\n ].includes(t.status);\n }));\n}\n\nfunction allComplete(ts) {\n return Belt_Array.every(ts, (function (t) {\n return t.status === /* Completed */2;\n }));\n}\n\nfunction anyRejected(ts) {\n return Belt_Array.some(ts, (function (t) {\n return t.status === /* Rejected */3;\n }));\n}\n\nvar Course;\n\nvar Student;\n\nvar Target;\n\nvar Level;\n\nvar TargetGroup;\n\nvar LatestSubmission;\n\nexport {\n Course ,\n Student ,\n Target ,\n Level ,\n TargetGroup ,\n LatestSubmission ,\n tc ,\n isPast ,\n makePending ,\n lockTargets ,\n allTargetsComplete ,\n compute ,\n targetId ,\n status ,\n isPending ,\n isAccessEnded ,\n lockReasonToString ,\n statusToString ,\n statusClassesSufix ,\n canSubmit ,\n allAttempted ,\n allComplete ,\n anyRejected ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as React from \"react\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction CoursesCurriculum__CompletionInstructions(Props) {\n var targetDetails = Props.targetDetails;\n var title = Props.title;\n var completionInstructions = CoursesCurriculum__TargetDetails.completionInstructions(targetDetails);\n if (completionInstructions !== undefined) {\n return React.createElement(\"div\", {\n className: \"flex flex-col sm:flex-row mt-4 bg-yellow-100 rounded-lg border border-yellow-500 overflow-hidden\"\n }, React.createElement(\"div\", {\n className: \"bg-yellow-500 p-4 sm:py-8 sm:px-7 shrink-0 text-center\"\n }, React.createElement(Icon.make, {\n className: \"if i-lamp-solid text-3xl sm:text-5xl text-yellow-800\"\n })), React.createElement(\"div\", {\n className: \"p-5 text-center sm:text-left\"\n }, React.createElement(\"h4\", {\n className: \"font-semibold text-lg\"\n }, title), React.createElement(\"p\", {\n className: \"mt-1 leading-snug\"\n }, completionInstructions)));\n } else {\n return null;\n }\n}\n\nvar make = CoursesCurriculum__CompletionInstructions;\n\nexport {\n str ,\n make ,\n \n}\n/* Icon Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__TargetStatus from \"../types/CoursesCurriculum__TargetStatus.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport * as CoursesCurriculum__LevelUpEligibility from \"../types/CoursesCurriculum__LevelUpEligibility.bs.js\";\nimport * as CoursesCurriculum__CompletionInstructions from \"./CoursesCurriculum__CompletionInstructions.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__AutoVerify\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation AutoVerifySubmissionMutation($targetId: ID!) {\\nautoVerifySubmission(targetId: $targetId) {\\nsubmission {\\nid \\ncreatedAt \\n}\\n\\nlevelUpEligibility \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.autoVerifySubmission;\n var value$2 = value$1.submission;\n var value$3 = value$1.levelUpEligibility;\n var tmp;\n if (value$3 == null) {\n tmp = undefined;\n } else {\n var tmp$1;\n switch (value$3) {\n case \"AtMaxLevel\" :\n tmp$1 = \"AtMaxLevel\";\n break;\n case \"CurrentLevelIncomplete\" :\n tmp$1 = \"CurrentLevelIncomplete\";\n break;\n case \"DateLocked\" :\n tmp$1 = \"DateLocked\";\n break;\n case \"Eligible\" :\n tmp$1 = \"Eligible\";\n break;\n case \"NoMilestonesInLevel\" :\n tmp$1 = \"NoMilestonesInLevel\";\n break;\n case \"PreviousLevelIncomplete\" :\n tmp$1 = \"PreviousLevelIncomplete\";\n break;\n case \"TeamMembersPending\" :\n tmp$1 = \"TeamMembersPending\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$3\n };\n }\n tmp = tmp$1;\n }\n return {\n autoVerifySubmission: {\n submission: !(value$2 == null) ? ({\n id: value$2.id,\n createdAt: value$2.createdAt\n }) : undefined,\n levelUpEligibility: tmp\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.autoVerifySubmission;\n var value$2 = value$1.levelUpEligibility;\n var levelUpEligibility = value$2 !== undefined ? (\n typeof value$2 === \"object\" ? value$2.VAL : (\n value$2 === \"DateLocked\" ? \"DateLocked\" : (\n value$2 === \"TeamMembersPending\" ? \"TeamMembersPending\" : (\n value$2 === \"Eligible\" ? \"Eligible\" : (\n value$2 === \"PreviousLevelIncomplete\" ? \"PreviousLevelIncomplete\" : (\n value$2 === \"NoMilestonesInLevel\" ? \"NoMilestonesInLevel\" : (\n value$2 === \"CurrentLevelIncomplete\" ? \"CurrentLevelIncomplete\" : \"AtMaxLevel\"\n )\n )\n )\n )\n )\n )\n ) : null;\n var value$3 = value$1.submission;\n var submission;\n if (value$3 !== undefined) {\n var value$4 = value$3.createdAt;\n var value$5 = value$3.id;\n submission = {\n id: value$5,\n createdAt: value$4\n };\n } else {\n submission = null;\n }\n var autoVerifySubmission = {\n submission: submission,\n levelUpEligibility: levelUpEligibility\n };\n return {\n autoVerifySubmission: autoVerifySubmission\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n targetId: inp.targetId\n };\n}\n\nfunction makeVariables(targetId, param) {\n return {\n targetId: targetId\n };\n}\n\nvar AutoVerifySubmissionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar AutoVerifySubmissionQuery_Graphql_error = include.Graphql_error;\n\nvar AutoVerifySubmissionQuery_decodeNotification = include.decodeNotification;\n\nvar AutoVerifySubmissionQuery_decodeObject = include.decodeObject;\n\nvar AutoVerifySubmissionQuery_decodeNotifications = include.decodeNotifications;\n\nvar AutoVerifySubmissionQuery_decodeErrors = include.decodeErrors;\n\nvar AutoVerifySubmissionQuery_flashNotifications = include.flashNotifications;\n\nvar AutoVerifySubmissionQuery_sendQuery = include.sendQuery;\n\nvar AutoVerifySubmissionQuery_query = include.query;\n\nvar AutoVerifySubmissionQuery_fetch = include.$$fetch;\n\nvar AutoVerifySubmissionQuery = {\n AutoVerifySubmissionQuery_inner: AutoVerifySubmissionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: AutoVerifySubmissionQuery_Graphql_error,\n decodeNotification: AutoVerifySubmissionQuery_decodeNotification,\n decodeObject: AutoVerifySubmissionQuery_decodeObject,\n decodeNotifications: AutoVerifySubmissionQuery_decodeNotifications,\n decodeErrors: AutoVerifySubmissionQuery_decodeErrors,\n flashNotifications: AutoVerifySubmissionQuery_flashNotifications,\n sendQuery: AutoVerifySubmissionQuery_sendQuery,\n query: AutoVerifySubmissionQuery_query,\n $$fetch: AutoVerifySubmissionQuery_fetch,\n make: make\n};\n\nfunction redirect(link) {\n var $$window$1 = window;\n $$window$1.open(link, \"_blank\", \"\");\n \n}\n\nfunction handleSuccess(submission, levelUpEligibility, linkToComplete, addSubmissionCB) {\n Curry._2(addSubmissionCB, CoursesCurriculum__Submission.make(submission.id, DateFns.decodeISO(submission.createdAt), /* MarkedAsComplete */0, []), levelUpEligibility);\n if (linkToComplete !== undefined) {\n return redirect(linkToComplete);\n }\n \n}\n\nfunction createAutoVerifySubmission(target, linkToComplete, setSaving, addSubmissionCB, $$event) {\n $$event.preventDefault();\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Curry._3(make, undefined, undefined, {\n targetId: CoursesCurriculum__Target.id(target)\n }).then(function (response) {\n var details = response.autoVerifySubmission.submission;\n if (details !== undefined) {\n var levelUpEligibility = CoursesCurriculum__LevelUpEligibility.makeOptionFromJs(response.autoVerifySubmission.levelUpEligibility);\n handleSuccess(Caml_option.valFromOption(details), levelUpEligibility, linkToComplete, addSubmissionCB);\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction completeButtonText(title, iconClasses) {\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: iconClasses + \" mr-2\"\n }), title);\n}\n\nfunction previewLinkToComplete(link) {\n return React.createElement(\"a\", {\n className: \"block text-primary-500 w-full text-center bg-gray-50 hover:bg-gray-300 hover:text-primary-600 p-4 rounded text-lg font-bold\",\n href: link,\n target: \"_blank\"\n }, React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-external-link-alt mr-2\"\n }), tr(undefined, undefined, \"visit_link\")));\n}\n\nfunction autoVerify(target, linkToComplete, saving, setSaving, addSubmissionCB, preview) {\n if (preview && linkToComplete !== undefined) {\n return previewLinkToComplete(linkToComplete);\n }\n return React.createElement(\"button\", {\n className: \"flex rounded btn-success text-lg justify-center w-full font-bold p-4 curriculum-overlay__learn-auto-verify-btn \",\n disabled: saving || preview,\n onClick: (function (param) {\n return createAutoVerifySubmission(target, linkToComplete, setSaving, addSubmissionCB, param);\n })\n }, saving ? completeButtonText(tr(undefined, undefined, \"saving\"), \"fas fa-spinner fa-spin\") : (\n linkToComplete !== undefined ? completeButtonText(tr(undefined, undefined, \"visit_complete\"), \"fas fa-external-link-alt\") : completeButtonText(tr(undefined, undefined, \"mark_complete\"), \"fas fa-check-square\")\n ));\n}\n\nfunction statusBar(string, linkToComplete) {\n var message = React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(\"span\", {\n className: \"fa-stack text-lg mr-1 text-green-500\"\n }, React.createElement(\"i\", {\n className: \"fas fa-certificate fa-stack-2x\"\n }), React.createElement(\"i\", {\n className: \"fas fa-check fa-stack-1x fa-inverse\"\n })), React.createElement(\"span\", undefined, string));\n var visitLink = function (link) {\n return React.createElement(\"a\", {\n className: \"text-right w-full\",\n href: link,\n target: \"_blank\"\n }, React.createElement(\"i\", {\n className: \"fas fa-external-link-alt mr-2\"\n }), tr(undefined, undefined, \"visit_link\"));\n };\n return React.createElement(\"div\", {\n className: \"font-bold p-4 flex w-full items-center text-green-500 bg-green-100 justify-center\"\n }, message, linkToComplete !== undefined ? visitLink(linkToComplete) : null);\n}\n\nfunction completionInstructionText(linkToComplete) {\n if (linkToComplete !== undefined) {\n return tr(undefined, undefined, \"before_visiting\");\n } else {\n return tr(undefined, undefined, \"before_marking\");\n }\n}\n\nfunction CoursesCurriculum__AutoVerify(Props) {\n var target = Props.target;\n var targetDetails = Props.targetDetails;\n var targetStatus = Props.targetStatus;\n var addSubmissionCB = Props.addSubmissionCB;\n var preview = Props.preview;\n var match = React.useState(function () {\n return false;\n });\n var linkToComplete = CoursesCurriculum__TargetDetails.linkToComplete(targetDetails);\n var match$1 = CoursesCurriculum__TargetStatus.status(targetStatus);\n return [\n React.createElement(CoursesCurriculum__CompletionInstructions.make, {\n targetDetails: targetDetails,\n title: completionInstructionText(linkToComplete),\n key: \"completion-instructions\"\n }),\n React.createElement(\"div\", {\n key: \"completion-button\",\n className: \"mt-5\",\n id: \"auto-verify-target\"\n }, typeof match$1 === \"number\" ? (\n match$1 !== 0 ? statusBar(ts(undefined, undefined, \"completed\"), linkToComplete) : autoVerify(target, linkToComplete, match[0], match[1], addSubmissionCB, preview)\n ) : null)\n ];\n}\n\nvar TargetStatus;\n\nvar make$1 = CoursesCurriculum__AutoVerify;\n\nexport {\n str ,\n tr ,\n ts ,\n TargetStatus ,\n AutoVerifySubmissionQuery ,\n redirect ,\n handleSuccess ,\n createAutoVerifySubmission ,\n completeButtonText ,\n previewLinkToComplete ,\n autoVerify ,\n statusBar ,\n completionInstructionText ,\n make$1 as make,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as UrlUtils from \"../../../shared/utils/UrlUtils.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_encode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\nimport * as TargetChecklistItem from \"../../../schools/courses/types/curriculum_editor/TargetChecklistItem.bs.js\";\nimport * as SubmissionChecklistItem from \"../../review/types/SubmissionChecklistItem.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction result(t) {\n return t.result;\n}\n\nfunction optional(t) {\n return t.optional;\n}\n\nfunction make(result, title, optional) {\n return {\n title: title,\n optional: optional,\n result: result\n };\n}\n\nfunction fromTargetChecklistItem(targetChecklist) {\n return $$Array.map((function (tc) {\n var title = TargetChecklistItem.title(tc);\n var optional = TargetChecklistItem.optional(tc);\n var choices = TargetChecklistItem.kind(tc);\n var result;\n if (typeof choices === \"number\") {\n switch (choices) {\n case /* Files */0 :\n result = {\n TAG: /* Files */0,\n _0: []\n };\n break;\n case /* Link */1 :\n result = {\n TAG: /* Link */1,\n _0: \"\"\n };\n break;\n case /* ShortText */2 :\n result = {\n TAG: /* ShortText */2,\n _0: \"\"\n };\n break;\n case /* LongText */3 :\n result = {\n TAG: /* LongText */3,\n _0: \"\"\n };\n break;\n case /* AudioRecord */4 :\n result = {\n TAG: /* AudioRecord */5,\n _0: {\n id: \"\",\n name: \"\"\n }\n };\n break;\n \n }\n } else {\n result = {\n TAG: /* MultiChoice */4,\n _0: choices._0,\n _1: undefined\n };\n }\n return {\n title: title,\n optional: optional,\n result: result\n };\n }), targetChecklist);\n}\n\nfunction updateResultAtIndex(index, result, checklist) {\n return checklist.map(function (c, i) {\n if (i === index) {\n return {\n title: c.title,\n optional: c.optional,\n result: result\n };\n } else {\n return c;\n }\n });\n}\n\nfunction makeFile(id, name) {\n return {\n id: id,\n name: name\n };\n}\n\nfunction filename(file) {\n return file.name;\n}\n\nfunction fileId(file) {\n return file.id;\n}\n\nfunction fileIds(checklist) {\n return ArrayUtils.flattenV2(checklist.map(function (c) {\n var files = c.result;\n switch (files.TAG | 0) {\n case /* Files */0 :\n return files._0.map(function (a) {\n return a.id;\n });\n case /* AudioRecord */5 :\n return [files._0.id];\n default:\n return [];\n }\n }));\n}\n\nfunction kindAsString(t) {\n var match = t.result;\n switch (match.TAG | 0) {\n case /* Files */0 :\n return \"files\";\n case /* Link */1 :\n return \"link\";\n case /* ShortText */2 :\n return \"shortText\";\n case /* LongText */3 :\n return \"longText\";\n case /* MultiChoice */4 :\n return \"multiChoice\";\n case /* AudioRecord */5 :\n return \"audio\";\n \n }\n}\n\nfunction resultAsJson(t) {\n var files = t.result;\n switch (files.TAG | 0) {\n case /* Files */0 :\n return files._0.map(function (file) {\n return file.id;\n });\n case /* MultiChoice */4 :\n var choices = files._0;\n return OptionUtils.$$default(\"\", OptionUtils.flatMap((function (i) {\n return ArrayUtils.getOpt(i, choices);\n }), files._1));\n case /* AudioRecord */5 :\n return files._0.id;\n default:\n return files._0;\n }\n}\n\nfunction validString(s, maxLength) {\n var length = s.trim().length;\n if (length >= 1) {\n return length <= maxLength;\n } else {\n return false;\n }\n}\n\nfunction validShortText(s) {\n return validString(s, 250);\n}\n\nfunction validLongText(s) {\n return validString(s, 5000);\n}\n\nfunction validFiles(files) {\n if (Caml_obj.caml_notequal(files, [])) {\n return files.length < 4;\n } else {\n return false;\n }\n}\n\nfunction validMultiChoice(choices, index) {\n return OptionUtils.mapWithDefault((function (i) {\n return choices.length > i;\n }), false, index);\n}\n\nfunction validResponse(response, allowBlank) {\n var optional = allowBlank ? response.optional : false;\n var match = response.result;\n switch (match.TAG | 0) {\n case /* Files */0 :\n var files = match._0;\n if (optional && ArrayUtils.isEmpty(files)) {\n return true;\n } else {\n return validFiles(files);\n }\n case /* Link */1 :\n var link = match._0;\n if (optional) {\n return UrlUtils.isValid(true, link);\n } else {\n return UrlUtils.isValid(false, link);\n }\n case /* ShortText */2 :\n var t = match._0;\n if (optional) {\n if (validString(t, 250)) {\n return true;\n } else {\n return t === \"\";\n }\n } else {\n return validString(t, 250);\n }\n case /* LongText */3 :\n var t$1 = match._0;\n if (optional) {\n if (validString(t$1, 5000)) {\n return true;\n } else {\n return t$1 === \"\";\n }\n } else {\n return validString(t$1, 5000);\n }\n case /* MultiChoice */4 :\n var index = match._1;\n var choices = match._0;\n if (optional) {\n if (validMultiChoice(choices, index)) {\n return true;\n } else {\n return index === undefined;\n }\n } else {\n return validMultiChoice(choices, index);\n }\n case /* AudioRecord */5 :\n if (optional) {\n return true;\n } else {\n return match._0.id !== \"\";\n }\n \n }\n}\n\nfunction validChecklist(checklist) {\n return ArrayUtils.isEmpty(checklist.map(function (c) {\n return validResponse(c, true);\n }).filter(function (c) {\n return !c;\n }));\n}\n\nfunction validResponses(responses) {\n return responses.filter(function (c) {\n return validResponse(c, false);\n });\n}\n\nfunction encode(t) {\n return Json_encode.object_({\n hd: [\n \"title\",\n t.title\n ],\n tl: {\n hd: [\n \"kind\",\n kindAsString(t)\n ],\n tl: {\n hd: [\n \"status\",\n \"noAnswer\"\n ],\n tl: {\n hd: [\n \"result\",\n resultAsJson(t)\n ],\n tl: /* [] */0\n }\n }\n }\n });\n}\n\nfunction encodeArray(checklist) {\n return Json_encode.array(encode, validResponses(checklist));\n}\n\nfunction makeFiles(checklist) {\n return $$Array.map((function (f) {\n var url = \"/timeline_event_files/\" + (f.id + \"/download\");\n return SubmissionChecklistItem.makeFile(f.name, url, f.id);\n }), ArrayUtils.flattenV2(checklist.map(function (item) {\n var files = item.result;\n switch (files.TAG | 0) {\n case /* Files */0 :\n return files._0;\n case /* AudioRecord */5 :\n return [files._0];\n default:\n return [];\n }\n })));\n}\n\nexport {\n title ,\n result ,\n optional ,\n make ,\n fromTargetChecklistItem ,\n updateResultAtIndex ,\n makeFile ,\n filename ,\n fileId ,\n fileIds ,\n kindAsString ,\n resultAsJson ,\n validString ,\n validShortText ,\n validLongText ,\n validFiles ,\n validMultiChoice ,\n validResponse ,\n validChecklist ,\n validResponses ,\n encode ,\n encodeArray ,\n makeFiles ,\n \n}\n/* UrlUtils Not a pure module */\n","\n\nimport * as Caml from \"./caml.js\";\nimport * as $$Array from \"./array.js\";\nimport * as Int32 from \"./int32.js\";\nimport * as Int64 from \"./int64.js\";\nimport * as Digest from \"./digest.js\";\nimport * as Caml_array from \"./caml_array.js\";\nimport * as Caml_int64 from \"./caml_int64.js\";\nimport * as Caml_string from \"./caml_string.js\";\n\nfunction random_seed(param) {\n return [(Math.floor(Math.random()*0x7fffffff))];\n}\n\nfunction assign(st1, st2) {\n $$Array.blit(st2.st, 0, st1.st, 0, 55);\n st1.idx = st2.idx;\n \n}\n\nfunction full_init(s, seed) {\n var combine = function (accu, x) {\n return Digest.string(accu + String(x));\n };\n var extract = function (d) {\n return ((Caml_string.get(d, 0) + (Caml_string.get(d, 1) << 8) | 0) + (Caml_string.get(d, 2) << 16) | 0) + (Caml_string.get(d, 3) << 24) | 0;\n };\n var seed$1 = seed.length === 0 ? [0] : seed;\n var l = seed$1.length;\n for(var i = 0; i <= 54; ++i){\n Caml_array.set(s.st, i, i);\n }\n var accu = \"x\";\n for(var i$1 = 0 ,i_finish = 54 + (\n 55 > l ? 55 : l\n ) | 0; i$1 <= i_finish; ++i$1){\n var j = i$1 % 55;\n var k = i$1 % l;\n accu = combine(accu, Caml_array.get(seed$1, k));\n Caml_array.set(s.st, j, (Caml_array.get(s.st, j) ^ extract(accu)) & 1073741823);\n }\n s.idx = 0;\n \n}\n\nfunction make(seed) {\n var result = {\n st: Caml_array.make(55, 0),\n idx: 0\n };\n full_init(result, seed);\n return result;\n}\n\nfunction make_self_init(param) {\n return make(random_seed(undefined));\n}\n\nfunction copy(s) {\n var result = {\n st: Caml_array.make(55, 0),\n idx: 0\n };\n assign(result, s);\n return result;\n}\n\nfunction bits(s) {\n s.idx = (s.idx + 1 | 0) % 55;\n var curval = Caml_array.get(s.st, s.idx);\n var newval = Caml_array.get(s.st, (s.idx + 24 | 0) % 55) + (curval ^ (curval >>> 25) & 31) | 0;\n var newval30 = newval & 1073741823;\n Caml_array.set(s.st, s.idx, newval30);\n return newval30;\n}\n\nfunction $$int(s, bound) {\n if (bound > 1073741823 || bound <= 0) {\n throw {\n RE_EXN_ID: \"Invalid_argument\",\n _1: \"Random.int\",\n Error: new Error()\n };\n }\n while(true) {\n var r = bits(s);\n var v = r % bound;\n if ((r - v | 0) <= ((1073741823 - bound | 0) + 1 | 0)) {\n return v;\n }\n continue ;\n };\n}\n\nfunction int32(s, bound) {\n if (bound <= 0) {\n throw {\n RE_EXN_ID: \"Invalid_argument\",\n _1: \"Random.int32\",\n Error: new Error()\n };\n }\n while(true) {\n var b1 = bits(s);\n var b2 = ((bits(s) & 1) << 30);\n var r = b1 | b2;\n var v = r % bound;\n if ((r - v | 0) <= ((Int32.max_int - bound | 0) + 1 | 0)) {\n return v;\n }\n continue ;\n };\n}\n\nfunction int64(s, bound) {\n if (Caml.i64_le(bound, Caml_int64.zero)) {\n throw {\n RE_EXN_ID: \"Invalid_argument\",\n _1: \"Random.int64\",\n Error: new Error()\n };\n }\n while(true) {\n var b1 = Caml_int64.of_int32(bits(s));\n var b2 = Caml_int64.lsl_(Caml_int64.of_int32(bits(s)), 30);\n var b3 = Caml_int64.lsl_(Caml_int64.of_int32(bits(s) & 7), 60);\n var r = Caml_int64.or_(b1, Caml_int64.or_(b2, b3));\n var v = Caml_int64.mod_(r, bound);\n if (!Caml.i64_gt(Caml_int64.sub(r, v), Caml_int64.add(Caml_int64.sub(Int64.max_int, bound), Caml_int64.one))) {\n return v;\n }\n continue ;\n };\n}\n\nfunction rawfloat(s) {\n var r1 = bits(s);\n var r2 = bits(s);\n return (r1 / 1073741824.0 + r2) / 1073741824.0;\n}\n\nfunction $$float(s, bound) {\n return rawfloat(s) * bound;\n}\n\nfunction bool(s) {\n return (bits(s) & 1) === 0;\n}\n\nvar $$default = {\n st: [\n 987910699,\n 495797812,\n 364182224,\n 414272206,\n 318284740,\n 990407751,\n 383018966,\n 270373319,\n 840823159,\n 24560019,\n 536292337,\n 512266505,\n 189156120,\n 730249596,\n 143776328,\n 51606627,\n 140166561,\n 366354223,\n 1003410265,\n 700563762,\n 981890670,\n 913149062,\n 526082594,\n 1021425055,\n 784300257,\n 667753350,\n 630144451,\n 949649812,\n 48546892,\n 415514493,\n 258888527,\n 511570777,\n 89983870,\n 283659902,\n 308386020,\n 242688715,\n 482270760,\n 865188196,\n 1027664170,\n 207196989,\n 193777847,\n 619708188,\n 671350186,\n 149669678,\n 257044018,\n 87658204,\n 558145612,\n 183450813,\n 28133145,\n 901332182,\n 710253903,\n 510646120,\n 652377910,\n 409934019,\n 801085050\n ],\n idx: 0\n};\n\nfunction bits$1(param) {\n return bits($$default);\n}\n\nfunction $$int$1(bound) {\n return $$int($$default, bound);\n}\n\nfunction int32$1(bound) {\n return int32($$default, bound);\n}\n\nfunction int64$1(bound) {\n return int64($$default, bound);\n}\n\nfunction $$float$1(scale) {\n return rawfloat($$default) * scale;\n}\n\nfunction bool$1(param) {\n return bool($$default);\n}\n\nfunction full_init$1(seed) {\n return full_init($$default, seed);\n}\n\nfunction init(seed) {\n return full_init($$default, [seed]);\n}\n\nfunction self_init(param) {\n return full_init$1(random_seed(undefined));\n}\n\nfunction get_state(param) {\n return copy($$default);\n}\n\nfunction set_state(s) {\n return assign($$default, s);\n}\n\nvar State = {\n make: make,\n make_self_init: make_self_init,\n copy: copy,\n bits: bits,\n $$int: $$int,\n int32: int32,\n int64: int64,\n $$float: $$float,\n bool: bool\n};\n\nexport {\n init ,\n full_init$1 as full_init,\n self_init ,\n bits$1 as bits,\n $$int$1 as $$int,\n int32$1 as int32,\n int64$1 as int64,\n $$float$1 as $$float,\n bool$1 as bool,\n State ,\n get_state ,\n set_state ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as List from \"../../../../../node_modules/rescript/lib/es6/list.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as Fetch from \"../../../../../node_modules/bs-fetch/src/Fetch.bs.js\";\nimport * as React from \"react\";\nimport * as Random from \"../../../../../node_modules/rescript/lib/es6/random.js\";\nimport * as ListUtils from \"../../../shared/utils/ListUtils.bs.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as $$Notification from \"../../../shared/Notification.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as AuthenticityToken from \"../../../shared/utils/AuthenticityToken.bs.js\";\n\nvar FormNotFound = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__FileForm.FormNotFound\");\n\nvar UnexpectedResponse = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__FileForm.UnexpectedResponse\");\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__FileForm\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar defaultTitle = tr(undefined, undefined, \"choose_upload\");\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n return {\n formId: state.formId,\n filename: defaultTitle,\n errors: /* [] */0\n };\n } else if (action.TAG === /* AttachFile */0) {\n return {\n formId: state.formId,\n filename: action._0,\n errors: /* [] */0\n };\n } else {\n return {\n formId: state.formId,\n filename: action._0,\n errors: action._1\n };\n }\n}\n\nfunction handleResponseJSON(filename, send, attachFileCB, json) {\n var id = Json_decode.field(\"id\", Json_decode.string, json);\n Curry._2(attachFileCB, id, filename);\n return Curry._1(send, /* ResetForm */0);\n}\n\nfunction apiErrorTitle(x) {\n if (x.RE_EXN_ID === UnexpectedResponse) {\n return tr(undefined, undefined, \"error\") + String(x._1);\n } else {\n return tr(undefined, undefined, \"smth_went_wrong\");\n }\n}\n\nfunction uploadFile(filename, send, attachFileCB, formData) {\n fetch(\"/timeline_event_files/\", Fetch.RequestInit.make(/* Post */2, undefined, Caml_option.some(formData), undefined, undefined, undefined, /* SameOrigin */1, undefined, undefined, undefined, undefined, undefined)(undefined)).then(function (response) {\n if (response.ok) {\n return response.json();\n } else {\n return Promise.reject({\n RE_EXN_ID: UnexpectedResponse,\n _1: response.status\n });\n }\n }).then(function (json) {\n return Promise.resolve(handleResponseJSON(filename, send, attachFileCB, json));\n }).catch(function (error) {\n var title = apiErrorTitle(error);\n $$Notification.error(title, tr(undefined, undefined, \"please_reload\"));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction submitForm(filename, formId, send, addFileAttachmentCB) {\n var element = document.getElementById(formId);\n if (!(element == null)) {\n return uploadFile(filename, send, addFileAttachmentCB, new FormData(element));\n }\n throw {\n RE_EXN_ID: FormNotFound,\n _1: formId,\n Error: new Error()\n };\n}\n\nfunction attachFile(state, send, attachingCB, attachFileCB, preview, $$event) {\n if (preview) {\n return $$Notification.notice(tr(undefined, undefined, \"preview_mode\"), tr(undefined, undefined, \"cannot_attach\"));\n }\n var files = $$event.target.files;\n if (files.length === 0) {\n return ;\n }\n var file = Caml_array.get(files, 0);\n var errors = file.size > window.pupilfirst.maxUploadFileSize ? ({\n hd: tr(undefined, undefined, \"max_file_size\"),\n tl: /* [] */0\n }) : /* [] */0;\n if (!ListUtils.isEmpty(errors)) {\n return Curry._1(send, {\n TAG: /* SelectFile */1,\n _0: file.name,\n _1: errors\n });\n }\n var filename = file.name;\n Curry._1(attachingCB, true);\n Curry._1(send, {\n TAG: /* AttachFile */0,\n _0: filename\n });\n return submitForm(filename, state.formId, send, attachFileCB);\n}\n\nfunction CoursesCurriculum__FileForm(Props) {\n var attachFileCB = Props.attachFileCB;\n var attachingCB = Props.attachingCB;\n var preview = Props.preview;\n var index = Props.index;\n var match = React.useReducer(reducer, {\n formId: String(Random.$$int(99999)),\n filename: defaultTitle,\n errors: /* [] */0\n });\n var send = match[1];\n var state = match[0];\n return React.createElement(\"div\", undefined, React.createElement(\"form\", {\n className: \"flex items-center flex-wrap\",\n id: state.formId\n }, React.createElement(\"input\", {\n name: \"authenticity_token\",\n type: \"hidden\",\n value: AuthenticityToken.fromHead(undefined)\n }), React.createElement(\"input\", {\n className: \"hidden\",\n id: \"attachment_file_\" + String(index),\n multiple: false,\n name: \"file\",\n required: true,\n type: \"file\",\n onChange: (function (param) {\n return attachFile(state, send, attachingCB, attachFileCB, preview, param);\n })\n }), React.createElement(\"label\", {\n className: \"text-center cursor-pointer truncate bg-gray-50 border border-dashed border-gray-600 flex px-4 py-5 items-center font-semibold rounded text-sm hover:text-primary-600 hover:bg-primary-100 hover:border-primary-500 grow\",\n htmlFor: \"attachment_file_\" + String(index)\n }, React.createElement(\"span\", {\n className: \"w-full\"\n }, React.createElement(\"i\", {\n className: \"fas fa-upload mr-2 text-lg\"\n }), React.createElement(\"span\", {\n className: \"truncate\"\n }, state.filename)))), $$Array.of_list(List.map((function (error) {\n return React.createElement(\"div\", {\n key: error,\n className: \"mt-2 text-red-700 text-sm\"\n }, React.createElement(\"i\", {\n className: \"fas fa-exclamation-circle mr-2\"\n }), React.createElement(\"span\", undefined, error));\n }), state.errors)), ListUtils.isEmpty(state.errors) ? null : React.createElement(\"div\", {\n className: \"px-4 mt-2 text-sm\"\n }, tr(undefined, undefined, \"another_file\")));\n}\n\nvar make = CoursesCurriculum__FileForm;\n\nexport {\n FormNotFound ,\n UnexpectedResponse ,\n str ,\n tr ,\n defaultTitle ,\n reducer ,\n handleResponseJSON ,\n apiErrorTitle ,\n uploadFile ,\n submitForm ,\n attachFile ,\n make ,\n \n}\n/* defaultTitle Not a pure module */\n","/* Blob.js\n * A Blob, File, FileReader & URL implementation.\n * 2020-02-01\n *\n * By Eli Grey, https://eligrey.com\n * By Jimmy Wärting, https://github.com/jimmywarting\n * License: MIT\n * See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md\n */\n\n(function(global) {\n\t(function (factory) {\n\t\tif (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD. Register as an anonymous module.\n\t\t\tdefine([\"exports\"], factory);\n\t\t} else if (typeof exports === \"object\" && typeof exports.nodeName !== \"string\") {\n\t\t\t// CommonJS\n\t\t\tfactory(exports);\n\t\t} else {\n\t\t\t// Browser globals\n\t\t\tfactory(global);\n\t\t}\n\t})(function (exports) {\n\t\t\"use strict\";\n\n\t\tvar BlobBuilder = global.BlobBuilder\n\t\t\t|| global.WebKitBlobBuilder\n\t\t\t|| global.MSBlobBuilder\n\t\t\t|| global.MozBlobBuilder;\n\n\t\tvar URL = global.URL || global.webkitURL || function (href, a) {\n\t\t\ta = document.createElement(\"a\");\n\t\t\ta.href = href;\n\t\t\treturn a;\n\t\t};\n\n\t\tvar origBlob = global.Blob;\n\t\tvar createObjectURL = URL.createObjectURL;\n\t\tvar revokeObjectURL = URL.revokeObjectURL;\n\t\tvar strTag = global.Symbol && global.Symbol.toStringTag;\n\t\tvar blobSupported = false;\n\t\tvar blobSupportsArrayBufferView = false;\n\t\tvar arrayBufferSupported = !!global.ArrayBuffer;\n\t\tvar blobBuilderSupported = BlobBuilder\n\t\t\t&& BlobBuilder.prototype.append\n\t\t\t&& BlobBuilder.prototype.getBlob;\n\n\t\ttry {\n\t\t\t// Check if Blob constructor is supported\n\t\t\tblobSupported = new Blob([\"ä\"]).size === 2;\n\n\t\t\t// Check if Blob constructor supports ArrayBufferViews\n\t\t\t// Fails in Safari 6, so we need to map to ArrayBuffers there.\n\t\t\tblobSupportsArrayBufferView = new Blob([new Uint8Array([1, 2])]).size === 2;\n\t\t} catch (e) {/**/}\n\n\n\t\t// Helper function that maps ArrayBufferViews to ArrayBuffers\n\t\t// Used by BlobBuilder constructor and old browsers that didn't\n\t\t// support it in the Blob constructor.\n\t\tfunction mapArrayBufferViews (ary) {\n\t\t\treturn ary.map(function (chunk) {\n\t\t\t\tif (chunk.buffer instanceof ArrayBuffer) {\n\t\t\t\t\tvar buf = chunk.buffer;\n\n\t\t\t\t\t// if this is a subarray, make a copy so we only\n\t\t\t\t\t// include the subarray region from the underlying buffer\n\t\t\t\t\tif (chunk.byteLength !== buf.byteLength) {\n\t\t\t\t\t\tvar copy = new Uint8Array(chunk.byteLength);\n\t\t\t\t\t\tcopy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\n\t\t\t\t\t\tbuf = copy.buffer;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn buf;\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\t\t}\n\n\t\tfunction BlobBuilderConstructor (ary, options) {\n\t\t\toptions = options || {};\n\n\t\t\tvar bb = new BlobBuilder();\n\t\t\tmapArrayBufferViews(ary).forEach(function (part) {\n\t\t\t\tbb.append(part);\n\t\t\t});\n\n\t\t\treturn options.type ? bb.getBlob(options.type) : bb.getBlob();\n\t\t}\n\n\t\tfunction BlobConstructor (ary, options) {\n\t\t\treturn new origBlob(mapArrayBufferViews(ary), options || {});\n\t\t}\n\n\t\tif (global.Blob) {\n\t\t\tBlobBuilderConstructor.prototype = Blob.prototype;\n\t\t\tBlobConstructor.prototype = Blob.prototype;\n\t\t}\n\n\t\t/********************************************************/\n\t\t/* String Encoder fallback */\n\t\t/********************************************************/\n\t\tfunction stringEncode (string) {\n\t\t\tvar pos = 0;\n\t\t\tvar len = string.length;\n\t\t\tvar Arr = global.Uint8Array || Array; // Use byte array when possible\n\n\t\t\tvar at = 0; // output position\n\t\t\tvar tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size\n\t\t\tvar target = new Arr((tlen >> 3) << 3); // ... but at 8 byte offset\n\n\t\t\twhile (pos < len) {\n\t\t\t\tvar value = string.charCodeAt(pos++);\n\t\t\t\tif (value >= 0xd800 && value <= 0xdbff) {\n\t\t\t\t\t// high surrogate\n\t\t\t\t\tif (pos < len) {\n\t\t\t\t\t\tvar extra = string.charCodeAt(pos);\n\t\t\t\t\t\tif ((extra & 0xfc00) === 0xdc00) {\n\t\t\t\t\t\t\t++pos;\n\t\t\t\t\t\t\tvalue = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (value >= 0xd800 && value <= 0xdbff) {\n\t\t\t\t\t\tcontinue; // drop lone surrogate\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// expand the buffer if we couldn't write 4 bytes\n\t\t\t\tif (at + 4 > target.length) {\n\t\t\t\t\ttlen += 8; // minimum extra\n\t\t\t\t\ttlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining\n\t\t\t\t\ttlen = (tlen >> 3) << 3; // 8 byte offset\n\n\t\t\t\t\tvar update = new Uint8Array(tlen);\n\t\t\t\t\tupdate.set(target);\n\t\t\t\t\ttarget = update;\n\t\t\t\t}\n\n\t\t\t\tif ((value & 0xffffff80) === 0) { // 1-byte\n\t\t\t\t\ttarget[at++] = value; // ASCII\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ((value & 0xfffff800) === 0) { // 2-byte\n\t\t\t\t\ttarget[at++] = ((value >> 6) & 0x1f) | 0xc0;\n\t\t\t\t} else if ((value & 0xffff0000) === 0) { // 3-byte\n\t\t\t\t\ttarget[at++] = ((value >> 12) & 0x0f) | 0xe0;\n\t\t\t\t\ttarget[at++] = ((value >> 6) & 0x3f) | 0x80;\n\t\t\t\t} else if ((value & 0xffe00000) === 0) { // 4-byte\n\t\t\t\t\ttarget[at++] = ((value >> 18) & 0x07) | 0xf0;\n\t\t\t\t\ttarget[at++] = ((value >> 12) & 0x3f) | 0x80;\n\t\t\t\t\ttarget[at++] = ((value >> 6) & 0x3f) | 0x80;\n\t\t\t\t} else {\n\t\t\t\t\t// FIXME: do we care\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\ttarget[at++] = (value & 0x3f) | 0x80;\n\t\t\t}\n\n\t\t\treturn target.slice(0, at);\n\t\t}\n\n\t\t/********************************************************/\n\t\t/* String Decoder fallback */\n\t\t/********************************************************/\n\t\tfunction stringDecode (buf) {\n\t\t\tvar end = buf.length;\n\t\t\tvar res = [];\n\n\t\t\tvar i = 0;\n\t\t\twhile (i < end) {\n\t\t\t\tvar firstByte = buf[i];\n\t\t\t\tvar codePoint = null;\n\t\t\t\tvar bytesPerSequence = (firstByte > 0xEF) ? 4\n\t\t\t\t\t: (firstByte > 0xDF) ? 3\n\t\t\t\t\t\t: (firstByte > 0xBF) ? 2\n\t\t\t\t\t\t\t: 1;\n\n\t\t\t\tif (i + bytesPerSequence <= end) {\n\t\t\t\t\tvar secondByte, thirdByte, fourthByte, tempCodePoint;\n\n\t\t\t\t\tswitch (bytesPerSequence) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (firstByte < 0x80) {\n\t\t\t\t\t\t\tcodePoint = firstByte;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tif ((secondByte & 0xC0) === 0x80) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n\t\t\t\t\t\t\tif (tempCodePoint > 0x7F) {\n\t\t\t\t\t\t\t\tcodePoint = tempCodePoint;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tthirdByte = buf[i + 2];\n\t\t\t\t\t\tif ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n\t\t\t\t\t\t\tif (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n\t\t\t\t\t\t\t\tcodePoint = tempCodePoint;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tthirdByte = buf[i + 2];\n\t\t\t\t\t\tfourthByte = buf[i + 3];\n\t\t\t\t\t\tif ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n\t\t\t\t\t\t\tif (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n\t\t\t\t\t\t\t\tcodePoint = tempCodePoint;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (codePoint === null) {\n\t\t\t\t\t// we did not generate a valid codePoint so insert a\n\t\t\t\t\t// replacement char (U+FFFD) and advance only 1 byte\n\t\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t\t\tbytesPerSequence = 1;\n\t\t\t\t} else if (codePoint > 0xFFFF) {\n\t\t\t\t\t// encode to utf16 (surrogate pair dance)\n\t\t\t\t\tcodePoint -= 0x10000;\n\t\t\t\t\tres.push(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t\t\t}\n\n\t\t\t\tres.push(codePoint);\n\t\t\t\ti += bytesPerSequence;\n\t\t\t}\n\n\t\t\tvar len = res.length;\n\t\t\tvar str = \"\";\n\t\t\tvar j = 0;\n\n\t\t\twhile (j < len) {\n\t\t\t\tstr += String.fromCharCode.apply(String, res.slice(j, j += 0x1000));\n\t\t\t}\n\n\t\t\treturn str;\n\t\t}\n\n\t\t// string -> buffer\n\t\tvar textEncode = typeof TextEncoder === \"function\"\n\t\t\t? TextEncoder.prototype.encode.bind(new TextEncoder())\n\t\t\t: stringEncode;\n\n\t\t// buffer -> string\n\t\tvar textDecode = typeof TextDecoder === \"function\"\n\t\t\t? TextDecoder.prototype.decode.bind(new TextDecoder())\n\t\t\t: stringDecode;\n\n\t\tfunction FakeBlobBuilder () {\n\t\t\tfunction isDataView (obj) {\n\t\t\t\treturn obj && Object.prototype.isPrototypeOf.call(DataView, obj);\n\t\t\t}\n\t\t\tfunction bufferClone (buf) {\n\t\t\t\tvar view = new Array(buf.byteLength);\n\t\t\t\tvar array = new Uint8Array(buf);\n\t\t\t\tvar i = view.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tview[i] = array[i];\n\t\t\t\t}\n\t\t\t\treturn view;\n\t\t\t}\n\t\t\tfunction array2base64 (input) {\n\t\t\t\tvar byteToCharMap = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\t\t\t\tvar output = [];\n\n\t\t\t\tfor (var i = 0; i < input.length; i += 3) {\n\t\t\t\t\tvar byte1 = input[i];\n\t\t\t\t\tvar haveByte2 = i + 1 < input.length;\n\t\t\t\t\tvar byte2 = haveByte2 ? input[i + 1] : 0;\n\t\t\t\t\tvar haveByte3 = i + 2 < input.length;\n\t\t\t\t\tvar byte3 = haveByte3 ? input[i + 2] : 0;\n\n\t\t\t\t\tvar outByte1 = byte1 >> 2;\n\t\t\t\t\tvar outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n\t\t\t\t\tvar outByte3 = ((byte2 & 0x0F) << 2) | (byte3 >> 6);\n\t\t\t\t\tvar outByte4 = byte3 & 0x3F;\n\n\t\t\t\t\tif (!haveByte3) {\n\t\t\t\t\t\toutByte4 = 64;\n\n\t\t\t\t\t\tif (!haveByte2) {\n\t\t\t\t\t\t\toutByte3 = 64;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tbyteToCharMap[outByte1], byteToCharMap[outByte2],\n\t\t\t\t\t\tbyteToCharMap[outByte3], byteToCharMap[outByte4]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn output.join(\"\");\n\t\t\t}\n\n\t\t\tvar create = Object.create || function (a) {\n\t\t\t\tfunction c () {}\n\t\t\t\tc.prototype = a;\n\t\t\t\treturn new c();\n\t\t\t};\n\n\t\t\tif (arrayBufferSupported) {\n\t\t\t\tvar viewClasses = [\n\t\t\t\t\t\"[object Int8Array]\",\n\t\t\t\t\t\"[object Uint8Array]\",\n\t\t\t\t\t\"[object Uint8ClampedArray]\",\n\t\t\t\t\t\"[object Int16Array]\",\n\t\t\t\t\t\"[object Uint16Array]\",\n\t\t\t\t\t\"[object Int32Array]\",\n\t\t\t\t\t\"[object Uint32Array]\",\n\t\t\t\t\t\"[object Float32Array]\",\n\t\t\t\t\t\"[object Float64Array]\"\n\t\t\t\t];\n\n\t\t\t\tvar isArrayBufferView = ArrayBuffer.isView || function (obj) {\n\t\t\t\t\treturn obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction concatTypedarrays (chunks) {\n\t\t\t\tvar size = 0;\n\t\t\t\tvar j = chunks.length;\n\t\t\t\twhile (j--) { size += chunks[j].length; }\n\t\t\t\tvar b = new Uint8Array(size);\n\t\t\t\tvar offset = 0;\n\t\t\t\tfor (var i = 0; i < chunks.length; i++) {\n\t\t\t\t\tvar chunk = chunks[i];\n\t\t\t\t\tb.set(chunk, offset);\n\t\t\t\t\toffset += chunk.byteLength || chunk.length;\n\t\t\t\t}\n\n\t\t\t\treturn b;\n\t\t\t}\n\n\t\t\t/********************************************************/\n\t\t\t/* Blob constructor */\n\t\t\t/********************************************************/\n\t\t\tfunction Blob (chunks, opts) {\n\t\t\t\tchunks = chunks || [];\n\t\t\t\topts = opts == null ? {} : opts;\n\t\t\t\tfor (var i = 0, len = chunks.length; i < len; i++) {\n\t\t\t\t\tvar chunk = chunks[i];\n\t\t\t\t\tif (chunk instanceof Blob) {\n\t\t\t\t\t\tchunks[i] = chunk._buffer;\n\t\t\t\t\t} else if (typeof chunk === \"string\") {\n\t\t\t\t\t\tchunks[i] = textEncode(chunk);\n\t\t\t\t\t} else if (arrayBufferSupported && (Object.prototype.isPrototypeOf.call(ArrayBuffer, chunk) || isArrayBufferView(chunk))) {\n\t\t\t\t\t\tchunks[i] = bufferClone(chunk);\n\t\t\t\t\t} else if (arrayBufferSupported && isDataView(chunk)) {\n\t\t\t\t\t\tchunks[i] = bufferClone(chunk.buffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunks[i] = textEncode(String(chunk));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._buffer = global.Uint8Array\n\t\t\t\t\t? concatTypedarrays(chunks)\n\t\t\t\t\t: [].concat.apply([], chunks);\n\t\t\t\tthis.size = this._buffer.length;\n\n\t\t\t\tthis.type = opts.type || \"\";\n\t\t\t\tif (/[^\\u0020-\\u007E]/.test(this.type)) {\n\t\t\t\t\tthis.type = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tthis.type = this.type.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tBlob.prototype.arrayBuffer = function () {\n\t\t\t\treturn Promise.resolve(this._buffer.buffer || this._buffer);\n\t\t\t};\n\n\t\t\tBlob.prototype.text = function () {\n\t\t\t\treturn Promise.resolve(textDecode(this._buffer));\n\t\t\t};\n\n\t\t\tBlob.prototype.slice = function (start, end, type) {\n\t\t\t\tvar slice = this._buffer.slice(start || 0, end || this._buffer.length);\n\t\t\t\treturn new Blob([slice], {type: type});\n\t\t\t};\n\n\t\t\tBlob.prototype.toString = function () {\n\t\t\t\treturn \"[object Blob]\";\n\t\t\t};\n\n\t\t\t/********************************************************/\n\t\t\t/* File constructor */\n\t\t\t/********************************************************/\n\t\t\tfunction File (chunks, name, opts) {\n\t\t\t\topts = opts || {};\n\t\t\t\tvar a = Blob.call(this, chunks, opts) || this;\n\t\t\t\ta.name = name.replace(/\\//g, \":\");\n\t\t\t\ta.lastModifiedDate = opts.lastModified ? new Date(opts.lastModified) : new Date();\n\t\t\t\ta.lastModified = +a.lastModifiedDate;\n\n\t\t\t\treturn a;\n\t\t\t}\n\n\t\t\tFile.prototype = create(Blob.prototype);\n\t\t\tFile.prototype.constructor = File;\n\n\t\t\tif (Object.setPrototypeOf) {\n\t\t\t\tObject.setPrototypeOf(File, Blob);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tFile.__proto__ = Blob;\n\t\t\t\t} catch (e) {/**/}\n\t\t\t}\n\n\t\t\tFile.prototype.toString = function () {\n\t\t\t\treturn \"[object File]\";\n\t\t\t};\n\n\t\t\t/********************************************************/\n\t\t\t/* FileReader constructor */\n\t\t\t/********************************************************/\n\t\t\tfunction FileReader () {\n\t\t\t\tif (!(this instanceof FileReader)) {\n\t\t\t\t\tthrow new TypeError(\"Failed to construct 'FileReader': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n\t\t\t\t}\n\n\t\t\t\tvar delegate = document.createDocumentFragment();\n\t\t\t\tthis.addEventListener = delegate.addEventListener;\n\t\t\t\tthis.dispatchEvent = function (evt) {\n\t\t\t\t\tvar local = this[\"on\" + evt.type];\n\t\t\t\t\tif (typeof local === \"function\") local(evt);\n\t\t\t\t\tdelegate.dispatchEvent(evt);\n\t\t\t\t};\n\t\t\t\tthis.removeEventListener = delegate.removeEventListener;\n\t\t\t}\n\n\t\t\tfunction _read (fr, blob, kind) {\n\t\t\t\tif (!(blob instanceof Blob)) {\n\t\t\t\t\tthrow new TypeError(\"Failed to execute '\" + kind + \"' on 'FileReader': parameter 1 is not of type 'Blob'.\");\n\t\t\t\t}\n\n\t\t\t\tfr.result = \"\";\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tthis.readyState = FileReader.LOADING;\n\t\t\t\t\tfr.dispatchEvent(new Event(\"load\"));\n\t\t\t\t\tfr.dispatchEvent(new Event(\"loadend\"));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tFileReader.EMPTY = 0;\n\t\t\tFileReader.LOADING = 1;\n\t\t\tFileReader.DONE = 2;\n\t\t\tFileReader.prototype.error = null;\n\t\t\tFileReader.prototype.onabort = null;\n\t\t\tFileReader.prototype.onerror = null;\n\t\t\tFileReader.prototype.onload = null;\n\t\t\tFileReader.prototype.onloadend = null;\n\t\t\tFileReader.prototype.onloadstart = null;\n\t\t\tFileReader.prototype.onprogress = null;\n\n\t\t\tFileReader.prototype.readAsDataURL = function (blob) {\n\t\t\t\t_read(this, blob, \"readAsDataURL\");\n\t\t\t\tthis.result = \"data:\" + blob.type + \";base64,\" + array2base64(blob._buffer);\n\t\t\t};\n\n\t\t\tFileReader.prototype.readAsText = function (blob) {\n\t\t\t\t_read(this, blob, \"readAsText\");\n\t\t\t\tthis.result = textDecode(blob._buffer);\n\t\t\t};\n\n\t\t\tFileReader.prototype.readAsArrayBuffer = function (blob) {\n\t\t\t\t_read(this, blob, \"readAsText\");\n\t\t\t\t// return ArrayBuffer when possible\n\t\t\t\tthis.result = (blob._buffer.buffer || blob._buffer).slice();\n\t\t\t};\n\n\t\t\tFileReader.prototype.abort = function () {};\n\n\t\t\t/********************************************************/\n\t\t\t/* URL */\n\t\t\t/********************************************************/\n\t\t\tURL.createObjectURL = function (blob) {\n\t\t\t\treturn blob instanceof Blob\n\t\t\t\t\t? \"data:\" + blob.type + \";base64,\" + array2base64(blob._buffer)\n\t\t\t\t\t: createObjectURL.call(URL, blob);\n\t\t\t};\n\n\t\t\tURL.revokeObjectURL = function (url) {\n\t\t\t\trevokeObjectURL && revokeObjectURL.call(URL, url);\n\t\t\t};\n\n\t\t\t/********************************************************/\n\t\t\t/* XHR */\n\t\t\t/********************************************************/\n\t\t\tvar _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send;\n\t\t\tif (_send) {\n\t\t\t\tXMLHttpRequest.prototype.send = function (data) {\n\t\t\t\t\tif (data instanceof Blob) {\n\t\t\t\t\t\tthis.setRequestHeader(\"Content-Type\", data.type);\n\t\t\t\t\t\t_send.call(this, textDecode(data._buffer));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_send.call(this, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\texports.Blob = Blob;\n\t\t\texports.File = File;\n\t\t\texports.FileReader = FileReader;\n\t\t\texports.URL = URL;\n\t\t}\n\n\t\tfunction fixFileAndXHR () {\n\t\t\tvar isIE = !!global.ActiveXObject || (\n\t\t\t\t\"-ms-scroll-limit\" in document.documentElement.style &&\n\t\t\t\t\"-ms-ime-align\" in document.documentElement.style\n\t\t\t);\n\n\t\t\t// Monkey patched\n\t\t\t// IE doesn't set Content-Type header on XHR whose body is a typed Blob\n\t\t\t// https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/6047383\n\t\t\tvar _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send;\n\t\t\tif (isIE && _send) {\n\t\t\t\tXMLHttpRequest.prototype.send = function (data) {\n\t\t\t\t\tif (data instanceof Blob) {\n\t\t\t\t\t\tthis.setRequestHeader(\"Content-Type\", data.type);\n\t\t\t\t\t\t_send.call(this, data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_send.call(this, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tnew File([], \"\");\n\t\t\t\texports.File = global.File;\n\t\t\t\texports.FileReader = global.FileReader;\n\t\t\t} catch (e) {\n\t\t\t\ttry {\n\t\t\t\t\texports.File = new Function(\"class File extends Blob {\" +\n\t\t\t\t\t\t\"constructor(chunks, name, opts) {\" +\n\t\t\t\t\t\t\t\"opts = opts || {};\" +\n\t\t\t\t\t\t\t\"super(chunks, opts || {});\" +\n\t\t\t\t\t\t\t\"this.name = name.replace(/\\\\//g, \\\":\\\");\" +\n\t\t\t\t\t\t\t\"this.lastModifiedDate = opts.lastModified ? new Date(opts.lastModified) : new Date();\" +\n\t\t\t\t\t\t\t\"this.lastModified = +this.lastModifiedDate;\" +\n\t\t\t\t\t\t\"}};\" +\n\t\t\t\t\t\t\"return new File([], \\\"\\\"), File\"\n\t\t\t\t\t)();\n\t\t\t\t} catch (e) {\n\t\t\t\t\texports.File = function (b, d, c) {\n\t\t\t\t\t\tvar blob = new Blob(b, c);\n\t\t\t\t\t\tvar t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date();\n\n\t\t\t\t\t\tblob.name = d.replace(/\\//g, \":\");\n\t\t\t\t\t\tblob.lastModifiedDate = t;\n\t\t\t\t\t\tblob.lastModified = +t;\n\t\t\t\t\t\tblob.toString = function () {\n\t\t\t\t\t\t\treturn \"[object File]\";\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (strTag) {\n\t\t\t\t\t\t\tblob[strTag] = \"File\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn blob;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (blobSupported) {\n\t\t\tfixFileAndXHR();\n\t\t\texports.Blob = blobSupportsArrayBufferView ? global.Blob : BlobConstructor;\n\t\t} else if (blobBuilderSupported) {\n\t\t\tfixFileAndXHR();\n\t\t\texports.Blob = BlobBuilderConstructor;\n\t\t} else {\n\t\t\tFakeBlobBuilder();\n\t\t}\n\n\t\tif (strTag) {\n\t\t\tif (!exports.File.prototype[strTag]) exports.File.prototype[strTag] = \"File\";\n\t\t\tif (!exports.Blob.prototype[strTag]) exports.Blob.prototype[strTag] = \"Blob\";\n\t\t\tif (!exports.FileReader.prototype[strTag]) exports.FileReader.prototype[strTag] = \"FileReader\";\n\t\t}\n\n\t\tvar blob = exports.Blob.prototype;\n\t\tvar stream;\n\n\t\ttry {\n\t\t\tnew ReadableStream({ type: \"bytes\" });\n\t\t\tstream = function stream() {\n\t\t\t\tvar position = 0;\n\t\t\t\tvar blob = this;\n\n\t\t\t\treturn new ReadableStream({\n\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\tautoAllocateChunkSize: 524288,\n\n\t\t\t\t\tpull: function (controller) {\n\t\t\t\t\t\tvar v = controller.byobRequest.view;\n\t\t\t\t\t\tvar chunk = blob.slice(position, position + v.byteLength);\n\t\t\t\t\t\treturn chunk.arrayBuffer()\n\t\t\t\t\t\t\t.then(function (buffer) {\n\t\t\t\t\t\t\t\tvar uint8array = new Uint8Array(buffer);\n\t\t\t\t\t\t\t\tvar bytesRead = uint8array.byteLength;\n\n\t\t\t\t\t\t\t\tposition += bytesRead;\n\t\t\t\t\t\t\t\tv.set(uint8array);\n\t\t\t\t\t\t\t\tcontroller.byobRequest.respond(bytesRead);\n\n\t\t\t\t\t\t\t\tif(position >= blob.size)\n\t\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t} catch (e) {\n\t\t\ttry {\n\t\t\t\tnew ReadableStream({});\n\t\t\t\tstream = function stream(blob){\n\t\t\t\t\tvar position = 0;\n\n\t\t\t\t\treturn new ReadableStream({\n\t\t\t\t\t\tpull: function (controller) {\n\t\t\t\t\t\t\tvar chunk = blob.slice(position, position + 524288);\n\n\t\t\t\t\t\t\treturn chunk.arrayBuffer().then(function (buffer) {\n\t\t\t\t\t\t\t\tposition += buffer.byteLength;\n\t\t\t\t\t\t\t\tvar uint8array = new Uint8Array(buffer);\n\t\t\t\t\t\t\t\tcontroller.enqueue(uint8array);\n\n\t\t\t\t\t\t\t\tif (position == blob.size)\n\t\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\ttry {\n\t\t\t\t\tnew Response(\"\").body.getReader().read();\n\t\t\t\t\tstream = function stream() {\n\t\t\t\t\t\treturn (new Response(this)).body;\n\t\t\t\t\t};\n\t\t\t\t} catch (e) {\n\t\t\t\t\tstream = function stream() {\n\t\t\t\t\t\tthrow new Error(\"Include https://github.com/MattiasBuelens/web-streams-polyfill\");\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction promisify(obj) {\n\t\t\treturn new Promise(function(resolve, reject) {\n\t\t\t\tobj.onload = obj.onerror = function(evt) {\n\t\t\t\t\tobj.onload = obj.onerror = null;\n\n\t\t\t\t\tevt.type === \"load\" ?\n\t\t\t\t\t\tresolve(obj.result || obj) :\n\t\t\t\t\t\treject(new Error(\"Failed to read the blob/file\"));\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tif (!blob.arrayBuffer) {\n\t\t\tblob.arrayBuffer = function arrayBuffer() {\n\t\t\t\tvar fr = new FileReader();\n\t\t\t\tfr.readAsArrayBuffer(this);\n\t\t\t\treturn promisify(fr);\n\t\t\t};\n\t\t}\n\n\t\tif (!blob.text) {\n\t\t\tblob.text = function text() {\n\t\t\t\tvar fr = new FileReader();\n\t\t\t\tfr.readAsText(this);\n\t\t\t\treturn promisify(fr);\n\t\t\t};\n\t\t}\n\n\t\tif (!blob.stream) {\n\t\t\tblob.stream = stream;\n\t\t}\n\t});\n})(\n\ttypeof self !== \"undefined\" && self ||\n\t\ttypeof window !== \"undefined\" && window ||\n\t\ttypeof global !== \"undefined\" && global ||\n\t\tthis\n);\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","import { useState, useRef, useEffect } from \"react\";\nimport { error } from \"../../../shared/Notification.bs\";\nimport { Blob } from \"blob-polyfill\";\nimport { saveAs } from \"file-saver\";\n\nfunction audioRecorder(authenticity_token, attachingCB) {\n const [state, setState] = useState({\n recording: false,\n url: undefined,\n blob: undefined,\n id: undefined,\n });\n\n const mediaStreamRef = useRef();\n\n useEffect(() => {\n if (state.blob && state.blob.size < 5000000) {\n attachingCB(true);\n const formData = new FormData();\n formData.append(\"authenticity_token\", authenticity_token);\n formData.append(\"file\", state.blob);\n fetch(\"/timeline_event_files/\", {\n method: \"POST\",\n body: formData,\n })\n .then((res) => res.json())\n .then((res) => {\n setState({ ...state, id: res.id });\n })\n .catch((err) => {\n error(\"Something went wrong\", String(err));\n });\n }\n }, [state.blob]);\n function startRecording() {\n if (\n navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia &&\n !state.recording\n ) {\n navigator.mediaDevices\n .getUserMedia({\n audio: true,\n })\n .then(function (stream) {\n mediaStreamRef.current = new MediaRecorder(stream);\n const mediaRecorder = mediaStreamRef.current;\n let chunks = [];\n mediaRecorder.ondataavailable = function (e) {\n chunks.push(e.data);\n };\n mediaRecorder.onstop = () => {\n const blob = new Blob(chunks, { type: \"audio/ogg; codecs=opus\" });\n const audioURL = window.URL.createObjectURL(blob);\n setState({ ...state, blob: blob, url: audioURL, recording: false });\n stream.getTracks().forEach((track) => track.stop());\n };\n setState({ ...state, recording: true });\n\n mediaRecorder.start();\n })\n .catch(function (err) {\n setRecording(false);\n error(\n \"Permission to access microphone not granted.\",\n \"Allow access to microphone in your browser settings for this domain.\"\n );\n });\n } else {\n error(\"Browser does not support recording!\");\n }\n }\n return {\n id: state.id,\n url: state.url,\n recording: state.recording,\n blobSize: state.blob?.size,\n startRecording,\n stopRecording: () => {\n if (mediaStreamRef.current) {\n mediaStreamRef.current.stop();\n }\n },\n downloadBlob: () => {\n if (state.blob) {\n saveAs(state.blob, \"Recording.mp3\");\n }\n },\n };\n}\nexport { audioRecorder };\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as $$Notification from \"../../../shared/Notification.bs.js\";\nimport * as AuthenticityToken from \"../../../shared/utils/AuthenticityToken.bs.js\";\nimport * as CoursesCurriculum__AudioNavigator from \"./CoursesCurriculum__AudioNavigator\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction audioRecorder(prim0, prim1) {\n return CoursesCurriculum__AudioNavigator.audioRecorder(prim0, prim1);\n}\n\nvar partial_arg = \"components.CoursesCurriculum__AudioRecorder\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction CoursesCurriculum__AudioRecorder(Props) {\n var attachingCB = Props.attachingCB;\n var attachFileCB = Props.attachFileCB;\n var preview = Props.preview;\n var audioRecorder = CoursesCurriculum__AudioNavigator.audioRecorder(AuthenticityToken.fromHead(undefined), attachingCB);\n React.useEffect((function () {\n var id = audioRecorder.id;\n if (id !== undefined) {\n Curry._2(attachFileCB, id, \"recorderaudio\");\n }\n \n }), [audioRecorder.id]);\n var tmp;\n if (audioRecorder.recording) {\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row pointer-cursor pt-2 md:items-center\"\n }, React.createElement(\"button\", {\n className: \"flex items-center bg-gray-50 border rounded-full hover:bg-gray-300\",\n onClick: (function (_e) {\n return Curry._1(audioRecorder.stopRecording, undefined);\n })\n }, React.createElement(\"div\", {\n className: \"flex shrink-0 items-center justify-center bg-red-600 shadow-md rounded-full h-10 w-10\"\n }, React.createElement(Icon.make, {\n className: \"if i-stop-solid text-base text-white relative z-10\"\n }), React.createElement(\"span\", {\n className: \"w-8 h-8 z-0 animate-ping absolute inline-flex rounded-full bg-red-600 opacity-75\"\n })), React.createElement(\"span\", {\n className: \"inline-block pl-3 pr-4 text-xs font-semibold\"\n }, t(undefined, undefined, \"recording_string\"))));\n } else {\n var _url = audioRecorder.url;\n var url = audioRecorder.url;\n var match = audioRecorder.url;\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row pointer-cursor pt-2 md:items-center\"\n }, React.createElement(\"button\", {\n className: \"flex items-center bg-red-100 border rounded-full hover:bg-red-200\",\n onClick: (function (_e) {\n if (preview) {\n return $$Notification.notice(t(undefined, undefined, \"preview_mode\"), t(undefined, undefined, \"cannot_record\"));\n } else {\n return Curry._1(audioRecorder.startRecording, undefined);\n }\n })\n }, React.createElement(\"div\", {\n className: \"flex shrink-0 items-center justify-center bg-white shadow-md rounded-full h-10 w-10\"\n }, React.createElement(Icon.make, {\n className: \"if i-microphone-fill-light text-lg text-red-600\"\n })), React.createElement(\"span\", {\n className: \"inline-block pl-3 pr-4 text-xs font-semibold\"\n }, _url !== undefined ? t(undefined, undefined, \"button_text_record_again\") : t(undefined, undefined, \"button_text_start_recording\"))), url !== undefined ? React.createElement(\"audio\", {\n className: \"pt-3 md:pt-0 md:pl-4\",\n controls: true,\n src: url\n }) : null, match !== undefined ? React.createElement(\"div\", {\n className: \"btn btn-success ml-4\",\n onClick: (function (_e) {\n return Curry._1(audioRecorder.downloadBlob, undefined);\n })\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-download\"\n })) : null);\n }\n var size = audioRecorder.blobSize;\n return React.createElement(React.Fragment, undefined, tmp, size !== undefined && size > 5000000 ? React.createElement(\"div\", {\n className: \"text-xs text-red-500 mt-2\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle mr-2\"\n }), t(undefined, undefined, \"recording_size_limit_warning\")) : null);\n}\n\nvar make = CoursesCurriculum__AudioRecorder;\n\nexport {\n str ,\n audioRecorder ,\n t ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as Radio from \"../../../shared/components/Radio.bs.js\";\nimport * as React from \"react\";\nimport * as PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as UrlUtils from \"../../../shared/utils/UrlUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as MarkdownEditor from \"../../../shared/components/MarkdownEditor.bs.js\";\nimport * as CoursesCurriculum__FileForm from \"./CoursesCurriculum__FileForm.bs.js\";\nimport * as CoursesCurriculum__AudioRecorder from \"./CoursesCurriculum__AudioRecorder.bs.js\";\nimport * as CoursesCurriculum__ChecklistItem from \"../types/CoursesCurriculum__ChecklistItem.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__SubmissionItem\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction kindIconClasses(result) {\n switch (result.TAG | 0) {\n case /* Files */0 :\n return \"if i-file-regular md:text-base text-gray-800 if-fw\";\n case /* Link */1 :\n return \"if i-link-regular md:text-base text-gray-800 if-fw\";\n case /* ShortText */2 :\n return \"if i-short-text-regular md:text-base text-gray-800 if-fw\";\n case /* LongText */3 :\n return \"if i-long-text-regular md:text-base text-gray-800 if-fw\";\n case /* MultiChoice */4 :\n return \"if i-check-circle-alt-regular md:text-base text-gray-800 if-fw\";\n case /* AudioRecord */5 :\n return \"if i-microphone-outline-regular md:text-base text-gray-800 if-fw\";\n \n }\n}\n\nfunction computeId(index, checklistItem) {\n return String(index) + (\"-\" + CoursesCurriculum__ChecklistItem.kindAsString(checklistItem));\n}\n\nfunction notBlank(string) {\n return $$String.trim(string) !== \"\";\n}\n\nfunction placeholder(id, checklistItem) {\n var title = CoursesCurriculum__ChecklistItem.title(checklistItem);\n var optional = CoursesCurriculum__ChecklistItem.optional(checklistItem);\n return React.createElement(\"div\", {\n className: \"flex items-start\"\n }, React.createElement(PfIcon.make, {\n className: kindIconClasses(CoursesCurriculum__ChecklistItem.result(checklistItem))\n }), React.createElement(\"label\", {\n className: \"font-semibold text-sm pl-2 tracking-wide\",\n htmlFor: id\n }, React.createElement(MarkdownBlock.make, {\n markdown: title + (\n optional ? \" (\" + I18n.ts(undefined, undefined, \"optional\") + \")\" : \"\"\n ),\n profile: /* Permissive */0\n })));\n}\n\nfunction showError(message, active) {\n if (active) {\n return React.createElement(\"div\", {\n className: \"mt-1 px-1 py-px rounded text-xs font-semibold text-red-600 bg-red-100 inline-flex items-center\"\n }, React.createElement(\"span\", {\n className: \"mr-2\"\n }, React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle\"\n })), React.createElement(\"span\", undefined, message));\n } else {\n return null;\n }\n}\n\nfunction showLink(value, id, updateResultCB) {\n return React.createElement(\"div\", undefined, React.createElement(\"input\", {\n className: \"cursor-pointer truncate h-10 border border-gray-300 focus:outline-none focus:border-primary-400 focus:shadow-inner px-4 items-center font-semibold rounded text-sm mr-2 block w-full\",\n id: id,\n placeholder: tr(undefined, undefined, \"link_placeholder\"),\n type: \"text\",\n value: value,\n onChange: (function (e) {\n return Curry._1(updateResultCB, {\n TAG: /* Link */1,\n _0: e.target.value\n });\n })\n }), showError(tr(undefined, undefined, \"link_error\"), UrlUtils.isInvalid(true, value)));\n}\n\nfunction showShortText(value, id, updateResultCB) {\n return React.createElement(\"div\", undefined, React.createElement(\"input\", {\n className: \"cursor-pointer truncate h-10 border border-gray-300 focus:outline-none focus:border-primary-400 focus:shadow-inner px-4 items-center font-semibold rounded text-sm mr-2 block w-full\",\n id: id,\n maxLength: 250,\n placeholder: tr(undefined, undefined, \"short_text_placeholder\"),\n type: \"text\",\n value: value,\n onChange: (function (e) {\n return Curry._1(updateResultCB, {\n TAG: /* ShortText */2,\n _0: e.target.value\n });\n })\n }), showError(tr(undefined, undefined, \"short_text_error\"), !CoursesCurriculum__ChecklistItem.validShortText(value) && $$String.trim(value) !== \"\"));\n}\n\nfunction longTextWarning(value) {\n var currentLength = value.length;\n var showWarning = $$String.trim(value) !== \"\" && currentLength > 4500;\n var colors = currentLength < 4900 ? \"text-orange-700 bg-orange-100\" : \"text-red-600 bg-red-100\";\n if (showWarning) {\n return React.createElement(\"div\", {\n className: \"flex justify-between items-center mt-1\"\n }, React.createElement(\"div\", {\n className: \"hidden md:inline px-2 py-px rounded text-xs font-semibold inline-flex items-center \" + colors\n }, React.createElement(\"span\", {\n className: \"mr-2\"\n }, React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle\"\n })), React.createElement(\"span\", undefined, tr(undefined, undefined, \"warning_length_limit\"))), React.createElement(\"div\", {\n className: \"shrink-1 text-tiny font-semibold px-1 py-px border border-transparent rounded \" + colors\n }, String(currentLength), \" / 5000\"));\n } else {\n return null;\n }\n}\n\nfunction updateLongText(updateResultCB, value) {\n return Curry._1(updateResultCB, {\n TAG: /* LongText */3,\n _0: value\n });\n}\n\nfunction showLongText(value, id, updateResultCB) {\n return React.createElement(\"div\", undefined, React.createElement(MarkdownEditor.make, {\n value: value,\n onChange: (function (param) {\n return Curry._1(updateResultCB, {\n TAG: /* LongText */3,\n _0: param\n });\n }),\n profile: /* Permissive */0,\n textareaId: id,\n maxLength: 5000\n }), longTextWarning(value));\n}\n\nfunction checkboxOnChange(choices, itemIndex, updateResultCB, $$event) {\n if ($$event.target.checked) {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: itemIndex\n });\n } else {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: undefined\n });\n }\n}\n\nfunction showMultiChoice(choices, choice, id, updateResultCB) {\n return choices.map(function (label, index) {\n var checked = Belt_Option.mapWithDefault(choice, false, (function (i) {\n return i === index;\n }));\n return React.createElement(Radio.make, {\n id: id + String(index),\n label: label,\n onChange: (function (param) {\n return checkboxOnChange(choices, index, updateResultCB, param);\n }),\n checked: checked,\n key: String(index)\n });\n });\n}\n\nfunction attachFile(updateResultCB, attachingCB, files, id, filename) {\n Curry._1(attachingCB, false);\n return Curry._1(updateResultCB, {\n TAG: /* Files */0,\n _0: $$Array.append([CoursesCurriculum__ChecklistItem.makeFile(id, filename)], files)\n });\n}\n\nfunction attachRecordingFile(updateResultCB, attachingCB, id, filename) {\n Curry._1(attachingCB, false);\n return Curry._1(updateResultCB, {\n TAG: /* AudioRecord */5,\n _0: {\n id: id,\n name: filename\n }\n });\n}\n\nfunction removeFile(updateResultCB, files, id) {\n return Curry._1(updateResultCB, {\n TAG: /* Files */0,\n _0: files.filter(function (a) {\n return CoursesCurriculum__ChecklistItem.fileId(a) !== id;\n })\n });\n}\n\nfunction showFiles(files, preview, id, attachingCB, updateResultCB, index) {\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex flex-wrap\",\n id: id\n }, $$Array.map((function (file) {\n return React.createElement(\"div\", {\n key: \"file-\" + CoursesCurriculum__ChecklistItem.fileId(file),\n \"aria-label\": \"file-\" + CoursesCurriculum__ChecklistItem.filename(file),\n className: \"w-1/3 pr-2 pb-2\",\n target: \"_blank\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between border overflow-hidden rounded border-red-300 bg-white text-red-600 hover:text-red-600\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"span\", {\n className: \"flex w-10 justify-center items-center p-2 bg-red-600 text-white\"\n }, React.createElement(\"i\", {\n className: \"far fa-file\"\n })), React.createElement(\"span\", {\n className: \"course-show-attachments__attachment-title rounded text-xs font-semibold inline-block whitespace-normal truncate w-32 md:w-38 pl-3 pr-2 py-2 leading-loose\"\n }, CoursesCurriculum__ChecklistItem.filename(file))), React.createElement(\"button\", {\n className: \"flex w-8 justify-center items-center p-2 cursor-pointer bg-gray-50 border-l text-gray-600 hover:bg-gray-50 hover:text-gray-900\",\n title: tr(undefined, undefined, \"remove\") + CoursesCurriculum__ChecklistItem.filename(file),\n onClick: (function (param) {\n return removeFile(updateResultCB, files, CoursesCurriculum__ChecklistItem.fileId(file));\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-times-regular text-sm\"\n }))));\n }), files)), files.length < 3 ? React.createElement(CoursesCurriculum__FileForm.make, {\n attachFileCB: (function (param, param$1) {\n return attachFile(updateResultCB, attachingCB, files, param, param$1);\n }),\n attachingCB: attachingCB,\n preview: preview,\n index: index\n }) : null);\n}\n\nfunction showAudioRecorder(attachingCB, updateResultCB, preview) {\n return React.createElement(CoursesCurriculum__AudioRecorder.make, {\n attachingCB: attachingCB,\n attachFileCB: (function (param, param$1) {\n return attachRecordingFile(updateResultCB, attachingCB, param, param$1);\n }),\n preview: preview\n });\n}\n\nfunction CoursesCurriculum__SubmissionItem(Props) {\n var index = Props.index;\n var checklistItem = Props.checklistItem;\n var updateResultCB = Props.updateResultCB;\n var attachingCB = Props.attachingCB;\n var preview = Props.preview;\n var id = computeId(index, checklistItem);\n var files = CoursesCurriculum__ChecklistItem.result(checklistItem);\n var tmp;\n switch (files.TAG | 0) {\n case /* Files */0 :\n tmp = showFiles(files._0, preview, id, attachingCB, updateResultCB, index);\n break;\n case /* Link */1 :\n tmp = showLink(files._0, id, updateResultCB);\n break;\n case /* ShortText */2 :\n tmp = showShortText(files._0, id, updateResultCB);\n break;\n case /* LongText */3 :\n tmp = showLongText(files._0, id, updateResultCB);\n break;\n case /* MultiChoice */4 :\n tmp = showMultiChoice(files._0, files._1, id, updateResultCB);\n break;\n case /* AudioRecord */5 :\n tmp = showAudioRecorder(attachingCB, updateResultCB, preview);\n break;\n \n }\n return React.createElement(\"div\", {\n \"aria-label\": id,\n className: \"mt-4\"\n }, placeholder(id, checklistItem), React.createElement(\"div\", {\n className: \"md:pl-7 pt-2 pr-0 pb-4\"\n }, tmp));\n}\n\nvar ts = I18n.ts;\n\nvar make = CoursesCurriculum__SubmissionItem;\n\nexport {\n str ,\n tr ,\n ts ,\n kindIconClasses ,\n computeId ,\n notBlank ,\n placeholder ,\n showError ,\n showLink ,\n showShortText ,\n longTextWarning ,\n updateLongText ,\n showLongText ,\n checkboxOnChange ,\n showMultiChoice ,\n attachFile ,\n attachRecordingFile ,\n removeFile ,\n showFiles ,\n showAudioRecorder ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Tooltip from \"../../../shared/components/Tooltip.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as DisablingCover from \"../../../shared/components/DisablingCover.bs.js\";\nimport * as SubmissionChecklistItem from \"../../review/types/SubmissionChecklistItem.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__ChecklistItem from \"../types/CoursesCurriculum__ChecklistItem.bs.js\";\nimport * as CoursesCurriculum__SubmissionItem from \"./CoursesCurriculum__SubmissionItem.bs.js\";\nimport * as CoursesCurriculum__LevelUpEligibility from \"../types/CoursesCurriculum__LevelUpEligibility.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__SubmissionBuilder\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction buttonContents(formState, checklist) {\n var icon = formState >= 2 ? React.createElement(FaIcon.make, {\n classes: \"fas fa-cloud-upload-alt mr-2\"\n }) : React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-pulse mr-2\"\n });\n var text;\n switch (formState) {\n case /* Attaching */0 :\n text = tr(undefined, undefined, \"attaching\") + \"...\";\n break;\n case /* Saving */1 :\n text = tr(undefined, undefined, \"submitting\") + \"...\";\n break;\n case /* Ready */2 :\n text = ArrayUtils.isEmpty(checklist) ? tr(undefined, undefined, \"complete\") : tr(undefined, undefined, \"submit\");\n break;\n \n }\n return React.createElement(\"span\", undefined, icon, text);\n}\n\nfunction initialState(checklist) {\n return {\n formState: /* Ready */2,\n checklist: CoursesCurriculum__ChecklistItem.fromTargetChecklistItem(checklist)\n };\n}\n\nfunction reducer(state, action) {\n if (typeof action !== \"number\") {\n return {\n formState: /* Ready */2,\n checklist: action._0\n };\n }\n switch (action) {\n case /* SetAttaching */0 :\n return {\n formState: /* Attaching */0,\n checklist: state.checklist\n };\n case /* SetSaving */1 :\n return {\n formState: /* Saving */1,\n checklist: state.checklist\n };\n case /* SetReady */2 :\n return {\n formState: /* Ready */2,\n checklist: state.checklist\n };\n \n }\n}\n\nfunction isBusy(formState) {\n return formState < 2;\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreateSubmissionMutation($targetId: ID!, $checklist: JSON!, $fileIds: [ID!]!) {\\ncreateSubmission(targetId: $targetId, checklist: $checklist, fileIds: $fileIds) {\\nsubmission {\\nid \\ncreatedAt \\n}\\n\\nlevelUpEligibility \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createSubmission;\n var value$2 = value$1.submission;\n var value$3 = value$1.levelUpEligibility;\n var tmp;\n if (value$3 == null) {\n tmp = undefined;\n } else {\n var tmp$1;\n switch (value$3) {\n case \"AtMaxLevel\" :\n tmp$1 = \"AtMaxLevel\";\n break;\n case \"CurrentLevelIncomplete\" :\n tmp$1 = \"CurrentLevelIncomplete\";\n break;\n case \"DateLocked\" :\n tmp$1 = \"DateLocked\";\n break;\n case \"Eligible\" :\n tmp$1 = \"Eligible\";\n break;\n case \"NoMilestonesInLevel\" :\n tmp$1 = \"NoMilestonesInLevel\";\n break;\n case \"PreviousLevelIncomplete\" :\n tmp$1 = \"PreviousLevelIncomplete\";\n break;\n case \"TeamMembersPending\" :\n tmp$1 = \"TeamMembersPending\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$3\n };\n }\n tmp = tmp$1;\n }\n return {\n createSubmission: {\n submission: !(value$2 == null) ? ({\n id: value$2.id,\n createdAt: value$2.createdAt\n }) : undefined,\n levelUpEligibility: tmp\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createSubmission;\n var value$2 = value$1.levelUpEligibility;\n var levelUpEligibility = value$2 !== undefined ? (\n typeof value$2 === \"object\" ? value$2.VAL : (\n value$2 === \"DateLocked\" ? \"DateLocked\" : (\n value$2 === \"TeamMembersPending\" ? \"TeamMembersPending\" : (\n value$2 === \"Eligible\" ? \"Eligible\" : (\n value$2 === \"PreviousLevelIncomplete\" ? \"PreviousLevelIncomplete\" : (\n value$2 === \"NoMilestonesInLevel\" ? \"NoMilestonesInLevel\" : (\n value$2 === \"CurrentLevelIncomplete\" ? \"CurrentLevelIncomplete\" : \"AtMaxLevel\"\n )\n )\n )\n )\n )\n )\n ) : null;\n var value$3 = value$1.submission;\n var submission;\n if (value$3 !== undefined) {\n var value$4 = value$3.createdAt;\n var value$5 = value$3.id;\n submission = {\n id: value$5,\n createdAt: value$4\n };\n } else {\n submission = null;\n }\n var createSubmission = {\n submission: submission,\n levelUpEligibility: levelUpEligibility\n };\n return {\n createSubmission: createSubmission\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.fileIds;\n return {\n targetId: inp.targetId,\n checklist: inp.checklist,\n fileIds: a.map(function (b) {\n return b;\n })\n };\n}\n\nfunction makeVariables(targetId, checklist, fileIds, param) {\n return {\n targetId: targetId,\n checklist: checklist,\n fileIds: fileIds\n };\n}\n\nvar CreateSubmissionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar CreateSubmissionQuery_Graphql_error = include.Graphql_error;\n\nvar CreateSubmissionQuery_decodeNotification = include.decodeNotification;\n\nvar CreateSubmissionQuery_decodeObject = include.decodeObject;\n\nvar CreateSubmissionQuery_decodeNotifications = include.decodeNotifications;\n\nvar CreateSubmissionQuery_decodeErrors = include.decodeErrors;\n\nvar CreateSubmissionQuery_flashNotifications = include.flashNotifications;\n\nvar CreateSubmissionQuery_sendQuery = include.sendQuery;\n\nvar CreateSubmissionQuery_query = include.query;\n\nvar CreateSubmissionQuery_fetch = include.$$fetch;\n\nvar CreateSubmissionQuery = {\n CreateSubmissionQuery_inner: CreateSubmissionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateSubmissionQuery_Graphql_error,\n decodeNotification: CreateSubmissionQuery_decodeNotification,\n decodeObject: CreateSubmissionQuery_decodeObject,\n decodeNotifications: CreateSubmissionQuery_decodeNotifications,\n decodeErrors: CreateSubmissionQuery_decodeErrors,\n flashNotifications: CreateSubmissionQuery_flashNotifications,\n sendQuery: CreateSubmissionQuery_sendQuery,\n query: CreateSubmissionQuery_query,\n $$fetch: CreateSubmissionQuery_fetch,\n make: make\n};\n\nfunction isButtonDisabled(state) {\n var match = state.formState;\n if (match < 2) {\n return true;\n } else {\n return !CoursesCurriculum__ChecklistItem.validChecklist(state.checklist);\n }\n}\n\nfunction submit(state, send, target, addSubmissionCB, $$event) {\n $$event.preventDefault();\n Curry._1(send, /* SetSaving */1);\n var fileIds = CoursesCurriculum__ChecklistItem.fileIds(state.checklist);\n var checklist = CoursesCurriculum__ChecklistItem.encodeArray(state.checklist);\n var targetId = CoursesCurriculum__Target.id(target);\n Curry._3(make, undefined, undefined, {\n targetId: targetId,\n checklist: checklist,\n fileIds: fileIds\n }).then(function (response) {\n var submission = response.createSubmission.submission;\n if (submission !== undefined) {\n var submission$1 = Caml_option.valFromOption(submission);\n var files = CoursesCurriculum__ChecklistItem.makeFiles(state.checklist);\n var submissionChecklist = Json_decode.array((function (param) {\n return SubmissionChecklistItem.decode(files, param);\n }), checklist);\n var newSubmission = CoursesCurriculum__Submission.make(submission$1.id, DateFns.decodeISO(submission$1.createdAt), /* Pending */1, submissionChecklist);\n var levelUpEligibility = CoursesCurriculum__LevelUpEligibility.makeOptionFromJs(response.createSubmission.levelUpEligibility);\n Curry._2(addSubmissionCB, newSubmission, levelUpEligibility);\n } else {\n Curry._1(send, /* SetReady */2);\n }\n return Promise.resolve(undefined);\n }).catch(function (_error) {\n Curry._1(send, /* SetReady */2);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateResult(state, send, index, result) {\n return Curry._1(send, /* UpdateResponse */{\n _0: CoursesCurriculum__ChecklistItem.updateResultAtIndex(index, result, state.checklist)\n });\n}\n\nfunction buttonClasses(checklist) {\n return \"flex mt-3 \" + (\n ArrayUtils.isEmpty(checklist) ? \"justify-center\" : \"justify-end\"\n );\n}\n\nfunction setAttaching(send, bool) {\n return Curry._1(send, bool ? /* SetAttaching */0 : /* SetReady */2);\n}\n\nfunction statusText(formState) {\n switch (formState) {\n case /* Attaching */0 :\n return tr(undefined, undefined, \"attaching\") + \"...\";\n case /* Saving */1 :\n return tr(undefined, undefined, \"submitting\") + \"...\";\n case /* Ready */2 :\n return tr(undefined, undefined, \"submit\");\n \n }\n}\n\nfunction tooltipText(preview) {\n if (preview) {\n return React.createElement(\"span\", undefined, tr(undefined, undefined, \"accessing_preview\"), React.createElement(\"br\", undefined), tr(undefined, undefined, \"for_course\"));\n } else {\n return React.createElement(\"span\", undefined, tr(undefined, undefined, \"compete_all\"), React.createElement(\"br\", undefined), tr(undefined, undefined, \"steps_submit\"));\n }\n}\n\nfunction CoursesCurriculum__SubmissionBuilder(Props) {\n var target = Props.target;\n var addSubmissionCB = Props.addSubmissionCB;\n var preview = Props.preview;\n var checklist = Props.checklist;\n var match = React.useReducer(reducer, {\n formState: /* Ready */2,\n checklist: CoursesCurriculum__ChecklistItem.fromTargetChecklistItem(checklist)\n });\n var send = match[1];\n var state = match[0];\n return React.createElement(\"div\", {\n className: \"bg-gray-50 p-4 my-4 border rounded-lg\",\n id: \"submission-builder\"\n }, React.createElement(DisablingCover.make, {\n disabled: state.formState < 2,\n message: statusText(state.formState),\n children: null\n }, ArrayUtils.isEmpty(state.checklist) ? React.createElement(\"div\", {\n className: \"text-center\"\n }, tr(undefined, undefined, \"no_actions\")) : $$Array.mapi((function (index, checklistItem) {\n return React.createElement(CoursesCurriculum__SubmissionItem.make, {\n index: index,\n checklistItem: checklistItem,\n updateResultCB: (function (param) {\n return updateResult(state, send, index, param);\n }),\n attachingCB: (function (param) {\n return setAttaching(send, param);\n }),\n preview: preview,\n key: String(index)\n });\n }), state.checklist), React.createElement(\"div\", {\n className: buttonClasses(state.checklist)\n }, React.createElement(Tooltip.make, {\n tip: tooltipText(preview),\n position: \"Left\",\n disabled: !isButtonDisabled(state),\n children: React.createElement(\"button\", {\n className: \"btn btn-primary flex justify-center grow md:grow-0\",\n disabled: isButtonDisabled(state) || preview,\n onClick: (function (param) {\n return submit(state, send, target, addSubmissionCB, param);\n })\n }, buttonContents(state.formState, checklist))\n }))));\n}\n\nvar make$1 = CoursesCurriculum__SubmissionBuilder;\n\nexport {\n str ,\n tr ,\n buttonContents ,\n initialState ,\n reducer ,\n isBusy ,\n CreateSubmissionQuery ,\n isButtonDisabled ,\n submit ,\n updateResult ,\n buttonClasses ,\n setAttaching ,\n statusText ,\n tooltipText ,\n make$1 as make,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as SubmissionChecklistItem from \"../types/SubmissionChecklistItem.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.SubmissionChecklistItemShow\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction kindIconClasses(result) {\n switch (result.TAG | 0) {\n case /* ShortText */0 :\n return \"if i-short-text-light text-base md:text-lg text-gray-800 mt-px\";\n case /* LongText */1 :\n return \"if i-long-text-light text-base md:text-lg text-gray-800 mt-px\";\n case /* Link */2 :\n return \"if i-link-light text-base md:text-lg text-gray-800 mt-px\";\n case /* MultiChoice */4 :\n return \"if i-check-circle-alt-light text-base md:text-lg text-gray-800 mt-px\";\n case /* Files */3 :\n case /* AudioRecord */5 :\n return \"if i-file-light text-base md:text-lg text-gray-800 mt-px\";\n \n }\n}\n\nfunction showFiles(files) {\n return React.createElement(\"div\", {\n className: \"flex flex-wrap\"\n }, files.map(function (file) {\n return React.createElement(\"a\", {\n key: \"file-\" + SubmissionChecklistItem.fileUrl(file),\n className: \"mt-1 mr-3 flex border overflow-hidden rounded hover:shadow-md border-red-300 bg-white text-red-600 hover:border-red-500 hover:text-red-600 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n href: SubmissionChecklistItem.fileUrl(file),\n target: \"_blank\"\n }, React.createElement(\"span\", {\n className: \"course-show-attachments__attachment-title rounded text-xs font-semibold inline-block whitespace-nowrap truncate w-32 md:w-42 h-full px-3 py-2 leading-loose\"\n }, SubmissionChecklistItem.fileName(file)), React.createElement(\"span\", {\n className: \"flex w-10 justify-center items-center p-2 bg-red-600 text-white\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-download-regular\"\n })));\n }));\n}\n\nfunction showlink(link) {\n return React.createElement(\"a\", {\n className: \"max-w-fc mt-1 mr-3 flex border overflow-hidden rounded hover:shadow-md border-blue-400 bg-white text-blue-700 hover:border-blue-600 hover:text-blue-800 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n href: link,\n target: \"_blank\"\n }, React.createElement(\"span\", {\n className: \"course-show-attachments__attachment-title rounded text-xs font-semibold inline-block whitespace-nowrap truncate w-32 md:w-42 h-full px-3 py-2 leading-loose\"\n }, link), React.createElement(\"span\", {\n className: \"flex w-10 justify-center items-center p-2 bg-blue-700 text-white\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-external-link-regular\"\n })));\n}\n\nfunction statusIcon(updateChecklistCB, status) {\n if (updateChecklistCB !== undefined) {\n return null;\n }\n switch (status) {\n case /* Passed */0 :\n return React.createElement(\"div\", {\n className: \"flex items-center space-x-2 text-xs bg-green-100 px-1 py-px mt-1\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-square-solid text-green-500 text-base bg-white\"\n }), React.createElement(\"p\", undefined, tr(undefined, undefined, \"correct\")));\n case /* Failed */1 :\n return React.createElement(\"div\", {\n className: \"flex items-center space-x-2 text-xs bg-red-100 px-1 py-px mt-px\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-times-square-solid text-red-500 text-base bg-white\"\n }), React.createElement(\"p\", undefined, tr(undefined, undefined, \"incorrect\")));\n case /* NoAnswer */2 :\n return null;\n \n }\n}\n\nfunction showStatus(status) {\n switch (status) {\n case /* Passed */0 :\n return React.createElement(\"div\", {\n className: \"bg-green-200 rounded px-1 py-px text-green-800 text-tiny\"\n }, tr(undefined, undefined, \"correct\"));\n case /* Failed */1 :\n return React.createElement(\"div\", {\n className: \"bg-red-200 rounded px-1 py-px text-red-800 text-tiny\"\n }, \"Incorrect\");\n case /* NoAnswer */2 :\n return null;\n \n }\n}\n\nfunction statusButtonSelectedClasses(status, currentStatus) {\n var tmp;\n switch (currentStatus) {\n case /* Passed */0 :\n tmp = status !== 0 ? \"bg-white\" : \"bg-green-100 hover:bg-green-100 text-green-800 hover:text-green-800 border-green-500 z-10\";\n break;\n case /* Failed */1 :\n tmp = status !== 1 ? \"bg-white\" : \"bg-red-100 hover:bg-red-100 text-red-700 hover:text-red-700 border-red-500 z-10\";\n break;\n case /* NoAnswer */2 :\n tmp = \"bg-white\";\n break;\n \n }\n return \"inline-flex items-center cursor-pointer leading-tight font-semibold inline-block text-xs relative hover:bg-gray-50 hover:text-gray-600 \" + tmp;\n}\n\nfunction statusButtonIcon(bool) {\n if (bool) {\n return \"if i-times-square-solid text-base if-fw\";\n } else {\n return \"if i-square-regular text-base if-fw text-gray-500\";\n }\n}\n\nfunction statusButtonOnClick(bool, callback, checklist, index, _event) {\n if (bool) {\n return Curry._1(callback, SubmissionChecklistItem.makeNoAnswer(index, checklist));\n } else {\n return Curry._1(callback, SubmissionChecklistItem.makeFailed(index, checklist));\n }\n}\n\nfunction statusButton(index, status, callback, checklist) {\n var partial_arg = status === /* Failed */1;\n return React.createElement(\"div\", {\n className: \"mt-2\"\n }, React.createElement(\"button\", {\n className: \"border border-gray-500 rounded focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 \" + statusButtonSelectedClasses(/* Failed */1, status),\n onClick: (function (param) {\n return statusButtonOnClick(partial_arg, callback, checklist, index, param);\n })\n }, React.createElement(\"span\", {\n className: \"w-8 p-2 border-r border-gray-500 flex items-center justify-center\"\n }, React.createElement(PfIcon.make, {\n className: status === /* Failed */1 ? \"if i-times-square-solid text-base if-fw\" : \"if i-square-regular text-base if-fw text-gray-500\"\n })), React.createElement(\"span\", {\n className: \"p-2\"\n }, status === /* Failed */1 ? tr(undefined, undefined, \"mark_correct\") : tr(undefined, undefined, \"mark_incorrect\"))));\n}\n\nfunction cardBodyClasses(pending) {\n return \"pl-7 md:pl-8 \" + (\n pending ? \"\" : \"rounded-b\"\n );\n}\n\nfunction SubmissionChecklistItemShow(Props) {\n var index = Props.index;\n var checklistItem = Props.checklistItem;\n var updateChecklistCB = Props.updateChecklistCB;\n var checklist = Props.checklist;\n var status = SubmissionChecklistItem.status(checklistItem);\n var text = SubmissionChecklistItem.result(checklistItem);\n var tmp;\n switch (text.TAG | 0) {\n case /* LongText */1 :\n tmp = React.createElement(MarkdownBlock.make, {\n markdown: text._0,\n profile: /* Permissive */0\n });\n break;\n case /* Link */2 :\n tmp = showlink(text._0);\n break;\n case /* Files */3 :\n tmp = showFiles(text._0);\n break;\n case /* ShortText */0 :\n case /* MultiChoice */4 :\n tmp = React.createElement(\"div\", undefined, text._0);\n break;\n case /* AudioRecord */5 :\n tmp = React.createElement(\"audio\", {\n controls: true,\n src: text._0.url\n });\n break;\n \n }\n return React.createElement(\"div\", {\n \"aria-label\": SubmissionChecklistItem.title(checklistItem)\n }, React.createElement(\"div\", {\n className: \"text-sm font-medium flex items-center justify-between \"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 items-start space-x-2\"\n }, React.createElement(\"div\", {\n className: \"flex items-start\"\n }, React.createElement(PfIcon.make, {\n className: kindIconClasses(SubmissionChecklistItem.result(checklistItem))\n }), React.createElement(MarkdownBlock.make, {\n markdown: SubmissionChecklistItem.title(checklistItem),\n className: \"ml-3 pr-2 tracking-wide\",\n profile: /* Permissive */0\n })), statusIcon(updateChecklistCB, status))), React.createElement(\"div\", {\n className: \"pl-7 mt-2 text-sm\"\n }, React.createElement(\"div\", undefined, tmp), updateChecklistCB !== undefined ? statusButton(index, status, updateChecklistCB, checklist) : null));\n}\n\nvar ChecklistItem;\n\nvar make = SubmissionChecklistItemShow;\n\nexport {\n ChecklistItem ,\n str ,\n tr ,\n kindIconClasses ,\n showFiles ,\n showlink ,\n statusIcon ,\n showStatus ,\n statusButtonSelectedClasses ,\n statusButtonIcon ,\n statusButtonOnClick ,\n statusButton ,\n cardBodyClasses ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as React from \"react\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as SubmissionChecklistItemShow from \"./SubmissionChecklistItemShow.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.SubmissionChecklistShow\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction SubmissionChecklistShow(Props) {\n var checklist = Props.checklist;\n var updateChecklistCB = Props.updateChecklistCB;\n var pending = Props.pending;\n return React.createElement(\"div\", {\n className: \"space-y-8\"\n }, ArrayUtils.isEmpty(checklist) ? React.createElement(\"div\", undefined, t(undefined, undefined, \"target_marked_as_complete\")) : checklist.map(function (checklistItem, index) {\n return React.createElement(SubmissionChecklistItemShow.make, {\n index: index,\n checklistItem: checklistItem,\n updateChecklistCB: updateChecklistCB,\n checklist: checklist,\n pending: pending,\n key: String(index)\n });\n }));\n}\n\nvar make = SubmissionChecklistShow;\n\nexport {\n str ,\n t ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction userId(t) {\n return t.userId;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n userId: Json_decode.field(\"userId\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n userId ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as List from \"../../../../../node_modules/rescript/lib/es6/list.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Json_encode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\n\nfunction decode(json) {\n return {\n criterionId: Json_decode.field(\"criterionId\", Json_decode.string, json),\n criterionName: Json_decode.field(\"criterionName\", Json_decode.string, json),\n grade: Caml_option.null_to_opt(Json_decode.field(\"grade\", (function (param) {\n return Json_decode.nullable(Json_decode.$$int, param);\n }), json))\n };\n}\n\nfunction grade(t) {\n return t.grade;\n}\n\nfunction pending(evaluation) {\n return List.exists((function (grading) {\n return grading.grade === undefined;\n }), evaluation);\n}\n\nfunction isFail(passGrade, grading) {\n var grade = grading.grade;\n if (grade !== undefined) {\n return grade < passGrade;\n } else {\n return false;\n }\n}\n\nfunction anyFail(passGrade, evaluation) {\n return List.exists((function (grading) {\n return isFail(passGrade, grading);\n }), evaluation);\n}\n\nfunction criterionId(t) {\n return t.criterionId;\n}\n\nfunction criterionName(t) {\n return t.criterionName;\n}\n\nfunction updateGrade(newGrade, t) {\n return {\n criterionId: t.criterionId,\n criterionName: t.criterionName,\n grade: newGrade\n };\n}\n\nfunction gradingEncoder(grading) {\n var grade = grading.grade;\n return Json_encode.object_({\n hd: [\n \"criterionId\",\n grading.criterionId\n ],\n tl: {\n hd: [\n \"grade\",\n grade !== undefined ? grade : null\n ],\n tl: /* [] */0\n }\n });\n}\n\nfunction make(criterionId, criterionName, grade) {\n return {\n criterionId: criterionId,\n criterionName: criterionName,\n grade: grade\n };\n}\n\nexport {\n decode ,\n grade ,\n pending ,\n isFail ,\n anyFail ,\n criterionId ,\n criterionName ,\n updateGrade ,\n gradingEncoder ,\n make ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as List from \"../../../../../node_modules/rescript/lib/es6/list.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as GradeLabel from \"../../../shared/types/GradeLabel.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\nimport * as CoursesCurriculum__Grading from \"../types/CoursesCurriculum__Grading.bs.js\";\n\nimport \"./CoursesCurriculum__GradeBar.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nfunction gradeDescription(gradeLabels, grading) {\n var grade = CoursesCurriculum__Grading.grade(grading);\n return React.createElement(\"div\", {\n className: \"grade-bar__criterion-name\"\n }, CoursesCurriculum__Grading.criterionName(grading), grade !== undefined ? React.createElement(\"span\", undefined, \": \", React.createElement(\"span\", {\n className: \"grade-bar__grade-label\"\n }, GradeLabel.labelFor(gradeLabels, grade))) : null);\n}\n\nfunction maxGrade(gradeLabels) {\n return String(GradeLabel.maxGrade(gradeLabels));\n}\n\nfunction gradePillClasses(gradeReceived, passGrade, pillGrade, callBack) {\n var resultModifier;\n if (gradeReceived !== undefined) {\n var grade = Caml_option.valFromOption(gradeReceived);\n resultModifier = Caml_obj.caml_greaterthan(pillGrade, grade) ? \"\" : (\n Caml_obj.caml_lessthan(grade, passGrade) ? \" grade-bar__grade-pill--rejected\" : \" grade-bar__grade-pill--completed\"\n );\n } else {\n resultModifier = \"\";\n }\n var selectableModifier = callBack !== undefined ? (\n Caml_obj.caml_lessthan(pillGrade, passGrade) ? \" grade-bar__grade-pill--selectable-fail cursor-pointer\" : \" grade-bar__grade-pill--selectable-pass cursor-pointer\"\n ) : \"\";\n return \"grade-bar__grade-pill cursor-auto\" + (resultModifier + selectableModifier);\n}\n\nfunction gradeBarHeader(grading, gradeLabels) {\n var grade = CoursesCurriculum__Grading.grade(grading);\n return React.createElement(\"div\", {\n className: \"grade-bar__header pb-1\"\n }, gradeDescription(gradeLabels, grading), grade !== undefined ? React.createElement(\"div\", {\n className: \"grade-bar__grade font-semibold\"\n }, String(grade) + (\"/\" + String(GradeLabel.maxGrade(gradeLabels)))) : null);\n}\n\nfunction handleClick(gradeSelectCB, grading, newGrade) {\n if (gradeSelectCB !== undefined) {\n return Curry._1(gradeSelectCB, CoursesCurriculum__Grading.updateGrade(newGrade, grading));\n }\n \n}\n\nfunction gradeBarPill(gradeLabel, grading, gradeSelectCB, passGrade) {\n var myGrade = GradeLabel.grade(gradeLabel);\n return React.createElement(\"div\", {\n key: String(myGrade),\n className: gradePillClasses(CoursesCurriculum__Grading.grade(grading), passGrade, myGrade, gradeSelectCB),\n role: \"button\",\n title: GradeLabel.label(gradeLabel),\n onClick: (function (_event) {\n return handleClick(gradeSelectCB, grading, myGrade);\n })\n }, gradeSelectCB !== undefined ? String(myGrade) : null);\n}\n\nfunction gradeBarPanel(grading, gradeLabels, gradeSelectCB, passGrade) {\n return React.createElement(\"div\", {\n className: \"grade-bar__track\",\n role: \"group\"\n }, $$Array.of_list(List.map((function (gradeLabel) {\n return gradeBarPill(gradeLabel, grading, gradeSelectCB, passGrade);\n }), gradeLabels)));\n}\n\nfunction CoursesCurriculum__GradeBar(Props) {\n var grading = Props.grading;\n var gradeSelectCB = Props.gradeSelectCB;\n var criterion = Props.criterion;\n var gradeLabels = $$Array.to_list(EvaluationCriterion.gradesAndLabels(criterion));\n var passGrade = EvaluationCriterion.passGrade(criterion);\n return React.createElement(\"div\", {\n className: \"flex-column\",\n role: \"toolbar\"\n }, gradeBarHeader(grading, gradeLabels), gradeBarPanel(grading, gradeLabels, gradeSelectCB, passGrade));\n}\n\nvar make = CoursesCurriculum__GradeBar;\n\nexport {\n str ,\n gradeDescription ,\n maxGrade ,\n gradePillClasses ,\n gradeBarHeader ,\n handleClick ,\n gradeBarPill ,\n gradeBarPanel ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as $$Notification from \"../../../shared/Notification.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__UndoButton\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation UndoSubmissionMutation($targetId: ID!) {\\nundoSubmission(targetId: $targetId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.undoSubmission;\n return {\n undoSubmission: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.undoSubmission;\n var value$2 = value$1.success;\n var undoSubmission = {\n success: value$2\n };\n return {\n undoSubmission: undoSubmission\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n targetId: inp.targetId\n };\n}\n\nfunction makeVariables(targetId, param) {\n return {\n targetId: targetId\n };\n}\n\nvar DeleteSubmissionQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar DeleteSubmissionQuery_Graphql_error = include.Graphql_error;\n\nvar DeleteSubmissionQuery_decodeNotification = include.decodeNotification;\n\nvar DeleteSubmissionQuery_decodeObject = include.decodeObject;\n\nvar DeleteSubmissionQuery_decodeNotifications = include.decodeNotifications;\n\nvar DeleteSubmissionQuery_decodeErrors = include.decodeErrors;\n\nvar DeleteSubmissionQuery_flashNotifications = include.flashNotifications;\n\nvar DeleteSubmissionQuery_sendQuery = include.sendQuery;\n\nvar DeleteSubmissionQuery_query = include.query;\n\nvar DeleteSubmissionQuery_make = include.make;\n\nvar DeleteSubmissionQuery = {\n DeleteSubmissionQuery_inner: DeleteSubmissionQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: DeleteSubmissionQuery_Graphql_error,\n decodeNotification: DeleteSubmissionQuery_decodeNotification,\n decodeObject: DeleteSubmissionQuery_decodeObject,\n decodeNotifications: DeleteSubmissionQuery_decodeNotifications,\n decodeErrors: DeleteSubmissionQuery_decodeErrors,\n flashNotifications: DeleteSubmissionQuery_flashNotifications,\n sendQuery: DeleteSubmissionQuery_sendQuery,\n query: DeleteSubmissionQuery_query,\n $$fetch: $$fetch,\n make: DeleteSubmissionQuery_make\n};\n\nfunction handleClick(targetId, setStatus, undoSubmissionCB, $$event) {\n $$event.preventDefault();\n if (window.confirm(tr(undefined, undefined, \"window_confirm\"))) {\n Curry._1(setStatus, (function (param) {\n return /* Undoing */1;\n }));\n Curry._3($$fetch, undefined, undefined, {\n targetId: targetId\n }).then(function (response) {\n if (response.undoSubmission.success) {\n Curry._1(undoSubmissionCB, undefined);\n } else {\n $$Notification.notice(tr(undefined, undefined, \"notification_notice_head\"), tr(undefined, undefined, \"notification_notice_body\"));\n Curry._1(setStatus, (function (param) {\n return /* Errored */2;\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (param) {\n $$Notification.error(tr(undefined, undefined, \"notification_error_head\"), tr(undefined, undefined, \"notification_error_body\"));\n Curry._1(setStatus, (function (param) {\n return /* Errored */2;\n }));\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction buttonContents(status) {\n switch (status) {\n case /* Pending */0 :\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-undo mr-2\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, \"Undo submission\"), React.createElement(\"span\", {\n className: \"md:hidden\"\n }, \"Undo\"));\n case /* Undoing */1 :\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-spin mr-2\"\n }), \"Undoing...\");\n case /* Errored */2 :\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle mr-2\"\n }), \"Error!\");\n \n }\n}\n\nfunction isDisabled(status) {\n return status !== 0;\n}\n\nfunction buttonClasses(status) {\n var tmp;\n switch (status) {\n case /* Pending */0 :\n tmp = \"pointer\";\n break;\n case /* Undoing */1 :\n tmp = \"wait\";\n break;\n case /* Errored */2 :\n tmp = \"not-allowed\";\n break;\n \n }\n return \"btn btn-small btn-danger cursor-\" + tmp;\n}\n\nfunction CoursesCurriculum__UndoButton(Props) {\n var undoSubmissionCB = Props.undoSubmissionCB;\n var targetId = Props.targetId;\n var match = React.useState(function () {\n return /* Pending */0;\n });\n var setStatus = match[1];\n var status = match[0];\n return React.createElement(\"button\", {\n className: buttonClasses(status),\n title: tr(undefined, undefined, \"undo_submission_title\"),\n disabled: status !== 0,\n onClick: (function (param) {\n return handleClick(targetId, setStatus, undoSubmissionCB, param);\n })\n }, buttonContents(status));\n}\n\nvar make = CoursesCurriculum__UndoButton;\n\nexport {\n str ,\n tr ,\n DeleteSubmissionQuery ,\n handleClick ,\n buttonContents ,\n isDisabled ,\n buttonClasses ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\nimport * as CoursesCurriculum__User from \"../types/CoursesCurriculum__User.bs.js\";\nimport * as SubmissionChecklistShow from \"../../review/components/SubmissionChecklistShow.bs.js\";\nimport * as CoursesCurriculum__Coach from \"../types/CoursesCurriculum__Coach.bs.js\";\nimport * as CoursesCurriculum__Grade from \"../types/CoursesCurriculum__Grade.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Grading from \"../types/CoursesCurriculum__Grading.bs.js\";\nimport * as CoursesCurriculum__Feedback from \"../types/CoursesCurriculum__Feedback.bs.js\";\nimport * as CoursesCurriculum__GradeBar from \"./CoursesCurriculum__GradeBar.bs.js\";\nimport * as CoursesCurriculum__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__UndoButton from \"./CoursesCurriculum__UndoButton.bs.js\";\nimport * as CoursesCurriculum__TargetStatus from \"../types/CoursesCurriculum__TargetStatus.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport * as CoursesCurriculum__SubmissionBuilder from \"./CoursesCurriculum__SubmissionBuilder.bs.js\";\n\nimport \"./CoursesCurriculum__SubmissionsAndFeedback.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__SubmissionsAndFeedback\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction gradeBar(evaluationCriteria, grade) {\n var criterion = evaluationCriteria.find(function (c) {\n return EvaluationCriterion.id(c) === CoursesCurriculum__Grade.evaluationCriterionId(grade);\n });\n if (criterion === undefined) {\n return null;\n }\n var criterionId = EvaluationCriterion.id(criterion);\n var criterionName = EvaluationCriterion.name(criterion);\n var gradeNumber = CoursesCurriculum__Grade.grade(grade);\n var grading = CoursesCurriculum__Grading.make(criterionId, criterionName, gradeNumber);\n return React.createElement(\"div\", {\n key: String(gradeNumber),\n className: \"mb-4\"\n }, React.createElement(CoursesCurriculum__GradeBar.make, {\n grading: grading,\n criterion: criterion\n }));\n}\n\nfunction statusBar(color, text) {\n var textColor = \"text-\" + (color + \"-500 \");\n var bgColor = \"bg-\" + (color + \"-100 \");\n var icon = color === \"green\" ? React.createElement(\"span\", undefined, React.createElement(\"i\", {\n className: \"fas fa-certificate fa-stack-2x\"\n }), React.createElement(\"i\", {\n className: \"fas fa-check fa-stack-1x fa-inverse\"\n })) : React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle text-3xl text-red-500 mx-1\"\n });\n return React.createElement(\"div\", {\n className: \"font-semibold p-2 py-4 flex border-t w-full items-center justify-center \" + (textColor + bgColor)\n }, React.createElement(\"span\", {\n className: \"fa-stack text-lg mr-1 \" + textColor\n }, icon), text);\n}\n\nfunction submissionStatusIcon(passed) {\n var text = passed ? tr(undefined, undefined, \"completed\") : tr(undefined, undefined, \"rejected\");\n var color = passed ? \"green\" : \"red\";\n return React.createElement(\"div\", {\n className: \"max-w-fc\"\n }, React.createElement(\"div\", {\n className: \"flex justify-center border-2 rounded-lg border-\" + (color + \"-500 px-4 py-6\")\n }, passed ? React.createElement(\"div\", {\n className: \"fa-stack text-green-500 text-lg\"\n }, React.createElement(\"i\", {\n className: \"fas fa-certificate fa-stack-2x\"\n }), React.createElement(\"i\", {\n className: \"fas fa-check fa-stack-1x fa-inverse\"\n })) : React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle text-3xl text-red-500 mx-1\"\n })), React.createElement(\"div\", {\n className: \"text-center text-\" + (color + \"-500 font-bold mt-2\")\n }, text));\n}\n\nfunction undoSubmissionCB(param) {\n window.location.reload();\n \n}\n\nfunction gradingSection(grades, evaluationCriteria, gradeBar, passed) {\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"w-full md:hidden\"\n }, statusBar(passed ? \"green\" : \"red\", passed ? tr(undefined, undefined, \"completed\") : tr(undefined, undefined, \"rejected\"))), React.createElement(\"div\", {\n className: \"bg-white flex border-t flex-wrap items-center py-4\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-1/2 shrink-0 justify-center hidden md:flex border-l px-6\"\n }, submissionStatusIcon(passed)), React.createElement(\"div\", {\n className: \"w-full md:w-1/2 shrink-0 md:order-first px-4 md:px-6\"\n }, React.createElement(\"h5\", {\n className: \"pb-1 border-b\"\n }, tr(undefined, undefined, \"grading\")), React.createElement(\"div\", {\n className: \"mt-3\"\n }, CoursesCurriculum__Grade.sort(evaluationCriteria, grades).map(Curry.__1(gradeBar))))));\n}\n\nfunction handleAddAnotherSubmission(setShowSubmissionForm, $$event) {\n $$event.preventDefault();\n return Curry._1(setShowSubmissionForm, (function (showSubmissionForm) {\n return !showSubmissionForm;\n }));\n}\n\nfunction submissions(target, targetStatus, targetDetails, evaluationCriteria, coaches, users) {\n var curriedGradeBar = function (param) {\n return gradeBar(evaluationCriteria, param);\n };\n var submissions$1 = CoursesCurriculum__TargetDetails.submissions(targetDetails);\n var totalSubmissions = submissions$1.length;\n return CoursesCurriculum__Submission.sort(submissions$1).map(function (submission, index) {\n var grades = CoursesCurriculum__TargetDetails.grades(CoursesCurriculum__Submission.id(submission), targetDetails);\n var match = CoursesCurriculum__Submission.status(submission);\n var tmp;\n switch (match) {\n case /* MarkedAsComplete */0 :\n tmp = statusBar(\"green\", tr(undefined, undefined, \"completed\"));\n break;\n case /* Pending */1 :\n var match$1 = CoursesCurriculum__TargetStatus.status(targetStatus);\n tmp = React.createElement(\"div\", {\n className: \"bg-white p-3 md:px-6 md:py-4 flex border-t justify-between items-center w-full\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center font-semibold text-sm pl-2 pr-3 py-1 bg-orange-100 text-orange-600 rounded\"\n }, React.createElement(\"span\", {\n className: \"fa-stack text-orange-400 mr-2 shrink-0\"\n }, React.createElement(\"i\", {\n className: \"fas fa-circle fa-stack-2x\"\n }), React.createElement(\"i\", {\n className: \"fas fa-hourglass-half fa-stack-1x fa-inverse\"\n })), tr(undefined, undefined, \"pending_review\")), match$1 === 1 ? React.createElement(CoursesCurriculum__UndoButton.make, {\n undoSubmissionCB: undoSubmissionCB,\n targetId: CoursesCurriculum__Target.id(target)\n }) : null);\n break;\n case /* Completed */2 :\n tmp = gradingSection(grades, evaluationCriteria, curriedGradeBar, true);\n break;\n case /* Rejected */3 :\n tmp = gradingSection(grades, evaluationCriteria, curriedGradeBar, false);\n break;\n \n }\n return React.createElement(\"div\", {\n key: CoursesCurriculum__Submission.id(submission),\n \"aria-label\": tr(undefined, undefined, \"submission_details\") + CoursesCurriculum__Submission.createdAtPretty(submission),\n className: \"mt-4 pb-4 relative curriculum__submission-feedback-container\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between items-end\"\n }, React.createElement(\"h2\", {\n className: \"ml-2 mb-2 font-semibold text-sm lg:text-base leading-tight\"\n }, tr(undefined, undefined, \"submission_number\") + String(totalSubmissions - index | 0)), React.createElement(\"div\", {\n className: \"text-xs font-semibold bg-gray-50 inline-block px-3 py-1 mr-2 rounded-t-lg border-t border-r border-l text-gray-800 leading-tight\"\n }, React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, tr(undefined, undefined, \"submitted_on\")), CoursesCurriculum__Submission.createdAtPretty(submission))), React.createElement(\"div\", {\n className: \"rounded-lg bg-gray-50 border shadow-md overflow-hidden\"\n }, React.createElement(\"div\", {\n className: \"px-4 py-4 md:px-6 md:pt-6 md:pb-5\"\n }, React.createElement(SubmissionChecklistShow.make, {\n checklist: CoursesCurriculum__Submission.checklist(submission),\n updateChecklistCB: undefined,\n pending: CoursesCurriculum__Submission.pending(submission)\n })), tmp, CoursesCurriculum__TargetDetails.feedback(targetDetails).filter(function (feedback) {\n return CoursesCurriculum__Feedback.submissionId(feedback) === CoursesCurriculum__Submission.id(submission);\n }).map(function (feedback) {\n var coach = Belt_Option.flatMap(CoursesCurriculum__Feedback.coachId(feedback), (function (id) {\n return Caml_option.undefined_to_opt(coaches.find(function (c) {\n return CoursesCurriculum__Coach.id(c) === id;\n }));\n }));\n var user = coach !== undefined ? Caml_option.undefined_to_opt(users.find(function (up) {\n return CoursesCurriculum__User.id(up) === CoursesCurriculum__Coach.userId(coach);\n })) : undefined;\n var match = user !== undefined ? [\n CoursesCurriculum__User.name(user),\n CoursesCurriculum__User.title(user),\n CoursesCurriculum__User.avatar(user)\n ] : [\n tr(undefined, undefined, \"unknown_coach\"),\n undefined,\n React.createElement(\"div\", {\n className: \"w-10 h-10 rounded-full bg-gray-400 inline-block flex items-center justify-center\"\n }, React.createElement(\"i\", {\n className: \"fas fa-user-times\"\n }))\n ];\n var coachTitle = match[1];\n return React.createElement(\"div\", {\n key: CoursesCurriculum__Feedback.id(feedback),\n className: \"bg-white border-t p-4 md:p-6\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(\"div\", {\n className: \"shrink-0 w-12 h-12 bg-gray-300 rounded-full overflow-hidden mr-3 object-cover\"\n }, match[2]), React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-xs leading-tight\"\n }, \"Feedback from:\"), React.createElement(\"div\", undefined, React.createElement(\"h4\", {\n className: \"font-semibold text-base leading-tight block md:inline-flex self-end\"\n }, match[0]), coachTitle !== undefined ? React.createElement(\"span\", {\n className: \"block md:inline-flex text-xs text-gray-800 md:ml-2 leading-tight self-end\"\n }, \"(\" + (coachTitle + \")\")) : null))), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__Feedback.feedback(feedback),\n className: \"md:ml-15\",\n profile: /* Permissive */0\n }));\n })));\n });\n}\n\nfunction addSubmission(setShowSubmissionForm, addSubmissionCB, submission) {\n Curry._1(setShowSubmissionForm, (function (param) {\n return false;\n }));\n return Curry._1(addSubmissionCB, submission);\n}\n\nfunction CoursesCurriculum__SubmissionsAndFeedback(Props) {\n var targetDetails = Props.targetDetails;\n var target = Props.target;\n var evaluationCriteria = Props.evaluationCriteria;\n var addSubmissionCB = Props.addSubmissionCB;\n var targetStatus = Props.targetStatus;\n var coaches = Props.coaches;\n var users = Props.users;\n var preview = Props.preview;\n var checklist = Props.checklist;\n var match = React.useState(function () {\n return false;\n });\n var setShowSubmissionForm = match[1];\n var showSubmissionForm = match[0];\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex justify-between items-end border-b pb-2\"\n }, React.createElement(\"h4\", {\n className: \"text-base md:text-xl\"\n }, tr(undefined, undefined, \"your_submissions\")), CoursesCurriculum__TargetStatus.canSubmit(CoursesCurriculum__Target.resubmittable(target), targetStatus) ? (\n showSubmissionForm ? React.createElement(\"button\", {\n className: \"btn btn-subtle\",\n onClick: (function (param) {\n return handleAddAnotherSubmission(setShowSubmissionForm, param);\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-times-regular text-lg mr-2\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, tr(undefined, undefined, \"cancel\")), React.createElement(\"span\", {\n className: \"md:hidden\"\n }, tr(undefined, undefined, \"cancel\"))) : React.createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: (function (param) {\n return handleAddAnotherSubmission(setShowSubmissionForm, param);\n })\n }, React.createElement(PfIcon.make, {\n className: \"if i-plus-regular text-lg mr-2\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, tr(undefined, undefined, \"add_another_submission\")), React.createElement(\"span\", {\n className: \"md:hidden\"\n }, tr(undefined, undefined, \"add_another\")))\n ) : null), showSubmissionForm ? React.createElement(CoursesCurriculum__SubmissionBuilder.make, {\n target: target,\n addSubmissionCB: (function (param) {\n Curry._1(setShowSubmissionForm, (function (param) {\n return false;\n }));\n return Curry._1(addSubmissionCB, param);\n }),\n preview: preview,\n checklist: checklist\n }) : submissions(target, targetStatus, targetDetails, evaluationCriteria, coaches, users));\n}\n\nvar make = CoursesCurriculum__SubmissionsAndFeedback;\n\nexport {\n str ,\n tr ,\n gradeBar ,\n statusBar ,\n submissionStatusIcon ,\n undoSubmissionCB ,\n gradingSection ,\n handleAddAnotherSubmission ,\n submissions ,\n addSubmission ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as ScrollLock from \"../../../shared/utils/ScrollLock.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoursesCurriculum__Quiz from \"./CoursesCurriculum__Quiz.bs.js\";\nimport * as CoursesCurriculum__User from \"../types/CoursesCurriculum__User.bs.js\";\nimport * as CoursesCurriculum__Learn from \"./CoursesCurriculum__Learn.bs.js\";\nimport * as CoursesCurriculum__Course from \"../types/CoursesCurriculum__Course.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Discuss from \"./CoursesCurriculum__Discuss.bs.js\";\nimport * as CoursesCurriculum__AutoVerify from \"./CoursesCurriculum__AutoVerify.bs.js\";\nimport * as CoursesCurriculum__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__TargetStatus from \"../types/CoursesCurriculum__TargetStatus.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport * as CoursesCurriculum__LatestSubmission from \"../types/CoursesCurriculum__LatestSubmission.bs.js\";\nimport * as CoursesCurriculum__SubmissionBuilder from \"./CoursesCurriculum__SubmissionBuilder.bs.js\";\nimport * as CoursesCurriculum__CompletionInstructions from \"./CoursesCurriculum__CompletionInstructions.bs.js\";\nimport * as CoursesCurriculum__SubmissionsAndFeedback from \"./CoursesCurriculum__SubmissionsAndFeedback.bs.js\";\n\nvar UnexpectedSubmissionStatus = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__Overlay.UnexpectedSubmissionStatus\");\n\nimport \"./CoursesCurriculum__Overlay.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__Overlay\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar initialState = {\n targetDetails: undefined,\n tab: /* Learn */0\n};\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n if (action === /* ResetState */0) {\n return initialState;\n } else {\n return {\n targetDetails: undefined,\n tab: /* Learn */0\n };\n }\n }\n switch (action.TAG | 0) {\n case /* Select */0 :\n return {\n targetDetails: state.targetDetails,\n tab: action._0\n };\n case /* SetTargetDetails */1 :\n return {\n targetDetails: action._0,\n tab: state.tab\n };\n case /* AddSubmission */2 :\n if (action._0) {\n return {\n targetDetails: OptionUtils.map(CoursesCurriculum__TargetDetails.clearPendingUserIds, state.targetDetails),\n tab: state.tab\n };\n } else {\n return state;\n }\n \n }\n}\n\nfunction closeOverlay(course) {\n return RescriptReactRouter.push(\"/courses/\" + (CoursesCurriculum__Course.id(course) + \"/curriculum\"));\n}\n\nfunction loadTargetDetails(target, send, param) {\n fetch(\"/targets/\" + (CoursesCurriculum__Target.id(target) + \"/details_v2\")).then(function (prim) {\n return prim.json();\n }).then(function (json) {\n return Promise.resolve(Curry._1(send, {\n TAG: /* SetTargetDetails */1,\n _0: CoursesCurriculum__TargetDetails.decode(json)\n }));\n });\n \n}\n\nfunction completionTypeToString(completionType, targetStatus) {\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n var exit = 0;\n if (typeof match === \"number\") {\n if (match !== 0) {\n exit = 2;\n } else {\n switch (completionType) {\n case /* Evaluated */0 :\n return t(undefined, undefined, \"completion_tab_complete\");\n case /* TakeQuiz */1 :\n return t(undefined, undefined, \"completion_tab_take_quiz\");\n case /* LinkToComplete */2 :\n return t(undefined, undefined, \"completion_tab_visit_link\");\n case /* MarkAsComplete */3 :\n return t(undefined, undefined, \"completion_tab_mark_complete\");\n \n }\n }\n } else {\n var match$1 = match._0;\n if (typeof match$1 === \"number\" && match$1 < 2) {\n exit = 2;\n }\n \n }\n if (exit === 2) {\n if (completionType === 1) {\n return t(undefined, undefined, \"completion_tab_quiz_result\");\n }\n if (completionType === 0) {\n return t(undefined, undefined, \"completion_tab_submissions\");\n }\n \n }\n if (typeof match === \"number\") {\n return t(undefined, undefined, \"completion_tab_completed\");\n } else {\n return t(undefined, undefined, \"completion_tab_locked\");\n }\n}\n\nfunction tabToString(targetStatus, tab) {\n if (typeof tab === \"number\") {\n if (tab !== 0) {\n return t(undefined, undefined, \"discuss_tab\");\n } else {\n return t(undefined, undefined, \"learn_tab\");\n }\n } else {\n return completionTypeToString(tab._0, targetStatus);\n }\n}\n\nfunction selectableTabs(targetDetails) {\n if (Caml_obj.caml_equal(CoursesCurriculum__TargetDetails.communities(targetDetails), [])) {\n return [/* Learn */0];\n } else {\n return [\n /* Learn */0,\n /* Discuss */1\n ];\n }\n}\n\nfunction tabClasses(selection, tab) {\n return \"course-overlay__body-tab-item p-2 md:px-3 md:py-4 flex w-full items-center justify-center text-sm -mx-px font-semibold focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500\" + (\n Caml_obj.caml_equal(tab, selection) ? \" course-overlay__body-tab-item--selected\" : \" bg-gray-50 hover:text-primary-400 hover:bg-gray-50 focus:text-primary-400 focus:bg-gray-50 cursor-pointer\"\n );\n}\n\nfunction scrollCompleteButtonIntoViewEventually(param) {\n setTimeout((function (param) {\n var element = document.getElementById(\"auto-verify-target\");\n if (element == null) {\n Rollbar.error(\"Could not find the 'Complete' button to scroll to.\");\n } else {\n element.scrollIntoView();\n element.className = \"mt-4 complete-button-selected\";\n }\n \n }), 50);\n \n}\n\nfunction handleTablink(send, _event) {\n Curry._1(send, {\n TAG: /* Select */0,\n _0: /* Learn */0\n });\n return scrollCompleteButtonIntoViewEventually(undefined);\n}\n\nfunction tabButton(tab, state, send, targetStatus) {\n return React.createElement(\"button\", {\n key: \"select-\" + tabToString(targetStatus, tab),\n \"aria-selected\": Caml_obj.caml_equal(tab, state.tab),\n className: tabClasses(tab, state.tab),\n role: \"tab\",\n onClick: (function (_e) {\n return Curry._1(send, {\n TAG: /* Select */0,\n _0: tab\n });\n })\n }, tabToString(targetStatus, tab));\n}\n\nfunction tabLink(tab, state, send, targetStatus) {\n return React.createElement(\"button\", {\n className: tabClasses(tab, state.tab),\n onClick: (function (param) {\n Curry._1(send, {\n TAG: /* Select */0,\n _0: /* Learn */0\n });\n return scrollCompleteButtonIntoViewEventually(undefined);\n })\n }, tabToString(targetStatus, tab));\n}\n\nfunction tabOptions(state, send, targetDetails, targetStatus) {\n var completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails);\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n var tmp;\n if (typeof match === \"number\") {\n tmp = completionType >= 2 ? tabLink(/* Complete */{\n _0: completionType\n }, state, send, targetStatus) : tabButton(/* Complete */{\n _0: completionType\n }, state, send, targetStatus);\n } else {\n var match$1 = match._0;\n tmp = typeof match$1 === \"number\" && !(match$1 >= 2 || completionType >= 2 || !Caml_obj.caml_notequal(CoursesCurriculum__TargetDetails.submissions(targetDetails), [])) ? tabButton(/* Complete */{\n _0: completionType\n }, state, send, targetStatus) : null;\n }\n return React.createElement(\"div\", {\n className: \"flex justify-between max-w-3xl mx-auto -mb-px mt-5 md:mt-7\",\n role: \"tablist\"\n }, selectableTabs(targetDetails).map(function (selection) {\n return tabButton(selection, state, send, targetStatus);\n }), tmp);\n}\n\nfunction addSubmission(target, state, send, addSubmissionCB, submission, levelUpEligibility) {\n var targetDetails = state.targetDetails;\n if (targetDetails !== undefined) {\n var newTargetDetails = CoursesCurriculum__TargetDetails.addSubmission(submission, targetDetails);\n Curry._1(send, {\n TAG: /* SetTargetDetails */1,\n _0: newTargetDetails\n });\n }\n var match = CoursesCurriculum__Submission.status(submission);\n switch (match) {\n case /* MarkedAsComplete */0 :\n return Curry._2(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(false, CoursesCurriculum__Target.id(target)), levelUpEligibility);\n case /* Pending */1 :\n return Curry._2(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(true, CoursesCurriculum__Target.id(target)), levelUpEligibility);\n case /* Completed */2 :\n throw {\n RE_EXN_ID: UnexpectedSubmissionStatus,\n _1: \"CoursesCurriculum__Overlay.addSubmission cannot handle a submsision with status Completed\",\n Error: new Error()\n };\n case /* Rejected */3 :\n throw {\n RE_EXN_ID: UnexpectedSubmissionStatus,\n _1: \"CoursesCurriculum__Overlay.addSubmission cannot handle a submsision with status Rejected\",\n Error: new Error()\n };\n \n }\n}\n\nfunction addVerifiedSubmission(target, state, send, addSubmissionCB, submission, levelUpEligibility) {\n var targetDetails = state.targetDetails;\n if (targetDetails !== undefined) {\n var newTargetDetails = CoursesCurriculum__TargetDetails.addSubmission(submission, targetDetails);\n Curry._1(send, {\n TAG: /* SetTargetDetails */1,\n _0: newTargetDetails\n });\n }\n return Curry._2(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(false, CoursesCurriculum__Target.id(target)), levelUpEligibility);\n}\n\nfunction targetStatusClass(prefix, targetStatus) {\n return prefix + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus);\n}\n\nfunction renderTargetStatus(targetStatus) {\n var className = \"curriculum__target-status bg-white text-xs mt-2 md:mt-0 py-1 px-2 md:px-4 curriculum__target-status--\" + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus);\n return ReactUtils.nullIf(React.createElement(\"div\", {\n className: className\n }, CoursesCurriculum__TargetStatus.statusToString(targetStatus)), CoursesCurriculum__TargetStatus.isPending(targetStatus));\n}\n\nfunction overlayHeaderTitleCardClasses(targetStatus) {\n return \"course-overlay__header-title-card relative flex justify-between items-center px-3 py-5 md:p-6 course-overlay__header-title-card--\" + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus);\n}\n\nfunction renderLocked(text) {\n return React.createElement(\"div\", {\n className: \"mx-auto text-center bg-gray-900 text-white max-w-fc px-4 py-2 text-sm font-semibold relative z-10 rounded-b-lg\"\n }, React.createElement(\"i\", {\n className: \"fas fa-lock text-lg\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, text));\n}\n\nfunction overlayStatus(course, target, targetStatus, preview) {\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: overlayHeaderTitleCardClasses(targetStatus)\n }, React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"close_button\"),\n className: \"course-overlay__close xl:absolute flex flex-col items-center justify-center absolute rounded-t-lg lg:rounded-t-none lg:rounded-b-lg leading-tight px-4 py-1 h-8 lg:h-full cursor-pointer border border-b-0 lg:border-transparent lg:border-t-0 lg:shadow hover:text-gray-900 hover:shadow-md focus:border-gray-300 focus:outline-none focus:text-gray-900 course-overlay__close--\" + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus),\n onClick: (function (_e) {\n return closeOverlay(course);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-regular text-xl lg:text-2xl mt-1 lg:mt-0\"\n }), React.createElement(\"span\", {\n className: \"text-xs hidden lg:inline-block mt-px\"\n }, t(undefined, undefined, \"close_button\"))), React.createElement(\"div\", {\n className: \"w-full flex flex-wrap md:flex-nowrap items-center justify-between relative\"\n }, React.createElement(\"h1\", {\n className: \"text-base leading-snug md:mr-6 md:text-xl\"\n }, CoursesCurriculum__Target.title(target)), renderTargetStatus(targetStatus))), ReactUtils.nullUnless(React.createElement(\"div\", undefined, renderLocked(t(undefined, undefined, \"preview_mode_text\"))), preview));\n}\n\nfunction renderLockReason(reason) {\n return renderLocked(CoursesCurriculum__TargetStatus.lockReasonToString(reason));\n}\n\nfunction prerequisitesIncomplete(reason, target, targets, statusOfTargets, send) {\n var prerequisiteTargetIds = CoursesCurriculum__Target.prerequisiteTargetIds(target);\n var prerequisiteTargets = targets.filter(function (target) {\n return prerequisiteTargetIds.includes(CoursesCurriculum__Target.id(target));\n });\n return React.createElement(\"div\", {\n className: \"relative px-3 md:px-0\"\n }, renderLocked(CoursesCurriculum__TargetStatus.lockReasonToString(reason)), React.createElement(\"div\", {\n className: \"course-overlay__prerequisite-targets z-10 max-w-3xl mx-auto bg-white text-center rounded-lg overflow-hidden shadow mt-6\"\n }, prerequisiteTargets.map(function (target) {\n var targetStatus = ArrayUtils.unsafeFind((function (ts) {\n return CoursesCurriculum__TargetStatus.targetId(ts) === CoursesCurriculum__Target.id(target);\n }), \"Could not find status of target with ID \" + CoursesCurriculum__Target.id(target), statusOfTargets);\n return React.createElement(Link.make, {\n href: \"/targets/\" + CoursesCurriculum__Target.id(target),\n ariaLabel: \"Select Target \" + CoursesCurriculum__Target.id(target),\n className: \"bg-white border-t px-6 py-4 relative z-10 flex items-center justify-between hover:bg-gray-50 hover:text-primary-500 cursor-pointer\",\n onClick: (function (param) {\n return Curry._1(send, /* ResetState */0);\n }),\n children: null,\n key: CoursesCurriculum__Target.id(target)\n }, React.createElement(\"span\", {\n className: \"font-semibold text-left leading-snug\"\n }, CoursesCurriculum__Target.title(target)), renderTargetStatus(targetStatus));\n })));\n}\n\nfunction handleLocked(target, targets, targetStatus, statusOfTargets, send) {\n var reason = CoursesCurriculum__TargetStatus.status(targetStatus);\n if (typeof reason === \"number\") {\n return null;\n }\n var reason$1 = reason._0;\n if (typeof reason$1 === \"number\" && reason$1 >= 2) {\n return prerequisitesIncomplete(reason$1, target, targets, statusOfTargets, send);\n } else {\n return renderLocked(CoursesCurriculum__TargetStatus.lockReasonToString(reason$1));\n }\n}\n\nfunction overlayContentClasses(bool) {\n if (bool) {\n return \"\";\n } else {\n return \"hidden\";\n }\n}\n\nfunction learnSection(send, targetDetails, tab, author, courseId, targetId, targetStatus, completionType) {\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n var suffixLinkInfo = typeof match === \"number\" && !(match === 2 || match === 1) ? (\n completionType !== 1 ? (\n completionType !== 0 ? undefined : [\n /* Complete */{\n _0: completionType\n },\n t(undefined, undefined, \"learn_cta_submit_work\"),\n \"fas fa-feather-alt\"\n ]\n ) : [\n /* Complete */{\n _0: completionType\n },\n t(undefined, undefined, \"learn_cta_take_quiz\"),\n \"fas fa-tasks\"\n ]\n ) : undefined;\n var linkToTab = Belt_Option.mapWithDefault(suffixLinkInfo, null, (function (param) {\n var tab = param[0];\n return React.createElement(\"button\", {\n className: \"cursor-pointer mt-5 flex rounded btn-success text-lg justify-center w-full font-bold p-4 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 curriculum-overlay__learn-submit-btn\",\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* Select */0,\n _0: tab\n });\n })\n }, React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: param[2] + \" mr-2\"\n }), param[1]));\n }));\n return React.createElement(\"div\", {\n className: tab === /* Learn */0 ? \"\" : \"hidden\"\n }, React.createElement(CoursesCurriculum__Learn.make, {\n targetDetails: targetDetails,\n author: author,\n courseId: courseId,\n targetId: targetId\n }), linkToTab);\n}\n\nfunction discussSection(target, targetDetails, tab) {\n return React.createElement(\"div\", {\n className: tab === /* Discuss */1 ? \"\" : \"hidden\"\n }, React.createElement(CoursesCurriculum__Discuss.make, {\n targetId: CoursesCurriculum__Target.id(target),\n communities: CoursesCurriculum__TargetDetails.communities(targetDetails)\n }));\n}\n\nfunction completeSectionClasses(tab, completionType) {\n if (typeof tab === \"number\" && (tab !== 0 || completionType < 2)) {\n return \"hidden\";\n } else {\n return \"\";\n }\n}\n\nfunction completeSection(state, send, target, targetDetails, targetStatus, addSubmissionCB, evaluationCriteria, coaches, users, preview, completionType) {\n var addVerifiedSubmissionCB = function (param, param$1) {\n return addVerifiedSubmission(target, state, send, addSubmissionCB, param, param$1);\n };\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n var tmp;\n var exit = 0;\n var exit$1 = 0;\n if (typeof match === \"number\") {\n if (match !== 0) {\n exit$1 = 2;\n } else if (completionType !== 1) {\n if (completionType !== 0) {\n exit = 1;\n } else {\n tmp = [\n React.createElement(CoursesCurriculum__CompletionInstructions.make, {\n targetDetails: targetDetails,\n title: \"Instructions\",\n key: \"completion-instructions\"\n }),\n React.createElement(CoursesCurriculum__SubmissionBuilder.make, {\n target: target,\n addSubmissionCB: (function (param, param$1) {\n return addSubmission(target, state, send, addSubmissionCB, param, param$1);\n }),\n preview: preview,\n checklist: CoursesCurriculum__TargetDetails.checklist(targetDetails),\n key: \"courses-curriculum-submission-form\"\n })\n ];\n }\n } else {\n tmp = [\n React.createElement(CoursesCurriculum__CompletionInstructions.make, {\n targetDetails: targetDetails,\n title: \"Instructions\",\n key: \"completion-instructions\"\n }),\n React.createElement(CoursesCurriculum__Quiz.make, {\n target: target,\n targetDetails: targetDetails,\n addSubmissionCB: addVerifiedSubmissionCB,\n preview: preview,\n key: \"courses-curriculum-quiz\"\n })\n ];\n }\n } else {\n var match$1 = match._0;\n if (typeof match$1 === \"number\" && match$1 < 2) {\n exit$1 = 2;\n } else {\n exit = 1;\n }\n }\n if (exit$1 === 2) {\n if (completionType >= 2) {\n exit = 1;\n } else {\n tmp = React.createElement(CoursesCurriculum__SubmissionsAndFeedback.make, {\n targetDetails: targetDetails,\n target: target,\n evaluationCriteria: evaluationCriteria,\n addSubmissionCB: (function (param, param$1) {\n return addSubmission(target, state, send, addSubmissionCB, param, param$1);\n }),\n targetStatus: targetStatus,\n coaches: coaches,\n users: users,\n preview: preview,\n checklist: CoursesCurriculum__TargetDetails.checklist(targetDetails)\n });\n }\n }\n if (exit === 1) {\n tmp = typeof match === \"number\" ? React.createElement(CoursesCurriculum__AutoVerify.make, {\n target: target,\n targetDetails: targetDetails,\n targetStatus: targetStatus,\n addSubmissionCB: addVerifiedSubmissionCB,\n preview: preview\n }) : null;\n }\n return React.createElement(\"div\", {\n className: completeSectionClasses(state.tab, completionType)\n }, tmp);\n}\n\nfunction renderPendingStudents(pendingUserIds, users) {\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto text-center mt-4\"\n }, React.createElement(\"div\", {\n className: \"font-semibold text-md\"\n }, t(undefined, undefined, \"pending_team_members_notice\")), React.createElement(\"div\", {\n className: \"flex justify-center flex-wrap\"\n }, pendingUserIds.map(function (studentId) {\n var user = ArrayUtils.unsafeFind((function (u) {\n return CoursesCurriculum__User.id(u) === studentId;\n }), \"Unable to find user with id \" + (studentId + \"in CoursesCurriculum__Overlay\"), users);\n return React.createElement(\"div\", {\n key: CoursesCurriculum__User.id(user),\n className: \"w-10 h-10 rounded-full border border-yellow-400 flex items-center justify-center overflow-hidden mx-1 shadow-md shrink-0 mt-2\",\n title: CoursesCurriculum__User.name(user) + \" has not completed this target.\"\n }, CoursesCurriculum__User.avatar(user));\n })));\n}\n\nfunction handlePendingStudents(targetStatus, targetDetails, users) {\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n if (targetDetails === undefined) {\n return null;\n }\n if (typeof match !== \"number\") {\n return null;\n }\n if (!(match === 2 || match === 1)) {\n return null;\n }\n var pendingUserIds = CoursesCurriculum__TargetDetails.pendingUserIds(targetDetails);\n if (Caml_obj.caml_equal(pendingUserIds, [])) {\n return null;\n } else {\n return renderPendingStudents(pendingUserIds, users);\n }\n}\n\nfunction performQuickNavigation(send, _event) {\n var element = document.getElementById(\"target-overlay\");\n if (!(element == null)) {\n element.scrollTop = 0.0;\n }\n return Curry._1(send, /* PerformQuickNavigation */1);\n}\n\nfunction navigationLink(direction, url, send) {\n var match = direction === \"Next\" ? [\n undefined,\n t(undefined, undefined, \"next_target_button\"),\n \"fa-arrow-right\"\n ] : [\n \"fa-arrow-left\",\n t(undefined, undefined, \"previous_target_button\"),\n undefined\n ];\n var arrow = function (icon) {\n return Belt_Option.mapWithDefault(icon, null, (function (icon) {\n return React.createElement(FaIcon.make, {\n classes: \"fas \" + icon\n });\n }));\n };\n return React.createElement(Link.make, {\n href: url,\n className: \"block p-2 md:p-4 text-center border rounded-lg bg-gray-50 hover:bg-gray-50\",\n onClick: (function (param) {\n return performQuickNavigation(send, param);\n }),\n children: null\n }, arrow(match[0]), React.createElement(\"span\", {\n className: \"mx-2 hidden md:inline\"\n }, match[1]), arrow(match[2]));\n}\n\nfunction scrollOverlayToTop(_event) {\n var element = document.getElementById(\"target-overlay\");\n return Belt_Option.mapWithDefault((element == null) ? undefined : Caml_option.some(element), undefined, (function (element) {\n element.scrollTop = 0.0;\n \n }));\n}\n\nfunction quickNavigationLinks(targetDetails, send) {\n var match = CoursesCurriculum__TargetDetails.navigation(targetDetails);\n return React.createElement(\"div\", {\n className: \"pb-6\"\n }, React.createElement(\"hr\", {\n className: \"my-6\"\n }), React.createElement(\"div\", {\n className: \"container mx-auto max-w-3xl flex px-3 lg:px-0\",\n id: \"target-navigation\"\n }, React.createElement(\"div\", {\n className: \"w-1/3 mr-2\"\n }, Belt_Option.mapWithDefault(match[0], null, (function (previousUrl) {\n return navigationLink(\"Previous\", previousUrl, send);\n }))), React.createElement(\"div\", {\n className: \"w-1/3 mx-2\"\n }, React.createElement(\"button\", {\n className: \"block w-full focus:outline-none p-2 md:p-4 text-center border rounded-lg bg-gray-50 hover:bg-gray-50\",\n onClick: scrollOverlayToTop\n }, React.createElement(\"span\", {\n className: \"mx-2 hidden md:inline\"\n }, t(undefined, undefined, \"scroll_to_top\")), React.createElement(\"span\", {\n className: \"mx-2 md:hidden\"\n }, React.createElement(\"i\", {\n className: \"fas fa-arrow-up\"\n })))), React.createElement(\"div\", {\n className: \"w-1/3 ml-2\"\n }, Belt_Option.mapWithDefault(match[1], null, (function (nextUrl) {\n return navigationLink(\"Next\", nextUrl, send);\n })))));\n}\n\nfunction updatePendingUserIdsWhenAddingSubmission(send, target, addSubmissionCB, submission, levelUpEligibility) {\n Curry._1(send, {\n TAG: /* AddSubmission */2,\n _0: CoursesCurriculum__Target.role(target)\n });\n return Curry._2(addSubmissionCB, submission, levelUpEligibility);\n}\n\nfunction CoursesCurriculum__Overlay(Props) {\n var target = Props.target;\n var course = Props.course;\n var targetStatus = Props.targetStatus;\n var addSubmissionCB = Props.addSubmissionCB;\n var targets = Props.targets;\n var statusOfTargets = Props.statusOfTargets;\n var users = Props.users;\n var evaluationCriteria = Props.evaluationCriteria;\n var coaches = Props.coaches;\n var preview = Props.preview;\n var author = Props.author;\n var match = React.useReducer(reducer, initialState);\n var send = match[1];\n var state = match[0];\n React.useEffect((function () {\n return loadTargetDetails(target, send, undefined);\n }), [CoursesCurriculum__Target.id(target)]);\n React.useEffect(function () {\n ScrollLock.activate(undefined);\n return (function (param) {\n return ScrollLock.deactivate(undefined);\n });\n });\n var targetDetails = state.targetDetails;\n var targetDetails$1 = state.targetDetails;\n var tmp;\n if (targetDetails$1 !== undefined) {\n var completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails$1);\n tmp = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"container mx-auto mt-6 md:mt-8 max-w-3xl px-3 lg:px-0\"\n }, learnSection(send, targetDetails$1, state.tab, author, CoursesCurriculum__Course.id(course), CoursesCurriculum__Target.id(target), targetStatus, completionType), discussSection(target, targetDetails$1, state.tab), completeSection(state, send, target, targetDetails$1, targetStatus, (function (param, param$1) {\n return updatePendingUserIdsWhenAddingSubmission(send, target, addSubmissionCB, param, param$1);\n }), evaluationCriteria, coaches, users, preview, completionType)), quickNavigationLinks(targetDetails$1, send));\n } else {\n tmp = React.createElement(\"div\", {\n className: \"course-overlay__skeleton-body-container max-w-3xl w-full pb-4 mx-auto\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__skeleton-body-wrapper mt-8 px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-md mt-4 w-1/2 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 w-3/4 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-image-placeholder mt-5 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 w-2/5 skeleton-animate\"\n })), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-body-wrapper mt-8 px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 w-3/4 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm mt-4 w-3/4 skeleton-animate\"\n })));\n }\n return React.createElement(\"div\", {\n className: \"fixed z-30 top-0 left-0 w-full h-full overflow-y-scroll bg-white\",\n id: \"target-overlay\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-50 border-b border-gray-300 px-3\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__header-container pt-12 lg:pt-0 mx-auto\"\n }, overlayStatus(course, target, targetStatus, preview), handleLocked(target, targets, targetStatus, statusOfTargets, send), handlePendingStudents(targetStatus, state.targetDetails, users), targetDetails !== undefined ? tabOptions(state, send, targetDetails, targetStatus) : React.createElement(\"div\", {\n className: \"course-overlay__skeleton-head-container max-w-3xl w-full mx-auto\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__skeleton-head-wrapper bg-white h-13 flex items-center justify-between border border-b-0 rounded-t-lg mt-5 md:mt-7\"\n }, React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm w-1/3 mx-8 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm w-1/3 mx-8 skeleton-animate\"\n }), React.createElement(\"div\", {\n className: \"course-overlay__skeleton-line-placeholder-sm w-1/3 mx-8 skeleton-animate\"\n }))))), tmp);\n}\n\nvar TargetStatus;\n\nvar make = CoursesCurriculum__Overlay;\n\nexport {\n UnexpectedSubmissionStatus ,\n TargetStatus ,\n str ,\n t ,\n initialState ,\n reducer ,\n closeOverlay ,\n loadTargetDetails ,\n completionTypeToString ,\n tabToString ,\n selectableTabs ,\n tabClasses ,\n scrollCompleteButtonIntoViewEventually ,\n handleTablink ,\n tabButton ,\n tabLink ,\n tabOptions ,\n addSubmission ,\n addVerifiedSubmission ,\n targetStatusClass ,\n renderTargetStatus ,\n overlayHeaderTitleCardClasses ,\n renderLocked ,\n overlayStatus ,\n renderLockReason ,\n prerequisitesIncomplete ,\n handleLocked ,\n overlayContentClasses ,\n learnSection ,\n discussSection ,\n completeSectionClasses ,\n completeSection ,\n renderPendingStudents ,\n handlePendingStudents ,\n performQuickNavigation ,\n navigationLink ,\n scrollOverlayToTop ,\n quickNavigationLinks ,\n updatePendingUserIdsWhenAddingSubmission ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Dropdown from \"../../../shared/components/Dropdown.bs.js\";\nimport * as LevelLabel from \"../../../shared/utils/LevelLabel.bs.js\";\nimport * as CoursesCurriculum__Level from \"../types/CoursesCurriculum__Level.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction levelZeroSelectorClasses(isSelected) {\n return \"w-1/2 px-4 py-2 focus:outline-none text-sm font-semibold \" + (\n isSelected ? \"bg-primary-100 text-primary-500 hover:bg-primary-100 hover:text-primary-500\" : \"\"\n );\n}\n\nfunction levelName(level) {\n return LevelLabel.format(true, CoursesCurriculum__Level.name(level), String(CoursesCurriculum__Level.number(level)));\n}\n\nfunction selectableLevels(orderedLevels, studentLevel, setSelectedLevelId, preview) {\n var studentLevelNumber = CoursesCurriculum__Level.number(studentLevel);\n return orderedLevels.map(function (level) {\n var levelNumber = CoursesCurriculum__Level.number(level);\n var icon = preview ? \"fas fa-eye\" : (\n levelNumber < studentLevelNumber ? \"fas fa-check text-green-500\" : (\n levelNumber === studentLevelNumber ? \"fas fa-map-marker-alt text-blue-400\" : (\n CoursesCurriculum__Level.isUnlocked(level) ? \"inline-block\" : \"fas fa-lock text-gray-600\"\n )\n )\n );\n return React.createElement(\"button\", {\n key: CoursesCurriculum__Level.id(level),\n className: \"flex focus:outline-none p-2 w-full text-left whitespace-normal\",\n onClick: (function (param) {\n return Curry._1(setSelectedLevelId, CoursesCurriculum__Level.id(level));\n })\n }, React.createElement(\"span\", {\n className: \"mr-2 mt-px\"\n }, React.createElement(FaIcon.make, {\n classes: \"fa-fw \" + icon\n })), levelName(level));\n });\n}\n\nfunction untabbedLevelSelector(selectedLevel, orderedLevels, studentLevel, setSelectedLevelId, preview) {\n var selected = React.createElement(\"button\", {\n className: \"font-semibold w-full px-2 h-10 flex items-center justify-between\"\n }, React.createElement(\"span\", {\n className: \"grow text-center truncate w-0\"\n }, levelName(selectedLevel)), React.createElement(FaIcon.make, {\n classes: \"fas fa-caret-down ml-1\"\n }));\n return React.createElement(Dropdown.make, {\n selected: selected,\n contents: selectableLevels(orderedLevels, studentLevel, setSelectedLevelId, preview),\n className: \"grow cursor-pointer rounded-lg bg-primary-100 hover:bg-gray-50 hover:text-primary-500 focus-within:outline-none focus-within:ring-2 focus-within:ring-inset focus-witin:ring-focusColor-500 focus:text-primary-500 focus:bg-gray-50\"\n });\n}\n\nfunction tabbedLevelSelector(orderedLevels, studentLevel, selectedLevel, setSelectedLevelId, showLevelZero, setShowLevelZero, levelZero, preview) {\n var selected = function (hideCaret) {\n return React.createElement(\"button\", {\n className: \"rounded-l-lg font-semibold w-full px-2 h-10 flex items-center justify-between\"\n }, React.createElement(\"span\", {\n className: \"grow text-center truncate w-0\"\n }, levelName(selectedLevel)), React.createElement(FaIcon.make, {\n classes: \"fas fa-caret-down ml-1\" + (\n hideCaret ? \" invisible\" : \"\"\n )\n }));\n };\n var numberedLevelSelector = showLevelZero ? React.createElement(\"div\", {\n className: \"cursor-pointer text-sm grow rounded-l-lg hover:bg-gray-50 hover:text-primary-500\",\n onClick: (function (param) {\n return Curry._1(setShowLevelZero, false);\n })\n }, selected(true)) : React.createElement(Dropdown.make, {\n selected: selected(false),\n contents: selectableLevels(orderedLevels, studentLevel, setSelectedLevelId, preview),\n className: \"cursor-pointer grow rounded-l-lg bg-primary-100 hover:bg-gray-50 hover:text-primary-500\",\n key: \"numbered-level-selector\"\n });\n return [\n numberedLevelSelector,\n React.createElement(\"button\", {\n key: \"level-zero-selector\",\n className: \"border-l rounded-r-lg bg-white border-gray-300 font-semibold truncate hover:bg-gray-50 hover:text-primary-500 \" + levelZeroSelectorClasses(showLevelZero),\n onClick: (function (_e) {\n return Curry._1(setShowLevelZero, true);\n })\n }, CoursesCurriculum__Level.name(levelZero))\n ];\n}\n\nfunction CoursesCurriculum__LevelSelector(Props) {\n var levels = Props.levels;\n var studentLevel = Props.studentLevel;\n var selectedLevel = Props.selectedLevel;\n var preview = Props.preview;\n var setSelectedLevelId = Props.setSelectedLevelId;\n var showLevelZero = Props.showLevelZero;\n var setShowLevelZero = Props.setShowLevelZero;\n var levelZero = Props.levelZero;\n var orderedLevels = CoursesCurriculum__Level.sort(levels.filter(function (l) {\n return CoursesCurriculum__Level.number(l) !== 0;\n }));\n return React.createElement(\"div\", {\n className: \"bg-gray-50 px-3 py-2 mt-3 md:px-0 sticky top-0 z-20\"\n }, React.createElement(\"div\", {\n className: \"flex justify-center max-w-sm md:max-w-xl mx-auto rounded-lg border border-gray-300 h-11\"\n }, levelZero !== undefined ? tabbedLevelSelector(orderedLevels, studentLevel, selectedLevel, setSelectedLevelId, showLevelZero, setShowLevelZero, levelZero, preview) : untabbedLevelSelector(selectedLevel, orderedLevels, studentLevel, setSelectedLevelId, preview)));\n}\n\nvar make = CoursesCurriculum__LevelSelector;\n\nexport {\n str ,\n levelZeroSelectorClasses ,\n levelName ,\n selectableLevels ,\n untabbedLevelSelector ,\n tabbedLevelSelector ,\n make ,\n \n}\n/* react Not a pure module */\n","export default \"__VITE_ASSET__36d23caa__\"","export default \"__VITE_ASSET__7a4a4665__\"","export default \"__VITE_ASSET__5361d008__\"","export default \"__VITE_ASSET__e7bab373__\"","export default \"__VITE_ASSET__9314bf89__\"","export default \"__VITE_ASSET__ec5636a4__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport LevelUpSvg from \"../images/level-up.svg\";\nimport AccessEndedSvg from \"../images/access-ended.svg\";\nimport CourseEndedSvg from \"../images/course-ended.svg\";\nimport PreviewModeSvg from \"../images/preview-mode.svg\";\nimport CourseCompleteSvg from \"../images/course-complete.svg\";\nimport LevelUpBlockedSvg from \"../images/level-up-blocked.svg\";\n\nvar courseEndedImage = CourseEndedSvg;\n\nvar courseCompleteImage = CourseCompleteSvg;\n\nvar accessEndedImage = AccessEndedSvg;\n\nvar levelUpImage = LevelUpSvg;\n\nvar previewModeImage = PreviewModeSvg;\n\nvar levelUpBlockedImage = LevelUpBlockedSvg;\n\nfunction icon(t) {\n if (typeof t !== \"number\") {\n return levelUpBlockedImage;\n }\n switch (t) {\n case /* Preview */0 :\n return previewModeImage;\n case /* CourseEnded */1 :\n return courseEndedImage;\n case /* CourseComplete */2 :\n return courseCompleteImage;\n case /* AccessEnded */3 :\n return accessEndedImage;\n case /* LevelUp */4 :\n return levelUpImage;\n case /* TeamMembersPending */5 :\n return levelUpBlockedImage;\n case /* Nothing */6 :\n return \"\";\n \n }\n}\n\nexport {\n courseEndedImage ,\n courseCompleteImage ,\n accessEndedImage ,\n levelUpImage ,\n previewModeImage ,\n levelUpBlockedImage ,\n icon ,\n \n}\n/* courseEndedImage Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as CoursesCurriculum__Course from \"../types/CoursesCurriculum__Course.bs.js\";\n\nvar partial_arg = \"components.CoursesCurriculum__LevelUpButton\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nvar Raw = {};\n\nvar query = \"mutation LevelUpMutation($courseId: ID!) {\\nlevelUp(courseId: $courseId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.levelUp;\n return {\n levelUp: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.levelUp;\n var value$2 = value$1.success;\n var levelUp = {\n success: value$2\n };\n return {\n levelUp: levelUp\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n courseId: inp.courseId\n };\n}\n\nfunction makeVariables(courseId, param) {\n return {\n courseId: courseId\n };\n}\n\nvar LevelUpQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar LevelUpQuery_Graphql_error = include.Graphql_error;\n\nvar LevelUpQuery_decodeNotification = include.decodeNotification;\n\nvar LevelUpQuery_decodeObject = include.decodeObject;\n\nvar LevelUpQuery_decodeNotifications = include.decodeNotifications;\n\nvar LevelUpQuery_decodeErrors = include.decodeErrors;\n\nvar LevelUpQuery_flashNotifications = include.flashNotifications;\n\nvar LevelUpQuery_sendQuery = include.sendQuery;\n\nvar LevelUpQuery_query = include.query;\n\nvar LevelUpQuery_make = include.make;\n\nvar LevelUpQuery = {\n LevelUpQuery_inner: LevelUpQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: LevelUpQuery_Graphql_error,\n decodeNotification: LevelUpQuery_decodeNotification,\n decodeObject: LevelUpQuery_decodeObject,\n decodeNotifications: LevelUpQuery_decodeNotifications,\n decodeErrors: LevelUpQuery_decodeErrors,\n flashNotifications: LevelUpQuery_flashNotifications,\n sendQuery: LevelUpQuery_sendQuery,\n query: LevelUpQuery_query,\n $$fetch: $$fetch,\n make: LevelUpQuery_make\n};\n\nfunction handleSubmitButton(saving) {\n var submitButtonText = function (title, iconClasses) {\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: iconClasses + \" mr-2\"\n }), title);\n };\n if (saving) {\n return submitButtonText(t(undefined, undefined, \"button_text_saving\"), \"fas fa-spinner fa-spin\");\n } else {\n return submitButtonText(t(undefined, undefined, \"button_text_level_up\"), \"fas fa-flag\");\n }\n}\n\nfunction refreshPage(param) {\n window.location.reload();\n \n}\n\nfunction createLevelUpQuery(course, setSaving, $$event) {\n $$event.preventDefault();\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Curry._3($$fetch, undefined, undefined, {\n courseId: CoursesCurriculum__Course.id(course)\n }).then(function (response) {\n if (response.levelUp.success) {\n window.location.reload();\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction CoursesCurriculum__LevelUpButton(Props) {\n var course = Props.course;\n var match = React.useState(function () {\n return false;\n });\n var setSaving = match[1];\n var saving = match[0];\n return React.createElement(\"button\", {\n className: \"btn btn-success btn-large w-full md:w-2/3 mt-4\",\n disabled: saving,\n onClick: (function (param) {\n return createLevelUpQuery(course, setSaving, param);\n })\n }, handleSubmitButton(saving));\n}\n\nvar make = CoursesCurriculum__LevelUpButton;\n\nexport {\n t ,\n str ,\n LevelUpQuery ,\n handleSubmitButton ,\n refreshPage ,\n createLevelUpQuery ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as React from \"react\";\nimport * as CoursesCurriculum__Notice from \"../types/CoursesCurriculum__Notice.bs.js\";\nimport * as CoursesCurriculum__LevelUpButton from \"./CoursesCurriculum__LevelUpButton.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__NoticeManager\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction showNotice(title, description, notice, classesOpt, param) {\n var classes = classesOpt !== undefined ? classesOpt : \"max-w-3xl mx-auto text-center mt-4 bg-white lg:rounded-lg shadow-md px-6 pt-6 pb-8\";\n return React.createElement(\"div\", {\n className: classes\n }, React.createElement(\"img\", {\n className: \"h-50 mx-auto\",\n src: CoursesCurriculum__Notice.icon(notice)\n }), React.createElement(\"div\", {\n className: \"max-w-xl font-bold text-xl mx-auto mt-2 leading-tight\"\n }, title), React.createElement(\"div\", {\n className: \"text-sm max-w-lg mx-auto mt-2\"\n }, description));\n}\n\nfunction courseCompleteMessage(param) {\n return showNotice(t(undefined, undefined, \"course_complete_title\"), t(undefined, undefined, \"course_complete_description\"), /* CourseComplete */2, undefined, undefined);\n}\n\nfunction courseEndedMessage(param) {\n return showNotice(t(undefined, undefined, \"course_ended_title\"), t(undefined, undefined, \"course_ended_description\"), /* CourseEnded */1, undefined, undefined);\n}\n\nfunction showPreviewMessage(param) {\n return React.createElement(\"div\", {\n className: \"flex max-w-lg md:mx-auto mx-3 mt-4 rounded-lg px-3 py-2 shadow-lg items-center border border-primary-300 bg-gray-50 \"\n }, React.createElement(\"img\", {\n className: \"w-20 md:w-22 flex-no-shrink\",\n src: CoursesCurriculum__Notice.previewModeImage\n }), React.createElement(\"div\", {\n className: \"flex-1 text-left ml-4\"\n }, React.createElement(\"h4\", {\n className: \"font-bold text-lg leading-tight\"\n }, t(undefined, undefined, \"preview_mode_title\")), React.createElement(\"p\", {\n className: \"text-sm mt-1\"\n }, t(undefined, undefined, \"preview_mode_description\"))));\n}\n\nfunction accessEndedMessage(param) {\n return showNotice(t(undefined, undefined, \"access_ended_title\"), t(undefined, undefined, \"access_ended_description\"), /* AccessEnded */3, undefined, undefined);\n}\n\nfunction teamMembersPendingMessage(param) {\n return showNotice(t(undefined, undefined, \"team_members_pending_title\"), t(undefined, undefined, \"team_members_pending_description\"), /* TeamMembersPending */5, undefined, undefined);\n}\n\nfunction levelUpBlockedMessage(currentLevelNumber, someSubmissionsRejected) {\n var titleKey = someSubmissionsRejected ? \"level_up_blocked.title_rejected\" : \"level_up_blocked.title_pending_review\";\n var prefix = t([[\n \"number\",\n String(currentLevelNumber)\n ]], undefined, \"level_up_blocked.body_prefix\");\n var body = t(undefined, undefined, someSubmissionsRejected ? \"level_up_blocked.body_middle_rejected\" : \"level_up_blocked.body_middle_pending_review\");\n var suffix = t(undefined, undefined, \"level_up_blocked.body_suffix\");\n return showNotice(t(undefined, undefined, titleKey), prefix + (body + suffix), {\n TAG: /* LevelUpBlocked */1,\n _0: currentLevelNumber,\n _1: someSubmissionsRejected\n }, undefined, undefined);\n}\n\nfunction levelUpLimitedMessage(currentLevelNumber, minimumRequiredLevelNumber) {\n var description = t([\n [\n \"currentLevel\",\n String(currentLevelNumber)\n ],\n [\n \"minimumRequiredLevel\",\n String(minimumRequiredLevelNumber)\n ]\n ], undefined, \"level_up_limited_description\");\n return showNotice(t(undefined, undefined, \"level_up_limited_title\"), description, {\n TAG: /* LevelUpLimited */0,\n _0: currentLevelNumber,\n _1: minimumRequiredLevelNumber\n }, undefined, undefined);\n}\n\nfunction renderLevelUp(course) {\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-3 lg:mx-auto text-center mt-4 bg-white rounded-lg shadow px-6 pt-4 pb-8\"\n }, showNotice(t(undefined, undefined, \"level_up_title\"), t(undefined, undefined, \"level_up_description\"), /* LevelUp */4, \"\", undefined), React.createElement(CoursesCurriculum__LevelUpButton.make, {\n course: course\n }));\n}\n\nfunction CoursesCurriculum__NoticeManager(Props) {\n var notice = Props.notice;\n var course = Props.course;\n if (typeof notice !== \"number\") {\n if (notice.TAG === /* LevelUpLimited */0) {\n return levelUpLimitedMessage(notice._0, notice._1);\n } else {\n return levelUpBlockedMessage(notice._0, notice._1);\n }\n }\n switch (notice) {\n case /* Preview */0 :\n return showPreviewMessage(undefined);\n case /* CourseEnded */1 :\n return courseEndedMessage(undefined);\n case /* CourseComplete */2 :\n return courseCompleteMessage(undefined);\n case /* AccessEnded */3 :\n return accessEndedMessage(undefined);\n case /* LevelUp */4 :\n return renderLevelUp(course);\n case /* TeamMembersPending */5 :\n return teamMembersPendingMessage(undefined);\n case /* Nothing */6 :\n return null;\n \n }\n}\n\nvar make = CoursesCurriculum__NoticeManager;\n\nexport {\n str ,\n t ,\n showNotice ,\n courseCompleteMessage ,\n courseEndedMessage ,\n showPreviewMessage ,\n accessEndedMessage ,\n teamMembersPendingMessage ,\n levelUpBlockedMessage ,\n levelUpLimitedMessage ,\n renderLevelUp ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as StringUtils from \"../../../shared/utils/StringUtils.bs.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport LevelLockSvg from \"../images/level-lock.svg\";\nimport * as CoursesCurriculum__Level from \"../types/CoursesCurriculum__Level.bs.js\";\nimport LevelEmptySvg from \"../images/level-empty.svg\";\nimport * as CoursesCurriculum__Course from \"../types/CoursesCurriculum__Course.bs.js\";\nimport * as CoursesCurriculum__Target from \"../types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Overlay from \"./CoursesCurriculum__Overlay.bs.js\";\nimport * as CoursesCurriculum__Student from \"../types/CoursesCurriculum__Student.bs.js\";\nimport * as CoursesCurriculum__TargetGroup from \"../types/CoursesCurriculum__TargetGroup.bs.js\";\nimport * as CoursesCurriculum__TargetStatus from \"../types/CoursesCurriculum__TargetStatus.bs.js\";\nimport * as CoursesCurriculum__LevelSelector from \"./CoursesCurriculum__LevelSelector.bs.js\";\nimport * as CoursesCurriculum__NoticeManager from \"./CoursesCurriculum__NoticeManager.bs.js\";\nimport * as CoursesCurriculum__LatestSubmission from \"../types/CoursesCurriculum__LatestSubmission.bs.js\";\n\nimport \"./CoursesCurriculum.css\"\n;\n\nvar levelLockedImage = LevelLockSvg;\n\nvar levelEmptyImage = LevelEmptySvg;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction targetStatusClasses(targetStatus) {\n var statusClasses = \"curriculum__target-status--\" + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus);\n return \"curriculum__target-status px-3 py-px ml-4 h-6 \" + statusClasses;\n}\n\nfunction rendertarget(target, statusOfTargets, author, courseId) {\n var targetId = CoursesCurriculum__Target.id(target);\n var targetStatus = ArrayUtils.unsafeFind((function (ts) {\n return CoursesCurriculum__TargetStatus.targetId(ts) === targetId;\n }), \"Could not find targetStatus for listed target with ID \" + targetId, statusOfTargets);\n return React.createElement(\"div\", {\n key: \"target-\" + targetId,\n className: \"courses-curriculum__target-container flex border-t bg-white hover:bg-gray-50\"\n }, React.createElement(Link.make, {\n href: \"/targets/\" + targetId,\n ariaLabel: \"Select Target: \" + (CoursesCurriculum__Target.title(target) + \", Status: \" + CoursesCurriculum__TargetStatus.statusToString(targetStatus)),\n className: \"p-6 flex grow items-center justify-between hover:text-primary-500 cursor-pointer focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500 focus:text-primary-500 focus:bg-gray-50 focus:rounded-lg\",\n children: null,\n props: {\n \"data-target-id\": targetId\n }\n }, React.createElement(\"span\", {\n className: \"font-medium text-left leading-snug\"\n }, CoursesCurriculum__Target.title(target)), ReactUtils.nullIf(React.createElement(\"span\", {\n className: targetStatusClasses(targetStatus)\n }, CoursesCurriculum__TargetStatus.statusToString(targetStatus)), CoursesCurriculum__TargetStatus.isAccessEnded(targetStatus) || CoursesCurriculum__TargetStatus.isPending(targetStatus))), ReactUtils.nullUnless(React.createElement(\"a\", {\n \"aria-label\": t([[\n \"title\",\n CoursesCurriculum__Target.title(target)\n ]], undefined, \"edit_target_button_title\"),\n className: \"hidden lg:block courses-curriculum__target-quick-link text-gray-400 border-l border-transparent py-6 px-3 hover:text-primary-500 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500 focus:bg-gray-50 focus:text-primary-500 focus:rounded-lg\",\n title: t([[\n \"title\",\n CoursesCurriculum__Target.title(target)\n ]], undefined, \"edit_target_button_title\"),\n href: \"/school/courses/\" + courseId + \"/targets/\" + targetId + \"/content\"\n }, React.createElement(\"i\", {\n className: \"fas fa-pencil-alt\"\n })), author));\n}\n\nfunction renderTargetGroup(targetGroup, targets, statusOfTargets, author, courseId) {\n var targetGroupId = CoursesCurriculum__TargetGroup.id(targetGroup);\n var targets$1 = targets.filter(function (t) {\n return CoursesCurriculum__Target.targetGroupId(t) === targetGroupId;\n });\n return React.createElement(\"div\", {\n key: \"target-group-\" + targetGroupId,\n className: \"curriculum__target-group-container relative mt-5 px-3\"\n }, React.createElement(\"div\", {\n className: \"curriculum__target-group max-w-3xl mx-auto bg-white text-center rounded-lg shadow-md relative z-10 overflow-hidden \"\n }, CoursesCurriculum__TargetGroup.milestone(targetGroup) ? React.createElement(\"div\", {\n className: \"inline-block px-3 py-2 bg-orange-400 font-bold text-xs rounded-b-lg leading-tight text-white uppercase\"\n }, t(undefined, undefined, \"milestone_targets\")) : null, React.createElement(\"div\", {\n className: \"p-6 pt-5\"\n }, React.createElement(\"div\", {\n className: \"text-2xl font-bold leading-snug\"\n }, CoursesCurriculum__TargetGroup.name(targetGroup)), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__TargetGroup.description(targetGroup),\n className: \"text-sm max-w-md mx-auto leading-snug\",\n profile: /* AreaOfText */1\n })), ArrayUtils.copyAndSort((function (t1, t2) {\n return CoursesCurriculum__Target.sortIndex(t1) - CoursesCurriculum__Target.sortIndex(t2) | 0;\n }), targets$1).map(function (target) {\n return rendertarget(target, statusOfTargets, author, courseId);\n })));\n}\n\nfunction addSubmission(setState, latestSubmission, levelUpEligibility) {\n return Curry._1(setState, (function (state) {\n var withoutSubmissionForThisTarget = state.latestSubmissions.filter(function (s) {\n return CoursesCurriculum__LatestSubmission.targetId(s) !== CoursesCurriculum__LatestSubmission.targetId(latestSubmission);\n });\n var eligibility = Belt_Option.getWithDefault(levelUpEligibility, state.levelUpEligibility);\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: withoutSubmissionForThisTarget.concat([latestSubmission]),\n statusOfTargets: state.statusOfTargets,\n notice: state.notice,\n levelUpEligibility: eligibility\n };\n }));\n}\n\nfunction handleLockedLevel(level) {\n var date = CoursesCurriculum__Level.unlockAt(level);\n var tmp;\n if (date !== undefined) {\n var dateString = DateFns.format(Caml_option.valFromOption(date), \"MMMM d, yyyy\");\n tmp = React.createElement(\"div\", {\n className: \"font-semibold text-md px-3\"\n }, React.createElement(\"p\", undefined, t(undefined, undefined, \"level_locked_notice\")), React.createElement(\"p\", undefined, t([[\n \"date\",\n dateString\n ]], undefined, \"level_locked_explanation\")));\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n className: \"max-w-xl mx-auto text-center mt-4\"\n }, React.createElement(\"div\", {\n className: \"text-2xl font-bold px-3\"\n }, t(undefined, undefined, \"level_locked\")), React.createElement(\"img\", {\n className: \"max-w-sm mx-auto\",\n src: levelLockedImage\n }), tmp);\n}\n\nfunction statusOfMilestoneTargets(targetGroups, targets, level, statusOfTargets) {\n var targetGroupsInLevel = targetGroups.filter(function (tg) {\n return CoursesCurriculum__TargetGroup.levelId(tg) === CoursesCurriculum__Level.id(level);\n });\n var milestoneTargetGroupIds = targetGroupsInLevel.filter(CoursesCurriculum__TargetGroup.milestone).map(CoursesCurriculum__TargetGroup.id);\n var milestoneTargetIds = targets.filter(function (t) {\n return milestoneTargetGroupIds.includes(CoursesCurriculum__Target.targetGroupId(t));\n }).map(CoursesCurriculum__Target.id);\n return statusOfTargets.filter(function (ts) {\n return milestoneTargetIds.includes(CoursesCurriculum__TargetStatus.targetId(ts));\n });\n}\n\nfunction issuedCertificate(course) {\n var csn = CoursesCurriculum__Course.certificateSerialNumber(course);\n if (csn !== undefined) {\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto text-center mt-4 bg-white lg:rounded-lg shadow-md px-6 pt-6 pb-8\"\n }, React.createElement(\"div\", {\n className: \"max-w-xl font-bold text-xl mx-auto mt-2 leading-tight\"\n }, t(undefined, undefined, \"issued_certificate_heading\")), React.createElement(\"a\", {\n className: \"mt-4 mb-2 btn btn-primary\",\n href: \"/c/\" + csn\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-certificate\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"issued_certificate_button\"))));\n } else {\n return null;\n }\n}\n\nfunction computeLevelUp(levelUpEligibility, course, studentLevel, targetGroups, targets, statusOfTargets) {\n var progressionBehavior = CoursesCurriculum__Course.progressionBehavior(course);\n var currentLevelNumber = CoursesCurriculum__Level.number(studentLevel);\n var statusOfCurrentMilestoneTargets = statusOfMilestoneTargets(targetGroups, targets, studentLevel, statusOfTargets);\n switch (levelUpEligibility) {\n case /* Eligible */0 :\n return /* LevelUp */4;\n case /* AtMaxLevel */1 :\n if (CoursesCurriculum__TargetStatus.allComplete(statusOfCurrentMilestoneTargets)) {\n return /* CourseComplete */2;\n } else {\n return /* Nothing */6;\n }\n case /* CurrentLevelIncomplete */3 :\n if (typeof progressionBehavior === \"object\") {\n return /* Nothing */6;\n }\n if (progressionBehavior === \"Unlimited\") {\n return /* Nothing */6;\n }\n var currentLevelAttempted = CoursesCurriculum__TargetStatus.allAttempted(statusOfCurrentMilestoneTargets);\n if (!currentLevelAttempted) {\n return /* Nothing */6;\n }\n var hasRejectedSubmissions = CoursesCurriculum__TargetStatus.anyRejected(statusOfCurrentMilestoneTargets);\n return {\n TAG: /* LevelUpBlocked */1,\n _0: currentLevelNumber,\n _1: hasRejectedSubmissions\n };\n case /* PreviousLevelIncomplete */4 :\n if (typeof progressionBehavior !== \"object\") {\n return /* Nothing */6;\n }\n var minimumLevelNumber = currentLevelNumber - progressionBehavior.VAL | 0;\n if (minimumLevelNumber >= 1) {\n return {\n TAG: /* LevelUpLimited */0,\n _0: currentLevelNumber,\n _1: minimumLevelNumber\n };\n } else {\n return /* Nothing */6;\n }\n case /* TeamMembersPending */5 :\n return /* TeamMembersPending */5;\n case /* NoMilestonesInLevel */2 :\n case /* DateLocked */6 :\n return /* Nothing */6;\n \n }\n}\n\nfunction computeNotice(studentLevel, targetGroups, targets, statusOfTargets, course, student, preview, levelUpEligibility) {\n if (preview) {\n return /* Preview */0;\n } else if (CoursesCurriculum__Course.ended(course)) {\n return /* CourseEnded */1;\n } else if (CoursesCurriculum__Student.accessEnded(student)) {\n return /* AccessEnded */3;\n } else {\n return computeLevelUp(levelUpEligibility, course, studentLevel, targetGroups, targets, statusOfTargets);\n }\n}\n\nfunction navigationLink(direction, level, setState) {\n var match = direction === \"Next\" ? [\n undefined,\n t(undefined, undefined, \"nav_next_level\"),\n \"Next\",\n \"fa-arrow-right\"\n ] : [\n \"fa-arrow-left\",\n t(undefined, undefined, \"nav_previous_level\"),\n \"Previous\",\n undefined\n ];\n var longText = match[1];\n var arrow = function (icon) {\n return Belt_Option.mapWithDefault(icon, null, (function (icon) {\n return React.createElement(FaIcon.make, {\n classes: \"fas \" + icon\n });\n }));\n };\n return React.createElement(\"button\", {\n \"aria-label\": \"Go to \" + longText,\n className: \"block w-full focus:outline-none p-4 text-center border rounded-lg bg-gray-50 hover:bg-gray-50 cursor-pointer hover:text-primary-500 focus:text-primary-500 focus:bg-gray-50 focus:ring-2 focus:ring-inset focus:ring-focusColor-500\",\n onClick: (function (param) {\n return Curry._1(setState, (function (state) {\n return {\n selectedLevelId: CoursesCurriculum__Level.id(level),\n showLevelZero: state.showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n notice: state.notice,\n levelUpEligibility: state.levelUpEligibility\n };\n }));\n })\n }, arrow(match[0]), React.createElement(\"span\", {\n className: \"mx-2 hidden md:inline\"\n }, longText), React.createElement(\"span\", {\n className: \"mx-2 inline md:hidden\"\n }, match[2]), arrow(match[3]));\n}\n\nfunction quickNavigationLinks(levels, selectedLevel, setState) {\n var previous = CoursesCurriculum__Level.previous(levels, selectedLevel);\n var next = CoursesCurriculum__Level.next(levels, selectedLevel);\n return React.createElement(\"div\", {\n key: \"quick-navigation-links\"\n }, React.createElement(\"hr\", {\n className: \"my-6\"\n }), React.createElement(\"div\", {\n className: \"container mx-auto max-w-3xl flex px-3 lg:px-0\"\n }, previous !== undefined ? (\n next !== undefined ? [\n React.createElement(\"div\", {\n key: \"previous\",\n className: \"w-1/2 mr-2\"\n }, navigationLink(\"Previous\", previous, setState)),\n React.createElement(\"div\", {\n key: \"next\",\n className: \"w-1/2 ml-2\"\n }, navigationLink(\"Next\", next, setState))\n ] : React.createElement(\"div\", {\n className: \"w-full\"\n }, navigationLink(\"Previous\", previous, setState))\n ) : (\n next !== undefined ? React.createElement(\"div\", {\n className: \"w-full\"\n }, navigationLink(\"Next\", next, setState)) : null\n )));\n}\n\nfunction CoursesCurriculum(Props) {\n var author = Props.author;\n var course = Props.course;\n var levels = Props.levels;\n var targetGroups = Props.targetGroups;\n var targets = Props.targets;\n var submissions = Props.submissions;\n var student = Props.student;\n var coaches = Props.coaches;\n var users = Props.users;\n var evaluationCriteria = Props.evaluationCriteria;\n var preview = Props.preview;\n var accessLockedLevels = Props.accessLockedLevels;\n var levelUpEligibility = Props.levelUpEligibility;\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var match = url.path;\n var selectedTarget;\n if (match && match.hd === \"targets\") {\n var match$1 = match.tl;\n selectedTarget = match$1 ? Belt_Option.map(StringUtils.paramToId(match$1.hd), (function (targetId) {\n return ArrayUtils.unsafeFind((function (t) {\n return CoursesCurriculum__Target.id(t) === targetId;\n }), \"Could not find selectedTarget with ID \" + targetId, targets);\n })) : undefined;\n } else {\n selectedTarget = undefined;\n }\n var levelZero = levels.find(function (l) {\n return CoursesCurriculum__Level.number(l) === 0;\n });\n var levelZero$1 = levelZero === undefined ? undefined : Caml_option.some(levelZero);\n var studentLevelId = CoursesCurriculum__Student.levelId(student);\n var studentLevel = ArrayUtils.unsafeFind((function (l) {\n return CoursesCurriculum__Level.id(l) === studentLevelId;\n }), \"Could not find studentLevel with ID \" + studentLevelId, levels);\n var targetLevelId;\n if (selectedTarget !== undefined) {\n var targetGroupId = CoursesCurriculum__Target.targetGroupId(selectedTarget);\n var targetGroup = ArrayUtils.unsafeFind((function (t) {\n return CoursesCurriculum__TargetGroup.id(t) === targetGroupId;\n }), \"Could not find targetGroup with ID \" + targetGroupId, targetGroups);\n targetLevelId = CoursesCurriculum__TargetGroup.levelId(targetGroup);\n } else {\n targetLevelId = undefined;\n }\n var computeTargetStatus = function (param) {\n return CoursesCurriculum__TargetStatus.compute(preview, student, course, levels, targetGroups, targets, param);\n };\n var initialRender = React.useRef(true);\n var match$2 = React.useState(function () {\n var statusOfTargets = computeTargetStatus(submissions);\n var tmp;\n var exit = 0;\n if (preview && targetLevelId === undefined) {\n tmp = CoursesCurriculum__Level.id(CoursesCurriculum__Level.first(levels));\n } else {\n exit = 1;\n }\n if (exit === 1) {\n tmp = targetLevelId !== undefined && !(levelZero !== undefined && CoursesCurriculum__Level.id(levelZero) === targetLevelId) ? targetLevelId : studentLevelId;\n }\n return {\n selectedLevelId: tmp,\n showLevelZero: levelZero !== undefined && targetLevelId !== undefined ? CoursesCurriculum__Level.id(levelZero) === targetLevelId : false,\n latestSubmissions: submissions,\n statusOfTargets: statusOfTargets,\n notice: computeNotice(studentLevel, targetGroups, targets, statusOfTargets, course, student, preview, levelUpEligibility),\n levelUpEligibility: levelUpEligibility\n };\n });\n var setState = match$2[1];\n var state = match$2[0];\n var match$3 = state.showLevelZero;\n var currentLevelId = levelZero !== undefined && match$3 ? CoursesCurriculum__Level.id(levelZero) : state.selectedLevelId;\n var currentLevel = ArrayUtils.unsafeFind((function (l) {\n return CoursesCurriculum__Level.id(l) === currentLevelId;\n }), \"Could not find currentLevel with id \" + currentLevelId, levels);\n var selectedLevel = ArrayUtils.unsafeFind((function (l) {\n return CoursesCurriculum__Level.id(l) === state.selectedLevelId;\n }), \"Could not find selectedLevel with id \" + state.selectedLevelId, levels);\n React.useEffect((function () {\n if (initialRender.current) {\n initialRender.current = false;\n } else {\n var newStatusOfTargets = computeTargetStatus(state.latestSubmissions);\n Curry._1(setState, (function (state) {\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: newStatusOfTargets,\n notice: computeNotice(studentLevel, targetGroups, targets, newStatusOfTargets, course, student, preview, state.levelUpEligibility),\n levelUpEligibility: state.levelUpEligibility\n };\n }));\n }\n \n }), [state.latestSubmissions]);\n var targetGroupsInLevel = targetGroups.filter(function (tg) {\n return CoursesCurriculum__TargetGroup.levelId(tg) === currentLevelId;\n });\n var tmp;\n if (selectedTarget !== undefined) {\n var targetStatus = ArrayUtils.unsafeFind((function (ts) {\n return CoursesCurriculum__TargetStatus.targetId(ts) === CoursesCurriculum__Target.id(selectedTarget);\n }), \"Could not find targetStatus for selectedTarget with ID \" + CoursesCurriculum__Target.id(selectedTarget), state.statusOfTargets);\n tmp = React.createElement(CoursesCurriculum__Overlay.make, {\n target: selectedTarget,\n course: course,\n targetStatus: targetStatus,\n addSubmissionCB: (function (param, param$1) {\n return addSubmission(setState, param, param$1);\n }),\n targets: targets,\n statusOfTargets: state.statusOfTargets,\n users: users,\n evaluationCriteria: evaluationCriteria,\n coaches: coaches,\n preview: preview,\n author: author\n });\n } else {\n tmp = null;\n }\n var _anyOtherNotice = state.notice;\n return React.createElement(\"div\", {\n \"aria-label\": \"Curriculum\",\n className: \"bg-gray-50 pt-11 pb-8 -mt-7\",\n role: \"main\"\n }, tmp, issuedCertificate(course), React.createElement(CoursesCurriculum__NoticeManager.make, {\n notice: state.notice,\n course: course\n }), _anyOtherNotice === 4 ? null : [\n React.createElement(\"div\", {\n key: \"curriculum-body\",\n className: \"relative\"\n }, React.createElement(CoursesCurriculum__LevelSelector.make, {\n levels: levels,\n studentLevel: studentLevel,\n selectedLevel: selectedLevel,\n preview: preview,\n setSelectedLevelId: (function (selectedLevelId) {\n return Curry._1(setState, (function (state) {\n return {\n selectedLevelId: selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n notice: state.notice,\n levelUpEligibility: state.levelUpEligibility\n };\n }));\n }),\n showLevelZero: state.showLevelZero,\n setShowLevelZero: (function (showLevelZero) {\n return Curry._1(setState, (function (state) {\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n notice: state.notice,\n levelUpEligibility: state.levelUpEligibility\n };\n }));\n }),\n levelZero: levelZero$1\n }), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"text-center mt-2 max-w-3xl mx-auto\"\n }, React.createElement(\"a\", {\n className: \"btn btn-primary-ghost btn-small\",\n href: \"/school/courses/\" + CoursesCurriculum__Course.id(course) + \"/curriculum?level=\" + String(CoursesCurriculum__Level.number(currentLevel))\n }, React.createElement(\"i\", {\n className: \"fas fa-pencil-alt\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"edit_level_button\")))), author), CoursesCurriculum__Level.isLocked(currentLevel) && accessLockedLevels ? React.createElement(\"div\", {\n className: \"text-center p-3 mt-5 border rounded-lg bg-blue-100 max-w-3xl mx-auto\",\n dangerouslySetInnerHTML: {\n __html: t([[\n \"date\",\n CoursesCurriculum__Level.unlockDateString(currentLevel)\n ]], undefined, \"level_locked_for_students_notice\")\n }\n }) : null, CoursesCurriculum__Level.isUnlocked(currentLevel) || accessLockedLevels ? (\n Caml_obj.caml_equal(targetGroupsInLevel, []) ? React.createElement(\"div\", {\n className: \"mx-auto py-10\"\n }, React.createElement(\"img\", {\n className: \"max-w-xs md:max-w-sm mx-auto\",\n src: levelEmptyImage\n }), React.createElement(\"p\", {\n className: \"text-center font-semibold text-lg mt-4\"\n }, t(undefined, undefined, \"empty_level_content_notice\"))) : CoursesCurriculum__TargetGroup.sort(targetGroupsInLevel).map(function (targetGroup) {\n return renderTargetGroup(targetGroup, targets, state.statusOfTargets, author, CoursesCurriculum__Course.id(course));\n })\n ) : handleLockedLevel(currentLevel)),\n state.showLevelZero ? null : quickNavigationLinks(levels, selectedLevel, setState)\n ]);\n}\n\nvar make = CoursesCurriculum;\n\nexport {\n levelLockedImage ,\n levelEmptyImage ,\n str ,\n t ,\n targetStatusClasses ,\n rendertarget ,\n renderTargetGroup ,\n addSubmission ,\n handleLockedLevel ,\n statusOfMilestoneTargets ,\n issuedCertificate ,\n computeLevelUp ,\n computeNotice ,\n navigationLink ,\n quickNavigationLinks ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as CoursesCurriculum from \"../courses/curricula/components/CoursesCurriculum.bs.js\";\nimport * as EvaluationCriterion from \"../shared/types/EvaluationCriterion.bs.js\";\nimport * as CoursesCurriculum__User from \"../courses/curricula/types/CoursesCurriculum__User.bs.js\";\nimport * as CoursesCurriculum__Coach from \"../courses/curricula/types/CoursesCurriculum__Coach.bs.js\";\nimport * as CoursesCurriculum__Level from \"../courses/curricula/types/CoursesCurriculum__Level.bs.js\";\nimport * as CoursesCurriculum__Course from \"../courses/curricula/types/CoursesCurriculum__Course.bs.js\";\nimport * as CoursesCurriculum__Target from \"../courses/curricula/types/CoursesCurriculum__Target.bs.js\";\nimport * as CoursesCurriculum__Student from \"../courses/curricula/types/CoursesCurriculum__Student.bs.js\";\nimport * as CoursesCurriculum__TargetGroup from \"../courses/curricula/types/CoursesCurriculum__TargetGroup.bs.js\";\nimport * as CoursesCurriculum__LatestSubmission from \"../courses/curricula/types/CoursesCurriculum__LatestSubmission.bs.js\";\nimport * as CoursesCurriculum__LevelUpEligibility from \"../courses/curricula/types/CoursesCurriculum__LevelUpEligibility.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"author\", Json_decode.bool, json),\n Json_decode.field(\"course\", CoursesCurriculum__Course.decode, json),\n Json_decode.field(\"levels\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Level.decode, param);\n }), json),\n Json_decode.field(\"targetGroups\", (function (param) {\n return Json_decode.array(CoursesCurriculum__TargetGroup.decode, param);\n }), json),\n Json_decode.field(\"targets\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Target.decode, param);\n }), json),\n Json_decode.field(\"submissions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__LatestSubmission.decode, param);\n }), json),\n Json_decode.field(\"student\", CoursesCurriculum__Student.decode, json),\n Json_decode.field(\"coaches\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Coach.decode, param);\n }), json),\n Json_decode.field(\"users\", (function (param) {\n return Json_decode.array(CoursesCurriculum__User.decode, param);\n }), json),\n Json_decode.field(\"evaluationCriteria\", (function (param) {\n return Json_decode.array(EvaluationCriterion.decode, param);\n }), json),\n Json_decode.field(\"preview\", Json_decode.bool, json),\n Json_decode.field(\"accessLockedLevels\", Json_decode.bool, json),\n Json_decode.field(\"levelUpEligibility\", CoursesCurriculum__LevelUpEligibility.decode, json)\n ];\n}\n\nPsj.matchPaths(undefined, [\n \"courses/:id/curriculum\",\n \"targets/:id\",\n \"targets/:id/:slug\"\n ], (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(CoursesCurriculum.make, {\n author: match[0],\n course: match[1],\n levels: match[2],\n targetGroups: match[3],\n targets: match[4],\n submissions: match[5],\n student: match[6],\n coaches: match[7],\n users: match[8],\n evaluationCriteria: match[9],\n preview: match[10],\n accessLockedLevels: match[11],\n levelUpEligibility: match[12]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction name(t) {\n return t.name;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction avatarUrl(t) {\n return t.avatarUrl;\n}\n\nfunction decode(json) {\n return {\n name: Json_decode.field(\"name\", Json_decode.string, json),\n title: Json_decode.field(\"title\", Json_decode.string, json),\n avatarUrl: Json_decode.field(\"avatarUrl\", (function (param) {\n return Json_decode.optional(Json_decode.string, param);\n }), json)\n };\n}\n\nexport {\n name ,\n title ,\n avatarUrl ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as LevelLabel from \"../../../shared/utils/LevelLabel.bs.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nvar partial_arg = \"components.CoursesReport__Level\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction number(t) {\n return t.number;\n}\n\nfunction unlocked(t) {\n return t.unlocked;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n number: Json_decode.field(\"number\", Json_decode.$$int, json),\n unlocked: Json_decode.field(\"unlocked\", Json_decode.bool, json)\n };\n}\n\nfunction shortName(t) {\n return LevelLabel.format(true, undefined, String(t.number));\n}\n\nfunction levelLabel(levels, id) {\n return LevelLabel.format(undefined, undefined, String(ArrayUtils.unsafeFind((function (level) {\n return level.id === id;\n }), \"Unable to find level with ID: \" + (id + \" in CoursesReport\"), levels).number));\n}\n\nfunction sort(levels) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.number - y.number | 0;\n }), levels);\n}\n\nexport {\n t ,\n id ,\n name ,\n number ,\n unlocked ,\n decode ,\n shortName ,\n levelLabel ,\n sort ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction passGrade(t) {\n return t.passGrade;\n}\n\nfunction make(id, name, maxGrade, passGrade) {\n return {\n id: id,\n name: name,\n passGrade: passGrade,\n maxGrade: maxGrade\n };\n}\n\nfunction makeFromJs(ecData) {\n return ecData.map(function (ec) {\n return make(ec.id, ec.name, ec.maxGrade, ec.passGrade);\n });\n}\n\nexport {\n id ,\n name ,\n passGrade ,\n make ,\n makeFromJs ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Caml_format from \"../../../../../node_modules/rescript/lib/es6/caml_format.js\";\nimport * as CoursesReport__EvaluationCriterion from \"./CoursesReport__EvaluationCriterion.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction evaluationCriteria(t) {\n return t.evaluationCriteria;\n}\n\nfunction totalTargets(t) {\n return t.totalTargets;\n}\n\nfunction targetsPendingReview(t) {\n return t.targetsPendingReview;\n}\n\nfunction targetsCompleted(t) {\n return t.targetsCompleted;\n}\n\nfunction quizzesAttempted(t) {\n return t.quizScores.length;\n}\n\nfunction quizScores(t) {\n return t.quizScores;\n}\n\nfunction averageGrades(t) {\n return t.averageGrades;\n}\n\nfunction completedLevelIds(t) {\n return t.completedLevelIds;\n}\n\nfunction makeAverageGrade(gradesData) {\n return gradesData.map(function (gradeData) {\n return {\n evaluationCriterionId: gradeData.evaluationCriterionId,\n grade: gradeData.averageGrade\n };\n });\n}\n\nfunction evaluationCriterionForGrade(grade, evaluationCriteria) {\n return ArrayUtils.unsafeFind((function (ec) {\n return CoursesReport__EvaluationCriterion.id(ec) === grade.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with id: \" + (grade.evaluationCriterionId + \" in component: CoursesReport__Overview\"), evaluationCriteria);\n}\n\nfunction gradeValue(averageGrade) {\n return averageGrade.grade;\n}\n\nfunction gradeAsPercentage(averageGrade, evaluationCriterion) {\n var maxGrade = evaluationCriterion.maxGrade;\n return String(averageGrade.grade / maxGrade * 100.0 | 0);\n}\n\nfunction computeAverageQuizScore(quizScores) {\n var sumOfPercentageScores = $$Array.map((function (quizScore) {\n var fractionArray = $$Array.of_list($$String.split_on_char(/* '/' */47, quizScore));\n var numerator = Caml_format.caml_float_of_string(Caml_array.get(fractionArray, 0));\n var denominator = Caml_format.caml_float_of_string(Caml_array.get(fractionArray, 1));\n return numerator / denominator * 100.0;\n }), quizScores).reduce((function (a, b) {\n return a + b;\n }), 0.0);\n return sumOfPercentageScores / quizScores.length;\n}\n\nfunction averageQuizScore(t) {\n if (ArrayUtils.isEmpty(t.quizScores)) {\n return ;\n } else {\n return computeAverageQuizScore(t.quizScores);\n }\n}\n\nfunction makeFromJs(id, studentData) {\n return {\n id: id,\n evaluationCriteria: CoursesReport__EvaluationCriterion.makeFromJs(studentData.evaluationCriteria),\n levelId: studentData.student.level.id,\n totalTargets: studentData.totalTargets,\n targetsPendingReview: studentData.targetsPendingReview,\n targetsCompleted: studentData.targetsCompleted,\n quizScores: studentData.quizScores,\n averageGrades: makeAverageGrade(studentData.averageGrades),\n completedLevelIds: studentData.completedLevelIds\n };\n}\n\nexport {\n id ,\n levelId ,\n evaluationCriteria ,\n totalTargets ,\n targetsPendingReview ,\n targetsCompleted ,\n quizzesAttempted ,\n quizScores ,\n averageGrades ,\n completedLevelIds ,\n makeAverageGrade ,\n evaluationCriterionForGrade ,\n gradeValue ,\n gradeAsPercentage ,\n computeAverageQuizScore ,\n averageQuizScore ,\n makeFromJs ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as Tooltip from \"../../../shared/components/Tooltip.bs.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction avatarClasses(size) {\n var mdSize = size[1];\n var defaultSize = size[0];\n return \"w-\" + (defaultSize + (\" h-\" + (defaultSize + (\" md:w-\" + (mdSize + (\" md:h-\" + (mdSize + \" text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\")))))));\n}\n\nfunction avatar(sizeOpt, avatarUrl, name) {\n var size = sizeOpt !== undefined ? sizeOpt : [\n \"8\",\n \"10\"\n ];\n if (avatarUrl !== undefined) {\n return React.createElement(\"img\", {\n className: avatarClasses(size),\n src: avatarUrl\n });\n } else {\n return React.createElement(Avatar.make, {\n name: name,\n className: avatarClasses(size)\n });\n }\n}\n\nfunction CoursesStudents__PersonalCoaches(Props) {\n var tooltipPositionOpt = Props.tooltipPosition;\n var defaultAvatarSizeOpt = Props.defaultAvatarSize;\n var mdAvatarSizeOpt = Props.mdAvatarSize;\n var title = Props.title;\n var className = Props.className;\n var coaches = Props.coaches;\n var tooltipPosition = tooltipPositionOpt !== undefined ? tooltipPositionOpt : \"Top\";\n var defaultAvatarSize = defaultAvatarSizeOpt !== undefined ? defaultAvatarSizeOpt : \"6\";\n var mdAvatarSize = mdAvatarSizeOpt !== undefined ? mdAvatarSizeOpt : \"8\";\n if (!ArrayUtils.isNotEmpty(coaches)) {\n return React.createElement(\"div\", undefined);\n }\n var listedCoaches = coaches.length <= 4 ? coaches : coaches.slice(0, 3);\n var otherCoaches;\n if (coaches.length > 4) {\n var names = coaches.slice(3).map(function (coach) {\n return React.createElement(\"div\", {\n key: UserProxy.userId(coach)\n }, UserProxy.name(coach));\n });\n var count = coaches.length - 3 | 0;\n otherCoaches = [\n names,\n count\n ];\n } else {\n otherCoaches = undefined;\n }\n return React.createElement(\"div\", {\n className: className\n }, React.createElement(\"div\", {\n className: \"text-xs\"\n }, title), React.createElement(\"div\", {\n className: \"inline-flex\"\n }, $$Array.map((function (coach) {\n return React.createElement(Tooltip.make, {\n tip: UserProxy.name(coach),\n className: \"-mr-1\",\n position: tooltipPosition,\n children: avatar([\n defaultAvatarSize,\n mdAvatarSize\n ], UserProxy.avatarUrl(coach), UserProxy.name(coach)),\n key: UserProxy.userId(coach)\n });\n }), listedCoaches), OptionUtils.mapWithDefault((function (param) {\n return React.createElement(Tooltip.make, {\n tip: param[0],\n className: \"-mr-1\",\n children: React.createElement(Avatar.make, {\n colors: [\n \"#EEE\",\n \"#000\"\n ],\n name: \"+ \" + String(param[1]),\n className: avatarClasses([\n defaultAvatarSize,\n mdAvatarSize\n ])\n })\n });\n }), null, otherCoaches)));\n}\n\nvar make = CoursesStudents__PersonalCoaches;\n\nexport {\n str ,\n avatarClasses ,\n avatar ,\n make ,\n \n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as CoursesReport__Coach from \"../types/CoursesReport__Coach.bs.js\";\nimport * as CoursesReport__Level from \"../types/CoursesReport__Level.bs.js\";\nimport * as CoursesReport__StudentOverview from \"../types/CoursesReport__StudentOverview.bs.js\";\nimport * as CoursesStudents__PersonalCoaches from \"../../students/components/CoursesStudents__PersonalCoaches.bs.js\";\nimport * as CoursesReport__EvaluationCriterion from \"../types/CoursesReport__EvaluationCriterion.bs.js\";\n\nimport \"./CoursesReport__Overview.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesReport__Overview\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction avatar(avatarUrl, name) {\n var avatarClasses = \"w-8 h-8 md:w-10 md:h-10 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\";\n if (avatarUrl !== undefined) {\n return React.createElement(\"img\", {\n className: avatarClasses,\n src: avatarUrl\n });\n } else {\n return React.createElement(Avatar.make, {\n name: name,\n className: avatarClasses\n });\n }\n}\n\nfunction userInfo(key, avatarUrl, name, title) {\n return React.createElement(\"div\", {\n key: key,\n className: \"w-full md:w-1/2 shadow rounded-lg p-4 flex items-center mt-2 bg-white\"\n }, CoursesStudents__PersonalCoaches.avatar(undefined, avatarUrl, name), React.createElement(\"div\", {\n className: \"ml-2 md:ml-3\"\n }, React.createElement(\"div\", {\n className: \"text-sm font-semibold\"\n }, name), React.createElement(\"div\", {\n className: \"text-xs\"\n }, title)));\n}\n\nfunction coachInfo(coaches) {\n if (ArrayUtils.isNotEmpty(coaches)) {\n return React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"personal_coaches\")), $$Array.mapi((function (index, coach) {\n return userInfo(String(index), CoursesReport__Coach.avatarUrl(coach), CoursesReport__Coach.name(coach), CoursesReport__Coach.title(coach));\n }), coaches));\n } else {\n return null;\n }\n}\n\nfunction doughnutChart(color, percentage) {\n return React.createElement(\"svg\", {\n className: \"courses-report-overview__doughnut-chart \" + color,\n viewBox: \"0 0 36 36\"\n }, React.createElement(\"path\", {\n className: \"courses-report-overview__doughnut-chart-bg\",\n d: \"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831\"\n }), React.createElement(\"path\", {\n className: \"courses-report-overview__doughnut-chart-stroke\",\n d: \"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831\",\n strokeDasharray: percentage + \", 100\"\n }), React.createElement(\"text\", {\n className: \"courses-report-overview__doughnut-chart-text font-semibold\",\n x: \"50%\",\n y: \"58%\"\n }, percentage + \"%\"));\n}\n\nfunction targetsCompletionStatus(overview) {\n var targetsCompleted = CoursesReport__StudentOverview.targetsCompleted(overview);\n var totalTargets = CoursesReport__StudentOverview.totalTargets(overview);\n var targetsPendingReview = CoursesReport__StudentOverview.targetsPendingReview(overview);\n var incompleteTargets = ((totalTargets | 0) - (targetsCompleted | 0) | 0) - targetsPendingReview | 0;\n var targetCompletionPercent = String(targetsCompleted / totalTargets * 100.0 | 0);\n return React.createElement(\"div\", {\n \"aria-label\": \"target-completion-status\",\n className: \"w-full lg:w-1/2 px-2\"\n }, React.createElement(\"div\", {\n className: \"courses-report-overview__doughnut-chart-container bg-white flex items-center\"\n }, React.createElement(\"div\", undefined, doughnutChart(\"purple\", targetCompletionPercent)), React.createElement(\"div\", {\n className: \"ml-4\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"targetsCount\",\n String(incompleteTargets)\n ]], undefined, \"incomplete_targets\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"targetsCount\",\n String(targetsPendingReview)\n ]], undefined, \"targets_pending_review\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"targetsCount\",\n String(targetsCompleted | 0)\n ]], undefined, \"targets_completed\")))));\n}\n\nfunction quizPerformanceChart(averageQuizScore, quizzesAttempted) {\n if (averageQuizScore !== undefined) {\n return React.createElement(\"div\", {\n \"aria-label\": \"quiz-performance-chart\",\n className: \"w-full lg:w-1/2 px-2 mt-2 lg:mt-0\"\n }, React.createElement(\"div\", {\n className: \"courses-report-overview__doughnut-chart-container bg-white\"\n }, React.createElement(\"div\", undefined, doughnutChart(\"pink\", String(averageQuizScore | 0))), React.createElement(\"div\", {\n className: \"ml-4\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold mt-3\"\n }, t(undefined, undefined, \"average_quiz_score\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold leading-tight mt-1\"\n }, t(undefined, quizzesAttempted, \"quizzes_attempted\")))));\n } else {\n return null;\n }\n}\n\nfunction averageGradeCharts(evaluationCriteria, averageGrades) {\n return $$Array.map((function (grade) {\n var criterion = CoursesReport__StudentOverview.evaluationCriterionForGrade(grade, evaluationCriteria);\n var passGrade = CoursesReport__EvaluationCriterion.passGrade(criterion);\n var averageGrade = CoursesReport__StudentOverview.gradeValue(grade);\n return React.createElement(\"div\", {\n key: CoursesReport__EvaluationCriterion.id(criterion),\n \"aria-label\": \"average-grade-for-criterion-\" + CoursesReport__EvaluationCriterion.id(criterion),\n className: \"flex w-full lg:w-1/3 px-2 mt-2\"\n }, React.createElement(\"div\", {\n className: \"courses-report-overview__pie-chart-container\"\n }, React.createElement(\"div\", {\n className: \"flex px-5 pt-4 text-center items-center\"\n }, React.createElement(\"svg\", {\n className: \"courses-report-overview__pie-chart \" + (\n averageGrade < passGrade ? \"courses-report-overview__pie-chart--fail\" : \"courses-report-overview__pie-chart--pass\"\n ),\n viewBox: \"0 0 32 32\"\n }, React.createElement(\"circle\", {\n className: \"courses-report-overview__pie-chart-circle \" + (\n averageGrade < passGrade ? \"courses-report-overview__pie-chart-circle--fail\" : \"courses-report-overview__pie-chart-circle--pass\"\n ),\n cx: \"16\",\n cy: \"16\",\n r: \"16\",\n strokeDasharray: CoursesReport__StudentOverview.gradeAsPercentage(grade, criterion) + \", 100\"\n })), React.createElement(\"span\", {\n className: \"ml-3 text-lg font-semibold\"\n }, grade.grade.toString() + (\"/\" + String(criterion.maxGrade)))), React.createElement(\"p\", {\n className: \"text-sm font-semibold px-5 pt-3 pb-4\"\n }, CoursesReport__EvaluationCriterion.name(criterion))));\n }), averageGrades);\n}\n\nfunction studentLevelClasses(levelNumber, levelCompleted, currentLevelNumber) {\n var reached = Caml_obj.caml_lessequal(levelNumber, currentLevelNumber) ? \"courses-report-overview__student-level--reached\" : \"\";\n var current = Caml_obj.caml_equal(levelNumber, currentLevelNumber) ? \" courses-report-overview__student-level--current\" : \"\";\n var completed = levelCompleted ? \" courses-report-overview__student-level--completed\" : \"\";\n return reached + (current + completed);\n}\n\nfunction levelProgressBar(levelId, levels, levelsCompleted) {\n var applicableLevels = levels.filter(function (level) {\n return CoursesReport__Level.number(level) !== 0;\n });\n var courseCompleted = $$Array.for_all((function (level) {\n return $$Array.mem(CoursesReport__Level.id(level), levelsCompleted);\n }), applicableLevels);\n var currentLevelNumber = CoursesReport__Level.number(ArrayUtils.unsafeFind((function (level) {\n return CoursesReport__Level.id(level) === levelId;\n }), \"Unable to find level with id\" + (levelId + \"in CoursesReport__Overview\"), applicableLevels));\n return React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between items-end\"\n }, React.createElement(\"h6\", {\n className: \"text-sm font-semibold\"\n }, t(undefined, undefined, \"level_progress\")), courseCompleted ? React.createElement(\"p\", {\n className: \"text-green-600 font-semibold\"\n }, \"🎉\", React.createElement(\"span\", {\n className: \"text-xs ml-px\"\n }, t(undefined, undefined, \"course_completed\"))) : null), React.createElement(\"div\", {\n className: \"h-14 flex items-center shadow bg-white rounded-lg px-4 py-2 mt-1\"\n }, React.createElement(\"ul\", {\n className: \"courses-report-overview__student-level-progress flex w-full \" + (\n courseCompleted ? \"courses-report-overview__student-level-progress--completed\" : \"\"\n )\n }, $$Array.map((function (level) {\n var levelNumber = CoursesReport__Level.number(level);\n var levelCompleted = $$Array.mem(CoursesReport__Level.id(level), levelsCompleted);\n return React.createElement(\"li\", {\n key: CoursesReport__Level.id(level),\n className: \"flex-1 courses-report-overview__student-level \" + studentLevelClasses(levelNumber, levelCompleted, currentLevelNumber)\n }, React.createElement(\"span\", {\n className: \"courses-report-overview__student-level-count\"\n }, String(levelNumber)));\n }), CoursesReport__Level.sort(applicableLevels)))));\n}\n\nfunction CoursesReport__Overview(Props) {\n var overviewData = Props.overviewData;\n var levels = Props.levels;\n var coaches = Props.coaches;\n var tmp;\n if (overviewData) {\n var overview = overviewData._0;\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col\"\n }, React.createElement(\"div\", {\n className: \"w-full\"\n }, levelProgressBar(CoursesReport__StudentOverview.levelId(overview), levels, CoursesReport__StudentOverview.completedLevelIds(overview)), React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"targets_overview\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap mt-2\"\n }, targetsCompletionStatus(overview), quizPerformanceChart(CoursesReport__StudentOverview.averageQuizScore(overview), CoursesReport__StudentOverview.quizzesAttempted(overview)))), ArrayUtils.isNotEmpty(CoursesReport__StudentOverview.averageGrades(overview)) ? React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"average_grades\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap\"\n }, averageGradeCharts(CoursesReport__StudentOverview.evaluationCriteria(overview), CoursesReport__StudentOverview.averageGrades(overview)))) : null, coachInfo(coaches)));\n } else {\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col\"\n }, React.createElement(\"div\", {\n className: \"w-full bg-white p-8\"\n }, SkeletonLoading.heading(undefined), SkeletonLoading.multiple(2, SkeletonLoading.paragraph(undefined)), SkeletonLoading.multiple(2, SkeletonLoading.userDetails(undefined))));\n }\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, tmp);\n}\n\nvar make = CoursesReport__Overview;\n\nexport {\n str ,\n t ,\n avatar ,\n userInfo ,\n coachInfo ,\n doughnutChart ,\n targetsCompletionStatus ,\n quizPerformanceChart ,\n averageGradeCharts ,\n studentLevelClasses ,\n levelProgressBar ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\n\nfunction make(id, title, createdAt, levelId, status, targetId, targetRole) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n status: status,\n levelId: levelId,\n targetId: targetId,\n targetRole: targetRole\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction targetRole(t) {\n return t.targetRole;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction makeFromJs(submissions) {\n return submissions.map(function (submission) {\n var createdAt = DateFns.decodeISO(submission.createdAt);\n var _passedAt = submission.passedAt;\n var status;\n if (_passedAt !== undefined) {\n status = \"Completed\";\n } else {\n var _time = submission.evaluatedAt;\n status = _time !== undefined ? \"Rejected\" : \"PendingReview\";\n }\n var targetRole = submission.teamTarget ? /* Team */({\n _0: submission.studentIds\n }) : /* Student */0;\n return make(submission.id, submission.title, createdAt, submission.levelId, status, submission.targetId, targetRole);\n });\n}\n\nexport {\n make ,\n id ,\n levelId ,\n title ,\n status ,\n createdAt ,\n targetId ,\n targetRole ,\n createdAtPretty ,\n makeFromJs ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as CoursesReport__Level from \"./CoursesReport__Level.bs.js\";\n\nfunction make(submissions, filter, sortDirection) {\n return {\n submissions: submissions,\n filter: filter,\n sortDirection: sortDirection\n };\n}\n\nfunction makeFilter(level, status) {\n return {\n level: level,\n status: status\n };\n}\n\nfunction partiallyLoaded(submissions, filter, sortDirection, cursor) {\n return {\n TAG: /* PartiallyLoaded */0,\n _0: {\n submissions: submissions,\n filter: filter,\n sortDirection: sortDirection\n },\n _1: cursor\n };\n}\n\nfunction fullyLoaded(submissions, filter, sortDirection) {\n return {\n TAG: /* FullyLoaded */1,\n _0: {\n submissions: submissions,\n filter: filter,\n sortDirection: sortDirection\n }\n };\n}\n\nfunction filterLevelId(level) {\n return Belt_Option.mapWithDefault(level, \"none\", CoursesReport__Level.id);\n}\n\nfunction filterEq(level, status, filter) {\n if (Belt_Option.mapWithDefault(filter.level, \"none\", CoursesReport__Level.id) === Belt_Option.mapWithDefault(level, \"none\", CoursesReport__Level.id)) {\n return Caml_obj.caml_equal(filter.status, status);\n } else {\n return false;\n }\n}\n\nfunction needsReloading(selectedLevel, selectedStatus, sortDirection, t) {\n if (typeof t === \"number\") {\n return true;\n }\n var data = t._0;\n return !(filterEq(selectedLevel, selectedStatus, data.filter) && data.sortDirection === sortDirection);\n}\n\nexport {\n make ,\n makeFilter ,\n partiallyLoaded ,\n fullyLoaded ,\n filterLevelId ,\n filterEq ,\n needsReloading ,\n \n}\n/* CoursesReport__Level Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Sorter from \"../../../shared/components/Sorter.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as HelpIcon from \"../../../shared/components/HelpIcon.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as LevelLabel from \"../../../shared/utils/LevelLabel.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as LoadingSpinner from \"../../../shared/components/LoadingSpinner.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as MultiselectDropdown from \"../../../packages/multiselect-dropdown/src/components/MultiselectDropdown.bs.js\";\nimport * as CoursesReport__Level from \"../types/CoursesReport__Level.bs.js\";\nimport * as CoursesReport__Submission from \"../types/CoursesReport__Submission.bs.js\";\nimport * as CoursesReport__Submissions from \"../types/CoursesReport__Submissions.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesReport__SubmissionsList\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar sortBy_criterion = tr(undefined, undefined, \"submitted_at\");\n\nvar sortBy = {\n criterion: sortBy_criterion,\n criterionType: \"Number\"\n};\n\nfunction statusString(targetStatus) {\n if (targetStatus === \"Completed\") {\n return tr(undefined, undefined, \"completed\");\n } else if (targetStatus === \"Rejected\") {\n return tr(undefined, undefined, \"rejected\");\n } else {\n return tr(undefined, undefined, \"pending_review\");\n }\n}\n\nvar Raw = {};\n\nvar query = \"query StudentsReportSubmissionsQuery($studentId: ID!, $after: String, $status: SubmissionReviewStatus, $levelId: ID, $sortDirection: SortDirection!) {\\nstudentSubmissions(studentId: $studentId, after: $after, first: 20, status: $status, levelId: $levelId, sortDirection: $sortDirection) {\\nnodes {\\nid \\ncreatedAt \\nlevelId \\ntargetId \\npassedAt \\ntitle \\nevaluatedAt \\nstudentIds \\nteamTarget \\n}\\n\\npageInfo {\\nhasNextPage \\nendCursor \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.studentSubmissions;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n return {\n studentSubmissions: {\n nodes: value$2.map(function (value) {\n var value$1 = value.passedAt;\n var value$2 = value.evaluatedAt;\n var value$3 = value.studentIds;\n return {\n id: value.id,\n createdAt: value.createdAt,\n levelId: value.levelId,\n targetId: value.targetId,\n passedAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n title: value.title,\n evaluatedAt: !(value$2 == null) ? Caml_option.some(value$2) : undefined,\n studentIds: value$3.map(function (value) {\n return value;\n }),\n teamTarget: value.teamTarget\n };\n }),\n pageInfo: {\n hasNextPage: value$3.hasNextPage,\n endCursor: !(value$4 == null) ? value$4 : undefined\n }\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.studentSubmissions;\n var value$2 = value$1.pageInfo;\n var value$3 = value$2.endCursor;\n var endCursor = value$3 !== undefined ? value$3 : null;\n var value$4 = value$2.hasNextPage;\n var pageInfo = {\n hasNextPage: value$4,\n endCursor: endCursor\n };\n var value$5 = value$1.nodes;\n var nodes = value$5.map(function (value) {\n var value$1 = value.teamTarget;\n var value$2 = value.studentIds;\n var studentIds = value$2.map(function (value) {\n return value;\n });\n var value$3 = value.evaluatedAt;\n var evaluatedAt = value$3 !== undefined ? Caml_option.valFromOption(value$3) : null;\n var value$4 = value.title;\n var value$5 = value.passedAt;\n var passedAt = value$5 !== undefined ? Caml_option.valFromOption(value$5) : null;\n var value$6 = value.targetId;\n var value$7 = value.levelId;\n var value$8 = value.createdAt;\n var value$9 = value.id;\n return {\n id: value$9,\n createdAt: value$8,\n levelId: value$7,\n targetId: value$6,\n passedAt: passedAt,\n title: value$4,\n evaluatedAt: evaluatedAt,\n studentIds: studentIds,\n teamTarget: value$1\n };\n });\n var studentSubmissions = {\n nodes: nodes,\n pageInfo: pageInfo\n };\n return {\n studentSubmissions: studentSubmissions\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.after;\n var a$1 = inp.status;\n var a$2 = inp.levelId;\n var a$3 = inp.sortDirection;\n return {\n studentId: inp.studentId,\n after: a !== undefined ? a : undefined,\n status: a$1 !== undefined ? (\n a$1 === \"Completed\" ? \"Completed\" : (\n a$1 === \"Rejected\" ? \"Rejected\" : \"PendingReview\"\n )\n ) : undefined,\n levelId: a$2 !== undefined ? a$2 : undefined,\n sortDirection: a$3 === \"Descending\" ? \"Descending\" : \"Ascending\"\n };\n}\n\nfunction makeVariables(studentId, after, status, levelId, sortDirection, param) {\n return {\n studentId: studentId,\n after: after,\n status: status,\n levelId: levelId,\n sortDirection: sortDirection\n };\n}\n\nvar StudentSubmissionsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar StudentSubmissionsQuery_Graphql_error = include.Graphql_error;\n\nvar StudentSubmissionsQuery_decodeNotification = include.decodeNotification;\n\nvar StudentSubmissionsQuery_decodeObject = include.decodeObject;\n\nvar StudentSubmissionsQuery_decodeNotifications = include.decodeNotifications;\n\nvar StudentSubmissionsQuery_decodeErrors = include.decodeErrors;\n\nvar StudentSubmissionsQuery_flashNotifications = include.flashNotifications;\n\nvar StudentSubmissionsQuery_sendQuery = include.sendQuery;\n\nvar StudentSubmissionsQuery_query = include.query;\n\nvar StudentSubmissionsQuery_fetch = include.$$fetch;\n\nvar StudentSubmissionsQuery = {\n StudentSubmissionsQuery_inner: StudentSubmissionsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: StudentSubmissionsQuery_Graphql_error,\n decodeNotification: StudentSubmissionsQuery_decodeNotification,\n decodeObject: StudentSubmissionsQuery_decodeObject,\n decodeNotifications: StudentSubmissionsQuery_decodeNotifications,\n decodeErrors: StudentSubmissionsQuery_decodeErrors,\n flashNotifications: StudentSubmissionsQuery_flashNotifications,\n sendQuery: StudentSubmissionsQuery_sendQuery,\n query: StudentSubmissionsQuery_query,\n $$fetch: StudentSubmissionsQuery_fetch,\n make: make\n};\n\nfunction label(t) {\n if (t.TAG === /* Level */0) {\n return LevelLabel.format(undefined, undefined, String(CoursesReport__Level.number(t._0)));\n } else {\n return tr(undefined, undefined, \"status\");\n }\n}\n\nfunction value(t) {\n if (t.TAG === /* Level */0) {\n return CoursesReport__Level.name(t._0);\n } else {\n return statusString(t._0);\n }\n}\n\nfunction searchString(t) {\n if (t.TAG !== /* Level */0) {\n return \"status \" + statusString(t._0);\n }\n var level = t._0;\n return LevelLabel.searchString(String(CoursesReport__Level.number(level)), CoursesReport__Level.name(level));\n}\n\nfunction color(t) {\n if (t.TAG === /* Level */0) {\n return \"gray\";\n }\n var status = t._0;\n if (status === \"Completed\") {\n return \"green\";\n } else if (status === \"Rejected\") {\n return \"red\";\n } else {\n return \"blue\";\n }\n}\n\nfunction level(level$1) {\n return {\n TAG: /* Level */0,\n _0: level$1\n };\n}\n\nfunction targetStatus(targetStatus$1) {\n return {\n TAG: /* TargetStatus */1,\n _0: targetStatus$1\n };\n}\n\nvar Selectable = {\n label: label,\n value: value,\n searchString: searchString,\n color: color,\n level: level,\n targetStatus: targetStatus\n};\n\nvar Multiselect = MultiselectDropdown.Make(Selectable);\n\nfunction unselected(levels, selectedLevel, selectedStatus) {\n var unselectedLevels = $$Array.map(level, levels.filter(function (level) {\n return CoursesReport__Level.number(level) !== 0;\n }).filter(function (level) {\n return OptionUtils.mapWithDefault((function (selectedLevel) {\n return CoursesReport__Level.id(level) !== CoursesReport__Level.id(selectedLevel);\n }), true, selectedLevel);\n }));\n var unselectedStatus = $$Array.map(targetStatus, [\n \"PendingReview\",\n \"Rejected\",\n \"Completed\"\n ].filter(function (status) {\n return OptionUtils.mapWithDefault((function (selectedStatus) {\n return status !== selectedStatus;\n }), true, selectedStatus);\n }));\n return $$Array.append(unselectedStatus, unselectedLevels);\n}\n\nfunction selected(selectedLevel, selectedStatus) {\n var selectedLevel$1 = OptionUtils.mapWithDefault((function (selectedLevel) {\n return [{\n TAG: /* Level */0,\n _0: selectedLevel\n }];\n }), [], selectedLevel);\n var selectedStatus$1 = OptionUtils.mapWithDefault((function (selectedStatus) {\n return [{\n TAG: /* TargetStatus */1,\n _0: selectedStatus\n }];\n }), [], selectedStatus);\n return $$Array.append(selectedStatus$1, selectedLevel$1);\n}\n\nfunction onSelectFilter(send, updateSelectedLevelCB, updateSelectedStatusCB, selectable) {\n Curry._1(send, /* UpdateFilterString */{\n _0: \"\"\n });\n if (selectable.TAG === /* Level */0) {\n return Curry._1(updateSelectedLevelCB, selectable._0);\n } else {\n return Curry._1(updateSelectedStatusCB, selectable._0);\n }\n}\n\nfunction onDeselectFilter(updateSelectedLevelCB, updateSelectedStatusCB, selectable) {\n if (selectable.TAG === /* Level */0) {\n return Curry._1(updateSelectedLevelCB, undefined);\n } else {\n return Curry._1(updateSelectedStatusCB, undefined);\n }\n}\n\nfunction criterion(t) {\n return t.criterion;\n}\n\nfunction criterionType(t) {\n return t.criterionType;\n}\n\nvar Sortable = {\n criterion: criterion,\n criterionType: criterionType\n};\n\nvar SubmissionsSorter = Sorter.Make(Sortable);\n\nfunction submissionsSorter(sortDirection, updateSortDirectionCB) {\n var criteria = [sortBy];\n return React.createElement(\"div\", {\n \"aria-label\": \"Change submissions sorting\",\n className: \"shrink-0 mt-3 md:mt-0 md:ml-2\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase\"\n }, tr(undefined, undefined, \"sort_by\")), React.createElement(SubmissionsSorter.make, {\n criteria: criteria,\n selectedCriterion: sortBy,\n direction: sortDirection,\n onDirectionChange: Curry.__1(updateSortDirectionCB),\n onCriterionChange: (function (param) {\n \n })\n }));\n}\n\nfunction filterPlaceholder(selectedLevel, selectedStatus) {\n if (selectedLevel !== undefined) {\n if (selectedStatus !== undefined) {\n return tr(undefined, undefined, \"filter_by_another_level\");\n } else {\n return tr(undefined, undefined, \"filter_by_another_level_or_status\");\n }\n } else if (selectedStatus !== undefined) {\n return tr(undefined, undefined, \"filter_by_level\");\n } else {\n return tr(undefined, undefined, \"filter_by_level_or_status\");\n }\n}\n\nfunction reducer(state, action) {\n if (typeof action !== \"number\") {\n return {\n loading: state.loading,\n filterString: action._0\n };\n }\n switch (action) {\n case /* BeginLoadingMore */0 :\n return {\n loading: /* LoadingMore */2,\n filterString: state.filterString\n };\n case /* BeginReloading */1 :\n return {\n loading: /* Reloading */1,\n filterString: state.filterString\n };\n case /* CompletedLoading */2 :\n return {\n loading: /* Loaded */0,\n filterString: state.filterString\n };\n \n }\n}\n\nfunction updateStudentSubmissions(send, updateSubmissionsCB, endCursor, hasNextPage, submissions, selectedLevel, selectedStatus, sortDirection, nodes) {\n var updatedSubmissions = submissions.concat(CoursesReport__Submission.makeFromJs(nodes));\n var filter = CoursesReport__Submissions.makeFilter(selectedLevel, selectedStatus);\n var submissionsData = CoursesReport__Submissions.make(updatedSubmissions, filter, sortDirection);\n var submissionsData$1 = hasNextPage && endCursor !== undefined ? ({\n TAG: /* PartiallyLoaded */0,\n _0: submissionsData,\n _1: endCursor\n }) : ({\n TAG: /* FullyLoaded */1,\n _0: submissionsData\n });\n Curry._1(updateSubmissionsCB, submissionsData$1);\n return Curry._1(send, /* CompletedLoading */2);\n}\n\nfunction getStudentSubmissions(studentId, cursor, send, level, status, sortDirection, submissions, updateSubmissionsCB) {\n var levelId = Belt_Option.flatMap(level, (function (level) {\n return CoursesReport__Level.id(level);\n }));\n var status$1 = Belt_Option.flatMap(status, (function (status) {\n return status;\n }));\n Curry._3(make, undefined, undefined, {\n studentId: studentId,\n after: cursor,\n status: status$1,\n levelId: levelId,\n sortDirection: sortDirection\n }).then(function (response) {\n updateStudentSubmissions(send, updateSubmissionsCB, response.studentSubmissions.pageInfo.endCursor, response.studentSubmissions.pageInfo.hasNextPage, submissions, level, status$1, sortDirection, response.studentSubmissions.nodes);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction showSubmissionStatus(submission) {\n var match = CoursesReport__Submission.status(submission);\n if (match === \"Completed\") {\n return React.createElement(\"div\", {\n className: \"bg-green-100 border border-green-500 shrink-0 leading-normal text-green-800 font-semibold px-3 py-px rounded\"\n }, tr(undefined, undefined, \"completed\"));\n } else if (match === \"Rejected\") {\n return React.createElement(\"div\", {\n className: \"bg-red-100 border border-red-500 shrink-0 leading-normal text-red-800 font-semibold px-3 py-px rounded\"\n }, tr(undefined, undefined, \"rejected\"));\n } else {\n return React.createElement(\"div\", {\n className: \"bg-blue-100 border border-blue-500 shrink-0 leading-normal text-blue-800 font-semibold px-3 py-px rounded\"\n }, tr(undefined, undefined, \"pending_review\"));\n }\n}\n\nfunction submissionCardClasses(submission) {\n var match = CoursesReport__Submission.status(submission);\n return \"flex flex-col md:flex-row items-start md:items-center justify-between rounded-lg bg-white border-l-3 p-3 md:py-6 md:px-5 mt-4 cursor-pointer shadow hover:border-primary-500 hover:text-primary-500 hover:shadow-md focus:outline-none focus:border-2 focus:border-focusColor-500 \" + (\n match === \"Completed\" ? \"border-green-500\" : (\n match === \"Rejected\" ? \"border-red-500\" : \"border-blue-500\"\n )\n );\n}\n\nfunction showSubmission(submissions, levels, teamStudentIds) {\n return React.createElement(\"div\", undefined, $$Array.map((function (submission) {\n var studentIds = CoursesReport__Submission.targetRole(submission);\n var teamMismatch = studentIds ? Caml_obj.caml_notequal(teamStudentIds, studentIds._0) : false;\n var submissionHref = teamMismatch ? \"/submissions/\" + CoursesReport__Submission.id(submission) : \"/targets/\" + CoursesReport__Submission.targetId(submission);\n return React.createElement(\"div\", {\n key: CoursesReport__Submission.id(submission),\n className: \"\"\n }, React.createElement(\"a\", {\n \"aria-label\": \"Student submission \" + CoursesReport__Submission.id(submission),\n className: \"block relative z-10 rounded-lg focus:outline-none focus:ring focus-ring-inset focus:ring-focusColor-500\",\n href: submissionHref\n }, React.createElement(\"div\", {\n key: CoursesReport__Submission.id(submission),\n className: submissionCardClasses(submission)\n }, React.createElement(\"div\", {\n className: \"w-full md:w-3/4\"\n }, React.createElement(\"div\", {\n className: \"block text-sm md:pr-2\"\n }, React.createElement(\"span\", {\n className: \"bg-gray-300 text-xs font-semibold px-2 py-px rounded\"\n }, CoursesReport__Level.levelLabel(levels, CoursesReport__Submission.levelId(submission))), React.createElement(\"span\", {\n className: \"ml-2 font-semibold text-base\"\n }, CoursesReport__Submission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ml-px text-xs text-gray-900\"\n }, React.createElement(\"span\", {\n className: \"ml-1\"\n }, tr([[\n \"date\",\n CoursesReport__Submission.createdAtPretty(submission)\n ]], undefined, \"submitted_on\")))), React.createElement(\"div\", {\n className: \"w-auto md:w-1/4 text-xs flex justify-end mt-2 md:mt-0\"\n }, showSubmissionStatus(submission)))), teamMismatch ? React.createElement(\"div\", {\n \"aria-label\": \"Team change notice for submission \" + CoursesReport__Submission.id(submission),\n className: \"w-full text-xs rounded-b bg-blue-100 text-blue-700 px-4 pt-3 pb-2 -mt-1 flex flex-1 justify-between items-center\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 justify-start items-center pr-8\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-sm md:text-base mt-1\"\n }), React.createElement(\"div\", {\n className: \"inline-block pl-3\"\n }, tr(undefined, undefined, \"submission_not_considered\"), React.createElement(HelpIcon.make, {\n className: \"ml-1\",\n children: React.createElement(\"span\", {\n dangerouslySetInnerHTML: {\n __html: tr(undefined, undefined, \"submission_not_considered_help\")\n }\n })\n }))), React.createElement(\"a\", {\n className: \"shrink-0 px-2 py-1 text-xs font-semibold text-blue-700 hover:bg-blue-200 hover:text-blue-800 rounded focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500\",\n href: \"/targets/\" + CoursesReport__Submission.targetId(submission)\n }, React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, tr(undefined, undefined, \"view\")), ts(undefined, undefined, \"target\"), React.createElement(FaIcon.make, {\n classes: \"fas fa-arrow-right ml-2\"\n }))) : null);\n }), submissions));\n}\n\nfunction showSubmissions(submissions, levels, teamStudentIds) {\n if (ArrayUtils.isEmpty(submissions)) {\n return React.createElement(\"div\", {\n className: \"course-review__reviewed-empty text-lg font-semibold text-center py-4\"\n }, React.createElement(\"h5\", {\n className: \"py-4 mt-4 bg-gray-50 text-gray-800 font-semibold\"\n }, tr(undefined, undefined, \"no_submissions_to_show\")));\n } else {\n return showSubmission(submissions, levels, teamStudentIds);\n }\n}\n\nfunction CoursesReport__SubmissionsList(Props) {\n var studentId = Props.studentId;\n var levels = Props.levels;\n var submissions = Props.submissions;\n var updateSubmissionsCB = Props.updateSubmissionsCB;\n var teamStudentIds = Props.teamStudentIds;\n var selectedLevel = Props.selectedLevel;\n var selectedStatus = Props.selectedStatus;\n var sortDirection = Props.sortDirection;\n var updateSelectedLevelCB = Props.updateSelectedLevelCB;\n var updateSelectedStatusCB = Props.updateSelectedStatusCB;\n var updateSortDirectionCB = Props.updateSortDirectionCB;\n var match = React.useReducer(reducer, {\n loading: /* Loaded */0,\n filterString: \"\"\n });\n var send = match[1];\n var state = match[0];\n React.useEffect((function () {\n if (CoursesReport__Submissions.needsReloading(selectedLevel, selectedStatus, sortDirection, submissions)) {\n Curry._1(send, /* BeginReloading */1);\n getStudentSubmissions(studentId, undefined, send, selectedLevel, selectedStatus, sortDirection, [], updateSubmissionsCB);\n }\n \n }), [\n selectedLevel,\n selectedStatus,\n sortDirection\n ]);\n var tmp;\n if (typeof submissions === \"number\") {\n tmp = SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined));\n } else if (submissions.TAG === /* PartiallyLoaded */0) {\n var cursor = submissions._1;\n var submissions$1 = submissions._0.submissions;\n var match$1 = state.loading;\n var tmp$1;\n switch (match$1) {\n case /* Loaded */0 :\n tmp$1 = React.createElement(\"button\", {\n className: \"btn btn-primary-ghost cursor-pointer w-full mt-4 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500\",\n onClick: (function (param) {\n Curry._1(send, /* BeginLoadingMore */0);\n return getStudentSubmissions(studentId, cursor, send, selectedLevel, selectedStatus, sortDirection, submissions$1, updateSubmissionsCB);\n })\n }, ts(undefined, undefined, \"load_more\"));\n break;\n case /* Reloading */1 :\n tmp$1 = null;\n break;\n case /* LoadingMore */2 :\n tmp$1 = SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined));\n break;\n \n }\n tmp = React.createElement(\"div\", undefined, showSubmissions(submissions$1, levels, teamStudentIds), tmp$1);\n } else {\n tmp = showSubmissions(submissions._0.submissions, levels, teamStudentIds);\n }\n var tmp$2;\n if (typeof submissions === \"number\") {\n tmp$2 = null;\n } else {\n var match$2 = state.loading;\n var loading = match$2 === 1;\n tmp$2 = React.createElement(LoadingSpinner.make, {\n loading: loading\n });\n }\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"md:flex items-end w-full pb-4\",\n role: \"form\"\n }, React.createElement(\"div\", {\n className: \"flex-1\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase\",\n htmlFor: \"filter\"\n }, \"Filter by:\"), React.createElement(Multiselect.make, {\n id: \"filter\",\n placeholder: filterPlaceholder(selectedLevel, selectedStatus),\n onChange: (function (filterString) {\n return Curry._1(send, /* UpdateFilterString */{\n _0: filterString\n });\n }),\n value: state.filterString,\n unselected: unselected(levels, selectedLevel, selectedStatus),\n selected: selected(selectedLevel, selectedStatus),\n onSelect: (function (param) {\n return onSelectFilter(send, updateSelectedLevelCB, updateSelectedStatusCB, param);\n }),\n onDeselect: (function (param) {\n return onDeselectFilter(updateSelectedLevelCB, updateSelectedStatusCB, param);\n })\n })), submissionsSorter(sortDirection, updateSortDirectionCB)), React.createElement(\"div\", {\n \"aria-label\": \"Student submissions\"\n }, tmp), tmp$2);\n}\n\nvar make$1 = CoursesReport__SubmissionsList;\n\nexport {\n str ,\n tr ,\n ts ,\n sortBy ,\n statusString ,\n StudentSubmissionsQuery ,\n Selectable ,\n Multiselect ,\n unselected ,\n selected ,\n onSelectFilter ,\n onDeselectFilter ,\n Sortable ,\n SubmissionsSorter ,\n submissionsSorter ,\n filterPlaceholder ,\n reducer ,\n updateStudentSubmissions ,\n getStudentSubmissions ,\n showSubmissionStatus ,\n submissionCardClasses ,\n showSubmission ,\n showSubmissions ,\n make$1 as make,\n \n}\n/* sortBy Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as CoursesReport__Overview from \"./CoursesReport__Overview.bs.js\";\nimport * as CoursesReport__StudentOverview from \"../types/CoursesReport__StudentOverview.bs.js\";\nimport * as CoursesReport__SubmissionsList from \"./CoursesReport__SubmissionsList.bs.js\";\n\nimport \"./CoursesReport.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesReport\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction buttonClasses(selected) {\n return \"cursor-pointer flex flex-1 justify-center md:flex-auto rounded-md p-1.5 md:border-b-3 md:rounded-b-none md:border-transparent md:px-4 md:hover:bg-gray-50 md:py-2 text-sm font-semibold text-gray-800 hover:text-primary-600 hover:bg-gray-50 focus:outline-none focus:ring-inset focus:ring-2 focus:bg-gray-50 focus:ring-focusColor-500 md:focus:border-b-none md:focus:rounded-t-md \" + (\n selected ? \"bg-white shadow md:shadow-none rounded-md md:rounded-none md:bg-transparent md:border-b-3 hover:bg-white md:hover:bg-transparent text-primary-500 md:border-primary-500\" : \"\"\n );\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n if (action === /* SelectOverviewTab */0) {\n return {\n selectedTab: \"Overview\",\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: state.submissionsFilter,\n sortDirection: state.sortDirection\n };\n } else {\n return {\n selectedTab: \"Submissions\",\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: state.submissionsFilter,\n sortDirection: state.sortDirection\n };\n }\n }\n switch (action.TAG | 0) {\n case /* SaveOverviewData */0 :\n return {\n selectedTab: state.selectedTab,\n overviewData: action._0,\n submissionsData: state.submissionsData,\n submissionsFilter: state.submissionsFilter,\n sortDirection: state.sortDirection\n };\n case /* SaveSubmissions */1 :\n return {\n selectedTab: state.selectedTab,\n overviewData: state.overviewData,\n submissionsData: action._0,\n submissionsFilter: state.submissionsFilter,\n sortDirection: state.sortDirection\n };\n case /* UpdateLevelFilter */2 :\n var init = state.submissionsFilter;\n return {\n selectedTab: state.selectedTab,\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: {\n selectedLevel: action._0,\n selectedStatus: init.selectedStatus\n },\n sortDirection: state.sortDirection\n };\n case /* UpdateStatusFilter */3 :\n var init$1 = state.submissionsFilter;\n return {\n selectedTab: state.selectedTab,\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: {\n selectedLevel: init$1.selectedLevel,\n selectedStatus: action._0\n },\n sortDirection: state.sortDirection\n };\n case /* UpdateSortDirection */4 :\n return {\n selectedTab: state.selectedTab,\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: state.submissionsFilter,\n sortDirection: action._0\n };\n \n }\n}\n\nvar Raw = {};\n\nvar query = \"query StudentReportOverviewQuery($studentId: ID!) {\\nstudentDetails(studentId: $studentId) {\\nevaluationCriteria {\\nid \\nname \\nmaxGrade \\npassGrade \\n}\\n\\nstudent {\\nlevel {\\nid \\n}\\n\\n}\\n\\ntotalTargets \\ntargetsCompleted \\ntargetsPendingReview \\ncompletedLevelIds \\nquizScores \\naverageGrades {\\nevaluationCriterionId \\naverageGrade \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.studentDetails;\n var value$2 = value$1.evaluationCriteria;\n var value$3 = value$1.student;\n var value$4 = value$3.level;\n var value$5 = value$1.completedLevelIds;\n var value$6 = value$1.quizScores;\n var value$7 = value$1.averageGrades;\n return {\n studentDetails: {\n evaluationCriteria: value$2.map(function (value) {\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade,\n passGrade: value.passGrade\n };\n }),\n student: {\n level: {\n id: value$4.id\n }\n },\n totalTargets: value$1.totalTargets,\n targetsCompleted: value$1.targetsCompleted,\n targetsPendingReview: value$1.targetsPendingReview,\n completedLevelIds: value$5.map(function (value) {\n return value;\n }),\n quizScores: value$6.map(function (value) {\n return value;\n }),\n averageGrades: value$7.map(function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n averageGrade: value.averageGrade\n };\n })\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.studentDetails;\n var value$2 = value$1.averageGrades;\n var averageGrades = value$2.map(function (value) {\n var value$1 = value.averageGrade;\n var value$2 = value.evaluationCriterionId;\n return {\n evaluationCriterionId: value$2,\n averageGrade: value$1\n };\n });\n var value$3 = value$1.quizScores;\n var quizScores = value$3.map(function (value) {\n return value;\n });\n var value$4 = value$1.completedLevelIds;\n var completedLevelIds = value$4.map(function (value) {\n return value;\n });\n var value$5 = value$1.targetsPendingReview;\n var value$6 = value$1.targetsCompleted;\n var value$7 = value$1.totalTargets;\n var value$8 = value$1.student;\n var value$9 = value$8.level;\n var value$10 = value$9.id;\n var level = {\n id: value$10\n };\n var student = {\n level: level\n };\n var value$11 = value$1.evaluationCriteria;\n var evaluationCriteria = value$11.map(function (value) {\n var value$1 = value.passGrade;\n var value$2 = value.maxGrade;\n var value$3 = value.name;\n var value$4 = value.id;\n return {\n id: value$4,\n name: value$3,\n maxGrade: value$2,\n passGrade: value$1\n };\n });\n var studentDetails = {\n evaluationCriteria: evaluationCriteria,\n student: student,\n totalTargets: value$7,\n targetsCompleted: value$6,\n targetsPendingReview: value$5,\n completedLevelIds: completedLevelIds,\n quizScores: quizScores,\n averageGrades: averageGrades\n };\n return {\n studentDetails: studentDetails\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n studentId: inp.studentId\n };\n}\n\nfunction makeVariables(studentId, param) {\n return {\n studentId: studentId\n };\n}\n\nvar StudentReportOverviewQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar StudentReportOverviewQuery_Graphql_error = include.Graphql_error;\n\nvar StudentReportOverviewQuery_decodeNotification = include.decodeNotification;\n\nvar StudentReportOverviewQuery_decodeObject = include.decodeObject;\n\nvar StudentReportOverviewQuery_decodeNotifications = include.decodeNotifications;\n\nvar StudentReportOverviewQuery_decodeErrors = include.decodeErrors;\n\nvar StudentReportOverviewQuery_flashNotifications = include.flashNotifications;\n\nvar StudentReportOverviewQuery_sendQuery = include.sendQuery;\n\nvar StudentReportOverviewQuery_query = include.query;\n\nvar StudentReportOverviewQuery_fetch = include.$$fetch;\n\nvar StudentReportOverviewQuery = {\n StudentReportOverviewQuery_inner: StudentReportOverviewQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: StudentReportOverviewQuery_Graphql_error,\n decodeNotification: StudentReportOverviewQuery_decodeNotification,\n decodeObject: StudentReportOverviewQuery_decodeObject,\n decodeNotifications: StudentReportOverviewQuery_decodeNotifications,\n decodeErrors: StudentReportOverviewQuery_decodeErrors,\n flashNotifications: StudentReportOverviewQuery_flashNotifications,\n sendQuery: StudentReportOverviewQuery_sendQuery,\n query: StudentReportOverviewQuery_query,\n $$fetch: StudentReportOverviewQuery_fetch,\n make: make\n};\n\nfunction saveOverviewData(studentId, send, data) {\n return Curry._1(send, {\n TAG: /* SaveOverviewData */0,\n _0: /* Loaded */{\n _0: CoursesReport__StudentOverview.makeFromJs(studentId, data)\n }\n });\n}\n\nfunction getOverviewData(studentId, send, param) {\n Curry._3(make, undefined, undefined, {\n studentId: studentId\n }).then(function (response) {\n saveOverviewData(studentId, send, response.studentDetails);\n return Promise.resolve(undefined);\n }).catch(function (param) {\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateSubmissions(send, submissions) {\n return Curry._1(send, {\n TAG: /* SaveSubmissions */1,\n _0: submissions\n });\n}\n\nfunction CoursesReport__Root(Props) {\n var studentId = Props.studentId;\n var levels = Props.levels;\n var coaches = Props.coaches;\n var teamStudentIds = Props.teamStudentIds;\n var match = React.useReducer(reducer, {\n selectedTab: \"Overview\",\n overviewData: /* Unloaded */0,\n submissionsData: /* Unloaded */0,\n submissionsFilter: {\n selectedLevel: undefined,\n selectedStatus: undefined\n },\n sortDirection: \"Descending\"\n });\n var send = match[1];\n var state = match[0];\n React.useEffect((function () {\n return getOverviewData(studentId, send, undefined);\n }), [studentId]);\n var match$1 = state.selectedTab;\n return React.createElement(\"div\", {\n \"aria-label\": \"Report\",\n className: \"bg-gray-50 pt-9 pb-8 px-3 -mt-7 border border-transparent shadow rounded-lg\",\n role: \"main\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-50 static\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"flex pt-3 mb-4 md:border-b border-gray-300\"\n }, React.createElement(\"div\", {\n \"aria-label\": \"Status tabs\",\n className: \"flex flex-1 md:flex-none p-1 md:p-0 space-x-1 md:space-x-0 text-center rounded-lg justify-between md:justify-start bg-gray-300 md:bg-transparent\",\n role: \"tablist\"\n }, React.createElement(\"button\", {\n \"aria-selected\": state.selectedTab === \"Overview\",\n className: buttonClasses(state.selectedTab === \"Overview\"),\n role: \"tab\",\n onClick: (function (param) {\n return Curry._1(send, /* SelectOverviewTab */0);\n })\n }, tr(undefined, undefined, \"button_overview_text\")), React.createElement(\"button\", {\n \"aria-selected\": state.selectedTab === \"Submissions\",\n className: buttonClasses(state.selectedTab === \"Submissions\"),\n role: \"tab\",\n onClick: (function (param) {\n return Curry._1(send, /* SelectSubmissionsTab */1);\n })\n }, tr(undefined, undefined, \"button_submissions_text\")))))), React.createElement(\"div\", {\n className: \"\"\n }, match$1 === \"Overview\" ? React.createElement(CoursesReport__Overview.make, {\n overviewData: state.overviewData,\n levels: levels,\n coaches: coaches\n }) : React.createElement(CoursesReport__SubmissionsList.make, {\n studentId: studentId,\n levels: levels,\n submissions: state.submissionsData,\n updateSubmissionsCB: (function (param) {\n return Curry._1(send, {\n TAG: /* SaveSubmissions */1,\n _0: param\n });\n }),\n teamStudentIds: teamStudentIds,\n selectedLevel: state.submissionsFilter.selectedLevel,\n selectedStatus: state.submissionsFilter.selectedStatus,\n sortDirection: state.sortDirection,\n updateSelectedLevelCB: (function (level) {\n return Curry._1(send, {\n TAG: /* UpdateLevelFilter */2,\n _0: level\n });\n }),\n updateSelectedStatusCB: (function (status) {\n return Curry._1(send, {\n TAG: /* UpdateStatusFilter */3,\n _0: status\n });\n }),\n updateSortDirectionCB: (function (direction) {\n return Curry._1(send, {\n TAG: /* UpdateSortDirection */4,\n _0: direction\n });\n })\n })));\n}\n\nvar make$1 = CoursesReport__Root;\n\nexport {\n str ,\n tr ,\n buttonClasses ,\n reducer ,\n StudentReportOverviewQuery ,\n saveOverviewData ,\n getOverviewData ,\n updateSubmissions ,\n make$1 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as CoursesReport__Root from \"../courses/report/components/CoursesReport__Root.bs.js\";\nimport * as CoursesReport__Coach from \"../courses/report/types/CoursesReport__Coach.bs.js\";\nimport * as CoursesReport__Level from \"../courses/report/types/CoursesReport__Level.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"studentId\", Json_decode.string, json),\n Json_decode.field(\"levels\", (function (param) {\n return Json_decode.array(CoursesReport__Level.decode, param);\n }), json),\n Json_decode.field(\"coaches\", (function (param) {\n return Json_decode.array(CoursesReport__Coach.decode, param);\n }), json),\n Json_decode.field(\"teamStudentIds\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json)\n ];\n}\n\nPsj.match(undefined, \"courses#report\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(\"course-student-report__props\", undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(CoursesReport__Root.make, {\n studentId: match[0],\n levels: match[1],\n coaches: match[2],\n teamStudentIds: match[3]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction endsAt(t) {\n return t.endsAt;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n endsAt: Belt_Option.map(Json_decode.optional((function (param) {\n return Json_decode.field(\"endsAt\", Json_decode.string, param);\n }), json), DateFns.parseISO)\n };\n}\n\nexport {\n id ,\n name ,\n endsAt ,\n decode ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as React from \"react\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Dropdown from \"../../../shared/components/Dropdown.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as CourseInfo from \"../../../shared/types/CourseInfo.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nimport \"./StudentCourse__Header.css\"\n;\n\nimport \"~/shared/styles/background_patterns.css\"\n;\n\nvar partial_arg = \"components.StudentCourse__Header\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction courseOptions(courses) {\n return courses.filter(function (course) {\n return Belt_Option.mapWithDefault(CourseInfo.endsAt(course), true, DateFns.isFuture);\n }).map(function (course) {\n var courseId = CourseInfo.id(course);\n return React.createElement(\"a\", {\n key: \"course-\" + courseId,\n className: \"cursor-pointer block p-3 text-xs font-semibold text-gray-900 border-b border-gray-50 bg-white hover:text-primary-500 hover:bg-gray-50 whitespace-nowrap\",\n href: \"/courses/\" + (courseId + \"/curriculum\")\n }, React.createElement(\"span\", undefined, CourseInfo.name(course)));\n });\n}\n\nfunction courseDropdown(currentCourse, otherCourses) {\n var tmp;\n if (otherCourses.length !== 0) {\n var selected = React.createElement(\"button\", {\n className: \"dropdown__btn max-w-xs md:max-w-lg mx-auto text-white appearance-none flex items-center relative justify-between focus:outline-none font-semibold w-full text-lg md:text-2xl leading-tight\"\n }, React.createElement(\"span\", {\n className: \"sm:truncate w-full text-left\"\n }, CourseInfo.name(currentCourse)), React.createElement(\"div\", {\n className: \"student-course__dropdown-btn ml-3 hover:bg-primary-100 hover:text-primary-500 flex items-center justify-between px-3 py-2 rounded\"\n }, React.createElement(\"i\", {\n className: \"fas fa-chevron-down text-xs font-semibold\"\n })));\n tmp = React.createElement(Dropdown.make, {\n selected: selected,\n contents: courseOptions(otherCourses),\n className: \"student-course__dropdown relative mx-auto\"\n });\n } else {\n tmp = React.createElement(\"div\", {\n className: \"flex max-w-xs md:max-w-xl mx-auto items-center relative justify-between font-semibold relative rounded w-full text-lg md:text-2xl leading-tight text-white\"\n }, React.createElement(\"span\", {\n className: \"sm:truncate w-full text-left\"\n }, CourseInfo.name(currentCourse)));\n }\n return React.createElement(\"div\", undefined, tmp);\n}\n\nfunction courseNameContainerClasses(additionalLinks) {\n return \"student-course__name-container w-full absolute bottom-0 \" + (\n ArrayUtils.isEmpty(additionalLinks) ? \"pt-2 pb-3 md:pt-4 md:pb-6\" : \"pt-2 pb-3 md:pt-4 md:pb-12\"\n );\n}\n\nfunction imageWrapperClasses(coverImage) {\n return \"relative \" + (\n coverImage !== undefined ? \"pb-1/2 md:pb-1/4 2xl:pb-1/5\" : \"pb-1/4 sm:1/5 md:pb-1/6 xl:pb-1/12\"\n );\n}\n\nfunction renderCourseSelector(currentCourseId, courses, coverImage, additionalLinks) {\n var currentCourse = ArrayUtils.unsafeFind((function (c) {\n return CourseInfo.id(c) === currentCourseId;\n }), \"Could not find current course with ID \" + (currentCourseId + \" in StudentCourse__Header\"), courses);\n var otherCourses = courses.filter(function (c) {\n return CourseInfo.id(c) !== currentCourseId;\n });\n return React.createElement(\"div\", {\n className: \"relative bg-primary-900\"\n }, React.createElement(\"div\", {\n className: imageWrapperClasses(coverImage)\n }, coverImage !== undefined ? React.createElement(\"img\", {\n className: \"absolute h-full w-full object-cover\",\n src: coverImage\n }) : React.createElement(\"div\", {\n className: \"student-course__cover-default absolute h-full w-full svg-bg-pattern-1\"\n })), React.createElement(\"div\", {\n className: courseNameContainerClasses(additionalLinks)\n }, React.createElement(\"div\", {\n className: \"student-course__name relative px-4 lg:px-0 flex h-full mx-auto lg:max-w-3xl\"\n }, courseDropdown(currentCourse, otherCourses))));\n}\n\nfunction tabClasses(url, linkTitle) {\n var defaultClasses = \"student-course__nav-tab py-4 px-2 text-center flex-1 font-semibold text-sm \";\n var match = url.path;\n if (!match) {\n return defaultClasses;\n }\n if (match.hd !== \"courses\") {\n return defaultClasses;\n }\n var match$1 = match.tl;\n if (!match$1) {\n return defaultClasses;\n }\n var match$2 = match$1.tl;\n if (match$2 && match$2.hd === linkTitle) {\n return \"student-course__nav-tab py-4 px-2 text-center flex-1 font-semibold text-sm student-course__nav-tab--active\";\n } else {\n return defaultClasses;\n }\n}\n\nfunction StudentCourse__Header(Props) {\n var currentCourseId = Props.currentCourseId;\n var courses = Props.courses;\n var additionalLinks = Props.additionalLinks;\n var coverImage = Props.coverImage;\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n return React.createElement(\"div\", undefined, renderCourseSelector(currentCourseId, courses, coverImage, additionalLinks), additionalLinks.length !== 0 ? React.createElement(\"div\", {\n className: \"md:px-3\"\n }, React.createElement(\"div\", {\n className: \"bg-white border-transparent flex justify-between overflow-x-auto md:overflow-hidden lg:max-w-3xl mx-auto shadow md:rounded-lg mt-0 md:-mt-7 z-10 relative\"\n }, [\"curriculum\"].concat(additionalLinks).map(function (l) {\n var match;\n switch (l) {\n case \"calendar\" :\n match = [\n tr(undefined, undefined, \"calendar\"),\n \"calendar\"\n ];\n break;\n case \"curriculum\" :\n match = [\n tr(undefined, undefined, \"curriculum\"),\n \"curriculum\"\n ];\n break;\n case \"leaderboard\" :\n match = [\n tr(undefined, undefined, \"leaderboard\"),\n \"leaderboard\"\n ];\n break;\n case \"report\" :\n match = [\n tr(undefined, undefined, \"report\"),\n \"report\"\n ];\n break;\n case \"review\" :\n match = [\n tr(undefined, undefined, \"review\"),\n \"review\"\n ];\n break;\n case \"students\" :\n match = [\n tr(undefined, undefined, \"students\"),\n \"students\"\n ];\n break;\n default:\n match = [\n tr(undefined, undefined, \"unknown\"),\n \"\"\n ];\n }\n var suffix = match[1];\n var title = match[0];\n return React.createElement(\"a\", {\n key: title,\n className: tabClasses(url, suffix),\n href: \"/courses/\" + (currentCourseId + (\"/\" + suffix))\n }, title);\n }))) : null);\n}\n\nvar make = StudentCourse__Header;\n\nexport {\n str ,\n tr ,\n courseOptions ,\n courseDropdown ,\n courseNameContainerClasses ,\n imageWrapperClasses ,\n renderCourseSelector ,\n tabClasses ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as CourseInfo from \"../shared/types/CourseInfo.bs.js\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as StudentCourse__Header from \"../layouts/student_course/components/StudentCourse__Header.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"currentCourseId\", Json_decode.string, json),\n Json_decode.field(\"courses\", (function (param) {\n return Json_decode.array(CourseInfo.decode, param);\n }), json),\n Json_decode.field(\"additionalLinks\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n Json_decode.field(\"coverImage\", (function (param) {\n return Json_decode.optional(Json_decode.string, param);\n }), json)\n ];\n}\n\nPsj.matchPaths(undefined, [\n \"courses/:id/curriculum\",\n \"courses/:id/report\",\n \"courses/:id/calendar\"\n ], (function (param) {\n var match = decodeProps(DomUtils.parseJSONAttribute(\"course-header-root\", undefined, undefined));\n var root = document.querySelector(\"#course-header-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(StudentCourse__Header.make, {\n currentCourseId: match[0],\n courses: match[1],\n additionalLinks: match[2],\n coverImage: match[3]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__b5f2089e__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as DateFns from \"../shared/utils/DateFns.bs.js\";\nimport * as DOMPurify from \"../shared/utils/DOMPurify.bs.js\";\nimport * as ReactUtils from \"../shared/utils/ReactUtils.bs.js\";\nimport * as IssuedCertificate from \"../shared/types/IssuedCertificate.bs.js\";\nimport * as IssuedCertificate__Root from \"./IssuedCertificate__Root.bs.js\";\nimport GraduateIconSvg from \"./images/graduate-icon.svg\";\n\nvar graduateIcon = GraduateIconSvg;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.VerifyCertificate__Root\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction printCertificate(setViewMode, _event) {\n Curry._1(setViewMode, (function (param) {\n return /* Print */1;\n }));\n setTimeout((function (param) {\n window.print();\n \n }), 1000);\n \n}\n\nfunction heading(currentUser, issuedCertificate) {\n if (currentUser) {\n return React.createElement(\"span\", {\n dangerouslySetInnerHTML: DOMPurify.sanitizedHTMLOpt(t([[\n \"name\",\n IssuedCertificate.profileName(issuedCertificate)\n ]], undefined, \"heading\"), DOMPurify.makeOptions(undefined, [\n \"strong\",\n \"br\"\n ], undefined))\n });\n } else {\n return IssuedCertificate.serialNumber(issuedCertificate);\n }\n}\n\nfunction handleCancelPrint(setViewMode, _event) {\n return Curry._1(setViewMode, (function (param) {\n return /* Screen */0;\n }));\n}\n\nfunction issuedToName(issuedCertificate) {\n var issuedTo = IssuedCertificate.issuedTo(issuedCertificate);\n var profileName = IssuedCertificate.profileName(issuedCertificate);\n if (issuedTo === profileName) {\n return profileName;\n } else {\n return \"\" + profileName + \"\";\n }\n}\n\nfunction VerifyCertificate__Root(Props) {\n var issuedCertificate = Props.issuedCertificate;\n var verifyImageUrl = Props.verifyImageUrl;\n var currentUser = Props.currentUser;\n var match = React.useState(function () {\n return /* Screen */0;\n });\n var setViewMode = match[1];\n if (match[0]) {\n return React.createElement(\"div\", {\n className: \"flex flex-col items-center\"\n }, React.createElement(\"button\", {\n className: \"btn btn-secondary my-4 md:my-6 verify-certificate__cancel-button\",\n onClick: (function (param) {\n return Curry._1(setViewMode, (function (param) {\n return /* Screen */0;\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-undo-alt\"\n }), React.createElement(\"span\", {\n className: \"ml-1\"\n }, t(undefined, undefined, \"cancel\"))), React.createElement(IssuedCertificate__Root.make, {\n issuedCertificate: issuedCertificate,\n verifyImageUrl: verifyImageUrl\n }));\n } else {\n return React.createElement(\"div\", {\n className: \"container mx-auto px-3 max-w-5xl py-8\"\n }, React.createElement(\"div\", {\n className: \"border border-gray-300 rounded-lg shadow-lg bg-white p-3 md:p-6 flex flex-col md:flex-row items-start md:items-center\"\n }, React.createElement(\"div\", {\n className: \"text-center md:w-5/12 pr-0 md:pr-5\"\n }, React.createElement(\"img\", {\n className: \"w-18 md:w-24 mx-auto\",\n src: graduateIcon\n }), React.createElement(\"h3\", {\n className: \"font-semibold mt-1 md:mt-2\"\n }, heading(currentUser, issuedCertificate)), React.createElement(\"div\", {\n className: \"text-sm mt-4\",\n dangerouslySetInnerHTML: DOMPurify.sanitizedHTMLOpt(t([\n [\n \"name\",\n issuedToName(issuedCertificate)\n ],\n [\n \"issue_date\",\n DateFns.formatPreset(IssuedCertificate.issuedAt(issuedCertificate), true, true, undefined, undefined)\n ],\n [\n \"course_name\",\n IssuedCertificate.courseName(issuedCertificate)\n ]\n ], undefined, \"description\"), DOMPurify.makeOptions(undefined, [\"strong\"], undefined))\n }), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"mt-4 text-xs\"\n }, React.createElement(\"code\", undefined, t([[\n \"serial\",\n IssuedCertificate.serialNumber(issuedCertificate)\n ]], undefined, \"serial_number\"))), currentUser), React.createElement(\"div\", {\n className: \"mt-4\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: (function (param) {\n return printCertificate(setViewMode, param);\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-print\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"print_or_save\"))))), React.createElement(\"div\", {\n className: \"md:w-7/12 mt-6 md:mt-0 rounded-lg overflow-hidden border-8 border-white shadow-lg\"\n }, React.createElement(IssuedCertificate__Root.make, {\n issuedCertificate: issuedCertificate,\n verifyImageUrl: verifyImageUrl\n }))), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"border border-blue-200 rounded-lg shadow-lg bg-blue-100 p-3 md:p-6 mt-6 flex items-center\",\n id: \"name-change-notice\"\n }, React.createElement(\"div\", undefined, React.createElement(\"i\", {\n className: \"fas fa-exclamation-circle text-2xl text-blue-500\"\n })), React.createElement(\"div\", {\n className: \"ml-4 text-sm\",\n dangerouslySetInnerHTML: DOMPurify.sanitizedHTMLOpt(t([[\n \"name\",\n IssuedCertificate.issuedTo(issuedCertificate)\n ]], undefined, \"originally_issued_to\"), DOMPurify.makeOptions(undefined, [\"strong\"], undefined))\n })), IssuedCertificate.profileName(issuedCertificate) === IssuedCertificate.issuedTo(issuedCertificate)));\n }\n}\n\nvar make = VerifyCertificate__Root;\n\nexport {\n graduateIcon ,\n str ,\n t ,\n printCertificate ,\n heading ,\n handleCancelPrint ,\n issuedToName ,\n make ,\n \n}\n/* graduateIcon Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as IssuedCertificate from \"../shared/types/IssuedCertificate.bs.js\";\nimport * as VerifyCertificate__Root from \"../issued_certificates/VerifyCertificate__Root.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"issuedCertificate\", IssuedCertificate.decode, json),\n Json_decode.field(\"verifyImageUrl\", Json_decode.string, json),\n Json_decode.field(\"currentUser\", Json_decode.bool, json)\n ];\n}\n\nPsj.match(undefined, \"issued_certificates#verify\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(VerifyCertificate__Root.make, {\n issuedCertificate: match[0],\n verifyImageUrl: match[1],\n currentUser: match[2]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction affiliation(t) {\n return t.affiliation;\n}\n\nfunction avatarUrl(t) {\n return t.avatarUrl;\n}\n\nfunction about(t) {\n return t.about;\n}\n\nfunction connectLink(t) {\n return t.connectLink;\n}\n\nfunction courseIds(t) {\n return t.courseIds;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json),\n title: Json_decode.field(\"title\", Json_decode.string, json),\n affiliation: Json_decode.optional((function (param) {\n return Json_decode.field(\"affiliation\", Json_decode.string, param);\n }), json),\n avatarUrl: Json_decode.optional((function (param) {\n return Json_decode.field(\"avatarUrl\", Json_decode.string, param);\n }), json),\n about: Json_decode.optional((function (param) {\n return Json_decode.field(\"about\", Json_decode.string, param);\n }), json),\n connectLink: Json_decode.optional((function (param) {\n return Json_decode.field(\"connectLink\", Json_decode.string, param);\n }), json),\n courseIds: Json_decode.field(\"courseIds\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json)\n };\n}\n\nfunction fullTitle(t) {\n var affiliation = t.affiliation;\n if (affiliation !== undefined) {\n return t.title + (\", \" + affiliation);\n } else {\n return t.title;\n }\n}\n\nexport {\n id ,\n name ,\n title ,\n affiliation ,\n avatarUrl ,\n about ,\n connectLink ,\n courseIds ,\n decode ,\n fullTitle ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction decode(json) {\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n name: Json_decode.field(\"name\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n name ,\n decode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Link from \"../shared/components/Link.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../shared/Avatar.bs.js\";\nimport * as PfIcon from \"../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as StringUtils from \"../shared/utils/StringUtils.bs.js\";\nimport * as Belt_SetString from \"../../../node_modules/rescript/lib/es6/belt_SetString.js\";\nimport * as CoachesIndex__Coach from \"./types/CoachesIndex__Coach.bs.js\";\nimport * as MultiselectDropdown from \"../packages/multiselect-dropdown/src/components/MultiselectDropdown.bs.js\";\nimport * as RescriptReactRouter from \"../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoachesIndex__Course from \"./types/CoachesIndex__Course.bs.js\";\n\nimport \"./CoachesIndex__Root.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoachesIndex__Root\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction label(t) {\n var tmp;\n tmp = t.TAG === /* Course */0 ? tr(undefined, undefined, \"filter_label_teaches_course\") : tr(undefined, undefined, \"filter_label_name_like\");\n return tmp;\n}\n\nfunction value(t) {\n if (t.TAG === /* Course */0) {\n return CoachesIndex__Course.name(t._0);\n } else {\n return t._0;\n }\n}\n\nfunction searchString(t) {\n if (t.TAG === /* Course */0) {\n return tr([[\n \"name\",\n CoachesIndex__Course.name(t._0)\n ]], undefined, \"filter_search_string_course\");\n } else {\n return t._0;\n }\n}\n\nfunction color(_t) {\n return \"gray\";\n}\n\nfunction makeCourse(course) {\n return {\n TAG: /* Course */0,\n _0: course\n };\n}\n\nfunction makeSearch(input) {\n return {\n TAG: /* Search */1,\n _0: input\n };\n}\n\nvar Selectable = {\n label: label,\n value: value,\n searchString: searchString,\n color: color,\n makeCourse: makeCourse,\n makeSearch: makeSearch\n};\n\nvar Multiselect = MultiselectDropdown.Make(Selectable);\n\nfunction computeInitialState(courses, studentInCourseIds) {\n var filterCourseIds = courses.filter(function (course) {\n return studentInCourseIds.includes(CoachesIndex__Course.id(course));\n }).map(CoachesIndex__Course.id);\n return {\n filterInput: \"\",\n filterSearch: \"\",\n filterCourseIds: Belt_SetString.fromArray(filterCourseIds)\n };\n}\n\nfunction reducer(state, action) {\n switch (action.TAG | 0) {\n case /* SelectFilter */0 :\n var selectable = action._0;\n if (selectable.TAG === /* Course */0) {\n return {\n filterInput: \"\",\n filterSearch: state.filterSearch,\n filterCourseIds: Belt_SetString.add(state.filterCourseIds, CoachesIndex__Course.id(selectable._0))\n };\n } else {\n return {\n filterInput: \"\",\n filterSearch: selectable._0.trim(),\n filterCourseIds: state.filterCourseIds\n };\n }\n case /* DeselectFilter */1 :\n var selectable$1 = action._0;\n if (selectable$1.TAG === /* Course */0) {\n return {\n filterInput: state.filterInput,\n filterSearch: state.filterSearch,\n filterCourseIds: Belt_SetString.remove(state.filterCourseIds, CoachesIndex__Course.id(selectable$1._0))\n };\n } else {\n return {\n filterInput: state.filterInput,\n filterSearch: \"\",\n filterCourseIds: state.filterCourseIds\n };\n }\n case /* UpdateFilterInput */2 :\n return {\n filterInput: action._0,\n filterSearch: state.filterSearch,\n filterCourseIds: state.filterCourseIds\n };\n \n }\n}\n\nfunction unselected(input, filterCourseIds, courses) {\n var unselectedCourses = courses.filter(function (course) {\n return !Belt_SetString.has(filterCourseIds, CoachesIndex__Course.id(course));\n }).map(makeCourse);\n var trimmedInput = input.trim();\n var search = trimmedInput.length > 0 ? [{\n TAG: /* Search */1,\n _0: trimmedInput\n }] : [];\n return unselectedCourses.concat(search);\n}\n\nfunction connectLink(href) {\n return React.createElement(\"a\", {\n className: \"block flex-1 px-3 py-2 text-center text-sm font-semibold hover:bg-gray-50 hover:text-primary-500\",\n href: href,\n target: \"_blank\"\n }, tr(undefined, undefined, \"button_connect\"));\n}\n\nfunction overlay(coach, about) {\n var src = CoachesIndex__Coach.avatarUrl(coach);\n var href = CoachesIndex__Coach.connectLink(coach);\n return React.createElement(\"div\", {\n className: \"fixed z-30 inset-0 overflow-y-auto\"\n }, React.createElement(\"div\", {\n className: \"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\"\n }, React.createElement(\"div\", {\n className: \"fixed inset-0\"\n }, React.createElement(\"div\", {\n className: \"absolute inset-0 bg-gray-900 opacity-75\"\n })), React.createElement(\"span\", {\n className: \"hidden sm:inline-block sm:align-middle sm:h-screen\"\n }), React.createElement(\"div\", {\n \"aria-modal\": true,\n \"aria-labelledby\": \"modal-headline\",\n className: \"inline-block relative bg-white rounded-lg shadow-lg align-bottom mt-16 sm:mb-8 sm:align-middle sm:max-w-lg sm:w-full\",\n role: \"dialog\"\n }, React.createElement(\"div\", {\n className: \"block absolute top-0 left-0 -mt-12\"\n }, React.createElement(Link.make, {\n href: \"/coaches\",\n ariaLabel: \"Close\",\n className: \"flex justify-center items-center bg-gray-900 rounded-full p-2 w-10 h-10 text-gray-400 hover:opacity-75 hover:text-gray-500 focus:outline-none focus:text-gray-500 transition ease-in-out duration-150\",\n children: React.createElement(PfIcon.make, {\n className: \"if i-times-regular if-fw text-2xl\"\n })\n })), React.createElement(\"div\", {\n className: \"pb-5\"\n }, React.createElement(\"div\", {\n className: \"faculty-card__avatar-container bg-gray-50 px-2 py-10 rounded-t-lg\"\n }, src !== undefined ? React.createElement(\"img\", {\n className: \"mx-auto w-40 h-40 -mb-18 border-4 border-gray-300 rounded-full object-cover\",\n alt: \"Avatar of \" + CoachesIndex__Coach.name(coach),\n src: src\n }) : React.createElement(Avatar.make, {\n name: CoachesIndex__Coach.name(coach),\n className: \"mx-auto w-40 h-40 -mb-18 border-4 border-gray-300 rounded-full object-cover\"\n })), React.createElement(\"div\", {\n className: \"py-3 mt-8\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-center font-semibold\"\n }, CoachesIndex__Coach.name(coach)), React.createElement(\"p\", {\n className: \"text-center text-xs text-gray-800 pt-1\"\n }, CoachesIndex__Coach.fullTitle(coach))), React.createElement(\"p\", {\n className: \"text-center text-sm px-6\"\n }, about), href !== undefined ? React.createElement(\"div\", {\n className: \"mt-3 text-center px-4 pb-4 sm:px-6 sm:pb-6\"\n }, React.createElement(\"div\", {\n className: \"inline-flex overflow-hidden border rounded border-primary-500 text-primary-500\"\n }, connectLink(href))) : null))));\n}\n\nfunction card(coach) {\n var src = CoachesIndex__Coach.avatarUrl(coach);\n var _about = CoachesIndex__Coach.about(coach);\n var href = CoachesIndex__Coach.connectLink(coach);\n return React.createElement(\"div\", {\n key: CoachesIndex__Coach.id(coach),\n \"aria-label\": \"Coach \" + CoachesIndex__Coach.name(coach),\n className: \"flex flex-col justify-between bg-white rounded-lg shadow-md pt-8\"\n }, React.createElement(\"div\", {\n className: \"px-6\"\n }, src !== undefined ? React.createElement(\"img\", {\n className: \"mx-auto w-40 h-40 border-4 border-gray-50 rounded-full object-cover\",\n alt: \"Coach's Avatar\",\n src: src\n }) : React.createElement(Avatar.make, {\n name: CoachesIndex__Coach.name(coach),\n className: \"mx-auto w-40 h-40 border-4 border-gray-50 rounded-full object-cover\"\n }), React.createElement(\"div\", {\n className: \"py-3\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-center font-semibold\"\n }, CoachesIndex__Coach.name(coach)), React.createElement(\"p\", {\n className: \"text-center text-xs text-gray-800 pt-1\"\n }, CoachesIndex__Coach.fullTitle(coach)))), React.createElement(\"div\", {\n className: \"flex justify-between divide-x border-t divide-gray-400 border-gray-300 rounded-b-lg overflow-hidden\"\n }, _about !== undefined ? React.createElement(\"div\", {\n className: \"block flex-1\"\n }, React.createElement(Link.make, {\n href: \"/coaches/\" + (CoachesIndex__Coach.id(coach) + (\"/\" + StringUtils.parameterize(CoachesIndex__Coach.name(coach)))),\n className: \"block w-full px-3 py-2 text-center text-sm font-semibold hover:bg-gray-50 hover:text-primary-500\",\n children: tr(undefined, undefined, \"button_about\")\n })) : null, href !== undefined ? React.createElement(\"div\", {\n className: \"flex-1\"\n }, connectLink(href)) : null));\n}\n\nfunction applyFilter(coaches, filterSearch, filterCourseIds) {\n var coaches$1 = Belt_SetString.isEmpty(filterCourseIds) ? coaches : coaches.filter(function (coach) {\n return !Belt_SetString.isEmpty(Belt_SetString.intersect(Belt_SetString.fromArray(CoachesIndex__Coach.courseIds(coach)), filterCourseIds));\n });\n if (filterSearch === \"\") {\n return coaches$1;\n } else {\n return coaches$1.filter(function (coach) {\n return StringUtils.includes(undefined, filterSearch, CoachesIndex__Coach.name(coach));\n });\n }\n}\n\nfunction selected(courses, filterSearch, filterCourseIds) {\n var search = filterSearch === \"\" ? [] : [{\n TAG: /* Search */1,\n _0: filterSearch\n }];\n var selectedCourses = courses.filter(function (course) {\n return Belt_SetString.has(filterCourseIds, CoachesIndex__Course.id(course));\n }).map(makeCourse);\n return search.concat(selectedCourses);\n}\n\nfunction CoachesIndex__Root(Props) {\n var subheading = Props.subheading;\n var coaches = Props.coaches;\n var courses = Props.courses;\n var studentInCourseIds = Props.studentInCourseIds;\n var match = React.useReducer(reducer, studentInCourseIds, (function (param) {\n return computeInitialState(courses, param);\n }));\n var send = match[1];\n var state = match[0];\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var _otherPaths = url.path;\n var selectedCoachOverlay;\n if (_otherPaths && _otherPaths.hd === \"coaches\") {\n var match$1 = _otherPaths.tl;\n selectedCoachOverlay = match$1 ? Belt_Option.mapWithDefault(Belt_Option.flatMap(StringUtils.paramToId(match$1.hd), (function (coachId) {\n return Caml_option.undefined_to_opt(coaches.find(function (coach) {\n return CoachesIndex__Coach.id(coach) === coachId;\n }));\n })), null, (function (coach) {\n var about = CoachesIndex__Coach.about(coach);\n if (about !== undefined) {\n return overlay(coach, about);\n } else {\n return null;\n }\n })) : null;\n } else {\n selectedCoachOverlay = null;\n }\n var filteredCoaches = applyFilter(coaches, state.filterSearch, state.filterCourseIds);\n var coachesToShow = ArrayUtils.isEmpty(filteredCoaches) ? coaches : filteredCoaches;\n return React.createElement(\"div\", undefined, selectedCoachOverlay, React.createElement(\"div\", {\n className: \"max-w-5xl mx-auto px-4\"\n }, React.createElement(\"h1\", {\n className: \"text-4xl text-center mt-3\"\n }, tr(undefined, undefined, \"heading\")), subheading !== undefined ? React.createElement(\"p\", {\n className: \"text-center\"\n }, subheading) : null, React.createElement(\"label\", {\n className: \"block text-xs font-semibold uppercase mt-4\",\n htmlFor: \"filter\"\n }, tr(undefined, undefined, \"filter_input_label\")), React.createElement(Multiselect.make, {\n id: \"filter\",\n placeholder: tr(undefined, undefined, \"filter_input_placeholder\"),\n onChange: (function (filterInput) {\n return Curry._1(send, {\n TAG: /* UpdateFilterInput */2,\n _0: filterInput\n });\n }),\n value: state.filterInput,\n unselected: unselected(state.filterInput, state.filterCourseIds, courses),\n selected: selected(courses, state.filterSearch, state.filterCourseIds),\n onSelect: (function (selectable) {\n return Curry._1(send, {\n TAG: /* SelectFilter */0,\n _0: selectable\n });\n }),\n onDeselect: (function (selectable) {\n return Curry._1(send, {\n TAG: /* DeselectFilter */1,\n _0: selectable\n });\n })\n }), ArrayUtils.isEmpty(filteredCoaches) ? React.createElement(\"div\", {\n className: \"text-xs border rounded bg-blue-100 p-2 mt-2\"\n }, tr(undefined, undefined, \"filter_result_empty\")) : null, React.createElement(\"div\", {\n className: \"grid sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-5 pt-6 pb-8\"\n }, coachesToShow.map(card))));\n}\n\nvar make = CoachesIndex__Root;\n\nexport {\n str ,\n tr ,\n Selectable ,\n Multiselect ,\n computeInitialState ,\n reducer ,\n unselected ,\n connectLink ,\n overlay ,\n card ,\n applyFilter ,\n selected ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as CoachesIndex__Root from \"../faculty/CoachesIndex__Root.bs.js\";\nimport * as CoachesIndex__Coach from \"../faculty/types/CoachesIndex__Coach.bs.js\";\nimport * as CoachesIndex__Course from \"../faculty/types/CoachesIndex__Course.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.optional((function (param) {\n return Json_decode.field(\"subheading\", Json_decode.string, param);\n }), json),\n Json_decode.field(\"coaches\", (function (param) {\n return Json_decode.array(CoachesIndex__Coach.decode, param);\n }), json),\n Json_decode.field(\"courses\", (function (param) {\n return Json_decode.array(CoachesIndex__Course.decode, param);\n }), json),\n Json_decode.field(\"studentInCourseIds\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json)\n ];\n}\n\nPsj.match(undefined, \"faculty#index\", (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(undefined, undefined));\n var root = document.querySelector(\"#react-root\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(CoachesIndex__Root.make, {\n subheading: match[0],\n coaches: match[1],\n courses: match[2],\n studentInCourseIds: match[3]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__8437ee7b__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Api from \"../shared/Api.bs.js\";\nimport * as I18n from \"../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../shared/components/FaIcon.bs.js\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport SetNewPasswordIconSvg from \"./images/set-new-password-icon.svg\";\n\nvar resetPasswordIcon = SetNewPasswordIconSvg;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.UserSessionResetPassword\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction handleErrorCB(setSaving, param) {\n return Curry._1(setSaving, (function (param) {\n return false;\n }));\n}\n\nfunction handleUpdatePasswordCB(response) {\n var path = Json_decode.field(\"path\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), response);\n if (path !== null) {\n return DomUtils.redirect(path);\n }\n \n}\n\nfunction validPassword(password) {\n var length = password.length;\n if (length >= 8) {\n return length < 128;\n } else {\n return false;\n }\n}\n\nfunction updatePassword(authenticityToken, token, newPassword, confirmPassword, setSaving) {\n var payload = {};\n payload[\"authenticity_token\"] = authenticityToken;\n payload[\"token\"] = token;\n payload[\"new_password\"] = newPassword;\n payload[\"confirm_password\"] = confirmPassword;\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n return Api.create(\"/users/update_password\", payload, handleUpdatePasswordCB, (function (param) {\n return Curry._1(setSaving, (function (param) {\n return false;\n }));\n }));\n}\n\nfunction isDisabled(saving, newPassword, confirmPassword) {\n if (!validPassword(newPassword) || newPassword !== confirmPassword) {\n return true;\n } else {\n return saving;\n }\n}\n\nfunction submitButtonText(saving, newPassword, confirmPassword) {\n var match = newPassword === \"\";\n var match$1 = !validPassword(newPassword);\n var match$2 = confirmPassword === \"\";\n var match$3 = newPassword !== confirmPassword;\n if (saving) {\n return t(undefined, undefined, \"updating_password\");\n } else if (match) {\n return t(undefined, undefined, \"enter_new_password\");\n } else if (match$1) {\n return t(undefined, undefined, \"password_short\");\n } else if (match$2) {\n return t(undefined, undefined, \"confirm_your_password\");\n } else if (match$3) {\n return t(undefined, undefined, \"passwords_not_match\");\n } else {\n return t(undefined, undefined, \"update_password\");\n }\n}\n\nfunction renderUpdatePassword(authenticityToken, token, newPassword, setNewPassword, confirmPassword, setConfirmPassword, saving, setSaving) {\n var inputClasses = \"appearance-none h-10 mt-1 block w-full text-gray-800 border border-gray-300 rounded py-2 px-4 text-sm bg-gray-50 hover:bg-gray-50 focus:outline-none focus:bg-white focus:border-primary-400\";\n var labelClasses = \"inline-block tracking-wide text-gray-900 text-xs font-semibold\";\n return React.createElement(\"div\", {\n className: \"pt-4 pb-5 md:px-9 items-center max-w-sm mx-auto\"\n }, React.createElement(\"div\", undefined, React.createElement(\"label\", {\n className: labelClasses,\n htmlFor: \"new-password\"\n }, t(undefined, undefined, \"new_password\")), React.createElement(\"input\", {\n className: inputClasses,\n id: \"new-password\",\n maxLength: 128,\n placeholder: t(undefined, undefined, \"new_password_placeholder\"),\n type: \"password\",\n value: newPassword,\n onChange: (function ($$event) {\n return Curry._1(setNewPassword, $$event.target.value);\n })\n })), React.createElement(\"div\", {\n className: \"mt-4\"\n }, React.createElement(\"label\", {\n className: \"inline-block tracking-wide text-gray-900 text-xs font-semibold mt-2\",\n htmlFor: \"confirm password\"\n }, t(undefined, undefined, \"confirm_password\")), React.createElement(\"input\", {\n className: inputClasses,\n id: \"confirm password\",\n maxLength: 128,\n placeholder: t(undefined, undefined, \"confirm_password_placeholder\"),\n type: \"password\",\n value: confirmPassword,\n onChange: (function ($$event) {\n return Curry._1(setConfirmPassword, $$event.target.value);\n })\n })), React.createElement(\"button\", {\n className: \"btn btn-success btn-large text-center w-full mt-4\",\n disabled: isDisabled(saving, newPassword, confirmPassword),\n onClick: (function (param) {\n return updatePassword(authenticityToken, token, newPassword, confirmPassword, setSaving);\n })\n }, React.createElement(FaIcon.make, {\n classes: saving ? \"fas fa-spinner fa-spin\" : \"fas fa-lock\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, submitButtonText(saving, newPassword, confirmPassword))));\n}\n\nfunction UserSessionResetPassword(Props) {\n var token = Props.token;\n var authenticityToken = Props.authenticityToken;\n var match = React.useState(function () {\n return \"\";\n });\n var match$1 = React.useState(function () {\n return \"\";\n });\n var match$2 = React.useState(function () {\n return false;\n });\n return React.createElement(\"div\", {\n className: \"bg-gray-50 sm:py-10\"\n }, React.createElement(\"div\", {\n className: \"container mx-auto max-w-lg px-4 py-6 sm:py-8 bg-white rounded-lg shadow\"\n }, React.createElement(\"img\", {\n className: \"mx-auto h-20 sm:h-32\",\n src: resetPasswordIcon\n }), React.createElement(\"div\", {\n className: \"text-lg sm:text-2xl font-bold text-center mt-4\"\n }, t(undefined, undefined, \"set_new_password\")), renderUpdatePassword(authenticityToken, token, match[0], match[1], match$1[0], match$1[1], match$2[0], match$2[1])));\n}\n\nvar make = UserSessionResetPassword;\n\nexport {\n resetPasswordIcon ,\n str ,\n t ,\n handleErrorCB ,\n handleUpdatePasswordCB ,\n validPassword ,\n updatePassword ,\n isDisabled ,\n submitButtonText ,\n renderUpdatePassword ,\n make ,\n \n}\n/* resetPasswordIcon Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as UserSessionResetPassword from \"../users/UserSessionResetPassword.bs.js\";\n\nfunction decodeProps(json) {\n return {\n token: Json_decode.field(\"token\", Json_decode.string, json),\n authenticityToken: Json_decode.field(\"authenticityToken\", Json_decode.string, json)\n };\n}\n\nPsj.match(undefined, \"users/sessions#reset_password\", (function (param) {\n var props = decodeProps(DomUtils.parseJSONAttribute(\"user-session-reset-password\", \"data-json-props\", undefined));\n var element = document.querySelector(\"#user-session-reset-password\");\n if (!(element == null)) {\n ReactDom.render(React.createElement(UserSessionResetPassword.make, {\n token: props.token,\n authenticityToken: props.authenticityToken\n }), element);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as AppRouter__Course from \"./AppRouter__Course.bs.js\";\n\nvar UnsafeFindFailed = /* @__PURE__ */Caml_exceptions.create(\"AppRouter__Page.UnsafeFindFailed\");\n\nfunction showSideNav(t) {\n switch (t.TAG | 0) {\n case /* SelectedCourse */0 :\n return true;\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return false;\n \n }\n}\n\nfunction coursePath(id, page) {\n var tmp;\n switch (page) {\n case /* Curriculum */0 :\n tmp = \"curriculum\";\n break;\n case /* Report */1 :\n tmp = \"report\";\n break;\n case /* Review */2 :\n tmp = \"review\";\n break;\n case /* Students */3 :\n tmp = \"students\";\n break;\n case /* Leaderboard */4 :\n tmp = \"leaderboard\";\n break;\n case /* Calendar */5 :\n tmp = \"calendar\";\n break;\n \n }\n return \"/courses/\" + id + \"/\" + tmp;\n}\n\nfunction path(t) {\n switch (t.TAG | 0) {\n case /* SelectedCourse */0 :\n return coursePath(t._0, t._1);\n case /* Student__SubmissionShow */1 :\n return \"/submissions/\" + t._0 + \"/review\";\n case /* Student__StudentsReport */2 :\n return \"/students/\" + t._0 + \"/report\";\n \n }\n}\n\nfunction activeLinks(currentCourse) {\n var defaultLinks = [\n /* Curriculum */0,\n /* Calendar */5\n ];\n var linksForStudents = AppRouter__Course.isStudent(currentCourse) ? defaultLinks.concat([/* Report */1]) : defaultLinks;\n if (AppRouter__Course.canReview(currentCourse)) {\n return linksForStudents.concat([\n /* Review */2,\n /* Students */3\n ]);\n } else {\n return linksForStudents;\n }\n}\n\nfunction isSPA(t) {\n switch (t.TAG | 0) {\n case /* SelectedCourse */0 :\n return (t._1 - 2 >>> 0) <= 1;\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return true;\n \n }\n}\n\nfunction useSPA(selectedPage, page) {\n if (isSPA(selectedPage)) {\n return isSPA(page);\n } else {\n return false;\n }\n}\n\nfunction isSelectedCoursePage(t, coursePage) {\n switch (t.TAG | 0) {\n case /* SelectedCourse */0 :\n return t._1 === coursePage;\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return false;\n \n }\n}\n\nfunction canAccessPage(coursePage, course) {\n return Belt_Option.isSome(Caml_option.undefined_to_opt(activeLinks(course).find(function (l) {\n return l === coursePage;\n })));\n}\n\nexport {\n UnsafeFindFailed ,\n showSideNav ,\n coursePath ,\n path ,\n activeLinks ,\n isSPA ,\n useSPA ,\n isSelectedCoursePage ,\n canAccessPage ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Dropdown2 from \"../../../shared/components/Dropdown2.bs.js\";\nimport * as AppRouter__School from \"../types/AppRouter__School.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.AppRouter__Dropdown\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction handleToggle(setLinksVisible, param) {\n return Curry._1(setLinksVisible, (function (linksVisible) {\n return !linksVisible;\n }));\n}\n\nfunction contents(moreLinks) {\n return moreLinks.map(function (link, index) {\n return React.createElement(\"div\", {\n key: String(index),\n className: \"\"\n }, React.createElement(\"a\", {\n className: \"cursor-pointer block p-3 text-xs font-semibold text-gray-900 border-b border-gray-50 bg-white hover:text-primary-500 hover:bg-gray-50 focus:outline-none focus:text-primary-500 focus:bg-gray-50\",\n href: AppRouter__School.linkUrl(link),\n rel: \"noopener\",\n target: \"_blank\"\n }, AppRouter__School.linkTitle(link)));\n });\n}\n\nfunction selected(param) {\n return React.createElement(\"div\", {\n key: \"more-links\",\n className: \"ml-2 font-semibold text-sm p-4 md:px-3 md:py-2 cursor-pointer relative rounded-lg text-gray-900 hover:bg-gray-50 hover:text-primary-500\",\n title: t(undefined, undefined, \"show_more_links\")\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"more\")), React.createElement(\"i\", {\n className: \"fas fa-caret-down ml-2\"\n }));\n}\n\nfunction AppRouter__Dropdown(Props) {\n var links = Props.links;\n if (links.length !== 0) {\n return React.createElement(Dropdown2.make, {\n selected: selected(undefined),\n contents: contents(links),\n right: true,\n key: \"links-dropdown\"\n });\n } else {\n return null;\n }\n}\n\nvar make = AppRouter__Dropdown;\n\nexport {\n str ,\n t ,\n handleToggle ,\n contents ,\n selected ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Dropdown2 from \"../../../shared/components/Dropdown2.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as AppRouter__User from \"../types/AppRouter__User.bs.js\";\nimport * as AppRouter__School from \"../types/AppRouter__School.bs.js\";\nimport * as AppRouter__Dropdown from \"./AppRouter__Dropdown.bs.js\";\nimport * as Notifications__Root from \"../../../notifications/Notifications__Root.bs.js\";\nimport * as Layout__UserControls from \"../../shared/Layout__UserControls.bs.js\";\n\nimport \"./AppRouter__Header.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.AppRouter__Header\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction showLink(icon, text, href) {\n return React.createElement(\"div\", {\n key: href,\n className: \"whitespace-nowrap\"\n }, React.createElement(\"a\", {\n className: \"cursor-pointer block p-3 text-xs font-semibold text-gray-900 border-b border-gray-50 bg-white hover:text-primary-500 hover:bg-gray-50 focus:outline-none focus:text-primary-500 focus:bg-gray-50\",\n href: href,\n rel: \"nofollow\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fw fa-\" + icon\n }), React.createElement(\"span\", {\n className: \"pl-2\"\n }, text)));\n}\n\nfunction links(param) {\n return [\n showLink(\"edit\", t(undefined, undefined, \"edit_profile\"), \"/user/edit\"),\n showLink(\"power-off\", t(undefined, undefined, \"sign_out\"), \"/users/sign_out\")\n ];\n}\n\nfunction selected(user) {\n return React.createElement(\"button\", {\n className: \"md:hidden md:ml-2 h-10 w-10 rounded-full border-2 border-gray-300 hover:border-primary-500 focus:border-primary-500\",\n title: \"Show user controls\"\n }, Belt_Option.mapWithDefault(AppRouter__User.avatarUrl(user), React.createElement(Avatar.make, {\n name: AppRouter__User.name(user),\n className: \"inline-block object-contain rounded-full text-tiny\"\n }), (function (src) {\n return React.createElement(\"img\", {\n className: \"inline-block object-contain rounded-full text-tiny\",\n alt: AppRouter__User.name(user),\n src: src\n });\n })));\n}\n\nfunction renderLinks(user) {\n return React.createElement(Dropdown2.make, {\n selected: selected(user),\n contents: links(undefined),\n right: true,\n key: \"links-dropdown\"\n });\n}\n\nfunction headerLink(key, link) {\n var tmp = {\n className: \"no-underline bg-gray-50 md:bg-white hover:bg-gray-50 text-gray-900 rounded-lg hover:text-primary-500 w-full p-4 md:px-3 md:py-2\",\n href: AppRouter__School.linkUrl(link)\n };\n var tmp$1 = AppRouter__School.localLinks(link) ? undefined : \"noopener\";\n if (tmp$1 !== undefined) {\n tmp.rel = Caml_option.valFromOption(tmp$1);\n }\n var tmp$2 = AppRouter__School.localLinks(link) ? undefined : \"_blank\";\n if (tmp$2 !== undefined) {\n tmp.target = Caml_option.valFromOption(tmp$2);\n }\n return React.createElement(\"div\", {\n key: key,\n className: \"md:ml-2 text-sm font-semibold text-center cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center\"\n }, React.createElement(\"a\", tmp, AppRouter__School.linkTitle(link)));\n}\n\nfunction signOutLink(param) {\n return React.createElement(\"div\", {\n key: \"Logout-button\",\n className: \"md:ml-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center\"\n }, React.createElement(\"a\", {\n className: \"border border-primary-500 rounded px-2 py-1 text-primary-500 text-xs md:text-sm md:leading-normal m-4 md:m-0 no-underline font-semibold\",\n href: \"/users/sign_out\",\n rel: \"nofollow\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-power-off\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"sign_out\")))));\n}\n\nfunction signInLink(param) {\n return React.createElement(\"div\", {\n key: \"SignIn-button\",\n className: \"md:ml-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center\"\n }, React.createElement(\"a\", {\n className: \"border border-primary-500 rounded px-2 py-1 text-primary-500 text-xs md:text-sm md:leading-normal m-4 md:m-0 no-underline font-semibold\",\n href: \"/users/sign_in\"\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-power-off\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"sign_in\")))));\n}\n\nfunction notificationButton(hasNotifications) {\n return React.createElement(Notifications__Root.make, {\n wrapperClasses: \"relative md:ml-1 pt-1 md:pt-0 text-sm font-semibold cursor-default flex w-8 h-8 md:w-9 md:h-9 justify-center items-center rounded-lg hover:bg-gray-50\",\n buttonClasses: \"font-semibold text-gray-900 hover:text-primary-500 w-full flex items-center justify-center \",\n iconClasses: \"app-router-header__notifications-unread-bullet\",\n hasNotifications: hasNotifications,\n key: \"notifications-button\"\n });\n}\n\nfunction isMobile(param) {\n return window.innerWidth < 768;\n}\n\nfunction headerLinks(links, isLoggedIn, user, hasNotifications) {\n var match = $$Array.to_list(links);\n var match$1 = window.innerWidth < 768;\n var match$2;\n if (match$1) {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n } else if (match) {\n var match$3 = match.tl;\n if (match$3) {\n var match$4 = match$3.tl;\n if (match$4) {\n var match$5 = match$4.tl;\n if (match$5) {\n var match$6 = match$5.tl;\n match$2 = match$6 ? [\n [\n match.hd,\n match$3.hd,\n match$4.hd\n ],\n [\n match$5.hd,\n match$6.hd\n ].concat($$Array.of_list(match$6.tl))\n ] : [\n $$Array.of_list(match),\n []\n ];\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n } else {\n match$2 = [\n $$Array.of_list(match),\n []\n ];\n }\n var match$7 = window.innerWidth < 768;\n return match$2[0].map(function (l, index) {\n return headerLink(String(index), l);\n }).concat([React.createElement(AppRouter__Dropdown.make, {\n links: match$2[1],\n key: \"more-links\"\n })]).concat([ReactUtils.nullUnless(notificationButton(hasNotifications), isLoggedIn && window.innerWidth >= 768)]).concat([user !== undefined ? (\n match$7 ? signOutLink(undefined) : renderLinks(user)\n ) : signInLink(undefined)]);\n}\n\nfunction AppRouter__Header(Props) {\n var school = Props.school;\n var currentUser = Props.currentUser;\n var match = React.useState(function () {\n return window.innerWidth < 768;\n });\n var toggleMenuHidden = match[1];\n var menuHidden = match[0];\n React.useEffect(function () {\n var resizeCB = function (param) {\n return Curry._1(toggleMenuHidden, (function (param) {\n return window.innerWidth < 768;\n }));\n };\n window.addEventListener(\"resize\", resizeCB);\n \n });\n var isLoggedIn = Belt_Option.isSome(currentUser);\n var hasNotifications = Belt_Option.mapWithDefault(currentUser, false, AppRouter__User.hasNotifications);\n var url = AppRouter__School.logoUrl(school);\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"mx-auto\"\n }, React.createElement(\"nav\", {\n className: \"flex justify-between items-center\"\n }, React.createElement(\"div\", {\n className: \"flex w-full items-center justify-between\"\n }, React.createElement(\"a\", {\n className: \"max-w-sm focus-within:outline-none\",\n href: Belt_Option.isSome(currentUser) ? \"/dashboard\" : \"/\"\n }, url !== undefined ? React.createElement(\"img\", {\n className: \"h-9 md:h-12 object-contain flex text-sm items-center\",\n alt: \"Logo of \" + AppRouter__School.name(school),\n src: url\n }) : React.createElement(\"div\", {\n className: \"p-2 rounded-lg bg-white text-gray-900 hover:bg-gray-50 hover:text-primary-600\"\n }, React.createElement(\"span\", {\n className: \"text-xl font-bold leading-tight\"\n }, AppRouter__School.name(school)))), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, ReactUtils.nullUnless(notificationButton(hasNotifications), isLoggedIn), React.createElement(\"div\", {\n onClick: (function (param) {\n return Curry._1(toggleMenuHidden, (function (menuHidden) {\n return !menuHidden;\n }));\n })\n }, React.createElement(\"div\", {\n className: \"app-router-header__menu-btn cursor-pointer hover:bg-gray-50 w-8 h-8 text-center relative focus:outline-none rounded-lg \" + (\n menuHidden ? \"\" : \"open\"\n )\n }, React.createElement(\"span\", {\n className: \"app-router-header__menu-icon\"\n }, React.createElement(\"span\", {\n className: \"app-router-header__menu-icon-bar\"\n }))))), window.innerWidth < 768)), !menuHidden && window.innerWidth >= 768 ? React.createElement(\"div\", {\n className: \"relative flex justify-end items-center w-3/5 lg:w-3/4 flex-nowrap shrink-0 transition\"\n }, headerLinks(AppRouter__School.links(school), isLoggedIn, currentUser, hasNotifications), React.createElement(Layout__UserControls.make, {\n user: currentUser\n })) : null)), window.innerWidth < 768 && !menuHidden ? React.createElement(\"div\", {\n className: \"relative mt-2 flex flex-row w-full flex-wrap bg-gray-50 rounded-lg shadow-lg transition\"\n }, headerLinks(AppRouter__School.links(school), isLoggedIn, currentUser, hasNotifications)) : null);\n}\n\nvar make = AppRouter__Header;\n\nexport {\n str ,\n t ,\n showLink ,\n links ,\n selected ,\n renderLinks ,\n headerLink ,\n signOutLink ,\n signInLink ,\n notificationButton ,\n isMobile ,\n headerLinks ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as React from \"react\";\nimport * as Dropdown from \"../../../shared/components/Dropdown.bs.js\";\nimport * as AppRouter__Page from \"../types/AppRouter__Page.bs.js\";\nimport * as AppRouter__Course from \"../types/AppRouter__Course.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction selected(currentCourse) {\n return React.createElement(\"button\", {\n className: \"text-white md:text-gray-900 bg-gray-900 md:bg-gray-100 appearance-none flex items-center justify-between hover:bg-gray-800 md:hover:bg-gray-50 hover:text-gray-50 focus:bg-gray-50 md:hover:text-primary-500 focus:outline-none focus:bg-white focus:text-primary-500 font-semibold relative px-3 py-2 rounded-md w-full focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 \",\n title: AppRouter__Course.name(currentCourse)\n }, React.createElement(\"span\", {\n className: \"w-5/6 flex items-center\"\n }, React.createElement(\"i\", {\n className: \"fas fa-book\"\n }), React.createElement(\"span\", {\n className: \"truncate ml-2 text-left\"\n }, AppRouter__Course.name(currentCourse))), React.createElement(\"span\", {\n className: \"w-1/6 text-right\"\n }, React.createElement(\"i\", {\n className: \"fas fa-chevron-down text-sm\"\n })));\n}\n\nfunction contents(courses, currentCourse, coursePage, selectedPage) {\n return courses.filter(function (course) {\n if (AppRouter__Course.id(course) !== AppRouter__Course.id(currentCourse)) {\n return !AppRouter__Course.ended(course);\n } else {\n return false;\n }\n }).map(function (course) {\n var nextPage = AppRouter__Page.canAccessPage(coursePage, course) ? coursePage : /* Curriculum */0;\n var href = AppRouter__Page.coursePath(AppRouter__Course.id(course), nextPage);\n var classes = \"block px-4 py-3 text-xs font-semibold text-gray-900 bg-white hover:text-primary-500 hover:bg-gray-50 whitespace-normal focus:ring-2 focus:ring-inset focus:ring-focusColor-500\";\n if (AppRouter__Page.useSPA(selectedPage, {\n TAG: /* SelectedCourse */0,\n _0: AppRouter__Course.id(course),\n _1: nextPage\n })) {\n return React.createElement(Link.make, {\n href: href,\n className: classes,\n children: AppRouter__Course.name(course),\n key: AppRouter__Course.id(course)\n });\n } else {\n return React.createElement(\"a\", {\n key: AppRouter__Course.id(course),\n className: classes,\n href: href\n }, AppRouter__Course.name(course));\n }\n });\n}\n\nfunction AppRouter__CourseSelector(Props) {\n var courses = Props.courses;\n var selectedPage = Props.selectedPage;\n var coursePage = Props.coursePage;\n var currentCourse = Props.currentCourse;\n return React.createElement(Dropdown.make, {\n selected: selected(currentCourse),\n contents: contents(courses, currentCourse, coursePage, selectedPage),\n className: \"w-full md:text-base\"\n });\n}\n\nvar make = AppRouter__CourseSelector;\n\nexport {\n str ,\n selected ,\n contents ,\n make ,\n \n}\n/* Link Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as AppRouter__Page from \"../types/AppRouter__Page.bs.js\";\nimport * as AppRouter__Course from \"../types/AppRouter__Course.bs.js\";\nimport * as AppRouter__Header from \"./AppRouter__Header.bs.js\";\nimport * as AppRouter__CourseSelector from \"./AppRouter__CourseSelector.bs.js\";\n\nimport \"./AppRouter__Nav.css\"\n;\n\nvar partial_arg = \"components.AppRouter__Nav\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction showLink(id, selectedPage, page, classes, title, contents) {\n if (AppRouter__Page.useSPA(selectedPage, {\n TAG: /* SelectedCourse */0,\n _0: id,\n _1: page\n })) {\n return React.createElement(Link.make, {\n href: AppRouter__Page.coursePath(id, page),\n className: classes,\n title: title,\n children: contents,\n key: title\n });\n } else {\n return React.createElement(\"a\", {\n key: title,\n className: classes,\n title: title,\n href: AppRouter__Page.coursePath(id, page)\n }, contents);\n }\n}\n\nfunction renderLinks(courses, selectedPage) {\n switch (selectedPage.TAG | 0) {\n case /* SelectedCourse */0 :\n var coursePage = selectedPage._1;\n var courseId = selectedPage._0;\n var currentCourse = ArrayUtils.unsafeFind((function (course) {\n return AppRouter__Course.id(course) === courseId;\n }), \"Could not find currentCourse with ID \" + courseId, courses);\n var url = AppRouter__Course.thumbnailUrl(currentCourse);\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"relative pb-1/2 bg-gray-800 rounded-lg\"\n }, url !== undefined ? React.createElement(\"img\", {\n className: \"absolute h-full w-full object-cover rounded-lg\",\n src: url\n }) : React.createElement(\"div\", {\n className: \"app-router-nav__course-cover absolute h-full w-full svg-bg-pattern-1 rounded-lg \"\n })), React.createElement(\"div\", {\n className: \"mt-4\"\n }, React.createElement(AppRouter__CourseSelector.make, {\n courses: courses,\n selectedPage: selectedPage,\n coursePage: coursePage,\n currentCourse: currentCourse\n })), React.createElement(\"div\", {\n className: \"mt-4 space-y-3\"\n }, AppRouter__Page.activeLinks(currentCourse).map(function (link) {\n var match;\n switch (link) {\n case /* Curriculum */0 :\n match = [\n t(undefined, undefined, \"curriculum\"),\n \"i-journal-text-light\"\n ];\n break;\n case /* Report */1 :\n match = [\n t(undefined, undefined, \"report\"),\n \"i-graph-up-light\"\n ];\n break;\n case /* Review */2 :\n match = [\n t(undefined, undefined, \"review\"),\n \"i-clipboard-check-light\"\n ];\n break;\n case /* Students */3 :\n match = [\n t(undefined, undefined, \"students\"),\n \"i-users-light\"\n ];\n break;\n case /* Leaderboard */4 :\n match = [\n t(undefined, undefined, \"leaderboard\"),\n \"i-tachometer-alt-light\"\n ];\n break;\n case /* Calendar */5 :\n match = [\n t(undefined, undefined, \"calendar\"),\n \"i-calendar-regular\"\n ];\n break;\n \n }\n var title = match[0];\n var classes = \"app-router-navbar__primary-nav-link py-3 px-2 mb-1 \" + (\n link === coursePage ? \"app-router-navbar__primary-nav-link--active\" : \"\"\n );\n return showLink(courseId, selectedPage, link, classes, title, [\n React.createElement(Icon.make, {\n className: \"if \" + match[1] + \" text-xl if-fw\",\n key: \"icon\"\n }),\n React.createElement(\"div\", {\n key: \"title\",\n className: \"pl-3\"\n }, title)\n ]);\n })));\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return null;\n \n }\n}\n\nfunction courseSelector(courses, selectedPage) {\n switch (selectedPage.TAG | 0) {\n case /* SelectedCourse */0 :\n var courseId = selectedPage._0;\n var currentCourse = ArrayUtils.unsafeFind((function (course) {\n return AppRouter__Course.id(course) === courseId;\n }), \"Could not find currentCourse with ID \" + courseId, courses);\n var url = AppRouter__Course.thumbnailUrl(currentCourse);\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"relative pb-1/2 bg-gray-800\"\n }, url !== undefined ? React.createElement(\"img\", {\n className: \"absolute h-full w-full object-cover\",\n src: url\n }) : React.createElement(\"div\", {\n className: \"app-router-nav__course-cover absolute h-full w-full svg-bg-pattern-1 rounded-lg \"\n })), React.createElement(\"div\", {\n className: \"-mt-11 pb-2 md:pb-0 md:mt-4 px-2\"\n }, React.createElement(AppRouter__CourseSelector.make, {\n courses: courses,\n selectedPage: selectedPage,\n coursePage: selectedPage._1,\n currentCourse: currentCourse\n })));\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return null;\n \n }\n}\n\nfunction renderLinksMobile(courses, selectedPage) {\n switch (selectedPage.TAG | 0) {\n case /* SelectedCourse */0 :\n var coursePage = selectedPage._1;\n var courseId = selectedPage._0;\n var currentCourse = ArrayUtils.unsafeFind((function (course) {\n return AppRouter__Course.id(course) === courseId;\n }), \"Could not find currentCourse with ID \" + courseId, courses);\n return React.createElement(\"div\", {\n className: \"flex\"\n }, AppRouter__Page.activeLinks(currentCourse).map(function (link) {\n var match;\n switch (link) {\n case /* Curriculum */0 :\n match = [\n t(undefined, undefined, \"curriculum\"),\n \"i-journal-text-regular\"\n ];\n break;\n case /* Report */1 :\n match = [\n t(undefined, undefined, \"report\"),\n \"i-graph-up-regular\"\n ];\n break;\n case /* Review */2 :\n match = [\n t(undefined, undefined, \"review\"),\n \"i-clipboard-check-regular\"\n ];\n break;\n case /* Students */3 :\n match = [\n t(undefined, undefined, \"students\"),\n \"i-users-regular\"\n ];\n break;\n case /* Leaderboard */4 :\n match = [\n t(undefined, undefined, \"leaderboard\"),\n \"i-tachometer-alt-regular\"\n ];\n break;\n case /* Calendar */5 :\n match = [\n t(undefined, undefined, \"calendar\"),\n \"i-calendar-regular\"\n ];\n break;\n \n }\n var title = match[0];\n var classes = \"flex flex-col flex-1 items-center py-3 text-xs text-gray-800 font-semibold \" + (\n coursePage === link ? \"text-primary-500 bg-gray-50\" : \"hover:text-primary-500 hover:bg-gray-50\"\n );\n return showLink(courseId, selectedPage, link, classes, title, [\n React.createElement(Icon.make, {\n className: \"if \" + match[1] + \" text-lg if-fw\",\n key: \"icon\"\n }),\n React.createElement(\"div\", {\n key: \"title\",\n className: \"pt-1\"\n }, title)\n ]);\n }));\n case /* Student__SubmissionShow */1 :\n case /* Student__StudentsReport */2 :\n return null;\n \n }\n}\n\nfunction AppRouter__Nav(Props) {\n var school = Props.school;\n var courses = Props.courses;\n var selectedPage = Props.selectedPage;\n var currentUser = Props.currentUser;\n var match = React.useState(function () {\n return false;\n });\n var setSidebarOpen = match[1];\n return [\n ReactUtils.nullUnless(React.createElement(\"div\", {\n key: \"sidebar\",\n className: \"fixed inset-0 flex z-40 md:hidden\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"relative flex-1 flex flex-col max-w-xs w-full bg-white\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"absolute top-0 right-0 -mr-12 pt-2\"\n }, React.createElement(\"button\", {\n className: \"ml-1 flex items-center justify-center h-10 w-10 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white\",\n onClick: (function (_e) {\n return Curry._1(setSidebarOpen, (function (param) {\n return false;\n }));\n })\n }, React.createElement(\"span\", {\n className: \"sr-only\"\n }, t(undefined, undefined, \"close_sidebar\"))))), React.createElement(\"div\", {\n className: \"flex-1 h-0 pt-5 pb-4 overflow-y-auto\"\n }, React.createElement(\"nav\", {\n className: \"mt-5 px-2 space-y-1\"\n }, renderLinks(courses, selectedPage))))), React.createElement(\"div\", {\n className: \"shrink-0 w-14\"\n })), match[0]),\n React.createElement(\"div\", {\n key: \"main\",\n className: \"flex shrink-0\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 flex-col\"\n }, React.createElement(\"div\", {\n className: \"px-4 py-2 bg-white border-b h-16 md:fixed w-full md:inset-x-0 md:top-0 z-50\"\n }, React.createElement(AppRouter__Header.make, {\n school: school,\n currentUser: currentUser\n })), React.createElement(\"div\", {\n className: \"md:hidden\"\n }, courseSelector(courses, selectedPage))), React.createElement(\"div\", {\n className: \"approuter-nav__sidebar hidden md:flex flex-col\"\n }, React.createElement(\"div\", {\n className: \"flex h-full flex-col flex-1 border-r bg-white\"\n }, React.createElement(\"div\", {\n className: \"flex-1 flex flex-col pt-4 pb-4 overflow-y-auto md:mt-16\"\n }, React.createElement(\"nav\", {\n className: \"flex-1 px-4 bg-white\"\n }, renderLinks(courses, selectedPage)))))),\n React.createElement(\"div\", {\n key: \"mobile-links\",\n className: \"md:hidden fixed inset-x-0 bottom-0 flex-1 bg-white border-t z-50\"\n }, renderLinksMobile(courses, selectedPage))\n ];\n}\n\nvar make = AppRouter__Nav;\n\nexport {\n t ,\n str ,\n showLink ,\n renderLinks ,\n courseSelector ,\n renderLinksMobile ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Js_dict from \"../../../../../node_modules/rescript/lib/es6/js_dict.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\n\nfunction nameOrEmail(t) {\n return t.nameOrEmail;\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction sortCriterion(t) {\n return t.sortCriterion;\n}\n\nfunction sortDirection(t) {\n return t.sortDirection;\n}\n\nfunction tab(t) {\n return t.tab;\n}\n\nfunction includeInactive(t) {\n return t.includeInactive;\n}\n\nfunction assignedCoachId(t) {\n return t.assignedCoachId;\n}\n\nfunction personalCoachId(t) {\n return t.personalCoachId;\n}\n\nfunction reviewingCoachId(t) {\n return t.reviewingCoachId;\n}\n\nfunction defaultDirection(t) {\n var direction = t.sortDirection;\n if (direction !== undefined) {\n return direction;\n }\n var tab = t.tab;\n if (tab === \"Pending\") {\n return \"Ascending\";\n } else {\n return \"Descending\";\n }\n}\n\nfunction makeFromQueryParams(search) {\n var params = new URLSearchParams(search);\n var criterion = params.get(\"sortCriterion\");\n var direction = params.get(\"sortDirection\");\n var t = params.get(\"tab\");\n var t$1 = params.get(\"includeInactive\");\n return {\n nameOrEmail: Caml_option.nullable_to_opt(params.get(\"search\")),\n levelId: Caml_option.nullable_to_opt(params.get(\"levelId\")),\n personalCoachId: Caml_option.nullable_to_opt(params.get(\"personalCoachId\")),\n assignedCoachId: Caml_option.nullable_to_opt(params.get(\"assignedCoachId\")),\n reviewingCoachId: Caml_option.nullable_to_opt(params.get(\"reviewingCoachId\")),\n targetId: Caml_option.nullable_to_opt(params.get(\"targetId\")),\n sortCriterion: !(criterion == null) && criterion === \"EvaluatedAt\" ? \"EvaluatedAt\" : \"SubmittedAt\",\n sortDirection: !(direction == null) ? (\n direction === \"Descending\" ? \"Descending\" : (\n direction === \"Ascending\" ? \"Ascending\" : undefined\n )\n ) : undefined,\n tab: !(t == null) ? (\n t === \"Pending\" ? \"Pending\" : (\n t === \"Reviewed\" ? \"Reviewed\" : undefined\n )\n ) : undefined,\n includeInactive: (t$1 == null) ? false : t$1 === \"true\"\n };\n}\n\nfunction toQueryString(filter) {\n var match = filter.sortCriterion;\n var sortCriterion = match === \"EvaluatedAt\" ? \"EvaluatedAt\" : \"SubmittedAt\";\n var filterDict = Js_dict.fromArray([[\n \"sortCriterion\",\n sortCriterion\n ]]);\n var direction = filter.sortDirection;\n if (direction !== undefined) {\n filterDict[\"sortDirection\"] = direction === \"Descending\" ? \"Descending\" : \"Ascending\";\n }\n Belt_Option.forEach(filter.nameOrEmail, (function (search) {\n filterDict[\"search\"] = search;\n \n }));\n Belt_Option.forEach(filter.targetId, (function (targetId) {\n filterDict[\"targetId\"] = targetId;\n \n }));\n Belt_Option.forEach(filter.levelId, (function (levelId) {\n filterDict[\"levelId\"] = levelId;\n \n }));\n Belt_Option.forEach(filter.personalCoachId, (function (coachId) {\n filterDict[\"personalCoachId\"] = coachId;\n \n }));\n if (Caml_obj.caml_notequal(filter.tab, \"Reviewed\")) {\n Belt_Option.forEach(filter.assignedCoachId, (function (assignedCoachId) {\n filterDict[\"assignedCoachId\"] = assignedCoachId;\n \n }));\n }\n if (Caml_obj.caml_notequal(filter.tab, \"Pending\")) {\n Belt_Option.forEach(filter.reviewingCoachId, (function (reviewingCoachId) {\n filterDict[\"reviewingCoachId\"] = reviewingCoachId;\n \n }));\n }\n var tab = filter.tab;\n if (tab !== undefined) {\n if (tab === \"Reviewed\") {\n filterDict[\"tab\"] = \"Reviewed\";\n } else {\n filterDict[\"tab\"] = \"Pending\";\n }\n }\n if (filter.includeInactive) {\n filterDict[\"includeInactive\"] = \"true\";\n }\n return new URLSearchParams(filterDict).toString();\n}\n\nexport {\n nameOrEmail ,\n levelId ,\n targetId ,\n sortCriterion ,\n sortDirection ,\n tab ,\n includeInactive ,\n assignedCoachId ,\n personalCoachId ,\n reviewingCoachId ,\n defaultDirection ,\n makeFromQueryParams ,\n toQueryString ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction make(id, title) {\n return {\n id: id,\n title: title\n };\n}\n\nfunction makeFromJs(target) {\n return {\n id: target.id,\n title: target.title\n };\n}\n\nexport {\n id ,\n title ,\n make ,\n makeFromJs ,\n \n}\n/* No side effect */\n","export default \"__VITE_ASSET__fc14ea97__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\n\nfunction make(evaluationCriterionId, value) {\n return {\n evaluationCriterionId: evaluationCriterionId,\n value: value\n };\n}\n\nfunction sort(criteria, grades) {\n return ArrayUtils.copyAndSort((function (g1, g2) {\n var ec1 = ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === g1.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with ID: \" + (g1.evaluationCriterionId + \" in CoursesReview__Grade\"), criteria);\n var ec2 = ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === g2.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with ID: \" + (g2.evaluationCriterionId + \" in CoursesReview__Grade\"), criteria);\n return $$String.compare(EvaluationCriterion.name(ec1), EvaluationCriterion.name(ec2));\n }), grades);\n}\n\nfunction evaluationCriterionId(t) {\n return t.evaluationCriterionId;\n}\n\nfunction value(t) {\n return t.value;\n}\n\nfunction asJsType(t) {\n return {\n evaluationCriterionId: t.evaluationCriterionId,\n grade: t.value\n };\n}\n\nexport {\n make ,\n sort ,\n evaluationCriterionId ,\n value ,\n asJsType ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\n\nfunction value(t) {\n return t.value;\n}\n\nfunction coachName(t) {\n var name = t.coachName;\n if (name !== undefined) {\n return name;\n } else {\n return \"Deleted Coach\";\n }\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction coachAvatarUrl(t) {\n return t.coachAvatarUrl;\n}\n\nfunction coachTitle(t) {\n return t.coachTitle;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction make(coachName, coachAvatarUrl, coachTitle, createdAt, value) {\n return {\n createdAt: createdAt,\n value: value,\n coachName: coachName,\n coachAvatarUrl: coachAvatarUrl,\n coachTitle: coachTitle\n };\n}\n\nexport {\n value ,\n coachName ,\n createdAt ,\n coachAvatarUrl ,\n coachTitle ,\n createdAtPretty ,\n make ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as CoursesReview__Grade from \"./CoursesReview__Grade.bs.js\";\nimport * as CoursesReview__Feedback from \"./CoursesReview__Feedback.bs.js\";\nimport * as SubmissionChecklistItem from \"./SubmissionChecklistItem.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction passedAt(t) {\n return t.passedAt;\n}\n\nfunction evaluatorName(t) {\n return t.evaluatorName;\n}\n\nfunction evaluatedAt(t) {\n return t.evaluatedAt;\n}\n\nfunction grades(t) {\n return t.grades;\n}\n\nfunction feedback(t) {\n return t.feedback;\n}\n\nfunction checklist(t) {\n return t.checklist;\n}\n\nfunction archivedAt(t) {\n return t.archivedAt;\n}\n\nfunction make(id, createdAt, passedAt, evaluatorName, feedback, grades, evaluatedAt, archivedAt, checklist) {\n return {\n id: id,\n createdAt: createdAt,\n passedAt: passedAt,\n evaluatorName: evaluatorName,\n evaluatedAt: evaluatedAt,\n archivedAt: archivedAt,\n feedback: feedback,\n grades: grades,\n checklist: checklist\n };\n}\n\nfunction makeFromJs(s) {\n var partial_arg = SubmissionChecklistItem.makeFiles(s.files);\n return make(s.id, DateFns.decodeISO(s.createdAt), Belt_Option.map(s.passedAt, DateFns.decodeISO), s.evaluatorName, s.feedback.map(function (f) {\n return CoursesReview__Feedback.make(f.coachName, f.coachAvatarUrl, f.coachTitle, DateFns.decodeISO(f.createdAt), f.value);\n }), s.grades.map(function (g) {\n return CoursesReview__Grade.make(g.evaluationCriterionId, g.grade);\n }), Belt_Option.map(s.evaluatedAt, DateFns.decodeISO), Belt_Option.map(s.archivedAt, DateFns.decodeISO), Json_decode.array((function (param) {\n return SubmissionChecklistItem.decode(partial_arg, param);\n }), s.checklist));\n}\n\nfunction update(passedAt, evaluatorName, feedback, grades, evaluatedAt, checklist, t) {\n return {\n id: t.id,\n createdAt: t.createdAt,\n passedAt: passedAt,\n evaluatorName: evaluatorName,\n evaluatedAt: evaluatedAt,\n archivedAt: t.archivedAt,\n feedback: feedback,\n grades: grades,\n checklist: checklist\n };\n}\n\nfunction feedbackSent(t) {\n return ArrayUtils.isNotEmpty(t.feedback);\n}\n\nfunction updateFeedback(feedback, t) {\n return {\n id: t.id,\n createdAt: t.createdAt,\n passedAt: t.passedAt,\n evaluatorName: t.evaluatorName,\n evaluatedAt: t.evaluatedAt,\n archivedAt: t.archivedAt,\n feedback: feedback,\n grades: t.grades,\n checklist: t.checklist\n };\n}\n\nexport {\n id ,\n createdAt ,\n passedAt ,\n evaluatorName ,\n evaluatedAt ,\n grades ,\n feedback ,\n checklist ,\n archivedAt ,\n make ,\n makeFromJs ,\n update ,\n feedbackSent ,\n updateFeedback ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\nimport * as CoursesReview__OverlaySubmission from \"./CoursesReview__OverlaySubmission.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction levelNumber(t) {\n return t.levelNumber;\n}\n\nfunction userNames(t) {\n return t.userNames;\n}\n\nfunction teamName(t) {\n return t.teamName;\n}\n\nfunction reviewer(t) {\n return t.reviewer;\n}\n\nfunction reviewerName(reviewer) {\n return reviewer.name;\n}\n\nfunction reviewerAssignedAt(reviewer) {\n return reviewer.assignedAt;\n}\n\nfunction failed(t) {\n var status = t.status;\n if (status !== undefined) {\n return OptionUtils.mapWithDefault((function (param) {\n return false;\n }), true, status.passedAt);\n } else {\n return false;\n }\n}\n\nfunction pendingReview(t) {\n return OptionUtils.mapWithDefault((function (param) {\n return false;\n }), true, t.status);\n}\n\nfunction feedbackSent(t) {\n return OptionUtils.mapWithDefault((function (status) {\n return status.feedbackSent;\n }), false, t.status);\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction timeDistance(t) {\n return DateFns.formatDistanceToNowStrict(t.createdAt, true, undefined, undefined, undefined);\n}\n\nfunction make(id, title, createdAt, userNames, status, teamName, levelNumber, reviewer) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n userNames: userNames,\n status: status,\n teamName: teamName,\n levelNumber: levelNumber,\n reviewer: reviewer\n };\n}\n\nfunction makeStatus(passedAt, feedbackSent) {\n return {\n passedAt: passedAt,\n feedbackSent: feedbackSent\n };\n}\n\nfunction makeReviewerInfo(reviewer) {\n return {\n name: reviewer.name,\n assignedAt: DateFns.decodeISO(reviewer.assignedAt)\n };\n}\n\nfunction makeFromJS(submission) {\n var status = Belt_Option.map(submission.evaluatedAt, (function (param) {\n return {\n passedAt: Belt_Option.map(submission.passedAt, DateFns.decodeISO),\n feedbackSent: submission.feedbackSent\n };\n }));\n return make(submission.id, submission.title, DateFns.decodeISO(submission.createdAt), submission.userNames, status, submission.teamName, submission.levelNumber, Belt_Option.map(submission.reviewer, makeReviewerInfo));\n}\n\nfunction replace(e, l) {\n return $$Array.map((function (s) {\n if (s.id === e.id) {\n return e;\n } else {\n return s;\n }\n }), l);\n}\n\nfunction statusEq(overlaySubmission, t) {\n var match = t.status;\n var match$1 = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n if (match !== undefined) {\n if (match$1 !== undefined) {\n return Caml_obj.caml_equal(match.passedAt, CoursesReview__OverlaySubmission.passedAt(overlaySubmission));\n } else {\n return false;\n }\n } else {\n return match$1 === undefined;\n }\n}\n\nexport {\n id ,\n title ,\n createdAt ,\n levelNumber ,\n userNames ,\n teamName ,\n reviewer ,\n reviewerName ,\n reviewerAssignedAt ,\n failed ,\n pendingReview ,\n feedbackSent ,\n createdAtPretty ,\n timeDistance ,\n make ,\n makeStatus ,\n makeReviewerInfo ,\n makeFromJS ,\n replace ,\n statusEq ,\n \n}\n/* DateFns Not a pure module */\n","export default \"__VITE_ASSET__4c6c73af__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as React from \"react\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport PendingEmptySvg from \"../images/pending-empty.svg\";\nimport * as CoursesReview__IndexSubmission from \"../types/CoursesReview__IndexSubmission.bs.js\";\nimport ReviewedEmptySvg from \"../../shared/images/reviewed-empty.svg\";\n\nvar reviewedEmptyImage = ReviewedEmptySvg;\n\nvar pendingEmptyImage = PendingEmptySvg;\n\nvar partial_arg = \"components.CoursesReview__SubmissionCard\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction submissionStatus(submission) {\n var match = CoursesReview__IndexSubmission.pendingReview(submission) ? [\n \"shrink-0 leading-normal font-semibold px-2 py-px rounded bg-orange-100 text-orange-800\",\n CoursesReview__IndexSubmission.timeDistance(submission)\n ] : (\n CoursesReview__IndexSubmission.failed(submission) ? [\n \"shrink-0 leading-normal font-semibold px-2 py-px rounded bg-red-100 text-red-800\",\n t(undefined, undefined, \"rejected\")\n ] : [\n \"shrink-0 leading-normal font-semibold px-2 py-px rounded bg-green-100 text-green-800\",\n t(undefined, undefined, \"completed\")\n ]\n );\n return React.createElement(\"div\", {\n className: match[0]\n }, match[1]);\n}\n\nfunction feedbackSentNotice(feedbackSent) {\n return ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"bg-primary-100 text-primary-600 border border-transparent shrink-0 leading-normal font-semibold px-2 py-px rounded mr-3\"\n }, t(undefined, undefined, \"feedback_sent\")), feedbackSent);\n}\n\nfunction submissionCardClasses(submission) {\n return \"flex flex-col lg:flex-row items-start lg:items-center justify-between bg-white border-l-3 p-3 lg:py-6 lg:px-5 mb-4 cursor-pointer rounded-lg shadow hover:border-primary-500 hover:text-primary-500 hover:shadow-md focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-inset focus:ring-focusColor-500 \" + (\n CoursesReview__IndexSubmission.pendingReview(submission) ? \"border-orange-400\" : (\n CoursesReview__IndexSubmission.failed(submission) ? \"border-red-500\" : \"border-green-500\"\n )\n );\n}\n\nfunction showSubmission(submissions, filterString) {\n return React.createElement(\"div\", {\n id: \"submissions\"\n }, submissions.map(function (submission) {\n var name = CoursesReview__IndexSubmission.teamName(submission);\n var reviewer = CoursesReview__IndexSubmission.reviewer(submission);\n return React.createElement(Link.make, {\n href: \"/submissions/\" + CoursesReview__IndexSubmission.id(submission) + \"/review?\" + filterString,\n ariaLabel: \"Submission \" + CoursesReview__IndexSubmission.id(submission) + \", Submitted by: \" + CoursesReview__IndexSubmission.userNames(submission),\n className: submissionCardClasses(submission),\n children: null,\n props: {\n \"data-submission-id\": CoursesReview__IndexSubmission.id(submission)\n },\n key: CoursesReview__IndexSubmission.id(submission)\n }, React.createElement(\"div\", {\n className: \"w-full lg:w-8/12\"\n }, React.createElement(\"div\", {\n className: \"block text-sm lg:pr-4\"\n }, React.createElement(\"span\", {\n className: \"bg-gray-300 text-xs font-semibold px-2 py-px rounded\"\n }, t(undefined, undefined, \"level\") + String(CoursesReview__IndexSubmission.levelNumber(submission))), React.createElement(\"span\", {\n className: \"ml-2 font-semibold text-sm md:text-base\"\n }, CoursesReview__IndexSubmission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ml-px text-xs text-gray-900\"\n }, name !== undefined ? React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by_team\"), React.createElement(\"span\", {\n className: \"font-semibold\"\n }, name)) : React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by\"), React.createElement(\"span\", {\n className: \"font-semibold\"\n }, CoursesReview__IndexSubmission.userNames(submission))), React.createElement(\"span\", {\n className: \"ml-1\",\n title: DateFns.formatPreset(CoursesReview__IndexSubmission.createdAt(submission), undefined, true, true, undefined)\n }, t([[\n \"created_at\",\n CoursesReview__IndexSubmission.createdAtPretty(submission)\n ]], undefined, \"created_at\")), reviewer !== undefined ? React.createElement(\"span\", {\n className: \"ml-1\"\n }, t(undefined, undefined, \"assigned_to\"), React.createElement(\"span\", {\n className: \"ml-1 font-semibold\"\n }, CoursesReview__IndexSubmission.reviewerName(reviewer)), React.createElement(\"span\", {\n className: \"text-xs text-gray-800 ml-1\",\n title: DateFns.formatPreset(CoursesReview__IndexSubmission.reviewerAssignedAt(reviewer), undefined, true, true, undefined)\n }, DateFns.formatDistanceToNow(CoursesReview__IndexSubmission.reviewerAssignedAt(reviewer), undefined, true, undefined), \".\")) : null)), React.createElement(\"div\", {\n className: \"w-auto lg:w-4/12 text-xs flex justify-end mt-2 lg:mt-0\"\n }, feedbackSentNotice(CoursesReview__IndexSubmission.feedbackSent(submission)), submissionStatus(submission)));\n }));\n}\n\nfunction CoursesReview__SubmissionCard(Props) {\n var submissions = Props.submissions;\n var selectedTab = Props.selectedTab;\n var filterString = Props.filterString;\n var imageSrc = Belt_Option.mapWithDefault(selectedTab, pendingEmptyImage, (function (t) {\n if (t === \"Reviewed\") {\n return reviewedEmptyImage;\n } else {\n return pendingEmptyImage;\n }\n }));\n if (ArrayUtils.isEmpty(submissions)) {\n return React.createElement(\"div\", {\n className: \"course-review__submissions-empty text-lg font-semibold text-center py-4\"\n }, React.createElement(\"h5\", {\n className: \"py-4 mt-4 bg-gray-50 text-gray-800 font-semibold\"\n }, t(undefined, undefined, \"no_submissions_found\")), React.createElement(\"img\", {\n className: \"w-3/4 md:w-1/2 mx-auto mt-2\",\n src: imageSrc\n }));\n } else {\n return showSubmission(submissions, filterString);\n }\n}\n\nvar make = CoursesReview__SubmissionCard;\n\nexport {\n reviewedEmptyImage ,\n pendingEmptyImage ,\n t ,\n str ,\n submissionStatus ,\n feedbackSentNotice ,\n submissionCardClasses ,\n showSubmission ,\n make ,\n \n}\n/* reviewedEmptyImage Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../shared/utils/I18n.bs.js\";\nimport * as Link from \"../../shared/components/Link.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Sorter from \"../../shared/components/Sorter.bs.js\";\nimport * as $$String from \"../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as LoadingV2 from \"../../shared/types/LoadingV2.bs.js\";\nimport * as UserProxy from \"../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_array from \"../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Pagination from \"../../shared/utils/Pagination.bs.js\";\nimport * as ReactUtils from \"../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../../shared/utils/OptionUtils.bs.js\";\nimport * as StringUtils from \"../../shared/utils/StringUtils.bs.js\";\nimport * as GraphqlQuery from \"../../shared/utils/GraphqlQuery.bs.js\";\nimport * as ReactHelmet from \"react-helmet\";\nimport * as Shared__Level from \"../../shared/types/Shared__Level.bs.js\";\nimport * as LoadingSpinner from \"../../shared/components/LoadingSpinner.bs.js\";\nimport * as SkeletonLoading from \"../../shared/components/SkeletonLoading.bs.js\";\nimport * as AppRouter__Course from \"../../layouts/app_router/types/AppRouter__Course.bs.js\";\nimport * as MultiselectDropdown from \"../../packages/multiselect-dropdown/src/components/MultiselectDropdown.bs.js\";\nimport * as RescriptReactRouter from \"../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoursesReview__Filter from \"./types/CoursesReview__Filter.bs.js\";\nimport * as CoursesReview__TargetInfo from \"./types/CoursesReview__TargetInfo.bs.js\";\nimport * as CoursesReview__SubmissionCard from \"./components/CoursesReview__SubmissionCard.bs.js\";\nimport * as CoursesReview__IndexSubmission from \"./types/CoursesReview__IndexSubmission.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nimport \"./CoursesReview__Root.css\"\n;\n\nvar partial_arg = \"components.CoursesReview__Root\";\n\nfunction tc(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Item = {};\n\nvar PagedSubmission = Pagination.Make(Item);\n\nfunction coachFilterTranslationKey(coachFilter) {\n switch (coachFilter) {\n case /* Assigned */0 :\n return \"assigned_to\";\n case /* Personal */1 :\n return \"personal_coach\";\n case /* ReviewedBy */2 :\n return \"reviewed_by\";\n \n }\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* UnsetSearchString */0 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: \"\",\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* BeginLoadingMore */1 :\n return {\n loading: /* LoadingMore */0,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* BeginReloading */2 :\n return {\n loading: LoadingV2.setReloading(state.loading),\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* SetLevelLoading */3 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: true,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: /* Loading */1,\n coachesLoaded: state.coachesLoaded\n };\n case /* SetTargetLoading */4 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: true,\n filterLoader: state.filterLoader,\n targetsLoaded: /* Loading */1,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* SetCoachLoading */5 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: true,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: /* Loading */1\n };\n case /* ClearLoader */6 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: undefined,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateFilterInput */0 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: action._0,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* LoadSubmissions */1 :\n var newTopics = action._2;\n var match = state.loading;\n var updatedTopics = match ? newTopics : Curry._1(PagedSubmission.toArray, state.submissions).concat(newTopics);\n return {\n loading: LoadingV2.setNotLoading(state.loading),\n submissions: Curry._3(PagedSubmission.make, updatedTopics, action._1, action._0),\n levels: ArrayUtils.isEmpty(state.levels) ? Belt_Option.mapWithDefault(action._5, [], (function (t) {\n return [t];\n })) : state.levels,\n coaches: ArrayUtils.isEmpty(state.coaches) ? action._6 : state.coaches,\n targets: ArrayUtils.isEmpty(state.targets) ? Belt_Option.mapWithDefault(action._4, [], (function (t) {\n return [t];\n })) : state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: action._3,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* LoadLevels */2 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: action._0,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: false,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: /* Loaded */2,\n coachesLoaded: state.coachesLoaded\n };\n case /* LoadCoaches */3 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: action._0,\n targets: state.targets,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: false,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: /* Loaded */2\n };\n case /* LoadTargets */4 :\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: action._0,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: false,\n filterLoader: state.filterLoader,\n targetsLoaded: /* Loaded */2,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n case /* SetLoader */5 :\n var loader = action._0;\n return {\n loading: state.loading,\n submissions: state.submissions,\n levels: state.levels,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: typeof loader === \"number\" ? (\n loader !== 0 ? tc(undefined, undefined, \"filter_input.target\") : tc(undefined, undefined, \"filter_input.level\")\n ) : tc(undefined, undefined, \"filter_input.\" + coachFilterTranslationKey(loader._0)),\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n levelsLoaded: state.levelsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n \n }\n }\n}\n\nfunction updateParams(filter) {\n return RescriptReactRouter.push(\"?\" + CoursesReview__Filter.toQueryString(filter));\n}\n\nvar Raw = {};\n\nvar query = \"query SubmissionsQuery($courseId: ID!, $search: String, $targetId: ID, $status: SubmissionStatus, $sortDirection: SortDirection!, $sortCriterion: SubmissionSortCriterion!, $levelId: ID, $personalCoachId: ID, $assignedCoachId: ID, $reviewingCoachId: ID, $includeInactive: Boolean, $coachIds: [ID!], $after: String) {\\nsubmissions(courseId: $courseId, search: $search, targetId: $targetId, status: $status, sortDirection: $sortDirection, sortCriterion: $sortCriterion, levelId: $levelId, personalCoachId: $personalCoachId, assignedCoachId: $assignedCoachId, reviewingCoachId: $reviewingCoachId, includeInactive: $includeInactive, first: 20, after: $after) {\\nnodes {\\nid \\ntitle \\nuserNames \\nevaluatedAt \\npassedAt \\nfeedbackSent \\ncreatedAt \\nteamName \\nlevelNumber \\nreviewer {\\nname \\nassignedAt \\n}\\n\\n}\\n\\npageInfo {\\nendCursor \\nhasNextPage \\n}\\n\\ntotalCount \\n}\\n\\nlevel(levelId: $levelId, courseId: $courseId) {\\nid \\nname \\nnumber \\n}\\n\\ncoaches(coachIds: $coachIds, courseId: $courseId) {\\n...UserProxyFragment \\n}\\n\\ntargetInfo(targetId: $targetId, courseId: $courseId) {\\nid \\ntitle \\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse(value) {\n var value$1 = value.submissions;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n var value$5 = value.level;\n var value$6 = value.coaches;\n var value$7 = value.targetInfo;\n return {\n submissions: {\n nodes: value$2.map(function (value) {\n var value$1 = value.evaluatedAt;\n var value$2 = value.passedAt;\n var value$3 = value.teamName;\n var value$4 = value.reviewer;\n return {\n id: value.id,\n title: value.title,\n userNames: value.userNames,\n evaluatedAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n passedAt: !(value$2 == null) ? Caml_option.some(value$2) : undefined,\n feedbackSent: value.feedbackSent,\n createdAt: value.createdAt,\n teamName: !(value$3 == null) ? value$3 : undefined,\n levelNumber: value.levelNumber,\n reviewer: !(value$4 == null) ? ({\n name: value$4.name,\n assignedAt: value$4.assignedAt\n }) : undefined\n };\n }),\n pageInfo: {\n endCursor: !(value$4 == null) ? value$4 : undefined,\n hasNextPage: value$3.hasNextPage\n },\n totalCount: value$1.totalCount\n },\n level: !(value$5 == null) ? ({\n id: value$5.id,\n name: value$5.name,\n number: value$5.number\n }) : undefined,\n coaches: value$6.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }),\n targetInfo: !(value$7 == null) ? ({\n id: value$7.id,\n title: value$7.title\n }) : undefined\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.targetInfo;\n var targetInfo;\n if (value$1 !== undefined) {\n var value$2 = value$1.title;\n var value$3 = value$1.id;\n targetInfo = {\n id: value$3,\n title: value$2\n };\n } else {\n targetInfo = null;\n }\n var value$4 = value.coaches;\n var coaches = value$4.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n var value$5 = value.level;\n var level;\n if (value$5 !== undefined) {\n var value$6 = value$5.number;\n var value$7 = value$5.name;\n var value$8 = value$5.id;\n level = {\n id: value$8,\n name: value$7,\n number: value$6\n };\n } else {\n level = null;\n }\n var value$9 = value.submissions;\n var value$10 = value$9.totalCount;\n var value$11 = value$9.pageInfo;\n var value$12 = value$11.hasNextPage;\n var value$13 = value$11.endCursor;\n var endCursor = value$13 !== undefined ? value$13 : null;\n var pageInfo = {\n endCursor: endCursor,\n hasNextPage: value$12\n };\n var value$14 = value$9.nodes;\n var nodes = value$14.map(function (value) {\n var value$1 = value.reviewer;\n var reviewer;\n if (value$1 !== undefined) {\n var value$2 = value$1.assignedAt;\n var value$3 = value$1.name;\n reviewer = {\n name: value$3,\n assignedAt: value$2\n };\n } else {\n reviewer = null;\n }\n var value$4 = value.levelNumber;\n var value$5 = value.teamName;\n var teamName = value$5 !== undefined ? value$5 : null;\n var value$6 = value.createdAt;\n var value$7 = value.feedbackSent;\n var value$8 = value.passedAt;\n var passedAt = value$8 !== undefined ? Caml_option.valFromOption(value$8) : null;\n var value$9 = value.evaluatedAt;\n var evaluatedAt = value$9 !== undefined ? Caml_option.valFromOption(value$9) : null;\n var value$10 = value.userNames;\n var value$11 = value.title;\n var value$12 = value.id;\n return {\n id: value$12,\n title: value$11,\n userNames: value$10,\n evaluatedAt: evaluatedAt,\n passedAt: passedAt,\n feedbackSent: value$7,\n createdAt: value$6,\n teamName: teamName,\n levelNumber: value$4,\n reviewer: reviewer\n };\n });\n var submissions = {\n nodes: nodes,\n pageInfo: pageInfo,\n totalCount: value$10\n };\n return {\n submissions: submissions,\n level: level,\n coaches: coaches,\n targetInfo: targetInfo\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.search;\n var a$1 = inp.targetId;\n var a$2 = inp.status;\n var a$3 = inp.sortDirection;\n var a$4 = inp.sortCriterion;\n var a$5 = inp.levelId;\n var a$6 = inp.personalCoachId;\n var a$7 = inp.assignedCoachId;\n var a$8 = inp.reviewingCoachId;\n var a$9 = inp.includeInactive;\n var a$10 = inp.coachIds;\n var a$11 = inp.after;\n return {\n courseId: inp.courseId,\n search: a !== undefined ? a : undefined,\n targetId: a$1 !== undefined ? a$1 : undefined,\n status: a$2 !== undefined ? (\n a$2 === \"Reviewed\" ? \"Reviewed\" : \"Pending\"\n ) : undefined,\n sortDirection: a$3 === \"Descending\" ? \"Descending\" : \"Ascending\",\n sortCriterion: a$4 === \"EvaluatedAt\" ? \"EvaluatedAt\" : \"SubmittedAt\",\n levelId: a$5 !== undefined ? a$5 : undefined,\n personalCoachId: a$6 !== undefined ? a$6 : undefined,\n assignedCoachId: a$7 !== undefined ? a$7 : undefined,\n reviewingCoachId: a$8 !== undefined ? a$8 : undefined,\n includeInactive: a$9 !== undefined ? a$9 : undefined,\n coachIds: a$10 !== undefined ? a$10.map(function (b) {\n return b;\n }) : undefined,\n after: a$11 !== undefined ? a$11 : undefined\n };\n}\n\nfunction makeVariables(courseId, search, targetId, status, sortDirection, sortCriterion, levelId, personalCoachId, assignedCoachId, reviewingCoachId, includeInactive, coachIds, after, param) {\n return {\n courseId: courseId,\n search: search,\n targetId: targetId,\n status: status,\n sortDirection: sortDirection,\n sortCriterion: sortCriterion,\n levelId: levelId,\n personalCoachId: personalCoachId,\n assignedCoachId: assignedCoachId,\n reviewingCoachId: reviewingCoachId,\n includeInactive: includeInactive,\n coachIds: coachIds,\n after: after\n };\n}\n\nvar SubmissionsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar SubmissionsQuery_Graphql_error = include.Graphql_error;\n\nvar SubmissionsQuery_decodeNotification = include.decodeNotification;\n\nvar SubmissionsQuery_decodeObject = include.decodeObject;\n\nvar SubmissionsQuery_decodeNotifications = include.decodeNotifications;\n\nvar SubmissionsQuery_decodeErrors = include.decodeErrors;\n\nvar SubmissionsQuery_flashNotifications = include.flashNotifications;\n\nvar SubmissionsQuery_sendQuery = include.sendQuery;\n\nvar SubmissionsQuery_query = include.query;\n\nvar SubmissionsQuery_fetch = include.$$fetch;\n\nvar SubmissionsQuery = {\n SubmissionsQuery_inner: SubmissionsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: SubmissionsQuery_Graphql_error,\n decodeNotification: SubmissionsQuery_decodeNotification,\n decodeObject: SubmissionsQuery_decodeObject,\n decodeNotifications: SubmissionsQuery_decodeNotifications,\n decodeErrors: SubmissionsQuery_decodeErrors,\n flashNotifications: SubmissionsQuery_flashNotifications,\n sendQuery: SubmissionsQuery_sendQuery,\n query: SubmissionsQuery_query,\n $$fetch: SubmissionsQuery_fetch,\n make: make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"query LevelsQuery($courseId: ID!) {\\nlevels(courseId: $courseId) {\\nid \\nname \\nnumber \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.levels;\n return {\n levels: value$1.map(function (value) {\n return {\n id: value.id,\n name: value.name,\n number: value.number\n };\n })\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.levels;\n var levels = value$1.map(function (value) {\n var value$1 = value.number;\n var value$2 = value.name;\n var value$3 = value.id;\n return {\n id: value$3,\n name: value$2,\n number: value$1\n };\n });\n return {\n levels: levels\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n courseId: inp.courseId\n };\n}\n\nfunction makeVariables$1(courseId, param) {\n return {\n courseId: courseId\n };\n}\n\nvar LevelsQuery_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$1 = include$1.make;\n\nvar LevelsQuery_Graphql_error = include$1.Graphql_error;\n\nvar LevelsQuery_decodeNotification = include$1.decodeNotification;\n\nvar LevelsQuery_decodeObject = include$1.decodeObject;\n\nvar LevelsQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar LevelsQuery_decodeErrors = include$1.decodeErrors;\n\nvar LevelsQuery_flashNotifications = include$1.flashNotifications;\n\nvar LevelsQuery_sendQuery = include$1.sendQuery;\n\nvar LevelsQuery_query = include$1.query;\n\nvar LevelsQuery_fetch = include$1.$$fetch;\n\nvar LevelsQuery = {\n LevelsQuery_inner: LevelsQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: LevelsQuery_Graphql_error,\n decodeNotification: LevelsQuery_decodeNotification,\n decodeObject: LevelsQuery_decodeObject,\n decodeNotifications: LevelsQuery_decodeNotifications,\n decodeErrors: LevelsQuery_decodeErrors,\n flashNotifications: LevelsQuery_flashNotifications,\n sendQuery: LevelsQuery_sendQuery,\n query: LevelsQuery_query,\n $$fetch: LevelsQuery_fetch,\n make: make$1\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"query CoachesQuery($courseId: ID!) {\\ncoaches(courseId: $courseId) {\\n...UserProxyFragment \\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse$2(value) {\n var value$1 = value.coaches;\n return {\n coaches: value$1.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n })\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.coaches;\n var coaches = value$1.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n return {\n coaches: coaches\n };\n}\n\nfunction serializeVariables$2(inp) {\n return {\n courseId: inp.courseId\n };\n}\n\nfunction makeVariables$2(courseId, param) {\n return {\n courseId: courseId\n };\n}\n\nvar CoachesQuery_inner = {\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2\n};\n\nvar include$2 = GraphqlQuery.Extender({\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$2 = include$2.make;\n\nvar CoachesQuery_Graphql_error = include$2.Graphql_error;\n\nvar CoachesQuery_decodeNotification = include$2.decodeNotification;\n\nvar CoachesQuery_decodeObject = include$2.decodeObject;\n\nvar CoachesQuery_decodeNotifications = include$2.decodeNotifications;\n\nvar CoachesQuery_decodeErrors = include$2.decodeErrors;\n\nvar CoachesQuery_flashNotifications = include$2.flashNotifications;\n\nvar CoachesQuery_sendQuery = include$2.sendQuery;\n\nvar CoachesQuery_query = include$2.query;\n\nvar CoachesQuery_fetch = include$2.$$fetch;\n\nvar CoachesQuery = {\n CoachesQuery_inner: CoachesQuery_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\n Graphql_error: CoachesQuery_Graphql_error,\n decodeNotification: CoachesQuery_decodeNotification,\n decodeObject: CoachesQuery_decodeObject,\n decodeNotifications: CoachesQuery_decodeNotifications,\n decodeErrors: CoachesQuery_decodeErrors,\n flashNotifications: CoachesQuery_flashNotifications,\n sendQuery: CoachesQuery_sendQuery,\n query: CoachesQuery_query,\n $$fetch: CoachesQuery_fetch,\n make: make$2\n};\n\nvar Raw$3 = {};\n\nvar query$3 = \"query ReviewedTargetsInfoQuery($courseId: ID!) {\\nreviewedTargetsInfo(courseId: $courseId) {\\nid \\ntitle \\n}\\n\\n}\\n\";\n\nfunction parse$3(value) {\n var value$1 = value.reviewedTargetsInfo;\n return {\n reviewedTargetsInfo: value$1.map(function (value) {\n return {\n id: value.id,\n title: value.title\n };\n })\n };\n}\n\nfunction serialize$3(value) {\n var value$1 = value.reviewedTargetsInfo;\n var reviewedTargetsInfo = value$1.map(function (value) {\n var value$1 = value.title;\n var value$2 = value.id;\n return {\n id: value$2,\n title: value$1\n };\n });\n return {\n reviewedTargetsInfo: reviewedTargetsInfo\n };\n}\n\nfunction serializeVariables$3(inp) {\n return {\n courseId: inp.courseId\n };\n}\n\nfunction makeVariables$3(courseId, param) {\n return {\n courseId: courseId\n };\n}\n\nvar ReviewedTargetsInfoQuery_inner = {\n Raw: Raw$3,\n query: query$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n makeVariables: makeVariables$3\n};\n\nvar include$3 = GraphqlQuery.Extender({\n Raw: Raw$3,\n query: query$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$3 = include$3.make;\n\nvar ReviewedTargetsInfoQuery_Graphql_error = include$3.Graphql_error;\n\nvar ReviewedTargetsInfoQuery_decodeNotification = include$3.decodeNotification;\n\nvar ReviewedTargetsInfoQuery_decodeObject = include$3.decodeObject;\n\nvar ReviewedTargetsInfoQuery_decodeNotifications = include$3.decodeNotifications;\n\nvar ReviewedTargetsInfoQuery_decodeErrors = include$3.decodeErrors;\n\nvar ReviewedTargetsInfoQuery_flashNotifications = include$3.flashNotifications;\n\nvar ReviewedTargetsInfoQuery_sendQuery = include$3.sendQuery;\n\nvar ReviewedTargetsInfoQuery_query = include$3.query;\n\nvar ReviewedTargetsInfoQuery_fetch = include$3.$$fetch;\n\nvar ReviewedTargetsInfoQuery = {\n ReviewedTargetsInfoQuery_inner: ReviewedTargetsInfoQuery_inner,\n Raw: Raw$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n makeVariables: makeVariables$3,\n Graphql_error: ReviewedTargetsInfoQuery_Graphql_error,\n decodeNotification: ReviewedTargetsInfoQuery_decodeNotification,\n decodeObject: ReviewedTargetsInfoQuery_decodeObject,\n decodeNotifications: ReviewedTargetsInfoQuery_decodeNotifications,\n decodeErrors: ReviewedTargetsInfoQuery_decodeErrors,\n flashNotifications: ReviewedTargetsInfoQuery_flashNotifications,\n sendQuery: ReviewedTargetsInfoQuery_sendQuery,\n query: ReviewedTargetsInfoQuery_query,\n $$fetch: ReviewedTargetsInfoQuery_fetch,\n make: make$3\n};\n\nfunction getSubmissions(send, courseId, cursor, filter) {\n var coachIds = ArrayUtils.flattenV2([\n CoursesReview__Filter.personalCoachId(filter),\n CoursesReview__Filter.assignedCoachId(filter),\n CoursesReview__Filter.reviewingCoachId(filter)\n ].map(function (__x) {\n return Belt_Option.mapWithDefault(__x, [], (function (t) {\n return [t];\n }));\n }));\n var variables = makeVariables(courseId, CoursesReview__Filter.nameOrEmail(filter), CoursesReview__Filter.targetId(filter), CoursesReview__Filter.tab(filter), CoursesReview__Filter.defaultDirection(filter), CoursesReview__Filter.sortCriterion(filter), CoursesReview__Filter.levelId(filter), CoursesReview__Filter.personalCoachId(filter), CoursesReview__Filter.assignedCoachId(filter), CoursesReview__Filter.reviewingCoachId(filter), CoursesReview__Filter.includeInactive(filter), coachIds, cursor, undefined);\n Curry._3(make, undefined, undefined, variables).then(function (response) {\n var target = OptionUtils.map(CoursesReview__TargetInfo.makeFromJs, response.targetInfo);\n var coaches = response.coaches.map(UserProxy.makeFromJs);\n var level = OptionUtils.map(Shared__Level.makeFromJs, response.level);\n Curry._1(send, {\n TAG: /* LoadSubmissions */1,\n _0: response.submissions.pageInfo.endCursor,\n _1: response.submissions.pageInfo.hasNextPage,\n _2: response.submissions.nodes.map(CoursesReview__IndexSubmission.makeFromJS),\n _3: response.submissions.totalCount,\n _4: target,\n _5: level,\n _6: coaches\n });\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction getLevels(send, courseId, state) {\n if (state.levelsLoaded === /* Unloaded */0) {\n Curry._1(send, /* SetLevelLoading */3);\n Curry._3(make$1, undefined, undefined, {\n courseId: courseId\n }).then(function (response) {\n Curry._1(send, {\n TAG: /* LoadLevels */2,\n _0: response.levels.map(Shared__Level.makeFromJs)\n });\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction getCoaches(send, courseId, state) {\n if (state.coachesLoaded === /* Unloaded */0) {\n Curry._1(send, /* SetCoachLoading */5);\n Curry._3(make$2, undefined, undefined, {\n courseId: courseId\n }).then(function (response) {\n Curry._1(send, {\n TAG: /* LoadCoaches */3,\n _0: response.coaches.map(UserProxy.makeFromJs)\n });\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction getTargets(send, courseId, state) {\n if (state.targetsLoaded === /* Unloaded */0) {\n Curry._1(send, /* SetTargetLoading */4);\n Curry._3(make$3, undefined, undefined, {\n courseId: courseId\n }).then(function (response) {\n Curry._1(send, {\n TAG: /* LoadTargets */4,\n _0: response.reviewedTargetsInfo.map(CoursesReview__TargetInfo.makeFromJs)\n });\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction criterion(t) {\n if (t === \"EvaluatedAt\") {\n return tc(undefined, undefined, \"reviewed_at\");\n } else {\n return tc(undefined, undefined, \"submitted_at\");\n }\n}\n\nfunction criterionType(_t) {\n return \"Number\";\n}\n\nvar Sortable = {\n criterion: criterion,\n criterionType: criterionType\n};\n\nvar SubmissionsSorter = Sorter.Make(Sortable);\n\nfunction submissionsSorter(filter) {\n var c = CoursesReview__Filter.tab(filter);\n var criteria = c !== undefined ? (\n c === \"Reviewed\" ? [\n \"SubmittedAt\",\n \"EvaluatedAt\"\n ] : [\"SubmittedAt\"]\n ) : [\"SubmittedAt\"];\n return React.createElement(\"div\", {\n \"aria-label\": \"Change submissions sorting\",\n className: \"shrink-0 md:ml-2\"\n }, React.createElement(\"label\", {\n className: \"hidden md:block text-tiny font-semibold uppercase pb-1\"\n }, tc(undefined, undefined, \"sort_by\")), React.createElement(SubmissionsSorter.make, {\n criteria: criteria,\n selectedCriterion: filter.sortCriterion,\n direction: CoursesReview__Filter.defaultDirection(filter),\n onDirectionChange: (function (direction) {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: direction,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n }),\n onCriterionChange: (function (sortCriterion) {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n })\n }));\n}\n\nfunction label(t) {\n if (typeof t === \"number\") {\n return tc(undefined, undefined, \"include\");\n }\n switch (t.TAG | 0) {\n case /* Level */0 :\n return tc(undefined, undefined, \"level\");\n case /* AssignedToCoach */1 :\n return tc(undefined, undefined, \"assigned_to\");\n case /* PersonalCoach */2 :\n return tc(undefined, undefined, \"personal_coach\");\n case /* ReviewedBy */3 :\n return tc(undefined, undefined, \"reviewed_by\");\n case /* Loader */4 :\n var l = t._0;\n if (typeof l === \"number\") {\n if (l !== 0) {\n return tc(undefined, undefined, \"target\");\n } else {\n return tc(undefined, undefined, \"level\");\n }\n } else {\n return tc(undefined, undefined, coachFilterTranslationKey(l._0));\n }\n case /* Target */5 :\n return tc(undefined, undefined, \"target\");\n case /* Status */6 :\n return tc(undefined, undefined, \"status\");\n case /* NameOrEmail */7 :\n return tc(undefined, undefined, \"name_or_email\");\n \n }\n}\n\nfunction value(t) {\n if (typeof t === \"number\") {\n return tc(undefined, undefined, \"inactive_students\");\n }\n switch (t.TAG | 0) {\n case /* Level */0 :\n var level = t._0;\n return String(Shared__Level.number(level)) + \", \" + Shared__Level.name(level);\n case /* Loader */4 :\n var l = t._0;\n if (typeof l === \"number\") {\n if (l !== 0) {\n return tc(undefined, undefined, \"filter_by_target\");\n } else {\n return tc(undefined, undefined, \"filter_by_level\");\n }\n } else {\n return tc(undefined, undefined, \"coach_filter_by.\" + coachFilterTranslationKey(l._0));\n }\n case /* Target */5 :\n return CoursesReview__TargetInfo.title(t._0);\n case /* Status */6 :\n if (t._0 === \"Reviewed\") {\n return tc(undefined, undefined, \"reviewed\");\n } else {\n return tc(undefined, undefined, \"pending\");\n }\n case /* NameOrEmail */7 :\n return t._0;\n default:\n var coach = t._0;\n if (UserProxy.id(coach) === t._1) {\n return tc(undefined, undefined, \"me\");\n } else {\n return UserProxy.name(coach);\n }\n }\n}\n\nfunction searchString(t) {\n if (typeof t === \"number\") {\n return tc(undefined, undefined, \"include\") + \": \" + tc(undefined, undefined, \"inactive_students\");\n }\n switch (t.TAG | 0) {\n case /* Level */0 :\n var level = t._0;\n return tc(undefined, undefined, \"search.level\") + \" \" + String(Shared__Level.number(level)) + \", \" + Shared__Level.name(level);\n case /* AssignedToCoach */1 :\n var coach = t._0;\n return tc(undefined, undefined, \"search.assigned_to\") + \" \" + (\n UserProxy.id(coach) === t._1 ? tc(undefined, undefined, \"me\") : UserProxy.name(coach)\n );\n case /* PersonalCoach */2 :\n var coach$1 = t._0;\n return tc(undefined, undefined, \"search.personal_coach\") + \" \" + (\n UserProxy.id(coach$1) === t._1 ? tc(undefined, undefined, \"me\") : UserProxy.name(coach$1)\n );\n case /* ReviewedBy */3 :\n var coach$2 = t._0;\n return tc(undefined, undefined, \"search.reviewed_by\") + \" \" + (\n UserProxy.id(coach$2) === t._1 ? tc(undefined, undefined, \"me\") : UserProxy.name(coach$2)\n );\n case /* Loader */4 :\n var key = t._0;\n if (typeof key === \"number\") {\n if (key !== 0) {\n return tc(undefined, undefined, \"search.target\");\n } else {\n return tc(undefined, undefined, \"search.level\");\n }\n } else {\n return tc(undefined, undefined, \"search.\" + coachFilterTranslationKey(key._0));\n }\n case /* Target */5 :\n return tc(undefined, undefined, \"search.target\") + \" \" + CoursesReview__TargetInfo.title(t._0);\n case /* Status */6 :\n if (t._0 === \"Reviewed\") {\n return tc(undefined, undefined, \"search.status\") + tc(undefined, undefined, \"reviewed\");\n } else {\n return tc(undefined, undefined, \"search.status\") + tc(undefined, undefined, \"pending\");\n }\n case /* NameOrEmail */7 :\n return t._0;\n \n }\n}\n\nfunction color(t) {\n if (typeof t === \"number\") {\n return \"gray\";\n }\n switch (t.TAG | 0) {\n case /* Level */0 :\n return \"blue\";\n case /* AssignedToCoach */1 :\n return \"purple\";\n case /* PersonalCoach */2 :\n return \"green\";\n case /* ReviewedBy */3 :\n return \"orange\";\n case /* Loader */4 :\n var match = t._0;\n if (typeof match === \"number\") {\n if (match !== 0) {\n return \"red\";\n } else {\n return \"blue\";\n }\n }\n switch (match._0) {\n case /* Assigned */0 :\n return \"purple\";\n case /* Personal */1 :\n return \"green\";\n case /* ReviewedBy */2 :\n return \"orange\";\n \n }\n case /* Target */5 :\n return \"red\";\n case /* Status */6 :\n if (t._0 === \"Reviewed\") {\n return \"green\";\n } else {\n return \"yellow\";\n }\n case /* NameOrEmail */7 :\n return \"gray\";\n \n }\n}\n\nfunction level(level$1) {\n return {\n TAG: /* Level */0,\n _0: level$1\n };\n}\n\nfunction assignedToCoach(coach, currentCoachId) {\n return {\n TAG: /* AssignedToCoach */1,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction personalCoach(coach, currentCoachId) {\n return {\n TAG: /* PersonalCoach */2,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction reviewedBy(coach, currentCoachId) {\n return {\n TAG: /* ReviewedBy */3,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction makeLoader(l) {\n return {\n TAG: /* Loader */4,\n _0: l\n };\n}\n\nfunction makecoachLoader(key) {\n return {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: key\n }\n };\n}\n\nfunction target(target$1) {\n return {\n TAG: /* Target */5,\n _0: target$1\n };\n}\n\nfunction status(status$1) {\n return {\n TAG: /* Status */6,\n _0: status$1\n };\n}\n\nfunction nameOrEmail(search) {\n return {\n TAG: /* NameOrEmail */7,\n _0: search\n };\n}\n\nfunction includeInactive(param) {\n return /* IncludeInactive */0;\n}\n\nvar Selectable = {\n label: label,\n value: value,\n searchString: searchString,\n color: color,\n level: level,\n assignedToCoach: assignedToCoach,\n personalCoach: personalCoach,\n reviewedBy: reviewedBy,\n makeLoader: makeLoader,\n makecoachLoader: makecoachLoader,\n target: target,\n status: status,\n nameOrEmail: nameOrEmail,\n includeInactive: includeInactive\n};\n\nvar Multiselect = MultiselectDropdown.Make(Selectable);\n\nfunction unSelectedStatus(filter) {\n var s = CoursesReview__Filter.tab(filter);\n if (s !== undefined) {\n if (s === \"Reviewed\") {\n return [{\n TAG: /* Status */6,\n _0: \"Pending\"\n }];\n } else {\n return [{\n TAG: /* Status */6,\n _0: \"Reviewed\"\n }];\n }\n } else {\n return [\n {\n TAG: /* Status */6,\n _0: \"Pending\"\n },\n {\n TAG: /* Status */6,\n _0: \"Reviewed\"\n }\n ];\n }\n}\n\nfunction nameOrEmailFilter(state) {\n var input = $$String.trim(state.filterInput);\n var firstWord = Caml_array.get(input.split(\" \"), 0);\n if (input === \"\" || firstWord === tc(undefined, undefined, \"search.level\") || firstWord === tc(undefined, undefined, \"search.target\") || firstWord === tc(undefined, undefined, \"search.assigned_to\")) {\n return [];\n } else {\n return [{\n TAG: /* NameOrEmail */7,\n _0: input\n }];\n }\n}\n\nfunction unselected(state, currentCoachId, filter) {\n var unselectedLevels = state.levels.filter(function (level) {\n return OptionUtils.mapWithDefault((function (selectedLevel) {\n return Shared__Level.id(level) !== selectedLevel;\n }), true, CoursesReview__Filter.levelId(filter));\n }).map(level);\n var unselectedTargets = state.targets.filter(function (target) {\n return OptionUtils.mapWithDefault((function (selectedTarget) {\n return CoursesReview__TargetInfo.id(target) !== selectedTarget;\n }), true, filter.targetId);\n }).map(target);\n var unselectedCoaches = function (getCoachId, getSelectable) {\n return state.coaches.filter(function (coach) {\n return Belt_Option.mapWithDefault(Curry._1(getCoachId, filter), true, (function (selectedCoach) {\n return UserProxy.id(coach) !== selectedCoach;\n }));\n }).map(function (coach) {\n return Curry._2(getSelectable, coach, currentCoachId);\n });\n };\n var unselectedAssignedCoaches = unselectedCoaches((function (filter) {\n return filter.assignedCoachId;\n }), assignedToCoach);\n var unselectedPersonalCoaches = unselectedCoaches((function (filter) {\n return filter.personalCoachId;\n }), personalCoach);\n var unselectedReviewers = unselectedCoaches((function (filter) {\n return filter.reviewingCoachId;\n }), reviewedBy);\n return ArrayUtils.flattenV2([\n unSelectedStatus(filter),\n unselectedLevels,\n unselectedAssignedCoaches,\n unselectedPersonalCoaches,\n unselectedReviewers,\n unselectedTargets,\n state.levelsLoaded === /* Loaded */2 ? [] : [{\n TAG: /* Loader */4,\n _0: /* ShowLevels */0\n }],\n state.coachesLoaded === /* Loaded */2 ? [] : [\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* Assigned */0\n }\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* Personal */1\n }\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* ReviewedBy */2\n }\n }\n ],\n state.targetsLoaded === /* Loaded */2 ? [] : [{\n TAG: /* Loader */4,\n _0: /* ShowTargets */1\n }],\n nameOrEmailFilter(state),\n CoursesReview__Filter.includeInactive(filter) ? [] : [/* IncludeInactive */0]\n ]);\n}\n\nfunction selected(state, filter, currentCoachId) {\n var selectedLevel = Belt_Option.mapWithDefault(CoursesReview__Filter.levelId(filter), [], (function (levelId) {\n return Belt_Option.mapWithDefault(Caml_option.undefined_to_opt(state.levels.find(function (l) {\n return Shared__Level.id(l) === levelId;\n })), [], (function (l) {\n return [{\n TAG: /* Level */0,\n _0: l\n }];\n }));\n }));\n var selectedTarget = Belt_Option.mapWithDefault(filter.targetId, [], (function (targetId) {\n return Belt_Option.mapWithDefault(Caml_option.undefined_to_opt(state.targets.find(function (t) {\n return CoursesReview__TargetInfo.id(t) === targetId;\n })), [], (function (t) {\n return [{\n TAG: /* Target */5,\n _0: t\n }];\n }));\n }));\n var selectedCoaches = function (getCoachId, getSelectable) {\n return Belt_Option.mapWithDefault(Curry._1(getCoachId, filter), [], (function (coachId) {\n return Belt_Option.mapWithDefault(Caml_option.undefined_to_opt(state.coaches.find(function (c) {\n return UserProxy.id(c) === coachId;\n })), [], (function (c) {\n return [Curry._2(getSelectable, c, currentCoachId)];\n }));\n }));\n };\n var selectedAssiginedCoach = selectedCoaches((function (filter) {\n return filter.assignedCoachId;\n }), assignedToCoach);\n var selectedPersonalCoach = selectedCoaches((function (filter) {\n return filter.personalCoachId;\n }), personalCoach);\n var selectedReviewer = selectedCoaches((function (filter) {\n return filter.reviewingCoachId;\n }), reviewedBy);\n var selectedStatus = OptionUtils.mapWithDefault((function (t) {\n return [{\n TAG: /* Status */6,\n _0: t\n }];\n }), [], filter.tab);\n var selectedSearchString = OptionUtils.mapWithDefault((function (nameOrEmail) {\n return [{\n TAG: /* NameOrEmail */7,\n _0: nameOrEmail\n }];\n }), [], filter.nameOrEmail);\n return ArrayUtils.flattenV2([\n selectedStatus,\n selectedLevel,\n selectedAssiginedCoach,\n selectedPersonalCoach,\n selectedReviewer,\n selectedTarget,\n selectedSearchString,\n CoursesReview__Filter.includeInactive(filter) ? [/* IncludeInactive */0] : []\n ]);\n}\n\nfunction onSelectFilter(send, courseId, state, filter, selectable) {\n if (typeof selectable === \"number\" || selectable.TAG !== /* Loader */4) {\n Curry._1(send, /* UnsetSearchString */0);\n }\n if (typeof selectable === \"number\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: true\n });\n }\n switch (selectable.TAG | 0) {\n case /* Level */0 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: Shared__Level.id(selectable._0),\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* AssignedToCoach */1 :\n var otherTab = CoursesReview__Filter.tab(filter);\n var tab = otherTab === \"Reviewed\" ? \"Pending\" : otherTab;\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: UserProxy.id(selectable._0),\n reviewingCoachId: undefined,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: tab,\n includeInactive: filter.includeInactive\n });\n case /* PersonalCoach */2 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: UserProxy.id(selectable._0),\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* ReviewedBy */3 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: undefined,\n reviewingCoachId: UserProxy.id(selectable._0),\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: \"Reviewed\",\n includeInactive: filter.includeInactive\n });\n case /* Loader */4 :\n var l = selectable._0;\n Curry._1(send, {\n TAG: /* SetLoader */5,\n _0: l\n });\n if (typeof l === \"number\") {\n if (l !== 0) {\n return getTargets(send, courseId, state);\n } else {\n return getLevels(send, courseId, state);\n }\n } else {\n return getCoaches(send, courseId, state);\n }\n case /* Target */5 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: CoursesReview__TargetInfo.id(selectable._0),\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* Status */6 :\n if (selectable._0 === \"Reviewed\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: undefined,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: \"EvaluatedAt\",\n sortDirection: filter.sortDirection,\n tab: \"Reviewed\",\n includeInactive: filter.includeInactive\n });\n } else {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: undefined,\n targetId: filter.targetId,\n sortCriterion: \"SubmittedAt\",\n sortDirection: filter.sortDirection,\n tab: \"Pending\",\n includeInactive: filter.includeInactive\n });\n }\n case /* NameOrEmail */7 :\n return updateParams({\n nameOrEmail: selectable._0,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n \n }\n}\n\nfunction onDeselectFilter(send, filter, selectable) {\n if (typeof selectable === \"number\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: false\n });\n }\n switch (selectable.TAG | 0) {\n case /* Level */0 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: undefined,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* AssignedToCoach */1 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: undefined,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* PersonalCoach */2 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: undefined,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* ReviewedBy */3 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: undefined,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* Loader */4 :\n return Curry._1(send, /* ClearLoader */6);\n case /* Target */5 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: undefined,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n case /* Status */6 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: \"SubmittedAt\",\n sortDirection: filter.sortDirection,\n tab: undefined,\n includeInactive: filter.includeInactive\n });\n case /* NameOrEmail */7 :\n return updateParams({\n nameOrEmail: undefined,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: filter.sortDirection,\n tab: filter.tab,\n includeInactive: filter.includeInactive\n });\n \n }\n}\n\nfunction defaultOptions(state, filter) {\n return ArrayUtils.flattenV2([\n nameOrEmailFilter(state),\n [\n {\n TAG: /* Loader */4,\n _0: /* ShowLevels */0\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* Assigned */0\n }\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* Personal */1\n }\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowCoaches */{\n _0: /* ReviewedBy */2\n }\n },\n {\n TAG: /* Loader */4,\n _0: /* ShowTargets */1\n },\n /* IncludeInactive */0\n ],\n unSelectedStatus(filter)\n ]);\n}\n\nfunction reloadSubmissions(courseId, filter, send) {\n Curry._1(send, /* BeginReloading */2);\n return getSubmissions(send, courseId, undefined, filter);\n}\n\nfunction submissionsLoadedData(totalSubmissionsCount, loadedSubmissionsCount) {\n return React.createElement(\"p\", {\n className: \"inline-block mt-2 mx-auto text-gray-800 text-xs px-2 text-center font-semibold\",\n tabIndex: 0\n }, totalSubmissionsCount === loadedSubmissionsCount ? tc(undefined, loadedSubmissionsCount, \"submissions_fully_loaded_text\") : tc([\n [\n \"total_submissions\",\n String(totalSubmissionsCount)\n ],\n [\n \"loaded_submissions_count\",\n String(loadedSubmissionsCount)\n ]\n ], loadedSubmissionsCount, \"submissions_partially_loaded_text\"));\n}\n\nfunction submissionsList(submissions, state, filter) {\n return React.createElement(\"div\", undefined, React.createElement(CoursesReview__SubmissionCard.make, {\n submissions: submissions,\n selectedTab: CoursesReview__Filter.tab(filter),\n filterString: CoursesReview__Filter.toQueryString(filter)\n }), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"text-center pb-4\"\n }, submissionsLoadedData(state.totalEntriesCount, submissions.length)), ArrayUtils.isEmpty(submissions)));\n}\n\nfunction filterPlaceholder(filter) {\n var match = CoursesReview__Filter.levelId(filter);\n var match$1 = CoursesReview__Filter.assignedCoachId(filter);\n if (match !== undefined) {\n if (match$1 !== undefined) {\n return tc(undefined, undefined, \"filter_by_another_level\");\n } else {\n return tc(undefined, undefined, \"filter_by_another_level_or_submissions_assigned\");\n }\n } else if (match$1 !== undefined) {\n return tc(undefined, undefined, \"filter_by_level\");\n } else {\n return tc(undefined, undefined, \"filter_by_level_or_submissions_assigned\");\n }\n}\n\nfunction loadFilters(send, courseId, state) {\n if (!StringUtils.isPresent(state.filterInput)) {\n return ;\n }\n var input = $$String.lowercase_ascii(state.filterInput);\n if (StringUtils.test(tc(undefined, undefined, \"search.level\"), input)) {\n getLevels(send, courseId, state);\n }\n if (StringUtils.test(tc(undefined, undefined, \"search.assigned_to\"), input) || StringUtils.test(tc(undefined, undefined, \"search.personal_coach\"), input) || StringUtils.test(tc(undefined, undefined, \"search.reviewed_by\"), input)) {\n getCoaches(send, courseId, state);\n }\n if (StringUtils.test(tc(undefined, undefined, \"search.target\"), input)) {\n return getTargets(send, courseId, state);\n }\n \n}\n\nfunction shortCutClasses(selected) {\n return \"cursor-pointer flex justify-center md:flex-auto rounded-md p-1.5 md:border-b-3 md:rounded-b-none md:border-transparent md:px-4 md:hover:bg-gray-50 md:py-2 text-sm font-semibold text-gray-800 hover:text-primary-600 hover:bg-gray-50 focus:outline-none focus:ring-inset focus:ring-2 focus:bg-gray-50 focus:ring-focusColor-500 md:focus:border-b-none md:focus:rounded-t-md \" + (\n selected ? \"bg-white shadow md:shadow-none rounded-md md:rounded-none md:bg-transparent md:border-b-3 hover:bg-white md:hover:bg-transparent text-primary-500 md:border-primary-500\" : \"\"\n );\n}\n\nfunction computeInitialState(param) {\n return {\n loading: LoadingV2.empty(undefined),\n submissions: /* Unloaded */0,\n levels: [],\n coaches: [],\n targets: [],\n filterInput: \"\",\n totalEntriesCount: 0,\n filterLoading: false,\n filterLoader: undefined,\n targetsLoaded: /* Unloaded */0,\n levelsLoaded: /* Unloaded */0,\n coachesLoaded: /* Unloaded */0\n };\n}\n\nfunction pageTitle(courses, courseId) {\n var currentCourse = ArrayUtils.unsafeFind((function (course) {\n return AppRouter__Course.id(course) === courseId;\n }), \"Could not find currentCourse with ID \" + courseId + \" in CoursesReview__Root\", courses);\n return tc(undefined, undefined, \"review\") + \" | \" + AppRouter__Course.name(currentCourse);\n}\n\nfunction CoursesReview__Root(Props) {\n var courseId = Props.courseId;\n var currentCoachId = Props.currentCoachId;\n var courses = Props.courses;\n var match = React.useReducer(reducer, computeInitialState(undefined));\n var send = match[1];\n var state = match[0];\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var filter = CoursesReview__Filter.makeFromQueryParams(url.search);\n React.useEffect((function () {\n reloadSubmissions(courseId, filter, send);\n \n }), [url]);\n React.useEffect((function () {\n loadFilters(send, courseId, state);\n \n }), [state.filterInput]);\n var submissions = state.submissions;\n var tmp;\n if (typeof submissions === \"number\") {\n tmp = React.createElement(\"div\", undefined, SkeletonLoading.multiple(6, SkeletonLoading.card(undefined, undefined)));\n } else if (submissions.TAG === /* PartiallyLoaded */0) {\n var cursor = submissions._1;\n var times = state.loading;\n tmp = React.createElement(\"div\", undefined, submissionsList(submissions._0, state, filter), times ? ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"pb-6\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary-ghost cursor-pointer w-full\",\n onClick: (function (param) {\n Curry._1(send, /* BeginLoadingMore */1);\n return getSubmissions(send, courseId, cursor, filter);\n })\n }, tc(undefined, undefined, \"button_load_more\"))), ArrayUtils.isEmpty(times._0)) : React.createElement(\"div\", undefined, SkeletonLoading.multiple(1, SkeletonLoading.card(undefined, undefined))));\n } else {\n tmp = React.createElement(\"div\", undefined, submissionsList(submissions._0, state, filter));\n }\n var match$1 = state.submissions;\n var tmp$1;\n if (typeof match$1 === \"number\") {\n tmp$1 = null;\n } else {\n var times$1 = state.loading;\n var loading = times$1 ? ArrayUtils.isNotEmpty(times$1._0) : false;\n tmp$1 = React.createElement(LoadingSpinner.make, {\n loading: loading\n });\n }\n return React.createElement(React.Fragment, undefined, React.createElement(ReactHelmet.Helmet, {\n children: React.createElement(\"title\", undefined, pageTitle(courses, courseId))\n }), React.createElement(\"div\", {\n \"aria-label\": \"Review\",\n className: \"flex-1 flex flex-col\",\n role: \"main\"\n }, React.createElement(\"div\", {\n className: \"hidden md:block h-16\"\n }), React.createElement(\"div\", {\n className: \"course-review-root__submissions-list-container\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-50\"\n }, React.createElement(\"div\", {\n className: \"max-w-4xl 2xl:max-w-5xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-between bg-white md:bg-transparent px-4 py-2 md:pt-4 border-b md:border-none\"\n }, React.createElement(\"h4\", {\n className: \"font-semibold\"\n }, tc(undefined, undefined, \"review\")), React.createElement(\"div\", {\n className: \"block md:hidden\"\n }, submissionsSorter(filter))), React.createElement(\"div\", {\n className: \"px-4\"\n }, React.createElement(\"div\", {\n className: \"flex pt-3 md:border-b border-gray-300\"\n }, React.createElement(\"div\", {\n \"aria-label\": \"Status tabs\",\n className: \"flex flex-1 md:flex-none p-1 md:p-0 space-x-1 md:space-x-0 text-center rounded-lg justify-between md:justify-start bg-gray-300 md:bg-transparent \",\n role: \"tablist\"\n }, React.createElement(\"div\", {\n \"aria-selected\": filter.tab === undefined,\n className: \"flex-1\",\n role: \"tab\"\n }, React.createElement(Link.make, {\n href: \"/courses/\" + courseId + \"/review?\" + CoursesReview__Filter.toQueryString({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: \"SubmittedAt\",\n sortDirection: CoursesReview__Filter.sortDirection(filter),\n tab: undefined,\n includeInactive: filter.includeInactive\n }),\n className: shortCutClasses(filter.tab === undefined),\n children: React.createElement(\"p\", undefined, I18n.ts(undefined, undefined, \"all\"))\n })), React.createElement(\"div\", {\n \"aria-selected\": filter.tab === \"Pending\",\n className: \"flex-1\",\n role: \"tab\"\n }, React.createElement(Link.make, {\n href: \"/courses/\" + courseId + \"/review?\" + CoursesReview__Filter.toQueryString({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: \"SubmittedAt\",\n sortDirection: CoursesReview__Filter.sortDirection(filter),\n tab: \"Pending\",\n includeInactive: filter.includeInactive\n }),\n className: shortCutClasses(filter.tab === \"Pending\"),\n children: React.createElement(\"p\", undefined, tc(undefined, undefined, \"pending\"))\n })), React.createElement(\"div\", {\n \"aria-selected\": filter.tab === \"Reviewed\",\n className: \"flex-1\",\n role: \"tab\"\n }, React.createElement(Link.make, {\n href: \"/courses/\" + courseId + \"/review?\" + CoursesReview__Filter.toQueryString({\n nameOrEmail: filter.nameOrEmail,\n levelId: filter.levelId,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: \"EvaluatedAt\",\n sortDirection: CoursesReview__Filter.sortDirection(filter),\n tab: \"Reviewed\",\n includeInactive: filter.includeInactive\n }),\n className: shortCutClasses(filter.tab === \"Reviewed\"),\n children: React.createElement(\"p\", undefined, tc(undefined, undefined, \"reviewed\"))\n }))))))), React.createElement(\"div\", {\n className: \"md:sticky md:top-0 bg-gray-50\"\n }, React.createElement(\"div\", {\n className: \"max-w-4xl 2xl:max-w-5xl mx-auto\"\n }, React.createElement(\"div\", {\n className: \"md:flex w-full items-start pt-4 pb-3 px-4 md:pt-6\",\n role: \"form\"\n }, React.createElement(\"div\", {\n className: \"flex-1\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase\",\n htmlFor: \"filter\"\n }, tc(undefined, undefined, \"filter_by\")), React.createElement(Multiselect.make, {\n id: \"filter\",\n placeholder: filterPlaceholder(filter),\n onChange: (function (filterInput) {\n return Curry._1(send, {\n TAG: /* UpdateFilterInput */0,\n _0: filterInput\n });\n }),\n value: state.filterInput,\n unselected: unselected(state, currentCoachId, filter),\n selected: selected(state, filter, currentCoachId),\n onSelect: (function (param) {\n return onSelectFilter(send, courseId, state, filter, param);\n }),\n onDeselect: (function (param) {\n return onDeselectFilter(send, filter, param);\n }),\n hint: tc(undefined, undefined, \"filter_hint\"),\n defaultOptions: defaultOptions(state, filter),\n loading: state.filterLoading\n })), React.createElement(\"div\", {\n className: \"hidden md:block\"\n }, submissionsSorter(filter))))), React.createElement(\"div\", {\n className: \"max-w-4xl 2xl:max-w-5xl mx-auto px-4\"\n }, React.createElement(\"div\", undefined, tmp), tmp$1)), React.createElement(\"div\", {\n className: \"md:hidden h-16\"\n })));\n}\n\nvar UserProxyFragment;\n\nvar make$4 = CoursesReview__Root;\n\nexport {\n str ,\n tc ,\n Item ,\n PagedSubmission ,\n coachFilterTranslationKey ,\n reducer ,\n updateParams ,\n UserProxyFragment ,\n SubmissionsQuery ,\n LevelsQuery ,\n CoachesQuery ,\n ReviewedTargetsInfoQuery ,\n getSubmissions ,\n getLevels ,\n getCoaches ,\n getTargets ,\n Sortable ,\n SubmissionsSorter ,\n submissionsSorter ,\n Selectable ,\n Multiselect ,\n unSelectedStatus ,\n nameOrEmailFilter ,\n unselected ,\n selected ,\n onSelectFilter ,\n onDeselectFilter ,\n defaultOptions ,\n reloadSubmissions ,\n submissionsLoadedData ,\n submissionsList ,\n filterPlaceholder ,\n loadFilters ,\n shortCutClasses ,\n computeInitialState ,\n pageTitle ,\n make$4 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction avatarUrl(t) {\n return t.avatarUrl;\n}\n\nfunction fullTitle(t) {\n return t.fullTitle;\n}\n\nfunction lastSeenAt(t) {\n return t.lastSeenAt;\n}\n\nfunction taggings(t) {\n return t.taggings;\n}\n\nfunction affiliation(t) {\n return t.affiliation;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nvar Raw = {};\n\nfunction parse(value) {\n var value$1 = value.affiliation;\n var value$2 = value.avatarUrl;\n var value$3 = value.taggings;\n var value$4 = value.lastSeenAt;\n return {\n id: value.id,\n name: value.name,\n title: value.title,\n affiliation: !(value$1 == null) ? value$1 : undefined,\n fullTitle: value.fullTitle,\n avatarUrl: !(value$2 == null) ? value$2 : undefined,\n taggings: value$3.map(function (value) {\n return value;\n }),\n lastSeenAt: !(value$4 == null) ? Caml_option.some(value$4) : undefined\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.lastSeenAt;\n var lastSeenAt = value$1 !== undefined ? Caml_option.valFromOption(value$1) : null;\n var value$2 = value.taggings;\n var taggings = value$2.map(function (value) {\n return value;\n });\n var value$3 = value.avatarUrl;\n var avatarUrl = value$3 !== undefined ? value$3 : null;\n var value$4 = value.fullTitle;\n var value$5 = value.affiliation;\n var affiliation = value$5 !== undefined ? value$5 : null;\n var value$6 = value.title;\n var value$7 = value.name;\n var value$8 = value.id;\n return {\n id: value$8,\n name: value$7,\n title: value$6,\n affiliation: affiliation,\n fullTitle: value$4,\n avatarUrl: avatarUrl,\n taggings: taggings,\n lastSeenAt: lastSeenAt\n };\n}\n\nfunction verifyArgsAndParse(_UserDetailsFragment, value) {\n return parse(value);\n}\n\nfunction verifyName(param) {\n \n}\n\nvar Fragment = {\n Raw: Raw,\n query: \"fragment UserDetailsFragment on User {\\nid \\nname \\ntitle \\naffiliation \\nfullTitle \\navatarUrl \\ntaggings \\nlastSeenAt \\n}\\n\",\n parse: parse,\n serialize: serialize,\n verifyArgsAndParse: verifyArgsAndParse,\n verifyName: verifyName\n};\n\nfunction makeFromFragment(user) {\n return {\n id: user.id,\n name: user.name,\n title: user.title,\n affiliation: user.affiliation,\n fullTitle: user.fullTitle,\n avatarUrl: user.avatarUrl,\n taggings: user.taggings,\n lastSeenAt: Belt_Option.map(user.lastSeenAt, DateFns.decodeISO)\n };\n}\n\nfunction makeFromJs(jsObject) {\n return {\n id: jsObject.id,\n name: jsObject.name,\n title: jsObject.title,\n affiliation: jsObject.affiliation,\n fullTitle: jsObject.fullTitle,\n avatarUrl: jsObject.avatarUrl,\n taggings: jsObject.taggings,\n lastSeenAt: Belt_Option.map(jsObject.lastSeenAt, DateFns.decodeISO)\n };\n}\n\nexport {\n id ,\n name ,\n avatarUrl ,\n fullTitle ,\n lastSeenAt ,\n taggings ,\n affiliation ,\n title ,\n Fragment ,\n makeFromFragment ,\n makeFromJs ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction level(t) {\n return t.level;\n}\n\nfunction taggings(t) {\n return t.taggings;\n}\n\nfunction droppedOutAt(t) {\n return t.droppedOutAt;\n}\n\nfunction personalCoaches(t) {\n return t.personalCoaches;\n}\n\nfunction cohort(t) {\n return t.cohort;\n}\n\nfunction user(t) {\n return t.user;\n}\n\nfunction make(id, user, taggings, level, cohort, droppedOutAt, personalCoaches) {\n return {\n id: id,\n user: user,\n taggings: taggings,\n level: level,\n cohort: cohort,\n droppedOutAt: droppedOutAt,\n personalCoaches: personalCoaches\n };\n}\n\nexport {\n id ,\n level ,\n taggings ,\n droppedOutAt ,\n personalCoaches ,\n cohort ,\n user ,\n make ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as React from \"react\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as UserDetails from \"../../../shared/types/UserDetails.bs.js\";\nimport * as Shared__Level from \"../../../shared/types/Shared__Level.bs.js\";\nimport * as CoursesStudents__StudentInfo from \"../types/CoursesStudents__StudentInfo.bs.js\";\nimport * as CoursesStudents__PersonalCoaches from \"./CoursesStudents__PersonalCoaches.bs.js\";\n\nimport \"./CoursesStudents__Root.css\"\n;\n\nvar partial_arg = \"components.CoursesStudents__StudentsList\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction levelInfo(level) {\n return React.createElement(\"span\", {\n className: \"inline-flex flex-col items-center rounded bg-orange-100 border border-orange-300 px-2 pt-2 pb-1\"\n }, React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, ts(undefined, undefined, \"level\")), React.createElement(\"p\", {\n className: \"font-bold\"\n }, String(Shared__Level.number(level))));\n}\n\nfunction userTags(student) {\n var tags = UserDetails.taggings(CoursesStudents__StudentInfo.user(student));\n if (ArrayUtils.isNotEmpty(tags)) {\n return React.createElement(\"div\", {\n className: \"hidden md:flex flex-wrap\"\n }, tags.map(function (tag) {\n return React.createElement(\"div\", {\n key: tag,\n className: \"bg-blue-100 mt-1 mr-1 py-px px-2 text-tiny rounded-lg font-semibold text-gray-900\\n \"\n }, tag);\n }));\n } else {\n return null;\n }\n}\n\nfunction studentTags(student) {\n if (ArrayUtils.isNotEmpty(CoursesStudents__StudentInfo.taggings(student))) {\n return React.createElement(\"div\", {\n className: \"hidden md:flex flex-wrap\"\n }, CoursesStudents__StudentInfo.taggings(student).map(function (tag) {\n return React.createElement(\"div\", {\n key: tag,\n className: \"bg-gray-100 rounded-lg font-semibold mt-1 mr-1 py-px px-2 text-tiny text-gray-900\"\n }, tag);\n }));\n } else {\n return null;\n }\n}\n\nfunction showStudent(student) {\n var date = UserDetails.lastSeenAt(CoursesStudents__StudentInfo.user(student));\n return React.createElement(Link.make, {\n href: \"/students/\" + (CoursesStudents__StudentInfo.id(student) + \"/report\"),\n ariaLabel: \"Student \" + UserDetails.name(CoursesStudents__StudentInfo.user(student)),\n className: \"flex md:flex-row justify-between bg-white mt-4 rounded-lg shadow cursor-pointer hover:border-primary-500 hover:text-primary-500 hover:shadow-md focus-within:outline-none focus-within:ring-2 focus-within:ring-inset focus-within:ring-focusColor-500\",\n children: null,\n includeSearch: true,\n props: {\n \"data-student-id\": CoursesStudents__StudentInfo.id(student)\n },\n key: CoursesStudents__StudentInfo.id(student)\n }, React.createElement(\"div\", {\n className: \"flex flex-col justify-center md:flex-row \"\n }, React.createElement(\"div\", {\n className: \"flex w-full items-start md:items-center p-3 md:px-4 md:py-5\"\n }, CoursesStudents__PersonalCoaches.avatar(undefined, UserDetails.avatarUrl(CoursesStudents__StudentInfo.user(student)), UserDetails.name(CoursesStudents__StudentInfo.user(student))), React.createElement(\"div\", {\n className: \"ml-2 md:ml-3 block text-sm md:pr-2\"\n }, React.createElement(\"p\", {\n className: \"font-semibold inline-block leading-snug\"\n }, UserDetails.name(CoursesStudents__StudentInfo.user(student))), React.createElement(\"div\", {\n className: \"py-px text-gray-600 text-xs leading-snug flex flex-col sm:flex-row sm:items-center\"\n }, React.createElement(\"span\", {\n className: \"font-semibold pr-2\"\n }, UserDetails.fullTitle(CoursesStudents__StudentInfo.user(student))), React.createElement(\"span\", {\n className: \"sm:pl-2 sm:border-l border-gray-400 italic\"\n }, date !== undefined ? t([[\n \"time_string\",\n DateFns.formatDistanceToNowStrict(Caml_option.valFromOption(date), true, undefined, undefined, undefined)\n ]], undefined, \"last_seen\") : t(undefined, undefined, \"no_last_seen\"))), React.createElement(\"div\", {\n className: \"text-gray-600 font-semibold text-xs leading-snug flex items-start\"\n }, userTags(student), studentTags(student))))), React.createElement(\"div\", {\n \"aria-label\": \"student level info:\" + CoursesStudents__StudentInfo.id(student),\n className: \"flex items-center gap-6 justify-end md:justify-between p-3 md:p-4\"\n }, React.createElement(CoursesStudents__PersonalCoaches.make, {\n title: React.createElement(\"div\", {\n className: \"mb-1 font-semibold text-gray-800 text-tiny uppercase\"\n }, t(undefined, undefined, \"personal_coaches\")),\n className: \"hidden md:inline-block\",\n coaches: CoursesStudents__StudentInfo.personalCoaches(student)\n }), levelInfo(CoursesStudents__StudentInfo.level(student))));\n}\n\nfunction CoursesStudents__StudentsList(Props) {\n var students = Props.students;\n return React.createElement(\"div\", undefined, ArrayUtils.isEmpty(students) ? React.createElement(\"div\", {\n className: \"course-review__reviewed-empty text-lg font-semibold text-center py-4\"\n }, React.createElement(\"h4\", {\n className: \"py-4 mt-4 bg-gray-200 text-gray-800 font-semibold\"\n }, t(undefined, undefined, \"no_students\"))) : students.map(showStudent));\n}\n\nvar make = CoursesStudents__StudentsList;\n\nexport {\n t ,\n ts ,\n str ,\n levelInfo ,\n userTags ,\n studentTags ,\n showStudent ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Cohort from \"../../../shared/types/Cohort.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as LoadingV2 from \"../../../shared/types/LoadingV2.bs.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Pagination from \"../../../shared/utils/Pagination.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as UserDetails from \"../../../shared/types/UserDetails.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as Shared__Level from \"../../../shared/types/Shared__Level.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CourseResourcesFilter from \"../../../shared/components/CourseResourcesFilter.bs.js\";\nimport * as CoursesStudents__StudentInfo from \"../types/CoursesStudents__StudentInfo.bs.js\";\nimport * as CoursesStudents__StudentsList from \"./CoursesStudents__StudentsList.bs.js\";\nimport * as CoursesStudents__DistributionInLevel from \"../types/CoursesStudents__DistributionInLevel.bs.js\";\nimport * as CoursesStudents__StudentDistribution from \"./CoursesStudents__StudentDistribution.bs.js\";\n\nimport \"./CoursesStudents__Root.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesStudents__Root\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar Item = {};\n\nvar PagedStudents = Pagination.Make(Item);\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* UnsetSearchString */0 :\n return {\n loading: state.loading,\n students: state.students,\n filterInput: \"\",\n totalEntriesCount: state.totalEntriesCount,\n reloadDistributionAt: state.reloadDistributionAt,\n studentDistribution: state.studentDistribution\n };\n case /* BeginLoadingMore */1 :\n return {\n loading: /* LoadingMore */0,\n students: state.students,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n reloadDistributionAt: state.reloadDistributionAt,\n studentDistribution: state.studentDistribution\n };\n case /* BeginReloading */2 :\n return {\n loading: LoadingV2.setReloading(state.loading),\n students: state.students,\n filterInput: state.filterInput,\n totalEntriesCount: state.totalEntriesCount,\n reloadDistributionAt: Caml_option.some(new Date()),\n studentDistribution: state.studentDistribution\n };\n \n }\n } else {\n if (action.TAG === /* UpdateFilterInput */0) {\n return {\n loading: state.loading,\n students: state.students,\n filterInput: action._0,\n totalEntriesCount: state.totalEntriesCount,\n reloadDistributionAt: state.reloadDistributionAt,\n studentDistribution: state.studentDistribution\n };\n }\n var students = action._2;\n var match = state.loading;\n var updatedStudent = match ? students : Curry._1(PagedStudents.toArray, state.students).concat(students);\n return {\n loading: LoadingV2.setNotLoading(state.loading),\n students: Curry._3(PagedStudents.make, updatedStudent, action._1, action._0),\n filterInput: state.filterInput,\n totalEntriesCount: action._3,\n reloadDistributionAt: undefined,\n studentDistribution: Belt_Option.getWithDefault(action._4, state.studentDistribution)\n };\n }\n}\n\nvar Raw = {};\n\nvar query = \"query StudentsFromCoursesStudentsRootQuery($courseId: ID!, $after: String, $filterString: String, $skipIfLoadingMore: Boolean!) {\\ncourseStudents(courseId: $courseId, filterString: $filterString, first: 20, after: $after) {\\nnodes {\\nid \\ntaggings \\nuser {\\n...UserDetailsFragment \\n}\\n\\nlevel {\\n...LevelFragment \\n}\\n\\ncohort {\\n...CohortFragment \\n}\\n\\npersonalCoaches {\\n...UserProxyFragment \\n}\\n\\ndroppedOutAt \\n}\\n\\npageInfo {\\nendCursor \\nhasNextPage \\n}\\n\\ntotalCount \\n}\\n\\nstudentDistribution(courseId: $courseId, filterString: $filterString) @skip(if: $skipIfLoadingMore) {\\nid \\nnumber \\nfilterName \\nstudentsInLevel \\nunlocked \\n}\\n\\n}\\n\" + Cohort.Fragment.query + Shared__Level.Fragment.query + UserDetails.Fragment.query + UserProxy.Fragment.query;\n\nfunction parse(value) {\n var value$1 = value.courseStudents;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n var value$5 = value.studentDistribution;\n return {\n courseStudents: {\n nodes: value$2.map(function (value) {\n var value$1 = value.taggings;\n var value$2 = value.user;\n var value$3 = value.level;\n var value$4 = value.cohort;\n var value$5 = value.personalCoaches;\n var value$6 = value.droppedOutAt;\n return {\n id: value.id,\n taggings: value$1.map(function (value) {\n return value;\n }),\n user: UserDetails.Fragment.verifyArgsAndParse(\"UserDetailsFragment\", value$2),\n level: Shared__Level.Fragment.verifyArgsAndParse(\"LevelFragment\", value$3),\n cohort: Cohort.Fragment.verifyArgsAndParse(\"CohortFragment\", value$4),\n personalCoaches: value$5.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }),\n droppedOutAt: !(value$6 == null) ? Caml_option.some(value$6) : undefined\n };\n }),\n pageInfo: {\n endCursor: !(value$4 == null) ? value$4 : undefined,\n hasNextPage: value$3.hasNextPage\n },\n totalCount: value$1.totalCount\n },\n studentDistribution: !(value$5 == null) ? value$5.map(function (value) {\n return {\n id: value.id,\n number: value.number,\n filterName: value.filterName,\n studentsInLevel: value.studentsInLevel,\n unlocked: value.unlocked\n };\n }) : undefined\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.studentDistribution;\n var studentDistribution = value$1 !== undefined ? value$1.map(function (value) {\n var value$1 = value.unlocked;\n var value$2 = value.studentsInLevel;\n var value$3 = value.filterName;\n var value$4 = value.number;\n var value$5 = value.id;\n return {\n id: value$5,\n number: value$4,\n filterName: value$3,\n studentsInLevel: value$2,\n unlocked: value$1\n };\n }) : null;\n var value$2 = value.courseStudents;\n var value$3 = value$2.totalCount;\n var value$4 = value$2.pageInfo;\n var value$5 = value$4.hasNextPage;\n var value$6 = value$4.endCursor;\n var endCursor = value$6 !== undefined ? value$6 : null;\n var pageInfo = {\n endCursor: endCursor,\n hasNextPage: value$5\n };\n var value$7 = value$2.nodes;\n var nodes = value$7.map(function (value) {\n var value$1 = value.droppedOutAt;\n var droppedOutAt = value$1 !== undefined ? Caml_option.valFromOption(value$1) : null;\n var value$2 = value.personalCoaches;\n var personalCoaches = value$2.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n var value$3 = value.cohort;\n var cohort = Cohort.Fragment.serialize(value$3);\n var value$4 = value.level;\n var level = Shared__Level.Fragment.serialize(value$4);\n var value$5 = value.user;\n var user = UserDetails.Fragment.serialize(value$5);\n var value$6 = value.taggings;\n var taggings = value$6.map(function (value) {\n return value;\n });\n var value$7 = value.id;\n return {\n id: value$7,\n taggings: taggings,\n user: user,\n level: level,\n cohort: cohort,\n personalCoaches: personalCoaches,\n droppedOutAt: droppedOutAt\n };\n });\n var courseStudents = {\n nodes: nodes,\n pageInfo: pageInfo,\n totalCount: value$3\n };\n return {\n courseStudents: courseStudents,\n studentDistribution: studentDistribution\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.after;\n var a$1 = inp.filterString;\n return {\n courseId: inp.courseId,\n after: a !== undefined ? a : undefined,\n filterString: a$1 !== undefined ? a$1 : undefined,\n skipIfLoadingMore: inp.skipIfLoadingMore\n };\n}\n\nfunction makeVariables(courseId, after, filterString, skipIfLoadingMore, param) {\n return {\n courseId: courseId,\n after: after,\n filterString: filterString,\n skipIfLoadingMore: skipIfLoadingMore\n };\n}\n\nvar StudentsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar StudentsQuery_Graphql_error = include.Graphql_error;\n\nvar StudentsQuery_decodeNotification = include.decodeNotification;\n\nvar StudentsQuery_decodeObject = include.decodeObject;\n\nvar StudentsQuery_decodeNotifications = include.decodeNotifications;\n\nvar StudentsQuery_decodeErrors = include.decodeErrors;\n\nvar StudentsQuery_flashNotifications = include.flashNotifications;\n\nvar StudentsQuery_sendQuery = include.sendQuery;\n\nvar StudentsQuery_query = include.query;\n\nvar StudentsQuery_make = include.make;\n\nvar StudentsQuery = {\n StudentsQuery_inner: StudentsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: StudentsQuery_Graphql_error,\n decodeNotification: StudentsQuery_decodeNotification,\n decodeObject: StudentsQuery_decodeObject,\n decodeNotifications: StudentsQuery_decodeNotifications,\n decodeErrors: StudentsQuery_decodeErrors,\n flashNotifications: StudentsQuery_flashNotifications,\n sendQuery: StudentsQuery_sendQuery,\n query: StudentsQuery_query,\n $$fetch: $$fetch,\n make: StudentsQuery_make\n};\n\nfunction getStudents(send, courseId, cursor, loadingMoreOpt, params) {\n var loadingMore = loadingMoreOpt !== undefined ? loadingMoreOpt : false;\n params.append(\"status\", \"active\");\n params.append(\"request_origin\", \"review_interface\");\n var filterString = params.toString();\n Curry._3($$fetch, undefined, undefined, makeVariables(courseId, cursor, filterString, loadingMore, undefined)).then(function (response) {\n var nodes = response.courseStudents.nodes;\n var students = nodes.map(function (s) {\n return CoursesStudents__StudentInfo.make(s.id, UserDetails.makeFromFragment(s.user), s.taggings, Shared__Level.makeFromFragment(s.level), Cohort.makeFromFragment(s.cohort), Belt_Option.map(s.droppedOutAt, DateFns.decodeISO), s.personalCoaches.map(UserProxy.makeFromFragment));\n });\n var studentDistribution = Belt_Option.map(response.studentDistribution, (function (p) {\n return p.map(function (d) {\n return CoursesStudents__DistributionInLevel.make(d.id, d.number, d.studentsInLevel, d.unlocked, d.filterName);\n });\n }));\n Curry._1(send, {\n TAG: /* LoadStudents */1,\n _0: response.courseStudents.pageInfo.endCursor,\n _1: response.courseStudents.pageInfo.hasNextPage,\n _2: students,\n _3: response.courseStudents.totalCount,\n _4: studentDistribution\n });\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction applicableLevels(levels) {\n return levels.filter(function (level) {\n return Shared__Level.number(level) !== 0;\n });\n}\n\nfunction makeFilters(param) {\n return [\n CourseResourcesFilter.makeFilter(\"cohort\", \"Cohort\", {\n TAG: /* DataLoad */0,\n _0: \"Cohort\"\n }, \"green\"),\n CourseResourcesFilter.makeFilter(\"level\", \"Level\", {\n TAG: /* DataLoad */0,\n _0: \"Level\"\n }, \"yellow\"),\n CourseResourcesFilter.makeFilter(\"personal_coach\", \"Personal Coach\", {\n TAG: /* DataLoad */0,\n _0: \"Coach\"\n }, \"pink\"),\n CourseResourcesFilter.makeFilter(\"student_tags\", \"Student Tags\", {\n TAG: /* DataLoad */0,\n _0: \"StudentTag\"\n }, \"focusColor\"),\n CourseResourcesFilter.makeFilter(\"user_tags\", \"User Tags\", {\n TAG: /* DataLoad */0,\n _0: \"UserTag\"\n }, \"blue\"),\n CourseResourcesFilter.makeFilter(\"email\", \"Search by Email\", /* Search */0, \"gray\"),\n CourseResourcesFilter.makeFilter(\"name\", \"Search by Name\", /* Search */0, \"gray\")\n ];\n}\n\nfunction computeInitialState(param) {\n return {\n loading: LoadingV2.empty(undefined),\n students: /* Unloaded */0,\n filterInput: \"\",\n totalEntriesCount: 0,\n reloadDistributionAt: undefined,\n studentDistribution: []\n };\n}\n\nfunction reloadStudents(courseId, params, send) {\n Curry._1(send, /* BeginReloading */2);\n return getStudents(send, courseId, undefined, undefined, params);\n}\n\nfunction onSelect(key, value, params) {\n params.set(key, value);\n return RescriptReactRouter.push(\"?\" + params.toString());\n}\n\nfunction selectLevel(levels, params, levelId) {\n var level = ArrayUtils.unsafeFind((function (level) {\n return Shared__Level.id(level) === levelId;\n }), tr(undefined, undefined, \"not_found\") + levelId, levels);\n return onSelect(\"level\", Shared__Level.name(level), params);\n}\n\nfunction showStudents(state, students) {\n return React.createElement(\"div\", undefined, React.createElement(CoursesStudents__StudentsList.make, {\n students: students\n }), Curry._4(PagedStudents.showStats, state.totalEntriesCount, students.length, \"student\", \"students\"));\n}\n\nfunction CoursesStudents__Root(Props) {\n var courseId = Props.courseId;\n var match = React.useReducer(reducer, computeInitialState(undefined));\n var send = match[1];\n var state = match[0];\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var params = new URLSearchParams(url.search);\n React.useEffect((function () {\n reloadStudents(courseId, params, send);\n \n }), [\n courseId,\n url.search\n ]);\n var students = state.students;\n var tmp;\n if (typeof students === \"number\") {\n tmp = SkeletonLoading.multiple(10, SkeletonLoading.userCard(undefined));\n } else if (students.TAG === /* PartiallyLoaded */0) {\n var cursor = students._1;\n var times = state.loading;\n tmp = React.createElement(\"div\", undefined, showStudents(state, students._0), times ? ReactUtils.nullUnless(React.createElement(\"button\", {\n className: \"btn btn-primary-ghost cursor-pointer w-full mt-4\",\n onClick: (function (param) {\n Curry._1(send, /* BeginLoadingMore */1);\n return getStudents(send, courseId, cursor, true, params);\n })\n }, ts(undefined, undefined, \"load_more\")), ArrayUtils.isEmpty(times._0)) : SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined)));\n } else {\n tmp = showStudents(state, students._0);\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"Students\",\n className: \"flex-1 flex flex-col overflow-y-auto\",\n role: \"main\"\n }, React.createElement(\"div\", {\n className: \"max-w-4xl 2xl:max-w-5xl mx-auto w-full mt-8 md:mt-25 px-4\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-50 w-full\"\n }, React.createElement(\"h1\", {\n className: \"text-2xl font-semibold\"\n }, \"Students\"), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"p-5 bg-gray-100 rounded-lg mt-6\"\n }, React.createElement(\"p\", {\n className: \"text-gray-600 text-sm font-medium\"\n }, tr(undefined, undefined, \"level_distribution_label\")), React.createElement(CoursesStudents__StudentDistribution.make, {\n studentDistribution: state.studentDistribution,\n params: params\n })), params.has(\"level\")), React.createElement(\"div\", {\n className: \"p-5 mt-6 bg-white rounded-md border border-gray-300 relative md:sticky md:top-16 z-10\"\n }, React.createElement(CourseResourcesFilter.make, {\n courseId: courseId,\n filters: makeFilters(undefined),\n search: url.search,\n sorter: CourseResourcesFilter.makeSorter(\"sort_by\", [\n \"Name\",\n \"First Created\",\n \"Last Created\",\n \"First Updated\",\n \"Last Updated\"\n ], \"Last Created\")\n })), React.createElement(\"div\", {\n className: \"my-6\"\n }, tmp)), Curry._2(PagedStudents.showLoading, state.students, state.loading)));\n}\n\nvar UserDetailsFragment;\n\nvar LevelFragment;\n\nvar CohortFragment;\n\nvar UserProxyFragment;\n\nvar make = CoursesStudents__Root;\n\nexport {\n str ,\n tr ,\n ts ,\n Item ,\n PagedStudents ,\n reducer ,\n UserDetailsFragment ,\n LevelFragment ,\n CohortFragment ,\n UserProxyFragment ,\n StudentsQuery ,\n getStudents ,\n applicableLevels ,\n makeFilters ,\n computeInitialState ,\n reloadStudents ,\n onSelect ,\n selectLevel ,\n showStudents ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction makeFromJs(jsObject) {\n return {\n id: jsObject.id,\n name: jsObject.name\n };\n}\n\nexport {\n id ,\n name ,\n makeFromJs ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\n\nfunction user(t) {\n return t.user;\n}\n\nfunction assignedAt(t) {\n return t.assignedAt;\n}\n\nfunction makeFromJs(reviewerInfo) {\n return {\n user: UserProxy.makeFromJs(reviewerInfo.user),\n assignedAt: DateFns.decodeISO(reviewerInfo.assignedAt)\n };\n}\n\nfunction setReviewer(reviewer) {\n return {\n user: reviewer,\n assignedAt: new Date()\n };\n}\n\nexport {\n user ,\n assignedAt ,\n makeFromJs ,\n setReviewer ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction passedAt(t) {\n return t.passedAt;\n}\n\nfunction evaluatedAt(t) {\n return t.evaluatedAt;\n}\n\nfunction feedbackSent(t) {\n return t.feedbackSent;\n}\n\nfunction archivedAt(t) {\n return t.archivedAt;\n}\n\nfunction make(id, createdAt, passedAt, evaluatedAt, feedbackSent, archivedAt) {\n return {\n id: id,\n createdAt: createdAt,\n passedAt: passedAt,\n feedbackSent: feedbackSent,\n evaluatedAt: evaluatedAt,\n archivedAt: archivedAt\n };\n}\n\nfunction makeFromJs(details) {\n return details.map(function (s) {\n return make(s.id, DateFns.decodeISO(s.createdAt), Belt_Option.map(s.passedAt, DateFns.decodeISO), Belt_Option.map(s.evaluatedAt, DateFns.decodeISO), s.feedbackSent, Belt_Option.map(s.archivedAt, DateFns.decodeISO));\n });\n}\n\nexport {\n id ,\n createdAt ,\n passedAt ,\n evaluatedAt ,\n feedbackSent ,\n archivedAt ,\n make ,\n makeFromJs ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar InvalidSubmissionReportCompletionStatus = /* @__PURE__ */Caml_exceptions.create(\"CoursesReview__SubmissionReport.InvalidSubmissionReportCompletionStatus\");\n\nfunction decodeConclusion(conclusion) {\n if (conclusion === \"failure\") {\n return /* Failure */1;\n } else if (conclusion === \"success\") {\n return /* Success */0;\n } else {\n return /* Error */2;\n }\n}\n\nfunction decodeCompletedStatus(startedAt, completedAt, conclusion) {\n if (startedAt !== undefined) {\n if (completedAt !== undefined) {\n if (conclusion !== undefined) {\n return {\n TAG: /* Completed */2,\n _0: {\n startedAt: DateFns.decodeISO(Caml_option.valFromOption(startedAt)),\n completedAt: DateFns.decodeISO(Caml_option.valFromOption(completedAt))\n },\n _1: decodeConclusion(conclusion)\n };\n }\n Rollbar.critical(\"Invalid completion status of submission report - conclusion missing for completed test\");\n throw {\n RE_EXN_ID: InvalidSubmissionReportCompletionStatus,\n Error: new Error()\n };\n }\n Rollbar.critical(\"Invalid completion status of submission report - end time missing for completed test\");\n throw {\n RE_EXN_ID: InvalidSubmissionReportCompletionStatus,\n Error: new Error()\n };\n }\n Rollbar.critical(\"Invalid completion status of submission report - start time missing for completed test\");\n throw {\n RE_EXN_ID: InvalidSubmissionReportCompletionStatus,\n Error: new Error()\n };\n}\n\nfunction decodeStatus(status, conclusion, queuedAt, startedAt, completedAt) {\n if (status === \"completed\") {\n return decodeCompletedStatus(startedAt, completedAt, conclusion);\n }\n if (status === \"queued\") {\n return {\n TAG: /* Queued */0,\n _0: DateFns.decodeISO(queuedAt)\n };\n }\n if (startedAt !== undefined) {\n return {\n TAG: /* InProgress */1,\n _0: DateFns.decodeISO(Caml_option.valFromOption(startedAt))\n };\n }\n Rollbar.critical(\"Invalid completion status of submission report - start time missing for test in progress\");\n throw {\n RE_EXN_ID: InvalidSubmissionReportCompletionStatus,\n Error: new Error()\n };\n}\n\nfunction makeFromJS(object) {\n return {\n id: object.id,\n status: decodeStatus(object.status, object.conclusion, object.queuedAt, object.startedAt, object.completedAt),\n testReport: object.testReport,\n queuedAt: DateFns.decodeISO(object.queuedAt)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction testReport(t) {\n return t.testReport;\n}\n\nfunction startedAt(t) {\n return t.startedAt;\n}\n\nexport {\n InvalidSubmissionReportCompletionStatus ,\n decodeConclusion ,\n decodeCompletedStatus ,\n decodeStatus ,\n makeFromJS ,\n id ,\n status ,\n testReport ,\n startedAt ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as Pervasives from \"../../../../../node_modules/rescript/lib/es6/pervasives.js\";\nimport * as Json_encode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction feedback(t) {\n return t.feedback;\n}\n\nfunction make(title, feedback) {\n return {\n title: title,\n feedback: feedback\n };\n}\n\nfunction makeFromJs(data) {\n return data.map(function (r) {\n return {\n title: r.title,\n feedback: r.feedback\n };\n });\n}\n\nfunction emptyTemplate(param) {\n return [\n {\n title: \"Yes\",\n feedback: \"Sample feedback for yes\"\n },\n {\n title: \"No\",\n feedback: \"Sample feedback for no\"\n }\n ];\n}\n\nfunction empty(param) {\n return {\n title: \"\",\n feedback: undefined\n };\n}\n\nfunction replace(t, index, checklist) {\n return $$Array.mapi((function (resultIndex, result) {\n if (resultIndex === index) {\n return t;\n } else {\n return result;\n }\n }), checklist);\n}\n\nfunction updateTitle(title, t, index, checklist) {\n return replace({\n title: title,\n feedback: t.feedback\n }, index, checklist);\n}\n\nfunction updateFeedback(feedback, t, index, checklist) {\n var optionalFeedback = feedback.trim() === \"\" ? undefined : feedback;\n return replace({\n title: t.title,\n feedback: optionalFeedback\n }, index, checklist);\n}\n\nfunction trim(t) {\n return {\n title: $$String.trim(t.title),\n feedback: t.feedback\n };\n}\n\nfunction encode(t) {\n var title_0 = [\n \"title\",\n t.title\n ];\n var title = {\n hd: title_0,\n tl: /* [] */0\n };\n var f = t.feedback;\n var feedback = f !== undefined ? ({\n hd: [\n \"feedback\",\n f\n ],\n tl: /* [] */0\n }) : /* [] */0;\n return Json_encode.object_(Pervasives.$at(title, feedback));\n}\n\nexport {\n title ,\n feedback ,\n make ,\n makeFromJs ,\n emptyTemplate ,\n empty ,\n replace ,\n updateTitle ,\n updateFeedback ,\n trim ,\n encode ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_encode from \"../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\nimport * as CoursesReview__ReviewChecklistResult from \"./CoursesReview__ReviewChecklistResult.bs.js\";\n\nfunction title(t) {\n return t.title;\n}\n\nfunction result(t) {\n return t.result;\n}\n\nfunction make(title, result) {\n return {\n title: title,\n result: result\n };\n}\n\nfunction makeFromJs(data) {\n return data.map(function (rc) {\n return {\n title: rc.title,\n result: CoursesReview__ReviewChecklistResult.makeFromJs(rc.result)\n };\n });\n}\n\nfunction empty(param) {\n return [{\n title: \"\",\n result: [CoursesReview__ReviewChecklistResult.empty(undefined)]\n }];\n}\n\nfunction emptyTemplate(param) {\n return [{\n title: \"Default checklist\",\n result: CoursesReview__ReviewChecklistResult.emptyTemplate(undefined)\n }];\n}\n\nfunction updateTitle(title, t) {\n return {\n title: title,\n result: t.result\n };\n}\n\nfunction updateChecklist(result, t) {\n return {\n title: t.title,\n result: result\n };\n}\n\nfunction replace(t, itemIndex, result) {\n return $$Array.mapi((function (index, item) {\n if (index === itemIndex) {\n return t;\n } else {\n return item;\n }\n }), result);\n}\n\nfunction appendEmptyChecklistItem(t) {\n return {\n title: t.title,\n result: $$Array.append(t.result, [CoursesReview__ReviewChecklistResult.empty(undefined)])\n };\n}\n\nfunction moveResultItemUp(index, t) {\n return {\n title: t.title,\n result: ArrayUtils.swapUp(index, t.result)\n };\n}\n\nfunction moveResultItemDown(index, t) {\n return {\n title: t.title,\n result: ArrayUtils.swapDown(index, t.result)\n };\n}\n\nfunction deleteResultItem(index, t) {\n return {\n title: t.title,\n result: t.result.filter(function (_el, i) {\n return i !== index;\n })\n };\n}\n\nfunction trim(t) {\n return {\n title: $$String.trim(t.title),\n result: $$Array.map(CoursesReview__ReviewChecklistResult.trim, t.result)\n };\n}\n\nfunction encode(t) {\n return Json_encode.object_({\n hd: [\n \"title\",\n t.title\n ],\n tl: {\n hd: [\n \"result\",\n Json_encode.array(CoursesReview__ReviewChecklistResult.encode, t.result)\n ],\n tl: /* [] */0\n }\n });\n}\n\nfunction encodeArray(checklist) {\n return Json_encode.array(encode, checklist);\n}\n\nexport {\n title ,\n result ,\n make ,\n makeFromJs ,\n empty ,\n emptyTemplate ,\n updateTitle ,\n updateChecklist ,\n replace ,\n appendEmptyChecklistItem ,\n moveResultItemUp ,\n moveResultItemDown ,\n deleteResultItem ,\n trim ,\n encode ,\n encodeArray ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as GradeLabel from \"../../../shared/types/GradeLabel.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\nimport * as CoursesReview__Student from \"./CoursesReview__Student.bs.js\";\nimport * as CoursesReview__Reviewer from \"./CoursesReview__Reviewer.bs.js\";\nimport * as CoursesReview__SubmissionMeta from \"./CoursesReview__SubmissionMeta.bs.js\";\nimport * as CoursesReview__SubmissionReport from \"./CoursesReview__SubmissionReport.bs.js\";\nimport * as CoursesReview__OverlaySubmission from \"./CoursesReview__OverlaySubmission.bs.js\";\nimport * as CoursesReview__ReviewChecklistItem from \"./CoursesReview__ReviewChecklistItem.bs.js\";\n\nfunction submission(t) {\n return t.submission;\n}\n\nfunction allSubmissions(t) {\n return t.allSubmissions;\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction targetTitle(t) {\n return t.targetTitle;\n}\n\nfunction levelNumber(t) {\n return t.levelNumber;\n}\n\nfunction students(t) {\n return t.students;\n}\n\nfunction evaluationCriteria(t) {\n return t.evaluationCriteria;\n}\n\nfunction reviewChecklist(t) {\n return t.reviewChecklist;\n}\n\nfunction targetEvaluationCriteriaIds(t) {\n return t.targetEvaluationCriteriaIds;\n}\n\nfunction inactiveStudents(t) {\n return t.inactiveStudents;\n}\n\nfunction coaches(t) {\n return t.coaches;\n}\n\nfunction teamName(t) {\n return t.teamName;\n}\n\nfunction courseId(t) {\n return t.courseId;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction preview(t) {\n return t.preview;\n}\n\nfunction reviewer(t) {\n return t.reviewer;\n}\n\nfunction submissionReport(t) {\n return t.submissionReport;\n}\n\nfunction submissionReportPollTime(t) {\n return t.submissionReportPollTime;\n}\n\nfunction inactiveSubmissionReviewAllowedDays(t) {\n return t.inactiveSubmissionReviewAllowedDays;\n}\n\nfunction make(submission, allSubmissions, targetId, targetTitle, students, levelNumber, evaluationCriteria, levelId, reviewChecklist, targetEvaluationCriteriaIds, inactiveStudents, submissionReport, coaches, teamName, courseId, createdAt, preview, reviewer, submissionReportPollTime, inactiveSubmissionReviewAllowedDays) {\n return {\n submission: submission,\n createdAt: createdAt,\n allSubmissions: allSubmissions,\n targetId: targetId,\n targetTitle: targetTitle,\n students: students,\n levelNumber: levelNumber,\n levelId: levelId,\n submissionReport: submissionReport,\n evaluationCriteria: evaluationCriteria,\n reviewChecklist: reviewChecklist,\n targetEvaluationCriteriaIds: targetEvaluationCriteriaIds,\n inactiveStudents: inactiveStudents,\n coaches: coaches,\n teamName: teamName,\n courseId: courseId,\n preview: preview,\n reviewer: reviewer,\n submissionReportPollTime: submissionReportPollTime,\n inactiveSubmissionReviewAllowedDays: inactiveSubmissionReviewAllowedDays\n };\n}\n\nfunction decodeJs(details) {\n return make(CoursesReview__OverlaySubmission.makeFromJs(details.submission), ArrayUtils.copyAndSort((function (s1, s2) {\n return DateFns.differenceInSeconds(CoursesReview__SubmissionMeta.createdAt(s2), CoursesReview__SubmissionMeta.createdAt(s1));\n }), CoursesReview__SubmissionMeta.makeFromJs(details.allSubmissions)), details.targetId, details.targetTitle, details.students.map(CoursesReview__Student.makeFromJs), details.levelNumber, details.evaluationCriteria.map(function (ec) {\n return EvaluationCriterion.make(ec.id, ec.name, ec.maxGrade, ec.passGrade, ec.gradeLabels.map(GradeLabel.makeFromJs));\n }), details.levelId, CoursesReview__ReviewChecklistItem.makeFromJs(details.reviewChecklist), details.targetEvaluationCriteriaIds, details.inactiveStudents, Belt_Option.map(details.submissionReport, CoursesReview__SubmissionReport.makeFromJS), details.coaches.map(UserProxy.makeFromJs), details.teamName, details.courseId, DateFns.decodeISO(details.createdAt), details.preview, Belt_Option.map(details.reviewerDetails, CoursesReview__Reviewer.makeFromJs), details.submissionReportPollTime, details.inactiveSubmissionReviewAllowedDays);\n}\n\nfunction updateMetaSubmission(submission) {\n return CoursesReview__SubmissionMeta.make(CoursesReview__OverlaySubmission.id(submission), CoursesReview__OverlaySubmission.createdAt(submission), CoursesReview__OverlaySubmission.passedAt(submission), CoursesReview__OverlaySubmission.evaluatedAt(submission), ArrayUtils.isNotEmpty(CoursesReview__OverlaySubmission.feedback(submission)), CoursesReview__OverlaySubmission.archivedAt(submission));\n}\n\nfunction updateOverlaySubmission(submission, t) {\n var newrecord = Caml_obj.caml_obj_dup(t);\n newrecord.allSubmissions = t.allSubmissions.map(function (s) {\n if (CoursesReview__SubmissionMeta.id(s) === CoursesReview__OverlaySubmission.id(submission)) {\n return updateMetaSubmission(submission);\n } else {\n return s;\n }\n });\n newrecord.submission = submission;\n return newrecord;\n}\n\nfunction updateReviewChecklist(reviewChecklist, t) {\n var newrecord = Caml_obj.caml_obj_dup(t);\n newrecord.reviewChecklist = reviewChecklist;\n return newrecord;\n}\n\nfunction updateReviewer(user, t) {\n var newrecord = Caml_obj.caml_obj_dup(t);\n newrecord.reviewer = Belt_Option.map(user, CoursesReview__Reviewer.setReviewer);\n return newrecord;\n}\n\nfunction updateSubmissionReport(report, t) {\n var newrecord = Caml_obj.caml_obj_dup(t);\n newrecord.submissionReport = report;\n return newrecord;\n}\n\nvar OverlaySubmission;\n\nvar IndexSubmission;\n\nvar Student;\n\nvar ReviewChecklistItem;\n\nvar SubmissionMeta;\n\nvar Coach;\n\nvar Reviewer;\n\nvar SubmissionReport;\n\nexport {\n OverlaySubmission ,\n IndexSubmission ,\n Student ,\n ReviewChecklistItem ,\n SubmissionMeta ,\n Coach ,\n Reviewer ,\n SubmissionReport ,\n submission ,\n allSubmissions ,\n targetId ,\n targetTitle ,\n levelNumber ,\n students ,\n evaluationCriteria ,\n reviewChecklist ,\n targetEvaluationCriteriaIds ,\n inactiveStudents ,\n coaches ,\n teamName ,\n courseId ,\n createdAt ,\n preview ,\n reviewer ,\n submissionReport ,\n submissionReportPollTime ,\n inactiveSubmissionReviewAllowedDays ,\n make ,\n decodeJs ,\n updateMetaSubmission ,\n updateOverlaySubmission ,\n updateReviewChecklist ,\n updateReviewer ,\n updateSubmissionReport ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as Spread from \"../../../shared/components/Spread.bs.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as Checkbox from \"../../../shared/components/Checkbox.bs.js\";\nimport * as DateTime from \"../../../shared/utils/DateTime.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as CoursesReview__OverlaySubmission from \"../types/CoursesReview__OverlaySubmission.bs.js\";\nimport * as CoursesReview__SubmissionDetails from \"../types/CoursesReview__SubmissionDetails.bs.js\";\nimport * as CoursesReview__ReviewChecklistItem from \"../types/CoursesReview__ReviewChecklistItem.bs.js\";\nimport * as CoursesReview__ReviewChecklistResult from \"../types/CoursesReview__ReviewChecklistResult.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesReview__ChecklistShow\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction selectChecklist(itemIndex, resultIndex, setSelecton) {\n return Curry._1(setSelecton, (function (selection) {\n return selection.concat([{\n itemIndex: itemIndex,\n resultIndex: resultIndex\n }]);\n }));\n}\n\nfunction unSelectChecklist(itemIndex, resultIndex, setSelecton) {\n return Curry._1(setSelecton, (function (selection) {\n return selection.filter(function (item) {\n return !(item.itemIndex === itemIndex && item.resultIndex === resultIndex);\n });\n }));\n}\n\nfunction checkboxOnChange(itemIndex, resultIndex, setSelecton, $$event) {\n if ($$event.target.checked) {\n return selectChecklist(itemIndex, resultIndex, setSelecton);\n } else {\n return unSelectChecklist(itemIndex, resultIndex, setSelecton);\n }\n}\n\nfunction generateFeedback(checklist, selection, feedback, setSelecton, updateFeedbackCB) {\n var newFeedback = feedback + ((\n $$String.trim(feedback) === \"\" ? \"\" : \"\\n\\n\"\n ) + ArrayUtils.flattenV2(checklist.map(function (reviewChecklistItem, i) {\n var resultIndexList = selection.filter(function (selectionItem) {\n return selectionItem.itemIndex === i;\n }).map(function (item) {\n return item.resultIndex;\n });\n return ArrayUtils.flattenV2(CoursesReview__ReviewChecklistItem.result(reviewChecklistItem).map(function (resultItem, index) {\n if (!resultIndexList.some(function (i) {\n return i === index;\n })) {\n return [];\n }\n var feedback = CoursesReview__ReviewChecklistResult.feedback(resultItem);\n if (feedback !== undefined) {\n return [feedback];\n } else {\n return [];\n }\n }));\n })).join(\"\\n\\n\"));\n Curry._1(setSelecton, (function (param) {\n return [];\n }));\n return Curry._1(updateFeedbackCB, newFeedback);\n}\n\nfunction checklistItemCheckedClasses(itemIndex, selection) {\n return \"absolute w-1 inset-0 rounded-r-md \" + (\n ArrayUtils.isNotEmpty(selection.filter(function (s) {\n return s.itemIndex === itemIndex;\n })) ? \"bg-green-400\" : \"bg-gray-500\"\n );\n}\n\nfunction feedbackGeneratable(submissionDetails, overlaySubmission) {\n if (Belt_Option.isSome(CoursesReview__SubmissionDetails.reviewer(submissionDetails))) {\n return true;\n } else {\n return Belt_Option.isSome(CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission));\n }\n}\n\nfunction checklistItemChecked(itemIndex, resultIndex, selection) {\n return ArrayUtils.isNotEmpty(selection.filter(function (s) {\n if (s.itemIndex === itemIndex) {\n return s.resultIndex === resultIndex;\n } else {\n return false;\n }\n }));\n}\n\nfunction updateChecklistResultFeedback(itemIndex, resultIndex, feedback, reviewChecklistItem, resultItem, setChecklist) {\n var newReviewChecklistItem = CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateFeedback(feedback, resultItem, resultIndex, CoursesReview__ReviewChecklistItem.result(reviewChecklistItem)), reviewChecklistItem);\n return Curry._1(setChecklist, (function (checklist) {\n return CoursesReview__ReviewChecklistItem.replace(newReviewChecklistItem, itemIndex, checklist);\n }));\n}\n\nfunction generateFeedbackButton(checklist, selection, feedback, setSelecton, updateFeedbackCB) {\n return React.createElement(\"button\", {\n className: \"btn btn-primary w-full md:w-auto\",\n disabled: ArrayUtils.isEmpty(selection),\n onClick: (function (param) {\n return generateFeedback(checklist, selection, feedback, setSelecton, updateFeedbackCB);\n })\n }, t(undefined, undefined, \"generate_feedback_button\"));\n}\n\nfunction CoursesReview__ChecklistShow(Props) {\n var reviewChecklist = Props.reviewChecklist;\n var feedback = Props.feedback;\n var updateFeedbackCB = Props.updateFeedbackCB;\n var showEditorCB = Props.showEditorCB;\n var cancelCB = Props.cancelCB;\n var overlaySubmission = Props.overlaySubmission;\n var submissionDetails = Props.submissionDetails;\n var match = React.useState(function () {\n return reviewChecklist;\n });\n var setChecklist = match[1];\n var checklist = match[0];\n var match$1 = React.useState(function () {\n return [];\n });\n var setSelecton = match$1[1];\n var selection = match$1[0];\n var match$2 = React.useState(function () {\n return DateTime.randomId(undefined) + \"-review-checkbox-\";\n });\n var id = match$2[0];\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 h-16\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 items-center justify-between\"\n }, React.createElement(\"button\", {\n className: \"btn btn-subtle focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 transition\",\n onClick: cancelCB\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-arrow-left text-gray-500\"\n }), React.createElement(\"p\", {\n className: \"pl-2\"\n }, \"Back to Review\")))), React.createElement(\"div\", {\n className: \"p-4 md:px-6 pb-0\"\n }, React.createElement(\"div\", {\n className: \"flex items-end justify-between\"\n }, React.createElement(\"h5\", {\n className: \"font-semibold flex items-center tracking-wide text-sm\"\n }, t(undefined, undefined, \"review_checklist\")), React.createElement(\"button\", {\n className: \"btn btn-small btn-default\",\n onClick: (function (param) {\n return Curry._1(showEditorCB, undefined);\n })\n }, React.createElement(\"i\", {\n className: \"far fa-edit\"\n }), React.createElement(\"div\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"edit_checklist_button\")))), React.createElement(\"div\", {\n className: \"border bg-white rounded-lg py-2 md:py-4 mt-2 space-y-8\"\n }, checklist.map(function (reviewChecklistItem, itemIndex) {\n return React.createElement(Spread.make, {\n props: {\n \"data-checklist-item\": String(itemIndex)\n },\n children: React.createElement(\"div\", undefined, React.createElement(\"h4\", {\n className: \"relative text-sm font-semibold mt-2 md:mt-0 px-6 w-full md:w-4/5\"\n }, React.createElement(\"div\", {\n className: checklistItemCheckedClasses(itemIndex, selection)\n }), CoursesReview__ReviewChecklistItem.title(reviewChecklistItem)), React.createElement(\"div\", {\n className: \"space-y-3 pt-3\"\n }, CoursesReview__ReviewChecklistItem.result(reviewChecklistItem).map(function (checklistItem, resultIndex) {\n var isSelected = Belt_Option.isSome(Caml_option.undefined_to_opt(selection.find(function (s) {\n if (s.itemIndex === itemIndex) {\n return s.resultIndex === resultIndex;\n } else {\n return false;\n }\n })));\n return React.createElement(Spread.make, {\n props: {\n \"data-result-item\": String(resultIndex)\n },\n children: React.createElement(\"div\", {\n className: \"px-6\"\n }, React.createElement(Checkbox.make, {\n id: id + (String(itemIndex) + String(resultIndex)),\n onChange: (function (param) {\n return checkboxOnChange(itemIndex, resultIndex, setSelecton, param);\n }),\n checked: checklistItemChecked(itemIndex, resultIndex, selection),\n label: CoursesReview__ReviewChecklistResult.title(checklistItem),\n disabled: !feedbackGeneratable(submissionDetails, overlaySubmission)\n }), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"pl-7 pt-2\"\n }, React.createElement(\"textarea\", {\n className: \"appearance-none border border-gray-300 bg-white rounded-b text-sm align-top py-2 px-4 leading-relaxed w-full focus:outline-none focus:bg-white focus:border-primary-300\",\n id: \"result_\" + (String(resultIndex) + \"_feedback\"),\n cols: 33,\n disabled: !feedbackGeneratable(submissionDetails, overlaySubmission),\n placeholder: t(undefined, undefined, \"feedback_placeholder\"),\n rows: 4,\n type: \"text\",\n value: Belt_Option.getWithDefault(CoursesReview__ReviewChecklistResult.feedback(checklistItem), \"\"),\n onChange: (function ($$event) {\n return updateChecklistResultFeedback(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, checklistItem, setChecklist);\n })\n })), isSelected || !feedbackGeneratable(submissionDetails, overlaySubmission))),\n key: String(itemIndex) + String(resultIndex)\n });\n }))),\n key: String(itemIndex)\n });\n }))), React.createElement(\"div\", {\n className: \"flex justify-end border-t bg-gray-50 opacity-90 sticky bottom-0 px-4 md:px-6 py-2 md:py-4 mt-4\"\n }, feedbackGeneratable(submissionDetails, overlaySubmission) ? generateFeedbackButton(checklist, selection, feedback, setSelecton, updateFeedbackCB) : null));\n}\n\nvar make = CoursesReview__ChecklistShow;\n\nexport {\n str ,\n t ,\n selectChecklist ,\n unSelectChecklist ,\n checkboxOnChange ,\n generateFeedback ,\n checklistItemCheckedClasses ,\n feedbackGeneratable ,\n checklistItemChecked ,\n updateChecklistResultFeedback ,\n generateFeedbackButton ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Spread from \"../../../shared/components/Spread.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as DisablingCover from \"../../../shared/components/DisablingCover.bs.js\";\nimport * as School__InputGroupError from \"../../../schools/shared/components/School__InputGroupError.bs.js\";\nimport * as CoursesReview__ReviewChecklistItem from \"../types/CoursesReview__ReviewChecklistItem.bs.js\";\nimport * as CoursesReview__ReviewChecklistResult from \"../types/CoursesReview__ReviewChecklistResult.bs.js\";\n\nimport \"./CoursesReview__ChecklistEditor.css\"\n;\n\nvar partial_arg = \"components.CoursesReview__ChecklistEditor\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nvar Raw = {};\n\nvar query = \"mutation UpdateReviewChecklistMutation($targetId: ID!, $reviewChecklist: JSON!) {\\nupdateReviewChecklist(targetId: $targetId, reviewChecklist: $reviewChecklist) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.updateReviewChecklist;\n return {\n updateReviewChecklist: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.updateReviewChecklist;\n var value$2 = value$1.success;\n var updateReviewChecklist = {\n success: value$2\n };\n return {\n updateReviewChecklist: updateReviewChecklist\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n targetId: inp.targetId,\n reviewChecklist: inp.reviewChecklist\n };\n}\n\nfunction makeVariables(targetId, reviewChecklist, param) {\n return {\n targetId: targetId,\n reviewChecklist: reviewChecklist\n };\n}\n\nvar UpdateReviewChecklistMutation_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar UpdateReviewChecklistMutation_Graphql_error = include.Graphql_error;\n\nvar UpdateReviewChecklistMutation_decodeNotification = include.decodeNotification;\n\nvar UpdateReviewChecklistMutation_decodeObject = include.decodeObject;\n\nvar UpdateReviewChecklistMutation_decodeNotifications = include.decodeNotifications;\n\nvar UpdateReviewChecklistMutation_decodeErrors = include.decodeErrors;\n\nvar UpdateReviewChecklistMutation_flashNotifications = include.flashNotifications;\n\nvar UpdateReviewChecklistMutation_sendQuery = include.sendQuery;\n\nvar UpdateReviewChecklistMutation_query = include.query;\n\nvar UpdateReviewChecklistMutation_make = include.make;\n\nvar UpdateReviewChecklistMutation = {\n UpdateReviewChecklistMutation_inner: UpdateReviewChecklistMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: UpdateReviewChecklistMutation_Graphql_error,\n decodeNotification: UpdateReviewChecklistMutation_decodeNotification,\n decodeObject: UpdateReviewChecklistMutation_decodeObject,\n decodeNotifications: UpdateReviewChecklistMutation_decodeNotifications,\n decodeErrors: UpdateReviewChecklistMutation_decodeErrors,\n flashNotifications: UpdateReviewChecklistMutation_flashNotifications,\n sendQuery: UpdateReviewChecklistMutation_sendQuery,\n query: UpdateReviewChecklistMutation_query,\n $$fetch: $$fetch,\n make: UpdateReviewChecklistMutation_make\n};\n\nfunction updateReviewChecklist(targetId, reviewChecklist, send, updateReviewChecklistCB) {\n Curry._1(send, /* UpdateSaving */1);\n var trimmedChecklist = reviewChecklist.map(CoursesReview__ReviewChecklistItem.trim);\n Curry._3($$fetch, undefined, undefined, {\n targetId: targetId,\n reviewChecklist: CoursesReview__ReviewChecklistItem.encodeArray(trimmedChecklist)\n }).then(function (response) {\n if (response.updateReviewChecklist.success) {\n Curry._1(updateReviewChecklistCB, trimmedChecklist);\n }\n Curry._1(send, /* UpdateSaving */1);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateChecklistItemTitle(itemIndex, title, checklistItem, send) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.updateTitle(title, checklistItem),\n _1: itemIndex\n });\n}\n\nfunction updateChecklistResultTitle(itemIndex, resultIndex, title, reviewChecklistItem, resultItem, send) {\n var newReviewChecklistItem = CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateTitle(title, resultItem, resultIndex, CoursesReview__ReviewChecklistItem.result(reviewChecklistItem)), reviewChecklistItem);\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: newReviewChecklistItem,\n _1: itemIndex\n });\n}\n\nfunction updateChecklistResultFeedback(itemIndex, resultIndex, feedback, reviewChecklistItem, resultItem, send) {\n var newReviewChecklistItem = CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateFeedback(feedback, resultItem, resultIndex, CoursesReview__ReviewChecklistItem.result(reviewChecklistItem)), reviewChecklistItem);\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: newReviewChecklistItem,\n _1: itemIndex\n });\n}\n\nfunction addEmptyResultItem(send, reviewChecklistItem, itemIndex) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.appendEmptyChecklistItem(reviewChecklistItem),\n _1: itemIndex\n });\n}\n\nfunction removeChecklistResult(itemIndex, resultIndex, reviewChecklistItem, send) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.deleteResultItem(resultIndex, reviewChecklistItem),\n _1: itemIndex\n });\n}\n\nfunction initialStateForReviewChecklist(reviewChecklist) {\n if (ArrayUtils.isEmpty(reviewChecklist)) {\n return CoursesReview__ReviewChecklistItem.emptyTemplate(undefined);\n } else {\n return reviewChecklist;\n }\n}\n\nfunction invalidTitle(title) {\n return title.trim() === \"\";\n}\n\nfunction invalidChecklist(reviewChecklist) {\n return ArrayUtils.isNotEmpty(reviewChecklist.map(function (reviewChecklistItem) {\n var title = CoursesReview__ReviewChecklistItem.title(reviewChecklistItem);\n if (title.trim() === \"\") {\n return true;\n } else {\n return ArrayUtils.isNotEmpty(CoursesReview__ReviewChecklistItem.result(reviewChecklistItem).filter(function (resultItem) {\n var title = CoursesReview__ReviewChecklistResult.title(resultItem);\n return title.trim() === \"\";\n }));\n }\n }).filter(function (valid) {\n return valid;\n }));\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n if (action === /* AddEmptyChecklistItem */0) {\n return {\n reviewChecklist: state.reviewChecklist.concat(CoursesReview__ReviewChecklistItem.empty(undefined)),\n saving: state.saving\n };\n } else {\n return {\n reviewChecklist: state.reviewChecklist,\n saving: !state.saving\n };\n }\n }\n switch (action.TAG | 0) {\n case /* SwapUpReviewChecklistItem */0 :\n return {\n reviewChecklist: ArrayUtils.swapUp(action._0, state.reviewChecklist),\n saving: state.saving\n };\n case /* SwapDownReviewChecklistItem */1 :\n return {\n reviewChecklist: ArrayUtils.swapDown(action._0, state.reviewChecklist),\n saving: state.saving\n };\n case /* UpdateChecklistItem */2 :\n return {\n reviewChecklist: CoursesReview__ReviewChecklistItem.replace(action._0, action._1, state.reviewChecklist),\n saving: state.saving\n };\n case /* RemoveChecklistItem */3 :\n var itemIndex = action._0;\n return {\n reviewChecklist: state.reviewChecklist.filter(function (_el, i) {\n return i !== itemIndex;\n }),\n saving: state.saving\n };\n \n }\n}\n\nfunction controlIcon(icon, title, hiddenOpt, handler) {\n var hidden = hiddenOpt !== undefined ? hiddenOpt : false;\n return ReactUtils.nullIf(React.createElement(\"button\", {\n \"aria-label\": title,\n className: \"px-2 py-1 rounded text-sm bg-gray-100 text-gray-500 hover:bg-gray-300 hover:text-gray-900 overflow-hidden focus:outline-none focus:bg-gray-300 focus:text-gray-900\",\n title: title,\n disabled: hidden,\n onClick: handler\n }, React.createElement(\"i\", {\n className: \"fas fa-fw \" + icon\n })), hidden);\n}\n\nfunction CoursesReview__ChecklistEditor(Props) {\n var reviewChecklist = Props.reviewChecklist;\n var updateReviewChecklistCB = Props.updateReviewChecklistCB;\n var closeEditModeCB = Props.closeEditModeCB;\n var targetId = Props.targetId;\n var match = React.useReducer(reducer, {\n reviewChecklist: initialStateForReviewChecklist(reviewChecklist),\n saving: false\n });\n var send = match[1];\n var state = match[0];\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 h-16\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 items-center justify-between\"\n }, React.createElement(\"h5\", {\n className: \"font-medium flex items-center tracking-wide\"\n }, ArrayUtils.isEmpty(reviewChecklist) ? t(undefined, undefined, \"create_review_checklist\") : t(undefined, undefined, \"edit_review_checklist\")))), React.createElement(DisablingCover.make, {\n disabled: state.saving,\n children: null\n }, React.createElement(\"div\", {\n className: \"p-4 md:p-6 relative\"\n }, React.createElement(\"div\", undefined, state.reviewChecklist.map(function (reviewChecklistItem, itemIndex) {\n var title = CoursesReview__ReviewChecklistItem.title(reviewChecklistItem);\n return React.createElement(Spread.make, {\n props: {\n \"data-checklist-item\": String(itemIndex)\n },\n children: React.createElement(\"div\", {\n className: \"flex items-start gap-1\"\n }, React.createElement(\"div\", {\n key: String(itemIndex),\n \"aria-label\": \"checklist-item-\" + String(itemIndex),\n className: \"p-3 md:p-5 mb-5 flex flex-col flex-1 bg-gray-100 rounded-lg\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"div\", {\n className: \"w-full\"\n }, React.createElement(\"input\", {\n className: \"checklist-editor__checklist-item-title h-11 text-sm focus:outline-none focus:bg-white focus:border-primary-300\",\n id: \"checklist_\" + String(itemIndex) + \"_title\",\n placeholder: t(undefined, undefined, \"checklist_title.placeholder\"),\n type: \"text\",\n value: CoursesReview__ReviewChecklistItem.title(reviewChecklistItem),\n onChange: (function ($$event) {\n return updateChecklistItemTitle(itemIndex, $$event.target.value, reviewChecklistItem, send);\n })\n }), React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"checklist_title.error_message\"),\n active: title.trim() === \"\"\n }))), React.createElement(\"div\", undefined, CoursesReview__ReviewChecklistItem.result(reviewChecklistItem).map(function (resultItem, resultIndex) {\n var feedback = Belt_Option.getWithDefault(CoursesReview__ReviewChecklistResult.feedback(resultItem), \"\");\n var title = CoursesReview__ReviewChecklistResult.title(resultItem);\n return React.createElement(Spread.make, {\n props: {\n \"data-result-item\": String(resultIndex)\n },\n children: React.createElement(\"div\", {\n className: \"pl-2 md:pl-4 mt-2\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"label\", {\n className: \"shrink-0 rounded border border-gray-300 bg-gray-50 w-4 h-4 mr-2 mt-3 cursor-not-allowed\",\n title: t(undefined, undefined, \"disabled\")\n }), React.createElement(\"div\", {\n className: \"w-full bg-gray-50 relative\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between gap-2 bg-white border border-gray-300 border-b-transparent rounded-t focus-within:outline-none focus-within:bg-white focus-within:border-primary-300\"\n }, React.createElement(\"input\", {\n className: \"checklist-editor__checklist-result-item-title border-none h-10 pr-0 focus:outline-none\",\n id: \"result_\" + String(itemIndex) + String(resultIndex) + \"_title\",\n placeholder: t(undefined, undefined, \"checklist_item_title.placeholder\"),\n type: \"text\",\n value: CoursesReview__ReviewChecklistResult.title(resultItem),\n onChange: (function ($$event) {\n return updateChecklistResultTitle(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, resultItem, send);\n })\n }), React.createElement(\"div\", {\n className: \"flex h-10 mr-1 space-x-1 items-center justify-center\"\n }, controlIcon(\"fa-arrow-up\", t(undefined, undefined, \"checklist_item_title.move_up_button_title\"), resultIndex <= 0, (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.moveResultItemUp(resultIndex, reviewChecklistItem),\n _1: itemIndex\n });\n })), controlIcon(\"fa-arrow-down\", t(undefined, undefined, \"checklist_item_title.move_down_button_title\"), resultIndex === (CoursesReview__ReviewChecklistItem.result(reviewChecklistItem).length - 1 | 0), (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.moveResultItemDown(resultIndex, reviewChecklistItem),\n _1: itemIndex\n });\n })), controlIcon(\"fa-trash-alt\", t(undefined, undefined, \"checklist_item_title.remove_button_title\"), undefined, (function (param) {\n return removeChecklistResult(itemIndex, resultIndex, reviewChecklistItem, send);\n })))), React.createElement(\"textarea\", {\n className: \"appearance-none border border-gray-300 bg-transparent rounded-b text-sm align-top py-2 px-4 leading-relaxed w-full focus:outline-none focus:bg-white focus:border-primary-300\",\n id: \"result_\" + String(itemIndex) + String(resultIndex) + \"_feedback\",\n cols: 33,\n placeholder: t(undefined, undefined, \"checklist_item_description.placeholder\"),\n rows: 2,\n type: \"text\",\n value: feedback,\n onChange: (function ($$event) {\n return updateChecklistResultFeedback(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, resultItem, send);\n })\n }), React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"checklist_item_description.error_message\"),\n active: title.trim() === \"\"\n })))),\n key: String(itemIndex) + String(resultIndex)\n });\n }), React.createElement(\"button\", {\n className: \"checklist-editor__add-result-btn ml-2 md:ml-4 mt-3 flex items-center focus:outline-none\",\n onClick: (function (param) {\n return addEmptyResultItem(send, reviewChecklistItem, itemIndex);\n })\n }, React.createElement(\"span\", {\n className: \"checklist-editor__add-result-btn-check shrink-0 rounded border border-gray-300 bg-gray-50 w-4 h-4 mr-2\",\n title: t(undefined, undefined, \"add_result\")\n }), React.createElement(\"span\", {\n className: \"checklist-editor__add-result-btn-text flex items-center text-sm font-semibold bg-gray-50 px-3 py-1 rounded border border-dashed border-gray-600\"\n }, React.createElement(\"i\", {\n className: \"fas fa-plus text-xs mr-2\"\n }), t(undefined, undefined, \"add_result\"))))), React.createElement(\"div\", {\n className: \"border border-gray-300 bg-white divide-y divide-gray-300 rounded flex flex-col text-xs sticky top-0 overflow-hidden\"\n }, controlIcon(\"fa-arrow-up\", t(undefined, undefined, \"checklist_title.move_up_button_title\"), itemIndex <= 0, (function (param) {\n return Curry._1(send, {\n TAG: /* SwapUpReviewChecklistItem */0,\n _0: itemIndex\n });\n })), controlIcon(\"fa-arrow-down\", t(undefined, undefined, \"checklist_title.move_down_button_title\"), itemIndex === (state.reviewChecklist.length - 1 | 0), (function (param) {\n return Curry._1(send, {\n TAG: /* SwapDownReviewChecklistItem */1,\n _0: itemIndex\n });\n })), controlIcon(\"fa-trash-alt\", t(undefined, undefined, \"checklist_title.remove_button_title\"), undefined, (function (param) {\n return Curry._1(send, {\n TAG: /* RemoveChecklistItem */3,\n _0: itemIndex\n });\n })))),\n key: String(itemIndex)\n });\n }), React.createElement(\"div\", undefined, React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"add_checklist_item\"),\n className: \"flex items-center text-sm font-semibold bg-white rounded-md border border-dashed border-gray-600 w-full hover:text-primary-500 hover:bg-white hover:border-primary-500 hover:shadow-md focus:outline-none focus:text-primary-500 focus:bg-white focus:border-primary-500 focus:shadow-md\",\n onClick: (function (param) {\n return Curry._1(send, /* AddEmptyChecklistItem */0);\n })\n }, React.createElement(\"span\", {\n className: \"bg-gray-100 py-2 w-10\"\n }, React.createElement(\"i\", {\n className: \"fas fa-plus text-sm\"\n })), React.createElement(\"span\", {\n className: \"px-3 py-2\"\n }, t(undefined, undefined, \"add_checklist_item\")))))), React.createElement(\"div\", {\n className: \"flex bg-gray-50 border-t flex-row-reverse sticky bottom-0 px-4 py-2 md:py-4\"\n }, React.createElement(\"button\", {\n className: \"btn btn-success\",\n disabled: state.saving || invalidChecklist(state.reviewChecklist),\n onClick: (function (param) {\n return updateReviewChecklist(targetId, state.reviewChecklist, send, updateReviewChecklistCB);\n })\n }, t(undefined, undefined, \"save_checklist\")), React.createElement(\"button\", {\n className: \"btn btn-subtle mr-4\",\n onClick: (function (param) {\n return Curry._1(closeEditModeCB, undefined);\n })\n }, t(undefined, undefined, \"cancel\")))));\n}\n\nvar make = CoursesReview__ChecklistEditor;\n\nexport {\n t ,\n str ,\n UpdateReviewChecklistMutation ,\n updateReviewChecklist ,\n updateChecklistItemTitle ,\n updateChecklistResultTitle ,\n updateChecklistResultFeedback ,\n addEmptyResultItem ,\n removeChecklistResult ,\n initialStateForReviewChecklist ,\n invalidTitle ,\n invalidChecklist ,\n reducer ,\n controlIcon ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as CoursesReview__ChecklistShow from \"./CoursesReview__ChecklistShow.bs.js\";\nimport * as CoursesReview__ChecklistEditor from \"./CoursesReview__ChecklistEditor.bs.js\";\n\nvar partial_arg = \"components.CoursesReview__Checklist\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction closeEditMode(setState, param) {\n return Curry._1(setState, (function (param) {\n return /* Show */1;\n }));\n}\n\nfunction showEditor(setState, param) {\n return Curry._1(setState, (function (param) {\n return /* Edit */0;\n }));\n}\n\nfunction updateReviewChecklist(setState, updateReviewChecklistCB, reviewChecklist) {\n Curry._1(updateReviewChecklistCB, reviewChecklist);\n return Curry._1(setState, (function (param) {\n return /* Show */1;\n }));\n}\n\nfunction handleEmpty(setState) {\n return React.createElement(\"div\", {\n className: \"p-4 md:p-6\"\n }, React.createElement(\"button\", {\n className: \"bg-gray-50 border border-primary-500 border-dashed rounded-lg p-3 md:p-5 flex items-center w-full hover:bg-gray-50 hover:border-primary-600 hover:shadow-lg focus:outline-none\",\n onClick: (function (param) {\n return Curry._1(setState, (function (param) {\n return /* Edit */0;\n }));\n })\n }, React.createElement(\"span\", {\n className: \"inline-flex shrink-0 bg-white w-14 h-14 border border-dashed border-primary-500 rounded-full items-center justify-center shadow-md\"\n }, React.createElement(\"span\", {\n className: \"inline-flex items-center justify-center shrink-0 w-10 h-10 rounded-full bg-primary-500 text-white\"\n }, React.createElement(\"i\", {\n className: \"fa fa-plus\"\n }))), React.createElement(\"span\", {\n className: \"block text-left ml-4\"\n }, React.createElement(\"span\", {\n className: \"block text-base font-semibold text-primary-500\"\n }, t(undefined, undefined, \"create_review_checklist\")), React.createElement(\"span\", {\n className: \"text-sm block\"\n }, t(undefined, undefined, \"create_review_checklist_description\")))));\n}\n\nfunction CoursesReview__Checklist(Props) {\n var reviewChecklist = Props.reviewChecklist;\n var updateFeedbackCB = Props.updateFeedbackCB;\n var feedback = Props.feedback;\n var updateReviewChecklistCB = Props.updateReviewChecklistCB;\n var targetId = Props.targetId;\n var cancelCB = Props.cancelCB;\n var overlaySubmission = Props.overlaySubmission;\n var submissionDetails = Props.submissionDetails;\n var match = React.useState(function () {\n if (ArrayUtils.isEmpty(reviewChecklist)) {\n return /* Edit */0;\n } else {\n return /* Show */1;\n }\n });\n var setState = match[1];\n return React.createElement(\"div\", undefined, match[0] ? React.createElement(CoursesReview__ChecklistShow.make, {\n reviewChecklist: reviewChecklist,\n feedback: feedback,\n updateFeedbackCB: updateFeedbackCB,\n showEditorCB: (function (param) {\n return Curry._1(setState, (function (param) {\n return /* Edit */0;\n }));\n }),\n cancelCB: cancelCB,\n overlaySubmission: overlaySubmission,\n submissionDetails: submissionDetails\n }) : React.createElement(CoursesReview__ChecklistEditor.make, {\n reviewChecklist: reviewChecklist,\n updateReviewChecklistCB: (function (param) {\n Curry._1(updateReviewChecklistCB, param);\n return Curry._1(setState, (function (param) {\n return /* Show */1;\n }));\n }),\n closeEditModeCB: (function (param) {\n return Curry._1(setState, (function (param) {\n return /* Show */1;\n }));\n }),\n targetId: targetId\n }));\n}\n\nvar make = CoursesReview__Checklist;\n\nexport {\n t ,\n str ,\n closeEditMode ,\n showEditor ,\n updateReviewChecklist ,\n handleEmpty ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as CoursesReview__Reviewer from \"../types/CoursesReview__Reviewer.bs.js\";\nimport * as CoursesReview__SubmissionDetails from \"../types/CoursesReview__SubmissionDetails.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesReview__ReviewerManager\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation AssignReviewerMutation($submissionId: ID!) {\\nassignReviewer(submissionId: $submissionId) {\\nreviewer {\\n...UserProxyFragment \\n}\\n\\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse(value) {\n var value$1 = value.assignReviewer;\n var value$2 = value$1.reviewer;\n return {\n assignReviewer: {\n reviewer: UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value$2)\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.assignReviewer;\n var value$2 = value$1.reviewer;\n var reviewer = UserProxy.Fragment.serialize(value$2);\n var assignReviewer = {\n reviewer: reviewer\n };\n return {\n assignReviewer: assignReviewer\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables(submissionId, param) {\n return {\n submissionId: submissionId\n };\n}\n\nvar AssignReviewerMutation_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar AssignReviewerMutation_Graphql_error = include.Graphql_error;\n\nvar AssignReviewerMutation_decodeNotification = include.decodeNotification;\n\nvar AssignReviewerMutation_decodeObject = include.decodeObject;\n\nvar AssignReviewerMutation_decodeNotifications = include.decodeNotifications;\n\nvar AssignReviewerMutation_decodeErrors = include.decodeErrors;\n\nvar AssignReviewerMutation_flashNotifications = include.flashNotifications;\n\nvar AssignReviewerMutation_sendQuery = include.sendQuery;\n\nvar AssignReviewerMutation_query = include.query;\n\nvar AssignReviewerMutation_fetch = include.$$fetch;\n\nvar AssignReviewerMutation = {\n AssignReviewerMutation_inner: AssignReviewerMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: AssignReviewerMutation_Graphql_error,\n decodeNotification: AssignReviewerMutation_decodeNotification,\n decodeObject: AssignReviewerMutation_decodeObject,\n decodeNotifications: AssignReviewerMutation_decodeNotifications,\n decodeErrors: AssignReviewerMutation_decodeErrors,\n flashNotifications: AssignReviewerMutation_flashNotifications,\n sendQuery: AssignReviewerMutation_sendQuery,\n query: AssignReviewerMutation_query,\n $$fetch: AssignReviewerMutation_fetch,\n make: make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation ReassignReviewerMutation($submissionId: ID!) {\\nreassignReviewer(submissionId: $submissionId) {\\nreviewer {\\n...UserProxyFragment \\n}\\n\\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse$1(value) {\n var value$1 = value.reassignReviewer;\n var value$2 = value$1.reviewer;\n return {\n reassignReviewer: {\n reviewer: UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value$2)\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.reassignReviewer;\n var value$2 = value$1.reviewer;\n var reviewer = UserProxy.Fragment.serialize(value$2);\n var reassignReviewer = {\n reviewer: reviewer\n };\n return {\n reassignReviewer: reassignReviewer\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables$1(submissionId, param) {\n return {\n submissionId: submissionId\n };\n}\n\nvar ReassignReviewerMutation_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$1 = include$1.make;\n\nvar ReassignReviewerMutation_Graphql_error = include$1.Graphql_error;\n\nvar ReassignReviewerMutation_decodeNotification = include$1.decodeNotification;\n\nvar ReassignReviewerMutation_decodeObject = include$1.decodeObject;\n\nvar ReassignReviewerMutation_decodeNotifications = include$1.decodeNotifications;\n\nvar ReassignReviewerMutation_decodeErrors = include$1.decodeErrors;\n\nvar ReassignReviewerMutation_flashNotifications = include$1.flashNotifications;\n\nvar ReassignReviewerMutation_sendQuery = include$1.sendQuery;\n\nvar ReassignReviewerMutation_query = include$1.query;\n\nvar ReassignReviewerMutation_fetch = include$1.$$fetch;\n\nvar ReassignReviewerMutation = {\n ReassignReviewerMutation_inner: ReassignReviewerMutation_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: ReassignReviewerMutation_Graphql_error,\n decodeNotification: ReassignReviewerMutation_decodeNotification,\n decodeObject: ReassignReviewerMutation_decodeObject,\n decodeNotifications: ReassignReviewerMutation_decodeNotifications,\n decodeErrors: ReassignReviewerMutation_decodeErrors,\n flashNotifications: ReassignReviewerMutation_flashNotifications,\n sendQuery: ReassignReviewerMutation_sendQuery,\n query: ReassignReviewerMutation_query,\n $$fetch: ReassignReviewerMutation_fetch,\n make: make$1\n};\n\nfunction assignReviewer(submissionId, setSaving, updateReviewerCB) {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Curry._3(make, undefined, undefined, {\n submissionId: submissionId\n }).then(function (response) {\n Curry._1(updateReviewerCB, UserProxy.makeFromJs(response.assignReviewer.reviewer));\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction reassignReviewer(submissionId, setSaving, updateReviewerCB) {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Curry._3(make$1, undefined, undefined, {\n submissionId: submissionId\n }).then(function (response) {\n Curry._1(updateReviewerCB, UserProxy.makeFromJs(response.reassignReviewer.reviewer));\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction CoursesReview__ReviewerManager(Props) {\n var submissionId = Props.submissionId;\n var submissionDetails = Props.submissionDetails;\n var updateReviewerCB = Props.updateReviewerCB;\n var match = React.useState(function () {\n return false;\n });\n var setSaving = match[1];\n var saving = match[0];\n var reviewer = CoursesReview__SubmissionDetails.reviewer(submissionDetails);\n var tmp;\n if (reviewer !== undefined) {\n var avatarUrl = UserProxy.avatarUrl(CoursesReview__Reviewer.user(reviewer));\n tmp = [\n React.createElement(\"div\", {\n key: \"reviewer-details\",\n className: \"inline-flex bg-gray-50 px-3 py-2 mt-2 rounded-md\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"h-9 w-9 md:h-10 md:w-10 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: UserProxy.name(CoursesReview__Reviewer.user(reviewer)),\n className: \"h-9 w-9 md:h-10 md:w-10 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 object-cover\"\n }), React.createElement(\"div\", {\n className: \"ml-2\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, UserProxy.name(CoursesReview__Reviewer.user(reviewer))), React.createElement(\"p\", {\n className: \"text-xs text-gray-800\"\n }, t([[\n \"date\",\n DateFns.formatDistanceToNow(CoursesReview__Reviewer.assignedAt(reviewer), undefined, true, undefined)\n ]], undefined, \"assigned_at\")))),\n React.createElement(\"div\", {\n key: \"change-reviewer-button\",\n className: \"flex flex-col md:flex-row items-center mt-4\"\n }, React.createElement(\"p\", {\n className: \"text-sm pr-4\"\n }, t([[\n \"current_coach_name\",\n UserProxy.name(CoursesReview__Reviewer.user(reviewer))\n ]], undefined, \"remove_reviewer_assign_to_me\")), React.createElement(\"button\", {\n className: \"btn md:btn-small btn-default w-full md:w-auto mt-2 md:mt-0\",\n disabled: saving,\n onClick: (function (param) {\n return reassignReviewer(submissionId, setSaving, updateReviewerCB);\n })\n }, t(undefined, undefined, \"change_reviewer_and_start_review\")))\n ];\n } else {\n tmp = [\n React.createElement(\"div\", {\n key: \"no-reviewer\",\n className: \"flex items-center justify-center\"\n }, React.createElement(\"div\", {\n className: \"h-24 w-24 md:h-30 md:w-30 rounded-xl bg-gray-100 flex items-center justify-center\"\n }, React.createElement(Icon.make, {\n className: \"if i-eye-solid text-gray-400 text-4xl\"\n }))),\n React.createElement(\"div\", {\n key: \"start-review\",\n className: \"flex items-center justify-center mt-4\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary w-full md:w-auto\",\n disabled: saving,\n onClick: (function (param) {\n return assignReviewer(submissionId, setSaving, updateReviewerCB);\n })\n }, t(undefined, undefined, \"start_review\")))\n ];\n }\n return React.createElement(\"div\", {\n className: \"w-full p-4 md:p-6 space-y-8 mx-auto\"\n }, React.createElement(\"div\", undefined, tmp));\n}\n\nvar UserProxyFragment;\n\nvar make$2 = CoursesReview__ReviewerManager;\n\nexport {\n str ,\n t ,\n UserProxyFragment ,\n AssignReviewerMutation ,\n ReassignReviewerMutation ,\n assignReviewer ,\n reassignReviewer ,\n make$2 as make,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as React from \"react\";\nimport * as PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as CoursesReview__SubmissionMeta from \"../types/CoursesReview__SubmissionMeta.bs.js\";\n\nimport \"./CoursesReview__SubmissionInfoCard.css\"\n;\n\nvar partial_arg = \"components.CoursesReview__SubmissionInfoCard\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction cardClasses(submission, selected) {\n var match = CoursesReview__SubmissionMeta.archivedAt(submission);\n var match$1 = CoursesReview__SubmissionMeta.passedAt(submission);\n var match$2 = CoursesReview__SubmissionMeta.evaluatedAt(submission);\n return \"inline-block bg-white relative rounded-lg submission-info__tab shrink-0 rounded-lg transition \" + (\n selected ? \"border border-primary-400 \" : \"bg-white/50 border border-gray-300 hover:bg-white \"\n ) + (\n match !== undefined ? \"submission-info__tab-deleted cursor-not-allowed focus:outline-none\" : (\n match$1 !== undefined ? \"submission-info__tab-completed focus:ring focus:ring-focusColor-400 shadow hover:shadow-lg\" : (\n match$2 !== undefined ? \"submission-info__tab-rejected focus:ring focus:ring-focusColor-400 shadow hover:shadow-lg\" : \"submission-info__tab-pending focus:ring focus:ring-focusColor-400 shadow hover:shadow-lg\"\n )\n )\n );\n}\n\nfunction showSubmissionStatus(submission) {\n var match = CoursesReview__SubmissionMeta.archivedAt(submission);\n var match$1 = CoursesReview__SubmissionMeta.passedAt(submission);\n var match$2 = CoursesReview__SubmissionMeta.evaluatedAt(submission);\n var match$3 = match !== undefined ? [\n t(undefined, undefined, \"deleted\"),\n \"bg-gray-300 text-gray-800 \"\n ] : (\n match$1 !== undefined ? [\n t(undefined, undefined, \"completed\"),\n \"bg-green-100 text-green-800\"\n ] : (\n match$2 !== undefined ? [\n t(undefined, undefined, \"rejected\"),\n \"bg-red-100 text-red-700\"\n ] : [\n t(undefined, undefined, \"pending_review\"),\n \"bg-orange-100 text-orange-800 \"\n ]\n )\n );\n return React.createElement(\"div\", {\n className: \"font-semibold px-3 py-px rounded \" + match$3[1]\n }, React.createElement(\"span\", {\n className: \"hidden md:block\"\n }, match$3[0]), React.createElement(\"span\", {\n className: \"md:hidden block\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-square-alt-solid if-fw\"\n })));\n}\n\nfunction linkUrl(submissionId, filterString) {\n return \"/submissions/\" + submissionId + \"/review\" + (\n $$String.trim(filterString) === \"\" ? \"\" : \"?\" + filterString\n );\n}\n\nfunction submissionInfoCardContent(submission, submissionNumber) {\n return React.createElement(\"div\", {\n className: \"px-4 py-2 flex flex-row items-center justify-between min-w-min\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col md:pr-6\"\n }, React.createElement(\"h2\", {\n className: \"font-semibold text-sm leading-tight\"\n }, React.createElement(\"p\", {\n className: \"hidden md:block\"\n }, t(undefined, undefined, \"submission_hash\") + \" #\" + String(submissionNumber)), React.createElement(\"p\", {\n className: \"md:hidden\"\n }, \"#\" + String(submissionNumber))), React.createElement(\"span\", {\n className: \"text-xs text-gray-800 pt-px whitespace-nowrap\"\n }, DateFns.formatPreset(CoursesReview__SubmissionMeta.createdAt(submission), undefined, true, undefined, undefined))), React.createElement(\"div\", {\n className: \"hidden md:flex items-center space-x-2 text-xs w-auto\"\n }, ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"flex items-center justify-center bg-primary-100 text-primary-600 border border-transparent font-semibold p-1 rounded\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-comment-alt-regular if-fw\"\n })), CoursesReview__SubmissionMeta.feedbackSent(submission)), showSubmissionStatus(submission)));\n}\n\nfunction CoursesReview__SubmissionInfoCard(Props) {\n var submission = Props.submission;\n var submissionNumber = Props.submissionNumber;\n var selected = Props.selected;\n var filterString = Props.filterString;\n var _archivedAt = CoursesReview__SubmissionMeta.archivedAt(submission);\n if (_archivedAt !== undefined) {\n return React.createElement(\"div\", {\n key: CoursesReview__SubmissionMeta.id(submission),\n className: cardClasses(submission, selected),\n title: t(undefined, undefined, \"submission_hash\") + \" #\" + String(submissionNumber)\n }, submissionInfoCardContent(submission, submissionNumber));\n } else {\n return React.createElement(Link.make, {\n href: linkUrl(CoursesReview__SubmissionMeta.id(submission), filterString),\n className: cardClasses(submission, selected),\n title: t(undefined, undefined, \"submission_hash\") + \" #\" + String(submissionNumber),\n children: submissionInfoCardContent(submission, submissionNumber),\n key: CoursesReview__SubmissionMeta.id(submission)\n });\n }\n}\n\nvar make = CoursesReview__SubmissionInfoCard;\n\nexport {\n t ,\n str ,\n cardClasses ,\n showSubmissionStatus ,\n linkUrl ,\n submissionInfoCardContent ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as Spread from \"../../../shared/components/Spread.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as DomUtils from \"../../../shared/utils/DomUtils.bs.js\";\nimport * as HelpIcon from \"../../../shared/components/HelpIcon.bs.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as GradeLabel from \"../../../shared/types/GradeLabel.bs.js\";\nimport * as LevelLabel from \"../../../shared/utils/LevelLabel.bs.js\";\nimport * as ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as WindowUtils from \"../../../shared/utils/WindowUtils.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as $$Notification from \"../../../shared/Notification.bs.js\";\nimport * as ReactHelmet from \"react-helmet\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as DisablingCover from \"../../../shared/components/DisablingCover.bs.js\";\nimport * as MarkdownEditor from \"../../../shared/components/MarkdownEditor.bs.js\";\nimport * as AppRouter__User from \"../../../layouts/app_router/types/AppRouter__User.bs.js\";\nimport * as EvaluationCriterion from \"../../../shared/types/EvaluationCriterion.bs.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoursesReview__Grade from \"../types/CoursesReview__Grade.bs.js\";\nimport * as CoursesReview__Filter from \"../types/CoursesReview__Filter.bs.js\";\nimport * as CoursesReview__Student from \"../types/CoursesReview__Student.bs.js\";\nimport * as CoursesReview__Feedback from \"../types/CoursesReview__Feedback.bs.js\";\nimport * as CoursesReview__Reviewer from \"../types/CoursesReview__Reviewer.bs.js\";\nimport * as SubmissionChecklistItem from \"../types/SubmissionChecklistItem.bs.js\";\nimport * as SubmissionChecklistShow from \"./SubmissionChecklistShow.bs.js\";\nimport * as CoursesReview__Checklist from \"./CoursesReview__Checklist.bs.js\";\nimport * as CoursesReview__SubmissionMeta from \"../types/CoursesReview__SubmissionMeta.bs.js\";\nimport * as CoursesReview__ReviewerManager from \"./CoursesReview__ReviewerManager.bs.js\";\nimport * as CoursesReview__SubmissionReport from \"../types/CoursesReview__SubmissionReport.bs.js\";\nimport * as CoursesReview__OverlaySubmission from \"../types/CoursesReview__OverlaySubmission.bs.js\";\nimport * as CoursesReview__SubmissionDetails from \"../types/CoursesReview__SubmissionDetails.bs.js\";\nimport * as CoursesStudents__PersonalCoaches from \"../../students/components/CoursesStudents__PersonalCoaches.bs.js\";\nimport * as CoursesReview__SubmissionInfoCard from \"./CoursesReview__SubmissionInfoCard.bs.js\";\n\nimport \"./CoursesReview__Editor.css\"\n;\n\nvar partial_arg = \"components.CoursesReview__Editor\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction str(prim) {\n return prim;\n}\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* BeginSaving */0 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: true,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* FinishSaving */1 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: false,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* ShowGradesEditor */2 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: /* GradesEditor */1,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* ShowChecklistEditor */3 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: /* ChecklistEditor */2,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* ShowAdditionalFeedbackEditor */4 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: true,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* FeedbackAfterSave */5 :\n return {\n grades: state.grades,\n newFeedback: \"\",\n saving: false,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: false,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* SetNextSubmissionDataLoading */6 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: /* DataLoading */1,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* SetNextSubmissionDataEmpty */7 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: /* DataEmpty */2,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* UnassignReviewer */8 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: false,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: /* AssignReviewer */0,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* ChangeReportVisibility */9 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: !state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateFeedback */0 :\n return {\n grades: state.grades,\n newFeedback: action._0,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* GenerateFeeback */1 :\n return {\n grades: state.grades,\n newFeedback: action._0,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: action._1,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: true,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* UpdateGrades */2 :\n return {\n grades: action._0,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* UpdateChecklist */3 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: action._0,\n note: state.note,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* UpdateNote */4 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: action._0,\n editor: state.editor,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* UpdateEditor */5 :\n return {\n grades: state.grades,\n newFeedback: state.newFeedback,\n saving: state.saving,\n showReport: state.showReport,\n checklist: state.checklist,\n note: state.note,\n editor: action._0,\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n case /* FinishGrading */6 :\n return {\n grades: state.grades,\n newFeedback: \"\",\n saving: false,\n showReport: state.showReport,\n checklist: state.checklist,\n note: undefined,\n editor: /* ReviewedSubmissionEditor */{\n _0: action._0\n },\n additonalFeedbackEditorVisible: state.additonalFeedbackEditorVisible,\n feedbackGenerated: state.feedbackGenerated,\n nextSubmission: state.nextSubmission,\n reloadSubmissionReport: state.reloadSubmissionReport\n };\n \n }\n }\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreateGradingMutation($submissionId: ID!, $feedback: String, $grades: [GradeInput!]!, $note: String, $checklist: JSON!) {\\ncreateGrading(submissionId: $submissionId, feedback: $feedback, grades: $grades, note: $note, checklist: $checklist) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createGrading;\n return {\n createGrading: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createGrading;\n var value$2 = value$1.success;\n var createGrading = {\n success: value$2\n };\n return {\n createGrading: createGrading\n };\n}\n\nfunction serializeInputObjectGradeInput(inp) {\n return {\n evaluationCriterionId: inp.evaluationCriterionId,\n grade: inp.grade\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.feedback;\n var a$1 = inp.grades;\n var a$2 = inp.note;\n return {\n submissionId: inp.submissionId,\n feedback: a !== undefined ? a : undefined,\n grades: a$1.map(serializeInputObjectGradeInput),\n note: a$2 !== undefined ? a$2 : undefined,\n checklist: inp.checklist\n };\n}\n\nfunction makeVariables(submissionId, feedback, grades, note, checklist, param) {\n return {\n submissionId: submissionId,\n feedback: feedback,\n grades: grades,\n note: note,\n checklist: checklist\n };\n}\n\nfunction makeInputObjectGradeInput(evaluationCriterionId, grade, param) {\n return {\n evaluationCriterionId: evaluationCriterionId,\n grade: grade\n };\n}\n\nvar CreateGradingMutation_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n serializeInputObjectGradeInput: serializeInputObjectGradeInput,\n makeVariables: makeVariables,\n makeInputObjectGradeInput: makeInputObjectGradeInput\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar CreateGradingMutation_Graphql_error = include.Graphql_error;\n\nvar CreateGradingMutation_decodeNotification = include.decodeNotification;\n\nvar CreateGradingMutation_decodeObject = include.decodeObject;\n\nvar CreateGradingMutation_decodeNotifications = include.decodeNotifications;\n\nvar CreateGradingMutation_decodeErrors = include.decodeErrors;\n\nvar CreateGradingMutation_flashNotifications = include.flashNotifications;\n\nvar CreateGradingMutation_sendQuery = include.sendQuery;\n\nvar CreateGradingMutation_query = include.query;\n\nvar CreateGradingMutation_make = include.make;\n\nvar CreateGradingMutation = {\n CreateGradingMutation_inner: CreateGradingMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n serializeInputObjectGradeInput: serializeInputObjectGradeInput,\n makeVariables: makeVariables,\n makeInputObjectGradeInput: makeInputObjectGradeInput,\n Graphql_error: CreateGradingMutation_Graphql_error,\n decodeNotification: CreateGradingMutation_decodeNotification,\n decodeObject: CreateGradingMutation_decodeObject,\n decodeNotifications: CreateGradingMutation_decodeNotifications,\n decodeErrors: CreateGradingMutation_decodeErrors,\n flashNotifications: CreateGradingMutation_flashNotifications,\n sendQuery: CreateGradingMutation_sendQuery,\n query: CreateGradingMutation_query,\n $$fetch: $$fetch,\n make: CreateGradingMutation_make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation UndoGradingMutation($submissionId: ID!) {\\nundoGrading(submissionId: $submissionId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.undoGrading;\n return {\n undoGrading: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.undoGrading;\n var value$2 = value$1.success;\n var undoGrading = {\n success: value$2\n };\n return {\n undoGrading: undoGrading\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables$1(submissionId, param) {\n return {\n submissionId: submissionId\n };\n}\n\nvar UndoGradingMutation_inner = {\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1\n};\n\nvar include$1 = GraphqlQuery.Extender({\n Raw: Raw$1,\n query: query$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$1 = include$1.$$fetch;\n\nvar UndoGradingMutation_Graphql_error = include$1.Graphql_error;\n\nvar UndoGradingMutation_decodeNotification = include$1.decodeNotification;\n\nvar UndoGradingMutation_decodeObject = include$1.decodeObject;\n\nvar UndoGradingMutation_decodeNotifications = include$1.decodeNotifications;\n\nvar UndoGradingMutation_decodeErrors = include$1.decodeErrors;\n\nvar UndoGradingMutation_flashNotifications = include$1.flashNotifications;\n\nvar UndoGradingMutation_sendQuery = include$1.sendQuery;\n\nvar UndoGradingMutation_query = include$1.query;\n\nvar UndoGradingMutation_make = include$1.make;\n\nvar UndoGradingMutation = {\n UndoGradingMutation_inner: UndoGradingMutation_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: UndoGradingMutation_Graphql_error,\n decodeNotification: UndoGradingMutation_decodeNotification,\n decodeObject: UndoGradingMutation_decodeObject,\n decodeNotifications: UndoGradingMutation_decodeNotifications,\n decodeErrors: UndoGradingMutation_decodeErrors,\n flashNotifications: UndoGradingMutation_flashNotifications,\n sendQuery: UndoGradingMutation_sendQuery,\n query: UndoGradingMutation_query,\n $$fetch: $$fetch$1,\n make: UndoGradingMutation_make\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"mutation CreateFeedbackMutation($submissionId: ID!, $feedback: String!) {\\ncreateFeedback(submissionId: $submissionId, feedback: $feedback) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$2(value) {\n var value$1 = value.createFeedback;\n return {\n createFeedback: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.createFeedback;\n var value$2 = value$1.success;\n var createFeedback = {\n success: value$2\n };\n return {\n createFeedback: createFeedback\n };\n}\n\nfunction serializeVariables$2(inp) {\n return {\n submissionId: inp.submissionId,\n feedback: inp.feedback\n };\n}\n\nfunction makeVariables$2(submissionId, feedback, param) {\n return {\n submissionId: submissionId,\n feedback: feedback\n };\n}\n\nvar CreateFeedbackMutation_inner = {\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2\n};\n\nvar include$2 = GraphqlQuery.Extender({\n Raw: Raw$2,\n query: query$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include$2.make;\n\nvar CreateFeedbackMutation_Graphql_error = include$2.Graphql_error;\n\nvar CreateFeedbackMutation_decodeNotification = include$2.decodeNotification;\n\nvar CreateFeedbackMutation_decodeObject = include$2.decodeObject;\n\nvar CreateFeedbackMutation_decodeNotifications = include$2.decodeNotifications;\n\nvar CreateFeedbackMutation_decodeErrors = include$2.decodeErrors;\n\nvar CreateFeedbackMutation_flashNotifications = include$2.flashNotifications;\n\nvar CreateFeedbackMutation_sendQuery = include$2.sendQuery;\n\nvar CreateFeedbackMutation_query = include$2.query;\n\nvar CreateFeedbackMutation_fetch = include$2.$$fetch;\n\nvar CreateFeedbackMutation = {\n CreateFeedbackMutation_inner: CreateFeedbackMutation_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\n Graphql_error: CreateFeedbackMutation_Graphql_error,\n decodeNotification: CreateFeedbackMutation_decodeNotification,\n decodeObject: CreateFeedbackMutation_decodeObject,\n decodeNotifications: CreateFeedbackMutation_decodeNotifications,\n decodeErrors: CreateFeedbackMutation_decodeErrors,\n flashNotifications: CreateFeedbackMutation_flashNotifications,\n sendQuery: CreateFeedbackMutation_sendQuery,\n query: CreateFeedbackMutation_query,\n $$fetch: CreateFeedbackMutation_fetch,\n make: make\n};\n\nvar Raw$3 = {};\n\nvar query$3 = \"query NextSubmissionQuery($courseId: ID!, $search: String, $targetId: ID, $status: SubmissionStatus, $sortDirection: SortDirection!, $sortCriterion: SubmissionSortCriterion!, $levelId: ID, $personalCoachId: ID, $assignedCoachId: ID, $excludeSubmissionId: ID, $after: String) {\\nsubmissions(courseId: $courseId, search: $search, targetId: $targetId, status: $status, sortDirection: $sortDirection, excludeSubmissionId: $excludeSubmissionId, sortCriterion: $sortCriterion, levelId: $levelId, personalCoachId: $personalCoachId, assignedCoachId: $assignedCoachId, first: 1, after: $after) {\\nnodes {\\nid \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse$3(value) {\n var value$1 = value.submissions;\n var value$2 = value$1.nodes;\n return {\n submissions: {\n nodes: value$2.map(function (value) {\n return {\n id: value.id\n };\n })\n }\n };\n}\n\nfunction serialize$3(value) {\n var value$1 = value.submissions;\n var value$2 = value$1.nodes;\n var nodes = value$2.map(function (value) {\n var value$1 = value.id;\n return {\n id: value$1\n };\n });\n var submissions = {\n nodes: nodes\n };\n return {\n submissions: submissions\n };\n}\n\nfunction serializeVariables$3(inp) {\n var a = inp.search;\n var a$1 = inp.targetId;\n var a$2 = inp.status;\n var a$3 = inp.sortDirection;\n var a$4 = inp.sortCriterion;\n var a$5 = inp.levelId;\n var a$6 = inp.personalCoachId;\n var a$7 = inp.assignedCoachId;\n var a$8 = inp.excludeSubmissionId;\n var a$9 = inp.after;\n return {\n courseId: inp.courseId,\n search: a !== undefined ? a : undefined,\n targetId: a$1 !== undefined ? a$1 : undefined,\n status: a$2 !== undefined ? (\n a$2 === \"Reviewed\" ? \"Reviewed\" : \"Pending\"\n ) : undefined,\n sortDirection: a$3 === \"Descending\" ? \"Descending\" : \"Ascending\",\n sortCriterion: a$4 === \"EvaluatedAt\" ? \"EvaluatedAt\" : \"SubmittedAt\",\n levelId: a$5 !== undefined ? a$5 : undefined,\n personalCoachId: a$6 !== undefined ? a$6 : undefined,\n assignedCoachId: a$7 !== undefined ? a$7 : undefined,\n excludeSubmissionId: a$8 !== undefined ? a$8 : undefined,\n after: a$9 !== undefined ? a$9 : undefined\n };\n}\n\nfunction makeVariables$3(courseId, search, targetId, status, sortDirection, sortCriterion, levelId, personalCoachId, assignedCoachId, excludeSubmissionId, after, param) {\n return {\n courseId: courseId,\n search: search,\n targetId: targetId,\n status: status,\n sortDirection: sortDirection,\n sortCriterion: sortCriterion,\n levelId: levelId,\n personalCoachId: personalCoachId,\n assignedCoachId: assignedCoachId,\n excludeSubmissionId: excludeSubmissionId,\n after: after\n };\n}\n\nvar NextSubmissionQuery_inner = {\n Raw: Raw$3,\n query: query$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n makeVariables: makeVariables$3\n};\n\nvar include$3 = GraphqlQuery.Extender({\n Raw: Raw$3,\n query: query$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$1 = include$3.make;\n\nvar NextSubmissionQuery_Graphql_error = include$3.Graphql_error;\n\nvar NextSubmissionQuery_decodeNotification = include$3.decodeNotification;\n\nvar NextSubmissionQuery_decodeObject = include$3.decodeObject;\n\nvar NextSubmissionQuery_decodeNotifications = include$3.decodeNotifications;\n\nvar NextSubmissionQuery_decodeErrors = include$3.decodeErrors;\n\nvar NextSubmissionQuery_flashNotifications = include$3.flashNotifications;\n\nvar NextSubmissionQuery_sendQuery = include$3.sendQuery;\n\nvar NextSubmissionQuery_query = include$3.query;\n\nvar NextSubmissionQuery_fetch = include$3.$$fetch;\n\nvar NextSubmissionQuery = {\n NextSubmissionQuery_inner: NextSubmissionQuery_inner,\n Raw: Raw$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n makeVariables: makeVariables$3,\n Graphql_error: NextSubmissionQuery_Graphql_error,\n decodeNotification: NextSubmissionQuery_decodeNotification,\n decodeObject: NextSubmissionQuery_decodeObject,\n decodeNotifications: NextSubmissionQuery_decodeNotifications,\n decodeErrors: NextSubmissionQuery_decodeErrors,\n flashNotifications: NextSubmissionQuery_flashNotifications,\n sendQuery: NextSubmissionQuery_sendQuery,\n query: NextSubmissionQuery_query,\n $$fetch: NextSubmissionQuery_fetch,\n make: make$1\n};\n\nvar Raw$4 = {};\n\nvar query$4 = \"mutation UnassignReviewerMutation($submissionId: ID!) {\\nunassignReviewer(submissionId: $submissionId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$4(value) {\n var value$1 = value.unassignReviewer;\n return {\n unassignReviewer: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$4(value) {\n var value$1 = value.unassignReviewer;\n var value$2 = value$1.success;\n var unassignReviewer = {\n success: value$2\n };\n return {\n unassignReviewer: unassignReviewer\n };\n}\n\nfunction serializeVariables$4(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables$4(submissionId, param) {\n return {\n submissionId: submissionId\n };\n}\n\nvar UnassignReviewerMutation_inner = {\n Raw: Raw$4,\n query: query$4,\n parse: parse$4,\n serialize: serialize$4,\n serializeVariables: serializeVariables$4,\n makeVariables: makeVariables$4\n};\n\nvar include$4 = GraphqlQuery.Extender({\n Raw: Raw$4,\n query: query$4,\n parse: parse$4,\n serialize: serialize$4,\n serializeVariables: serializeVariables$4,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch$2 = include$4.$$fetch;\n\nvar UnassignReviewerMutation_Graphql_error = include$4.Graphql_error;\n\nvar UnassignReviewerMutation_decodeNotification = include$4.decodeNotification;\n\nvar UnassignReviewerMutation_decodeObject = include$4.decodeObject;\n\nvar UnassignReviewerMutation_decodeNotifications = include$4.decodeNotifications;\n\nvar UnassignReviewerMutation_decodeErrors = include$4.decodeErrors;\n\nvar UnassignReviewerMutation_flashNotifications = include$4.flashNotifications;\n\nvar UnassignReviewerMutation_sendQuery = include$4.sendQuery;\n\nvar UnassignReviewerMutation_query = include$4.query;\n\nvar UnassignReviewerMutation_make = include$4.make;\n\nvar UnassignReviewerMutation = {\n UnassignReviewerMutation_inner: UnassignReviewerMutation_inner,\n Raw: Raw$4,\n parse: parse$4,\n serialize: serialize$4,\n serializeVariables: serializeVariables$4,\n makeVariables: makeVariables$4,\n Graphql_error: UnassignReviewerMutation_Graphql_error,\n decodeNotification: UnassignReviewerMutation_decodeNotification,\n decodeObject: UnassignReviewerMutation_decodeObject,\n decodeNotifications: UnassignReviewerMutation_decodeNotifications,\n decodeErrors: UnassignReviewerMutation_decodeErrors,\n flashNotifications: UnassignReviewerMutation_flashNotifications,\n sendQuery: UnassignReviewerMutation_sendQuery,\n query: UnassignReviewerMutation_query,\n $$fetch: $$fetch$2,\n make: UnassignReviewerMutation_make\n};\n\nvar Raw$5 = {};\n\nvar query$5 = \"query SubmissionReportQuery($id: ID!) {\\nsubmissionReport(id: $id) {\\nid \\nstatus \\ntestReport \\nstartedAt \\ncompletedAt \\nconclusion \\nqueuedAt \\n}\\n\\n}\\n\";\n\nfunction parse$5(value) {\n var value$1 = value.submissionReport;\n var value$2 = value$1.status;\n var tmp;\n switch (value$2) {\n case \"completed\" :\n tmp = \"completed\";\n break;\n case \"in_progress\" :\n tmp = \"in_progress\";\n break;\n case \"queued\" :\n tmp = \"queued\";\n break;\n default:\n tmp = {\n NAME: \"FutureAddedValue\",\n VAL: value$2\n };\n }\n var value$3 = value$1.testReport;\n var value$4 = value$1.startedAt;\n var value$5 = value$1.completedAt;\n var value$6 = value$1.conclusion;\n var tmp$1;\n if (value$6 == null) {\n tmp$1 = undefined;\n } else {\n var tmp$2;\n switch (value$6) {\n case \"error\" :\n tmp$2 = \"error\";\n break;\n case \"failure\" :\n tmp$2 = \"failure\";\n break;\n case \"success\" :\n tmp$2 = \"success\";\n break;\n default:\n tmp$2 = {\n NAME: \"FutureAddedValue\",\n VAL: value$6\n };\n }\n tmp$1 = tmp$2;\n }\n return {\n submissionReport: {\n id: value$1.id,\n status: tmp,\n testReport: !(value$3 == null) ? value$3 : undefined,\n startedAt: !(value$4 == null) ? Caml_option.some(value$4) : undefined,\n completedAt: !(value$5 == null) ? Caml_option.some(value$5) : undefined,\n conclusion: tmp$1,\n queuedAt: value$1.queuedAt\n }\n };\n}\n\nfunction serialize$5(value) {\n var value$1 = value.submissionReport;\n var value$2 = value$1.queuedAt;\n var value$3 = value$1.conclusion;\n var conclusion = value$3 !== undefined ? (\n typeof value$3 === \"object\" ? value$3.VAL : (\n value$3 === \"failure\" ? \"failure\" : (\n value$3 === \"success\" ? \"success\" : \"error\"\n )\n )\n ) : null;\n var value$4 = value$1.completedAt;\n var completedAt = value$4 !== undefined ? Caml_option.valFromOption(value$4) : null;\n var value$5 = value$1.startedAt;\n var startedAt = value$5 !== undefined ? Caml_option.valFromOption(value$5) : null;\n var value$6 = value$1.testReport;\n var testReport = value$6 !== undefined ? value$6 : null;\n var value$7 = value$1.status;\n var status = typeof value$7 === \"object\" ? value$7.VAL : (\n value$7 === \"completed\" ? \"completed\" : (\n value$7 === \"queued\" ? \"queued\" : \"in_progress\"\n )\n );\n var value$8 = value$1.id;\n var submissionReport = {\n id: value$8,\n status: status,\n testReport: testReport,\n startedAt: startedAt,\n completedAt: completedAt,\n conclusion: conclusion,\n queuedAt: value$2\n };\n return {\n submissionReport: submissionReport\n };\n}\n\nfunction serializeVariables$5(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables$5(id, param) {\n return {\n id: id\n };\n}\n\nvar SubmissionReportQuery_inner = {\n Raw: Raw$5,\n query: query$5,\n parse: parse$5,\n serialize: serialize$5,\n serializeVariables: serializeVariables$5,\n makeVariables: makeVariables$5\n};\n\nvar include$5 = GraphqlQuery.Extender({\n Raw: Raw$5,\n query: query$5,\n parse: parse$5,\n serialize: serialize$5,\n serializeVariables: serializeVariables$5,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make$2 = include$5.make;\n\nvar SubmissionReportQuery_Graphql_error = include$5.Graphql_error;\n\nvar SubmissionReportQuery_decodeNotification = include$5.decodeNotification;\n\nvar SubmissionReportQuery_decodeObject = include$5.decodeObject;\n\nvar SubmissionReportQuery_decodeNotifications = include$5.decodeNotifications;\n\nvar SubmissionReportQuery_decodeErrors = include$5.decodeErrors;\n\nvar SubmissionReportQuery_flashNotifications = include$5.flashNotifications;\n\nvar SubmissionReportQuery_sendQuery = include$5.sendQuery;\n\nvar SubmissionReportQuery_query = include$5.query;\n\nvar SubmissionReportQuery_fetch = include$5.$$fetch;\n\nvar SubmissionReportQuery = {\n SubmissionReportQuery_inner: SubmissionReportQuery_inner,\n Raw: Raw$5,\n parse: parse$5,\n serialize: serialize$5,\n serializeVariables: serializeVariables$5,\n makeVariables: makeVariables$5,\n Graphql_error: SubmissionReportQuery_Graphql_error,\n decodeNotification: SubmissionReportQuery_decodeNotification,\n decodeObject: SubmissionReportQuery_decodeObject,\n decodeNotifications: SubmissionReportQuery_decodeNotifications,\n decodeErrors: SubmissionReportQuery_decodeErrors,\n flashNotifications: SubmissionReportQuery_flashNotifications,\n sendQuery: SubmissionReportQuery_sendQuery,\n query: SubmissionReportQuery_query,\n $$fetch: SubmissionReportQuery_fetch,\n make: make$2\n};\n\nfunction unassignReviewer(submissionId, send, updateReviewerCB) {\n Curry._1(send, /* BeginSaving */0);\n Curry._3($$fetch$2, undefined, undefined, {\n submissionId: submissionId\n }).then(function (response) {\n if (response.unassignReviewer.success) {\n Curry._1(updateReviewerCB, undefined);\n Curry._1(send, /* UnassignReviewer */8);\n }\n Curry._1(send, /* FinishSaving */1);\n return Promise.resolve(undefined);\n }).catch(function (param) {\n Curry._1(send, /* FinishSaving */1);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction getNextSubmission(send, courseId, filter, submissionId) {\n Curry._1(send, /* SetNextSubmissionDataLoading */6);\n var variables = makeVariables$3(courseId, CoursesReview__Filter.nameOrEmail(filter), CoursesReview__Filter.targetId(filter), CoursesReview__Filter.tab(filter), CoursesReview__Filter.defaultDirection(filter), CoursesReview__Filter.sortCriterion(filter), CoursesReview__Filter.levelId(filter), CoursesReview__Filter.personalCoachId(filter), CoursesReview__Filter.assignedCoachId(filter), submissionId, undefined, undefined);\n Curry._3(make$1, undefined, undefined, variables).then(function (response) {\n if (ArrayUtils.isEmpty(response.submissions.nodes)) {\n Curry._1(send, /* SetNextSubmissionDataEmpty */7);\n $$Notification.notice(t(undefined, undefined, \"get_next_submission.notice.done\"), t(undefined, undefined, \"get_next_submission.notice.done_description\"));\n } else {\n RescriptReactRouter.push(\"/submissions/\" + Caml_array.get(response.submissions.nodes, 0).id + \"/review?\" + CoursesReview__Filter.toQueryString(filter));\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction isSubmissionReviewAllowed(submissionDetails) {\n var daysSinceSubmission = DateFns.differenceInDays(new Date(), CoursesReview__SubmissionDetails.createdAt(submissionDetails));\n var submissionReviewAllowedTime = CoursesReview__SubmissionDetails.inactiveSubmissionReviewAllowedDays(submissionDetails);\n var submissionReviewAllowed = daysSinceSubmission < submissionReviewAllowedTime;\n if (CoursesReview__SubmissionDetails.preview(submissionDetails)) {\n return !submissionReviewAllowed;\n } else {\n return false;\n }\n}\n\nfunction makeFeedback(user, feedback) {\n return CoursesReview__Feedback.make(AppRouter__User.name(user), AppRouter__User.avatarUrl(user), AppRouter__User.title(user), new Date(), feedback);\n}\n\nfunction createFeedback(submissionId, feedback, send, overlaySubmission, user, updateSubmissionCB) {\n Curry._1(send, /* BeginSaving */0);\n Curry._3(make, undefined, undefined, {\n submissionId: submissionId,\n feedback: feedback\n }).then(function (response) {\n if (response.createFeedback.success) {\n Curry._1(updateSubmissionCB, CoursesReview__OverlaySubmission.updateFeedback(CoursesReview__OverlaySubmission.feedback(overlaySubmission).concat([makeFeedback(user, feedback)]), overlaySubmission));\n Curry._1(send, /* FeedbackAfterSave */5);\n } else {\n Curry._1(send, /* FinishSaving */1);\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction undoGrading(submissionId, send) {\n Curry._1(send, /* BeginSaving */0);\n Curry._3($$fetch$1, undefined, undefined, {\n submissionId: submissionId\n }).then(function (response) {\n if (response.undoGrading.success) {\n DomUtils.reload(undefined);\n } else {\n Curry._1(send, /* FinishSaving */1);\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction passed(grades, evaluationCriteria) {\n return ArrayUtils.isEmpty(grades.filter(function (g) {\n var passGrade = EvaluationCriterion.passGrade(ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === CoursesReview__Grade.evaluationCriterionId(g);\n }), \"CoursesReview__Editor: Unable to find evaluation criterion with id - \" + CoursesReview__Grade.evaluationCriterionId(g), evaluationCriteria));\n return CoursesReview__Grade.value(g) < passGrade;\n }));\n}\n\nfunction trimToOption(s) {\n if (s.trim() === \"\") {\n return ;\n } else {\n return s;\n }\n}\n\nfunction navigationDisabled(state) {\n if (state.newFeedback.trim() !== \"\" || state.note !== undefined) {\n return true;\n } else {\n return state.saving;\n }\n}\n\nfunction gradeSubmissionQuery(submissionId, state, send, evaluationCriteria, overlaySubmission, currentUser, updateSubmissionCB) {\n Curry._1(send, /* BeginSaving */0);\n var feedback = trimToOption(state.newFeedback);\n var grades = state.grades.map(function (g) {\n return {\n evaluationCriterionId: CoursesReview__Grade.evaluationCriterionId(g),\n grade: CoursesReview__Grade.value(g)\n };\n });\n var variables = makeVariables(submissionId, feedback, grades, Belt_Option.flatMap(state.note, trimToOption), SubmissionChecklistItem.encodeArray(state.checklist), undefined);\n Curry._3($$fetch, undefined, undefined, variables).then(function (response) {\n if (response.createGrading.success) {\n Curry._1(updateSubmissionCB, CoursesReview__OverlaySubmission.update(passed(state.grades, evaluationCriteria) ? Caml_option.some(new Date()) : undefined, AppRouter__User.name(currentUser), CoursesReview__OverlaySubmission.feedback(overlaySubmission).concat(Belt_Option.mapWithDefault(feedback, [], (function (f) {\n return [makeFeedback(currentUser, f)];\n }))), state.grades, Caml_option.some(new Date()), state.checklist, overlaySubmission));\n Curry._1(send, {\n TAG: /* FinishGrading */6,\n _0: state.grades\n });\n } else {\n Curry._1(send, /* FinishSaving */1);\n }\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction inactiveWarning(submissionDetails) {\n if (!CoursesReview__SubmissionDetails.inactiveStudents(submissionDetails)) {\n return null;\n }\n var submissionDeadlineDate = DateFns.addDays(CoursesReview__SubmissionDetails.createdAt(submissionDetails), CoursesReview__SubmissionDetails.inactiveSubmissionReviewAllowedDays(submissionDetails));\n var warning = CoursesReview__SubmissionDetails.students(submissionDetails).length > 1 ? (\n isSubmissionReviewAllowed(submissionDetails) ? t(undefined, undefined, \"students_dropped_out_message_without_timestamp\") : t([[\n \"timestamp\",\n DateFns.format(submissionDeadlineDate, \"do MMMM, yyyy\")\n ]], undefined, \"students_dropped_out_message_with_timestamp\")\n ) : (\n isSubmissionReviewAllowed(submissionDetails) ? t(undefined, undefined, \"student_dropped_out_message_without_timestamp\") : t([[\n \"timestamp\",\n DateFns.format(submissionDeadlineDate, \"do MMMM, yyyy\")\n ]], undefined, \"student_dropped_out_message_with_timestamp\")\n );\n return React.createElement(\"div\", {\n className: \"border border-yellow-400 rounded bg-yellow-200 py-2 px-3 text-xs md:text-sm md:text-center\"\n }, React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, warning));\n}\n\nfunction closeOverlay(state, courseId, filter) {\n var path = \"/courses/\" + courseId + \"/review?\" + CoursesReview__Filter.toQueryString(filter);\n if (navigationDisabled(state)) {\n return WindowUtils.confirm((function (param) {\n \n }), t(undefined, undefined, \"close_submission_warning\"), (function (param) {\n return RescriptReactRouter.push(path);\n }));\n } else {\n return RescriptReactRouter.push(path);\n }\n}\n\nfunction reviewNextButton(nextSubmission, send, courseId, filter, submissionId, className) {\n return ReactUtils.nullIf(React.createElement(\"button\", {\n className: className,\n disabled: nextSubmission === /* DataLoading */1,\n onClick: (function (param) {\n return getNextSubmission(send, courseId, filter, submissionId);\n })\n }, ReactUtils.nullUnless(React.createElement(\"i\", {\n className: \"fas fa-spinner fa-pulse mr-2\"\n }), nextSubmission === /* DataLoading */1), React.createElement(\"p\", {\n className: \"pr-2\"\n }, t(undefined, undefined, \"review_next\")), React.createElement(Icon.make, {\n className: \"if i-arrow-right-short-light text-lg lg:text-2xl\"\n })), nextSubmission === /* DataEmpty */2);\n}\n\nfunction headerSection(state, nextSubmission, send, submissionDetails, filter, submissionId) {\n var teamName = CoursesReview__SubmissionDetails.teamName(submissionDetails);\n var studentCount = CoursesReview__SubmissionDetails.students(submissionDetails).length;\n return React.createElement(\"div\", {\n \"aria-label\": \"submissions-overlay-header\",\n className: \"bg-gray-50 border-b border-gray-300 flex justify-center\"\n }, React.createElement(\"div\", {\n className: \"bg-white flex justify-between w-full\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row w-full md:w-auto\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 md:flex-none justify-between border-b md:border-0\"\n }, React.createElement(\"button\", {\n \"aria-label\": \"submissions-overlay-close\",\n className: \"flex flex-col items-center justify-center leading-tight px-3 py-2 md:px-5 md:py-4 cursor-pointer border-r bg-white text-gray-600 hover:text-gray-900 hover:bg-gray-50 focus:ring-2 focus:ring-focusColor-500 ring-inset \",\n title: t(undefined, undefined, \"close\"),\n onClick: (function (param) {\n return closeOverlay(state, CoursesReview__SubmissionDetails.courseId(submissionDetails), filter);\n })\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center bg-gray-100 rounded-full w-8 h-8\"\n }, React.createElement(Icon.make, {\n className: \"if i-times-regular text-lg lg:text-2xl\"\n })), React.createElement(\"span\", {\n className: \"text-xs mt-0.5\"\n }, t(undefined, undefined, \"close\"))), React.createElement(\"div\", {\n className: \"flex space-x-4\"\n }, React.createElement(CoursesStudents__PersonalCoaches.make, {\n tooltipPosition: \"Bottom\",\n defaultAvatarSize: \"8\",\n mdAvatarSize: \"8\",\n title: React.createElement(\"span\", {\n className: \"hidden\"\n }, t(undefined, undefined, \"assigned_coaches\")),\n className: \"flex md:hidden items-center shrink-0\",\n coaches: CoursesReview__SubmissionDetails.coaches(submissionDetails)\n }), reviewNextButton(nextSubmission, send, CoursesReview__SubmissionDetails.courseId(submissionDetails), filter, submissionId, \"flex shrink-0 items-center md:hidden border-l text-sm font-semibold px-3 py-2 md:px-5 md:py-4 hover:bg-gray-50 hover:text-primary-500\"))), React.createElement(\"div\", {\n className: \"px-4 py-3\"\n }, React.createElement(\"div\", {\n className: \"block text-sm md:pr-2\"\n }, React.createElement(\"span\", {\n className: \"bg-gray-300 text-xs font-semibold px-2 py-px rounded\"\n }, LevelLabel.format(undefined, undefined, CoursesReview__SubmissionDetails.levelNumber(submissionDetails))), React.createElement(\"a\", {\n className: \"ml-2 font-semibold underline text-gray-900 hover:bg-primary-100 hover:text-primary-600 text-base focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n href: \"/targets/\" + CoursesReview__SubmissionDetails.targetId(submissionDetails),\n target: \"_blank\"\n }, CoursesReview__SubmissionDetails.targetTitle(submissionDetails))), React.createElement(\"div\", {\n className: \"text-left mt-1 text-xs text-gray-800\"\n }, teamName !== undefined ? React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by_team\"), React.createElement(\"span\", {\n className: \"font-semibold\"\n }, teamName), \" - \") : React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by\")), CoursesReview__SubmissionDetails.students(submissionDetails).map(function (student, index) {\n var commaRequired = (index + 1 | 0) !== studentCount;\n return React.createElement(\"span\", {\n key: CoursesReview__Student.id(student)\n }, React.createElement(\"a\", {\n className: \"font-semibold underline focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n href: \"/students/\" + CoursesReview__Student.id(student) + \"/report\",\n target: \"_blank\"\n }, CoursesReview__Student.name(student)), commaRequired ? \", \" : \"\");\n })))), React.createElement(\"div\", {\n className: \"hidden md:flex shrink-0 space-x-6\"\n }, React.createElement(CoursesStudents__PersonalCoaches.make, {\n tooltipPosition: \"Bottom\",\n defaultAvatarSize: \"8\",\n mdAvatarSize: \"8\",\n title: React.createElement(\"span\", {\n className: \"mr-2\"\n }, t(undefined, undefined, \"assigned_coaches\")),\n className: \"flex w-full md:w-auto items-center shrink-0\",\n coaches: CoursesReview__SubmissionDetails.coaches(submissionDetails)\n }), reviewNextButton(nextSubmission, send, CoursesReview__SubmissionDetails.courseId(submissionDetails), filter, submissionId, \"flex items-center border-l text-sm font-semibold px-5 py-4 hover:bg-gray-50 hover:text-primary-500 focus:ring-2 focus:ring-focusColor-500 ring-inset \"))));\n}\n\nfunction updateGrading(grade, state, send) {\n var newGrades = state.grades.filter(function (g) {\n return CoursesReview__Grade.evaluationCriterionId(g) !== CoursesReview__Grade.evaluationCriterionId(grade);\n }).concat([grade]);\n return Curry._1(send, {\n TAG: /* UpdateGrades */2,\n _0: newGrades\n });\n}\n\nfunction handleGradePillClick(evaluationCriterionId, value, state, send, $$event) {\n $$event.preventDefault();\n if (send !== undefined) {\n return updateGrading(CoursesReview__Grade.make(evaluationCriterionId, value), state, send);\n }\n \n}\n\nfunction findEvaluationCriterion(evaluationCriteria, evaluationCriterionId) {\n var ec = evaluationCriteria.find(function (ec) {\n return EvaluationCriterion.id(ec) === evaluationCriterionId;\n });\n if (ec !== undefined) {\n return ec;\n } else {\n Rollbar.error(\"Unable to find evaluation Criterion with id: \" + (evaluationCriterionId + \"in CoursesRevew__Editor\"));\n return Caml_array.get(evaluationCriteria, 0);\n }\n}\n\nfunction gradePillHeader(evaluationCriteriaName, selectedGrade, gradeLabels) {\n return React.createElement(\"div\", {\n className: \"flex justify-between\"\n }, React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, evaluationCriteriaName), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, String(selectedGrade) + (\"/\" + String(GradeLabel.maxGrade($$Array.to_list(gradeLabels))))));\n}\n\nfunction gradePillClasses(selectedGrade, currentGrade, passgrade, send) {\n var defaultClasses = \"course-review-editor__grade-pill border-gray-300 py-1 px-2 text-sm flex-1 font-semibold transition \" + (\n send !== undefined ? \"cursor-pointer hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500 \" + (\n Caml_obj.caml_greaterequal(currentGrade, passgrade) ? \"hover:bg-green-500 hover:text-white \" : \"hover:bg-red-500 hover:text-white \"\n ) : \"\"\n );\n return defaultClasses + (\n Caml_obj.caml_lessequal(currentGrade, selectedGrade) ? (\n Caml_obj.caml_greaterequal(selectedGrade, passgrade) ? \"cursor-default bg-green-500 text-white shadow-lg\" : \"cursor-default bg-red-500 text-white shadow-lg\"\n ) : \"bg-white text-gray-900\"\n );\n}\n\nfunction showGradePill(key, submissionDetails, evaluationCriterion, gradeValue, passGrade, state, send) {\n return React.createElement(\"div\", {\n key: String(key),\n \"aria-label\": \"evaluation-criterion-\" + EvaluationCriterion.id(evaluationCriterion),\n className: \"mt-2\"\n }, gradePillHeader(EvaluationCriterion.name(evaluationCriterion), gradeValue, EvaluationCriterion.gradesAndLabels(evaluationCriterion)), React.createElement(\"div\", {\n className: \"course-review-editor__grade-bar inline-flex w-full text-center mt-1\"\n }, EvaluationCriterion.gradesAndLabels(evaluationCriterion).map(function (gradeLabel) {\n var gradeLabelGrade = GradeLabel.grade(gradeLabel);\n var partial_arg = EvaluationCriterion.id(evaluationCriterion);\n return React.createElement(\"button\", {\n key: String(gradeLabelGrade),\n className: gradePillClasses(gradeValue, gradeLabelGrade, passGrade, send),\n title: GradeLabel.label(gradeLabel),\n disabled: isSubmissionReviewAllowed(submissionDetails),\n onClick: (function (param) {\n return handleGradePillClick(partial_arg, gradeLabelGrade, state, send, param);\n })\n }, send !== undefined ? String(gradeLabelGrade) : null);\n })));\n}\n\nfunction showGrades(grades, evaluationCriteria, submissionDetails, state) {\n return React.createElement(\"div\", undefined, CoursesReview__Grade.sort(evaluationCriteria, grades).map(function (grade, key) {\n var gradeEcId = CoursesReview__Grade.evaluationCriterionId(grade);\n var ec = ArrayUtils.unsafeFind((function (ec) {\n return EvaluationCriterion.id(ec) === gradeEcId;\n }), \"Unable to find evaluation Criterion with id: \" + (gradeEcId + \"in CoursesRevew__Editor\"), evaluationCriteria);\n return showGradePill(key, submissionDetails, ec, CoursesReview__Grade.value(grade), EvaluationCriterion.passGrade(ec), state, undefined);\n }));\n}\n\nfunction renderGradePills(evaluationCriteria, targetEvaluationCriteriaIds, submissionDetails, state, send) {\n return targetEvaluationCriteriaIds.map(function (evaluationCriterionId, key) {\n var ec = ArrayUtils.unsafeFind((function (e) {\n return EvaluationCriterion.id(e) === evaluationCriterionId;\n }), \"CoursesRevew__Editor: Unable to find evaluation criterion with id - \" + evaluationCriterionId, evaluationCriteria);\n var grade = state.grades.find(function (g) {\n return CoursesReview__Grade.evaluationCriterionId(g) === EvaluationCriterion.id(ec);\n });\n var gradeValue = grade !== undefined ? CoursesReview__Grade.value(grade) : 0;\n var passGrade = EvaluationCriterion.passGrade(ec);\n return showGradePill(key, submissionDetails, ec, gradeValue, passGrade, state, send);\n });\n}\n\nfunction badgeColorClasses(statusColor) {\n switch (statusColor) {\n case /* Red */0 :\n return \"bg-red-100 border-red-400\";\n case /* Orange */1 :\n return \"bg-orange-100 border-orange-400\";\n case /* Green */2 :\n return \"bg-green-100 border-green-400\";\n case /* Gray */3 :\n return \"bg-gray-50 border-gray-300\";\n \n }\n}\n\nfunction gradeBadgeClasses(statusColor, status, badge) {\n return (\n badge ? \"px-2 py-2 space-x-2 flex justify-center border rounded items-center \" : \"w-12 h-10 p-1 mr-2 md:mr-0 md:w-26 md:h-22 rounded md:rounded-lg border flex justify-center items-center \"\n ) + badgeColorClasses(statusColor) + (\n status === 0 ? \"course-review-editor__status-pulse\" : \"\"\n );\n}\n\nfunction textColor(statusColor) {\n switch (statusColor) {\n case /* Red */0 :\n return \"text-red-800\";\n case /* Orange */1 :\n return \"text-orange-800\";\n case /* Green */2 :\n return \"text-green-800\";\n case /* Gray */3 :\n return \"text-gray-800\";\n \n }\n}\n\nfunction submissionReviewStatus(status, overlaySubmission) {\n var match = typeof status === \"number\" ? (\n status !== 0 ? [\n t(undefined, undefined, \"status.pending_review\"),\n /* Gray */3\n ] : [\n t(undefined, undefined, \"status.reviewing\"),\n /* Orange */1\n ]\n ) : (\n status._0 ? [\n t(undefined, undefined, \"status.completed\"),\n /* Green */2\n ] : [\n t(undefined, undefined, \"status.rejected\"),\n /* Red */0\n ]\n );\n var color = match[1];\n var match$1 = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var tmp;\n if (match$1 !== undefined && typeof status !== \"number\") {\n var name = CoursesReview__OverlaySubmission.evaluatorName(overlaySubmission);\n tmp = React.createElement(\"div\", undefined, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-xs text-gray-800\"\n }, t(undefined, undefined, \"evaluated_by\")), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, name !== undefined ? name : React.createElement(\"em\", undefined, t(undefined, undefined, \"deleted_coach\")))));\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"submission-status\",\n className: \"hidden md:flex space-x-4 justify-end w-3/4\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, tmp, React.createElement(\"div\", {\n className: \"flex justify-center ml-2 md:ml-4\"\n }, React.createElement(\"div\", {\n className: gradeBadgeClasses(color, status, true)\n }, typeof status === \"number\" ? (\n status !== 0 ? React.createElement(Icon.make, {\n className: \"if i-eye-solid text-xl text-gray-400\"\n }) : React.createElement(Icon.make, {\n className: \"if i-writing-pad-solid text-xl text-orange-300\"\n })\n ) : (\n status._0 ? React.createElement(Icon.make, {\n className: \"if i-badge-check-solid text-xl text-green-500\"\n }) : React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-xl text-red-500\"\n })\n ), React.createElement(\"p\", {\n className: \"text-xs font-semibold \" + textColor(color)\n }, match[0])))));\n}\n\nfunction submissionStatusIcon(status, overlaySubmission) {\n var match = typeof status === \"number\" ? (\n status !== 0 ? [\n t(undefined, undefined, \"status.pending_review\"),\n /* Gray */3\n ] : [\n t(undefined, undefined, \"status.reviewing\"),\n /* Orange */1\n ]\n ) : (\n status._0 ? [\n t(undefined, undefined, \"status.completed\"),\n /* Green */2\n ] : [\n t(undefined, undefined, \"status.rejected\"),\n /* Red */0\n ]\n );\n var color = match[1];\n var match$1 = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var tmp;\n if (match$1 !== undefined && typeof status !== \"number\") {\n var name = CoursesReview__OverlaySubmission.evaluatorName(overlaySubmission);\n tmp = React.createElement(\"div\", {\n className: \"bg-gray-50 block md:flex flex-col w-full justify-between rounded-lg pt-3 mr-2 mt-4 md:mt-0\"\n }, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-xs px-3\"\n }, \"Evaluated By\"), React.createElement(\"p\", {\n className: \"text-sm font-semibold px-3 pb-3\"\n }, name !== undefined ? name : React.createElement(\"em\", undefined, t(undefined, undefined, \"deleted_coach\")))), React.createElement(\"div\", {\n className: \"text-xs bg-gray-300 flex items-center rounded-b-lg px-3 py-2 md:px-3 md:py-1\"\n }, t([[\n \"evaluated_at\",\n DateFns.format(Caml_option.valFromOption(match$1), \"MMMM d, yyyy\")\n ]], undefined, \"evaluated_at\")));\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"submission-status\",\n className: \"flex flex-1 flex-col items-center justify-center md:border-l mt-4 md:mt-0\"\n }, React.createElement(\"div\", {\n className: \"flex flex-col-reverse md:flex-row items-start md:items-stretch justify-center w-full md:pl-6\"\n }, tmp, React.createElement(\"div\", {\n className: \"w-full md:w-26 flex flex-row md:flex-col md:items-center justify-center\"\n }, React.createElement(\"div\", {\n className: gradeBadgeClasses(color, status, false)\n }, typeof status === \"number\" ? (\n status !== 0 ? React.createElement(Icon.make, {\n className: \"if i-eye-solid text-xl md:text-4xl text-gray-400\"\n }) : React.createElement(Icon.make, {\n className: \"if i-writing-pad-solid text-xl md:text-5xl text-orange-300\"\n })\n ) : (\n status._0 ? React.createElement(Icon.make, {\n className: \"if i-badge-check-solid text-xl md:text-5xl text-green-500\"\n }) : React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-xl md:text-4xl text-red-500\"\n })\n )), React.createElement(\"p\", {\n className: \"text-xs flex items-center justify-center md:block text-center w-full border rounded px-1 py-px font-semibold md:mt-1 \" + badgeColorClasses(color) + \" \" + textColor(color)\n }, match[0]))));\n}\n\nfunction gradeSubmission(submissionId, state, send, evaluationCriteria, updateSubmissionCB, status, currentUser, overlaySubmission, $$event) {\n $$event.preventDefault();\n if (typeof status === \"number\") {\n return ;\n } else {\n return gradeSubmissionQuery(submissionId, state, send, evaluationCriteria, overlaySubmission, currentUser, updateSubmissionCB);\n }\n}\n\nfunction reviewButtonDisabled(status) {\n if (typeof status === \"number\") {\n return true;\n } else {\n return false;\n }\n}\n\nfunction computeStatus(overlaySubmission, selectedGrades, evaluationCriteria, targetEvaluationCriteriaIds) {\n var currentGradingCriteria = evaluationCriteria.filter(function (criterion) {\n return $$Array.mem(EvaluationCriterion.id(criterion), targetEvaluationCriteriaIds);\n });\n var match = CoursesReview__OverlaySubmission.passedAt(overlaySubmission);\n var match$1 = ArrayUtils.isNotEmpty(CoursesReview__OverlaySubmission.grades(overlaySubmission));\n if (match !== undefined) {\n return /* Graded */{\n _0: true\n };\n } else if (match$1) {\n return /* Graded */{\n _0: false\n };\n } else if (Caml_obj.caml_equal(selectedGrades, [])) {\n return /* Ungraded */1;\n } else if (selectedGrades.length !== currentGradingCriteria.length) {\n return /* Grading */0;\n } else {\n return /* Graded */{\n _0: passed(selectedGrades, currentGradingCriteria)\n };\n }\n}\n\nfunction submitButtonText(feedback, grades) {\n var match = feedback !== \"\";\n ArrayUtils.isNotEmpty(grades);\n if (match) {\n return t(undefined, undefined, \"save_grades_and_send_feedback\");\n } else {\n return t(undefined, undefined, \"save_grades\");\n }\n}\n\nfunction noteForm(submissionDetails, overlaySubmission, teamSubmission, note, send) {\n var _someGrades = CoursesReview__OverlaySubmission.grades(overlaySubmission);\n if (_someGrades.length !== 0) {\n return null;\n }\n var match = teamSubmission ? [\n t(undefined, undefined, \"team\"),\n t(undefined, undefined, \"team_notice\")\n ] : [\n t(undefined, undefined, \"student\"),\n \"\"\n ];\n var noteAbout = match[0];\n var help = React.createElement(HelpIcon.make, {\n className: \"ml-1\",\n children: t([\n [\n \"note_about\",\n noteAbout\n ],\n [\n \"additional_help\",\n match[1]\n ]\n ], undefined, \"help_text\")\n });\n var textareaId = \"note-for-submission-\" + CoursesReview__OverlaySubmission.id(overlaySubmission);\n return React.createElement(\"div\", {\n className: \"text-sm\"\n }, React.createElement(\"div\", {\n className: \"font-medium text-sm flex\"\n }, React.createElement(Icon.make, {\n className: \"if i-long-text-light text-gray-800 text-base\"\n }), note !== undefined ? React.createElement(\"span\", {\n className: \"ml-2 md:ml-4 tracking-wide\"\n }, React.createElement(\"label\", {\n htmlFor: textareaId\n }, t(undefined, undefined, \"write_a_note\")), help) : React.createElement(\"div\", {\n className: \"ml-2 md:ml-4 tracking-wide w-full\"\n }, React.createElement(\"div\", undefined, React.createElement(\"span\", undefined, t(undefined, undefined, \"note_help\") + (noteAbout + \"?\")), help), React.createElement(\"button\", {\n className: \"btn btn-default mt-2\",\n disabled: isSubmissionReviewAllowed(submissionDetails),\n onClick: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateNote */4,\n _0: \"\"\n });\n })\n }, React.createElement(\"i\", {\n className: \"far fa-edit\"\n }), React.createElement(\"span\", {\n className: \"pl-2\"\n }, t(undefined, undefined, \"write_a_note\"))))), note !== undefined ? React.createElement(\"div\", {\n className: \"ml-6 md:ml-7 mt-2\"\n }, React.createElement(MarkdownEditor.make, {\n value: note,\n onChange: (function (value) {\n return Curry._1(send, {\n TAG: /* UpdateNote */4,\n _0: value\n });\n }),\n profile: /* Permissive */0,\n textareaId: textareaId,\n maxLength: 10000,\n placeholder: t(undefined, undefined, \"note_placeholder\")\n })) : null);\n}\n\nfunction feedbackGenerator(submissionDetails, reviewChecklist, state, showAddFeedbackEditorOpt, send) {\n var showAddFeedbackEditor = showAddFeedbackEditorOpt !== undefined ? showAddFeedbackEditorOpt : true;\n return React.createElement(\"div\", {\n className: \"px-4 md:px-6 pt-4 space-y-8\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex h-7 items-end\"\n }, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-check-square-alt-light text-gray-800 text-base md:text-lg inline-block\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, t(undefined, undefined, \"review_checklist\")))), React.createElement(\"div\", {\n className: \"mt-2 md:ml-8\"\n }, React.createElement(\"button\", {\n className: \"bg-primary-100 flex items-center justify-between px-4 py-3 border border-dashed border-gray-600 rounded-md w-full text-left font-semibold text-sm text-primary-500 hover:bg-gray-300 hover:text-primary-600 hover:border-primary-300 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 transition\",\n disabled: isSubmissionReviewAllowed(submissionDetails),\n onClick: (function (param) {\n return Curry._1(send, /* ShowChecklistEditor */3);\n })\n }, React.createElement(\"span\", undefined, ArrayUtils.isEmpty(reviewChecklist) ? t(undefined, undefined, \"create_review_checklist\") : t(undefined, undefined, \"show_review_checklist\")), React.createElement(FaIcon.make, {\n classes: \"fas fa-arrow-right\"\n })))), showAddFeedbackEditor ? React.createElement(\"div\", {\n className: \"course-review__feedback-editor text-sm\"\n }, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-comment-alt-light text-gray-800 text-base md:text-lg inline-block\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, t(undefined, undefined, \"add_your_feedback\"))), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"inline-flex items-center bg-green-200 mt-2 md:ml-8 text-green-800 px-2 py-1 rounded-md\"\n }, React.createElement(Icon.make, {\n className: \"if i-check-circle-solid text-green-700 text-base\"\n }), React.createElement(\"span\", {\n className: \"pl-2 text-sm font-semibold\"\n }, t(undefined, undefined, \"feedback_generated_text\"))), state.feedbackGenerated), React.createElement(\"div\", {\n \"aria-label\": \"feedback\",\n className: \"mt-2 md:ml-8\"\n }, React.createElement(MarkdownEditor.make, {\n value: state.newFeedback,\n onChange: (function (feedback) {\n return Curry._1(send, {\n TAG: /* UpdateFeedback */0,\n _0: feedback\n });\n }),\n profile: /* Permissive */0,\n maxLength: 10000,\n placeholder: t(undefined, undefined, \"feedback_placeholder\"),\n disabled: isSubmissionReviewAllowed(submissionDetails)\n }))) : null);\n}\n\nfunction showFeedback(feedback) {\n return React.createElement(\"div\", {\n className: \"divide-y space-y-6 md:ml-8\"\n }, ArrayUtils.copyAndSort((function (x, y) {\n return DateFns.differenceInSeconds(CoursesReview__Feedback.createdAt(y), CoursesReview__Feedback.createdAt(x));\n }), feedback).map(function (f, index) {\n var avatarUrl = CoursesReview__Feedback.coachAvatarUrl(f);\n return React.createElement(Spread.make, {\n props: {\n \"data-title\": \"feedback-section\"\n },\n children: React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"pt-6\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(\"div\", {\n className: \"shrink-0 w-10 h-10 bg-gray-300 rounded-full overflow-hidden mr-4 object-cover\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: CoursesReview__Feedback.coachName(f)\n })), React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row\"\n }, React.createElement(\"p\", {\n className: \"font-semibold text-sm leading-tight inline-flex\"\n }, CoursesReview__Feedback.coachName(f)), React.createElement(\"p\", {\n className: \"block md:inline-flex text-xs text-gray-800 md:ml-2 leading-tight\"\n }, \"(\" + (CoursesReview__Feedback.coachTitle(f) + \")\"))), React.createElement(\"p\", {\n className: \"text-xs leading-tight font-semibold inline-block text-gray-800\"\n }, CoursesReview__Feedback.createdAtPretty(f)))), React.createElement(\"div\", {\n className: \"md:ml-14\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: CoursesReview__Feedback.value(f),\n className: \"pt-1 text-sm\",\n profile: /* Permissive */0\n })))),\n key: String(index)\n });\n }));\n}\n\nfunction showSubmissionStatus(status) {\n var match = typeof status === \"number\" ? [\n t(undefined, undefined, \"status.pending_review\"),\n \"bg-yellow-100 text-yellow-800 \"\n ] : (\n status._0 ? [\n t(undefined, undefined, \"status.completed\"),\n \"bg-green-100 text-green-800\"\n ] : [\n t(undefined, undefined, \"status.rejected\"),\n \"bg-red-100 text-red-700\"\n ]\n );\n return React.createElement(\"div\", {\n className: \"font-semibold px-2 py-px rounded \" + match[1]\n }, React.createElement(\"p\", undefined, match[0]));\n}\n\nfunction updateReviewChecklist(cb, send, checklist) {\n if (ArrayUtils.isEmpty(checklist)) {\n Curry._1(send, /* ShowGradesEditor */2);\n }\n return Curry._1(cb, checklist);\n}\n\nfunction updateReviewer(cb, send, reviewer) {\n Curry._1(cb, reviewer);\n return Curry._1(send, /* ShowGradesEditor */2);\n}\n\nfunction pageTitle(number, submissionDetails) {\n var teamName = CoursesReview__SubmissionDetails.teamName(submissionDetails);\n var studentOrTeamName = teamName !== undefined ? teamName : CoursesReview__SubmissionDetails.students(submissionDetails).map(CoursesReview__Student.name).join(\", \");\n return t(undefined, undefined, \"submission\") + \" \" + String(number) + \" | \" + t(undefined, undefined, \"level_acronym\") + CoursesReview__SubmissionDetails.levelNumber(submissionDetails) + \" | \" + studentOrTeamName;\n}\n\nfunction reportStatusString(report) {\n var match = CoursesReview__SubmissionReport.status(report);\n switch (match.TAG | 0) {\n case /* Queued */0 :\n return t(undefined, undefined, \"report_status_string.queued\");\n case /* InProgress */1 :\n return t(undefined, undefined, \"report_status_string.in_progress\");\n case /* Completed */2 :\n switch (match._1) {\n case /* Success */0 :\n return t(undefined, undefined, \"report_status_string.completed.success\");\n case /* Failure */1 :\n return t(undefined, undefined, \"report_status_string.completed.failure\");\n case /* Error */2 :\n return t(undefined, undefined, \"report_status_string.completed.error\");\n \n }\n \n }\n}\n\nfunction reportStatusIconClasses(report) {\n var match = CoursesReview__SubmissionReport.status(report);\n switch (match.TAG | 0) {\n case /* Queued */0 :\n return \"if i-clock-light text-2xl text-gray-600 rounded-full\";\n case /* InProgress */1 :\n return \"if animate-spin i-dashed-circle-regular text-2xl text-yellow-500 rounded-full\";\n case /* Completed */2 :\n switch (match._1) {\n case /* Success */0 :\n return \"if i-check-circle-solid text-2xl text-green-500 bg-white rounded-full\";\n case /* Failure */1 :\n return \"if i-times-circle-solid text-2xl text-red-500 bg-white rounded-full\";\n case /* Error */2 :\n return \"if i-exclamation-triangle-circle-solid text-2xl text-gray-600 bg-white rounded-full\";\n \n }\n \n }\n}\n\nfunction reportConclusionTimeString(report) {\n var queuedAt = CoursesReview__SubmissionReport.status(report);\n switch (queuedAt.TAG | 0) {\n case /* Queued */0 :\n return \"Queued \" + DateFns.formatDistanceToNowStrict(queuedAt._0, true, undefined, undefined, undefined);\n case /* InProgress */1 :\n return \"Started \" + DateFns.formatDistanceToNowStrict(queuedAt._0, true, undefined, undefined, undefined);\n case /* Completed */2 :\n var completedTimestamps = queuedAt._0;\n return \"Finished \" + DateFns.formatDistanceToNowStrict(completedTimestamps.completedAt, true, undefined, undefined, undefined) + \", and took \" + DateFns.formatDistance(completedTimestamps.completedAt, completedTimestamps.startedAt, true, undefined, undefined);\n \n }\n}\n\nfunction loadSubmissionReport(report, updateSubmissionReportCB) {\n var id = CoursesReview__SubmissionReport.id(report);\n Curry._3(make$2, undefined, undefined, {\n id: id\n }).then(function (response) {\n var reportData = response.submissionReport;\n var updatedReport = CoursesReview__SubmissionReport.makeFromJS(reportData);\n Curry._1(updateSubmissionReportCB, updatedReport);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction reloadSubmissionReport(report, updateSubmissionReportCB) {\n var match = CoursesReview__SubmissionReport.status(report);\n switch (match.TAG | 0) {\n case /* Queued */0 :\n case /* InProgress */1 :\n return loadSubmissionReport(report, updateSubmissionReportCB);\n case /* Completed */2 :\n return ;\n \n }\n}\n\nfunction CoursesReview__Editor(Props) {\n var overlaySubmission = Props.overlaySubmission;\n var teamSubmission = Props.teamSubmission;\n var evaluationCriteria = Props.evaluationCriteria;\n var reviewChecklist = Props.reviewChecklist;\n var updateSubmissionCB = Props.updateSubmissionCB;\n var updateReviewChecklistCB = Props.updateReviewChecklistCB;\n var targetId = Props.targetId;\n var targetEvaluationCriteriaIds = Props.targetEvaluationCriteriaIds;\n var currentUser = Props.currentUser;\n var number = Props.number;\n var submissionDetails = Props.submissionDetails;\n var submissionId = Props.submissionId;\n var updateReviewerCB = Props.updateReviewerCB;\n var submissionReport = Props.submissionReport;\n var updateSubmissionReportCB = Props.updateSubmissionReportCB;\n var submissionReportPollTime = Props.submissionReportPollTime;\n var match = React.useReducer(reducer, {\n grades: [],\n newFeedback: \"\",\n saving: false,\n showReport: false,\n checklist: CoursesReview__OverlaySubmission.checklist(overlaySubmission),\n note: undefined,\n editor: ArrayUtils.isEmpty(CoursesReview__OverlaySubmission.grades(overlaySubmission)) ? (\n Belt_Option.mapWithDefault(CoursesReview__SubmissionDetails.reviewer(submissionDetails), false, (function (r) {\n return UserProxy.userId(CoursesReview__Reviewer.user(r)) === AppRouter__User.id(currentUser);\n })) || isSubmissionReviewAllowed(submissionDetails) ? /* GradesEditor */1 : /* AssignReviewer */0\n ) : /* ReviewedSubmissionEditor */({\n _0: CoursesReview__OverlaySubmission.grades(overlaySubmission)\n }),\n additonalFeedbackEditorVisible: false,\n feedbackGenerated: false,\n nextSubmission: /* DataUnloaded */0,\n reloadSubmissionReport: false\n });\n var send = match[1];\n var state = match[0];\n var status = computeStatus(overlaySubmission, state.grades, evaluationCriteria, targetEvaluationCriteriaIds);\n var match$1 = CoursesReview__OverlaySubmission.grades(overlaySubmission);\n var updateChecklistCB = match$1.length !== 0 ? undefined : (function (checklist) {\n return Curry._1(send, {\n TAG: /* UpdateChecklist */3,\n _0: checklist\n });\n });\n var pending = ArrayUtils.isEmpty(CoursesReview__OverlaySubmission.grades(overlaySubmission));\n var findEditor = function (pending, overlaySubmission) {\n if (pending) {\n if (Belt_Option.mapWithDefault(CoursesReview__SubmissionDetails.reviewer(submissionDetails), false, (function (r) {\n return UserProxy.userId(CoursesReview__Reviewer.user(r)) === AppRouter__User.id(currentUser);\n })) || isSubmissionReviewAllowed(submissionDetails)) {\n return /* GradesEditor */1;\n } else {\n return /* AssignReviewer */0;\n }\n } else {\n return /* ReviewedSubmissionEditor */{\n _0: CoursesReview__OverlaySubmission.grades(overlaySubmission)\n };\n }\n };\n React.useEffect((function () {\n if (submissionReport === undefined) {\n return ;\n }\n var intervalId = setInterval((function (param) {\n return reloadSubmissionReport(submissionReport, updateSubmissionReportCB);\n }), Math.imul(submissionReportPollTime, 1000));\n return (function (param) {\n clearInterval(intervalId);\n \n });\n }), []);\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var filter = CoursesReview__Filter.makeFromQueryParams(url.search);\n var tmp;\n if (submissionReport !== undefined) {\n var toggleTestReportIcon = state.showReport ? \"i-arrows-collapse-light\" : \"i-arrows-expand-light\";\n var match$2 = state.showReport;\n var match$3 = CoursesReview__SubmissionReport.testReport(submissionReport);\n tmp = React.createElement(\"div\", {\n className: \"p-4 md:p-6 space-y-8\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-300 p-4 rounded-md\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-between text-sm\"\n }, React.createElement(\"div\", {\n className: \"flex items-start space-x-3\"\n }, React.createElement(\"div\", {\n className: \"pt-1\"\n }, React.createElement(Icon.make, {\n className: reportStatusIconClasses(submissionReport)\n })), React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, reportStatusString(submissionReport)), React.createElement(\"p\", {\n className: \"text-gray-800 text-xs\"\n }, reportConclusionTimeString(submissionReport)))), ReactUtils.nullIf(React.createElement(\"button\", {\n className: \"inline-flex items-center text-primary-500 px-3 py-2 rounded font-semibold hover:text-primary-700 hover:bg-gray-400 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 transition\",\n onClick: (function (param) {\n return Curry._1(send, /* ChangeReportVisibility */9);\n })\n }, React.createElement(\"span\", {\n className: \"hidden md:block pr-3\"\n }, state.showReport ? t(undefined, undefined, \"hide_test_report_button\") : t(undefined, undefined, \"show_test_report_button\")), React.createElement(\"span\", {\n className: \"inline-block w-5 h-5\"\n }, React.createElement(Icon.make, {\n className: \"if text-xl \" + toggleTestReportIcon\n }))), Belt_Option.isNone(CoursesReview__SubmissionReport.testReport(submissionReport)))), match$2 && match$3 !== undefined && state.showReport ? React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-sm font-semibold mt-4\"\n }, t(undefined, undefined, \"test_report\")), React.createElement(\"div\", {\n className: \"bg-white p-3 rounded-md border mt-2\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: match$3,\n profile: /* Permissive */0\n }))) : null));\n } else {\n tmp = null;\n }\n var grades = state.editor;\n var tmp$1;\n if (typeof grades === \"number\") {\n switch (grades) {\n case /* AssignReviewer */0 :\n tmp$1 = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center justify-between px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 md:h-16\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, \"Review\")), feedbackGenerator(submissionDetails, reviewChecklist, state, false, send), React.createElement(CoursesReview__ReviewerManager.make, {\n submissionId: submissionId,\n submissionDetails: submissionDetails,\n updateReviewerCB: (function (param) {\n Curry._1(updateReviewerCB, param);\n return Curry._1(send, /* ShowGradesEditor */2);\n })\n }));\n break;\n case /* GradesEditor */1 :\n var reviewer = CoursesReview__SubmissionDetails.reviewer(submissionDetails);\n var partial_arg = CoursesReview__OverlaySubmission.id(overlaySubmission);\n tmp$1 = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center justify-between px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 md:h-16\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, \"Review\")), ReactUtils.nullIf(React.createElement(\"div\", {\n \"aria-label\": \"Assigned to\",\n className: \"px-4 py-4 border-b border-gray-300\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-between px-3 py-2 rounded-md bg-gray-50\"\n }, reviewer !== undefined ? React.createElement(\"div\", undefined, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-xs text-gray-800\"\n }, t(undefined, undefined, \"assigned_to\")), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, UserProxy.name(CoursesReview__Reviewer.user(reviewer))))) : null, React.createElement(\"div\", {\n className: \"flex justify-center ml-2 md:ml-4\"\n }, React.createElement(\"button\", {\n className: \"btn btn-small bg-red-100 text-red-800 hover:bg-red-200 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n onClick: (function (param) {\n return unassignReviewer(submissionId, send, updateReviewerCB);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-regular\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"remove_assignment\")))))), isSubmissionReviewAllowed(submissionDetails)), feedbackGenerator(submissionDetails, reviewChecklist, state, undefined, send), React.createElement(\"div\", {\n className: \"w-full px-4 md:px-6 pt-8 space-y-8\"\n }, noteForm(submissionDetails, overlaySubmission, teamSubmission, state.note, send), React.createElement(\"div\", undefined, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(Icon.make, {\n className: \"if i-tachometer-light text-gray-800 text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, \"Grade Card\")), React.createElement(\"div\", {\n className: \"flex md:flex-row flex-col md:ml-8 rounded-lg mt-2\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-9/12\"\n }, React.createElement(\"div\", {\n className: \"md:pr-8\"\n }, renderGradePills(evaluationCriteria, targetEvaluationCriteriaIds, submissionDetails, state, send))), submissionStatusIcon(status, overlaySubmission)))), React.createElement(\"div\", {\n className: \"flex justify-end bg-white md:bg-gray-50 border-t px-4 md:px-6 py-2 md:py-4 mt-4 md:ml-8\"\n }, React.createElement(\"button\", {\n className: \"btn btn-success btn-large w-full border border-green-600\",\n disabled: reviewButtonDisabled(status),\n onClick: (function (param) {\n return gradeSubmission(partial_arg, state, send, evaluationCriteria, updateSubmissionCB, status, currentUser, overlaySubmission, param);\n })\n }, submitButtonText(state.newFeedback, state.grades))), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"p-4 md:p-6\"\n }, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-comment-alt-light text-gray-800 text-base md:text-lg inline-block\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, t(undefined, undefined, \"feedback\"))), showFeedback(CoursesReview__OverlaySubmission.feedback(overlaySubmission))), ArrayUtils.isEmpty(CoursesReview__OverlaySubmission.feedback(overlaySubmission))));\n break;\n case /* ChecklistEditor */2 :\n tmp$1 = React.createElement(\"div\", undefined, React.createElement(CoursesReview__Checklist.make, {\n reviewChecklist: reviewChecklist,\n updateFeedbackCB: (function (feedback) {\n return Curry._1(send, {\n TAG: /* GenerateFeeback */1,\n _0: feedback,\n _1: findEditor(pending, overlaySubmission)\n });\n }),\n feedback: state.newFeedback,\n updateReviewChecklistCB: (function (param) {\n return updateReviewChecklist(updateReviewChecklistCB, send, param);\n }),\n targetId: targetId,\n cancelCB: (function (param) {\n return Curry._1(send, {\n TAG: /* UpdateEditor */5,\n _0: findEditor(pending, overlaySubmission)\n });\n }),\n overlaySubmission: overlaySubmission,\n submissionDetails: submissionDetails\n }));\n break;\n \n }\n } else {\n var match$4 = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var match$5 = CoursesReview__OverlaySubmission.feedback(overlaySubmission);\n tmp$1 = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center justify-between px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 md:h-16\"\n }, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"review\")), Belt_Option.mapWithDefault(CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission), null, (function (date) {\n return React.createElement(\"p\", {\n className: \"text-gray-800 text-xs\"\n }, DateFns.format(date, \"MMMM d, yyyy\"));\n }))), submissionReviewStatus(status, overlaySubmission)), React.createElement(\"div\", {\n className: \"w-full p-4 md:p-6\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(Icon.make, {\n className: \"if i-tachometer-light text-gray-800 text-base\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, t(undefined, undefined, \"grade_card\"))), React.createElement(\"div\", undefined, match$4 !== undefined && typeof status !== \"number\" ? React.createElement(\"div\", undefined, React.createElement(\"button\", {\n className: \"btn btn-small bg-red-100 text-red-800 hover:bg-red-200 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n disabled: isSubmissionReviewAllowed(submissionDetails),\n onClick: (function (param) {\n return WindowUtils.confirm(undefined, t(undefined, undefined, \"undo_grade_warning\"), (function (param) {\n return undoGrading(CoursesReview__OverlaySubmission.id(overlaySubmission), send);\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-undo\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, t(undefined, undefined, \"undo_grading\")))) : null)), React.createElement(\"div\", {\n className: \"flex md:flex-row flex-col md:ml-8 bg-gray-50 mt-2\"\n }, React.createElement(\"div\", {\n className: \"w-full\"\n }, showGrades(grades._0, evaluationCriteria, submissionDetails, state)), React.createElement(\"div\", {\n className: \"block md:hidden\"\n }, submissionStatusIcon(status, overlaySubmission)))), ReactUtils.nullUnless(React.createElement(\"div\", undefined, feedbackGenerator(submissionDetails, reviewChecklist, state, undefined, send), React.createElement(\"div\", {\n className: \"flex justify-end px-4 md:px-6 py-4\"\n }, React.createElement(\"button\", {\n className: \"btn btn-success border border-green-600 w-full md:w-auto\",\n disabled: state.newFeedback === \"\" || state.saving,\n onClick: (function (param) {\n return createFeedback(CoursesReview__OverlaySubmission.id(overlaySubmission), state.newFeedback, send, overlaySubmission, currentUser, updateSubmissionCB);\n })\n }, t(undefined, undefined, \"share_feedback\")))), state.additonalFeedbackEditorVisible), React.createElement(\"div\", {\n className: \"p-4 md:p-6\"\n }, React.createElement(\"h5\", {\n className: \"font-medium text-sm flex items-center\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-comment-alt-light text-gray-800 text-base md:text-lg inline-block\"\n }), React.createElement(\"span\", {\n className: \"ml-2 md:ml-3 tracking-wide\"\n }, t(undefined, undefined, \"feedback\"))), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"py-4 md:ml-8 text-center\"\n }, React.createElement(\"button\", {\n className: \"bg-primary-100 flex items-center justify-center px-4 py-3 border border-dashed border-primary-500 rounded-md w-full font-semibold text-sm text-primary-600 hover:bg-white hover:text-primary-500 hover:shadow-lg hover:border-primary-300 focus:outline-none transition cursor-pointer focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n disabled: isSubmissionReviewAllowed(submissionDetails),\n onClick: (function (param) {\n return Curry._1(send, /* ShowAdditionalFeedbackEditor */4);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-plus-regular\"\n }), React.createElement(\"p\", {\n className: \"pl-2\"\n }, match$5.length !== 0 ? t(undefined, undefined, \"add_another_feedback\") : t(undefined, undefined, \"add_feedback\")))), state.additonalFeedbackEditorVisible), showFeedback(CoursesReview__OverlaySubmission.feedback(overlaySubmission))));\n }\n return [\n React.createElement(ReactHelmet.Helmet, {\n children: React.createElement(\"title\", undefined, pageTitle(number, submissionDetails)),\n key: \"helmet\"\n }),\n React.createElement(\"div\", {\n key: \"submission-header\"\n }, React.createElement(\"div\", undefined, inactiveWarning(submissionDetails)), headerSection(state, state.nextSubmission, send, submissionDetails, filter, submissionId), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"flex space-x-4 overflow-x-auto px-4 md:px-6 py-2 md:py-3 border-b bg-gray-50\"\n }, CoursesReview__SubmissionDetails.allSubmissions(submissionDetails).map(function (submission, index) {\n return React.createElement(CoursesReview__SubmissionInfoCard.make, {\n submission: submission,\n submissionNumber: CoursesReview__SubmissionDetails.allSubmissions(submissionDetails).length - index | 0,\n selected: CoursesReview__SubmissionMeta.id(submission) === submissionId,\n filterString: url.search,\n key: CoursesReview__SubmissionMeta.id(submission)\n });\n })), CoursesReview__SubmissionDetails.allSubmissions(submissionDetails).length === 1)),\n React.createElement(DisablingCover.make, {\n disabled: state.saving,\n containerClasses: \"flex flex-col md:flex-row flex-1 space-y-6 md:space-y-0 md:overflow-y-auto\",\n children: null,\n key: \"submission-editor\"\n }, React.createElement(\"div\", {\n className: \"md:w-1/2 w-full bg-white md:border-r relative md:overflow-y-auto\"\n }, React.createElement(\"div\", {\n className: \"flex items-center px-4 md:px-6 py-3 bg-white border-b sticky top-0 z-50 h-16\"\n }, React.createElement(\"div\", {\n className: \"flex flex-1 items-center justify-between\"\n }, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, \"Submission \" + String(number)), React.createElement(\"p\", {\n className: \"text-gray-800 text-xs\",\n title: DateFns.formatPreset(CoursesReview__OverlaySubmission.createdAt(overlaySubmission), undefined, true, true, undefined)\n }, DateFns.formatPreset(CoursesReview__OverlaySubmission.createdAt(overlaySubmission), undefined, true, undefined, undefined))), React.createElement(\"div\", {\n className: \"text-sm\"\n }, showSubmissionStatus(status)))), React.createElement(\"div\", {\n className: \"p-4 md:p-6\"\n }, React.createElement(SubmissionChecklistShow.make, {\n checklist: state.checklist,\n updateChecklistCB: updateChecklistCB,\n pending: pending\n })), tmp), React.createElement(\"div\", {\n className: \"md:w-1/2 w-full md:overflow-y-auto\"\n }, tmp$1))\n ];\n}\n\nvar make$3 = CoursesReview__Editor;\n\nexport {\n t ,\n str ,\n reducer ,\n CreateGradingMutation ,\n UndoGradingMutation ,\n CreateFeedbackMutation ,\n NextSubmissionQuery ,\n UnassignReviewerMutation ,\n SubmissionReportQuery ,\n unassignReviewer ,\n getNextSubmission ,\n isSubmissionReviewAllowed ,\n makeFeedback ,\n createFeedback ,\n undoGrading ,\n passed ,\n trimToOption ,\n navigationDisabled ,\n gradeSubmissionQuery ,\n inactiveWarning ,\n closeOverlay ,\n reviewNextButton ,\n headerSection ,\n updateGrading ,\n handleGradePillClick ,\n findEvaluationCriterion ,\n gradePillHeader ,\n gradePillClasses ,\n showGradePill ,\n showGrades ,\n renderGradePills ,\n badgeColorClasses ,\n gradeBadgeClasses ,\n textColor ,\n submissionReviewStatus ,\n submissionStatusIcon ,\n gradeSubmission ,\n reviewButtonDisabled ,\n computeStatus ,\n submitButtonText ,\n noteForm ,\n feedbackGenerator ,\n showFeedback ,\n showSubmissionStatus ,\n updateReviewChecklist ,\n updateReviewer ,\n pageTitle ,\n reportStatusString ,\n reportStatusIconClasses ,\n reportConclusionTimeString ,\n loadSubmissionReport ,\n reloadSubmissionReport ,\n make$3 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as CoursesReview__Editor from \"./CoursesReview__Editor.bs.js\";\nimport * as CoursesReview__SubmissionMeta from \"../types/CoursesReview__SubmissionMeta.bs.js\";\nimport * as CoursesReview__SubmissionDetails from \"../types/CoursesReview__SubmissionDetails.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar Raw = {};\n\nvar query = \"query SubmissionDetailsQuery($submissionId: ID!) {\\nsubmissionDetails(submissionId: $submissionId) {\\ntargetId \\ntargetTitle \\nlevelNumber \\nlevelId \\ninactiveStudents \\ncreatedAt \\nsubmissionReportPollTime \\ninactiveSubmissionReviewAllowedDays \\nstudents {\\nid \\nname \\n}\\n\\nsubmissionReport {\\nid \\ntestReport \\nstatus \\nstartedAt \\ncompletedAt \\nconclusion \\nqueuedAt \\n}\\n\\nevaluationCriteria {\\nid \\nname \\nmaxGrade \\npassGrade \\ngradeLabels {\\ngrade \\nlabel \\n}\\n\\n}\\n\\nreviewChecklist {\\ntitle \\nresult {\\ntitle \\nfeedback \\n}\\n\\n}\\n\\ntargetEvaluationCriteriaIds \\nsubmission {\\nid \\nevaluatorName \\npassedAt \\ncreatedAt \\nevaluatedAt \\narchivedAt \\nfiles {\\nurl \\ntitle \\nid \\n}\\n\\ngrades {\\nevaluationCriterionId \\ngrade \\n}\\n\\nfeedback {\\nid \\ncoachName \\ncoachAvatarUrl \\ncoachTitle \\ncreatedAt \\nvalue \\n}\\n\\nchecklist \\n}\\n\\nallSubmissions {\\nid \\npassedAt \\ncreatedAt \\nevaluatedAt \\nfeedbackSent \\narchivedAt \\n}\\n\\ncoaches {\\n...UserProxyFragment \\n}\\n\\nteamName \\ncourseId \\npreview \\nreviewerDetails {\\nassignedAt \\nuser {\\n...UserProxyFragment \\n}\\n\\n}\\n\\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse(value) {\n var value$1 = value.submissionDetails;\n var value$2 = value$1.students;\n var value$3 = value$1.submissionReport;\n var tmp;\n if (value$3 == null) {\n tmp = undefined;\n } else {\n var value$4 = value$3.testReport;\n var value$5 = value$3.status;\n var tmp$1;\n switch (value$5) {\n case \"completed\" :\n tmp$1 = \"completed\";\n break;\n case \"in_progress\" :\n tmp$1 = \"in_progress\";\n break;\n case \"queued\" :\n tmp$1 = \"queued\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$5\n };\n }\n var value$6 = value$3.startedAt;\n var value$7 = value$3.completedAt;\n var value$8 = value$3.conclusion;\n var tmp$2;\n if (value$8 == null) {\n tmp$2 = undefined;\n } else {\n var tmp$3;\n switch (value$8) {\n case \"error\" :\n tmp$3 = \"error\";\n break;\n case \"failure\" :\n tmp$3 = \"failure\";\n break;\n case \"success\" :\n tmp$3 = \"success\";\n break;\n default:\n tmp$3 = {\n NAME: \"FutureAddedValue\",\n VAL: value$8\n };\n }\n tmp$2 = tmp$3;\n }\n tmp = {\n id: value$3.id,\n testReport: !(value$4 == null) ? value$4 : undefined,\n status: tmp$1,\n startedAt: !(value$6 == null) ? Caml_option.some(value$6) : undefined,\n completedAt: !(value$7 == null) ? Caml_option.some(value$7) : undefined,\n conclusion: tmp$2,\n queuedAt: value$3.queuedAt\n };\n }\n var value$9 = value$1.evaluationCriteria;\n var value$10 = value$1.reviewChecklist;\n var value$11 = value$1.targetEvaluationCriteriaIds;\n var value$12 = value$1.submission;\n var value$13 = value$12.evaluatorName;\n var value$14 = value$12.passedAt;\n var value$15 = value$12.evaluatedAt;\n var value$16 = value$12.archivedAt;\n var value$17 = value$12.files;\n var value$18 = value$12.grades;\n var value$19 = value$12.feedback;\n var value$20 = value$1.allSubmissions;\n var value$21 = value$1.coaches;\n var value$22 = value$1.teamName;\n var value$23 = value$1.reviewerDetails;\n var tmp$4;\n if (value$23 == null) {\n tmp$4 = undefined;\n } else {\n var value$24 = value$23.user;\n tmp$4 = {\n assignedAt: value$23.assignedAt,\n user: UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value$24)\n };\n }\n return {\n submissionDetails: {\n targetId: value$1.targetId,\n targetTitle: value$1.targetTitle,\n levelNumber: value$1.levelNumber,\n levelId: value$1.levelId,\n inactiveStudents: value$1.inactiveStudents,\n createdAt: value$1.createdAt,\n submissionReportPollTime: value$1.submissionReportPollTime,\n inactiveSubmissionReviewAllowedDays: value$1.inactiveSubmissionReviewAllowedDays,\n students: value$2.map(function (value) {\n return {\n id: value.id,\n name: value.name\n };\n }),\n submissionReport: tmp,\n evaluationCriteria: value$9.map(function (value) {\n var value$1 = value.gradeLabels;\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade,\n passGrade: value.passGrade,\n gradeLabels: value$1.map(function (value) {\n return {\n grade: value.grade,\n label: value.label\n };\n })\n };\n }),\n reviewChecklist: value$10.map(function (value) {\n var value$1 = value.result;\n return {\n title: value.title,\n result: value$1.map(function (value) {\n var value$1 = value.feedback;\n return {\n title: value.title,\n feedback: !(value$1 == null) ? value$1 : undefined\n };\n })\n };\n }),\n targetEvaluationCriteriaIds: value$11.map(function (value) {\n return value;\n }),\n submission: {\n id: value$12.id,\n evaluatorName: !(value$13 == null) ? value$13 : undefined,\n passedAt: !(value$14 == null) ? Caml_option.some(value$14) : undefined,\n createdAt: value$12.createdAt,\n evaluatedAt: !(value$15 == null) ? Caml_option.some(value$15) : undefined,\n archivedAt: !(value$16 == null) ? Caml_option.some(value$16) : undefined,\n files: value$17.map(function (value) {\n return {\n url: value.url,\n title: value.title,\n id: value.id\n };\n }),\n grades: value$18.map(function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n grade: value.grade\n };\n }),\n feedback: value$19.map(function (value) {\n var value$1 = value.coachName;\n var value$2 = value.coachAvatarUrl;\n return {\n id: value.id,\n coachName: !(value$1 == null) ? value$1 : undefined,\n coachAvatarUrl: !(value$2 == null) ? value$2 : undefined,\n coachTitle: value.coachTitle,\n createdAt: value.createdAt,\n value: value.value\n };\n }),\n checklist: value$12.checklist\n },\n allSubmissions: value$20.map(function (value) {\n var value$1 = value.passedAt;\n var value$2 = value.evaluatedAt;\n var value$3 = value.archivedAt;\n return {\n id: value.id,\n passedAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n createdAt: value.createdAt,\n evaluatedAt: !(value$2 == null) ? Caml_option.some(value$2) : undefined,\n feedbackSent: value.feedbackSent,\n archivedAt: !(value$3 == null) ? Caml_option.some(value$3) : undefined\n };\n }),\n coaches: value$21.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }),\n teamName: !(value$22 == null) ? value$22 : undefined,\n courseId: value$1.courseId,\n preview: value$1.preview,\n reviewerDetails: tmp$4\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.submissionDetails;\n var value$2 = value$1.reviewerDetails;\n var reviewerDetails;\n if (value$2 !== undefined) {\n var value$3 = value$2.user;\n var user = UserProxy.Fragment.serialize(value$3);\n var value$4 = value$2.assignedAt;\n reviewerDetails = {\n assignedAt: value$4,\n user: user\n };\n } else {\n reviewerDetails = null;\n }\n var value$5 = value$1.preview;\n var value$6 = value$1.courseId;\n var value$7 = value$1.teamName;\n var teamName = value$7 !== undefined ? value$7 : null;\n var value$8 = value$1.coaches;\n var coaches = value$8.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n var value$9 = value$1.allSubmissions;\n var allSubmissions = value$9.map(function (value) {\n var value$1 = value.archivedAt;\n var archivedAt = value$1 !== undefined ? Caml_option.valFromOption(value$1) : null;\n var value$2 = value.feedbackSent;\n var value$3 = value.evaluatedAt;\n var evaluatedAt = value$3 !== undefined ? Caml_option.valFromOption(value$3) : null;\n var value$4 = value.createdAt;\n var value$5 = value.passedAt;\n var passedAt = value$5 !== undefined ? Caml_option.valFromOption(value$5) : null;\n var value$6 = value.id;\n return {\n id: value$6,\n passedAt: passedAt,\n createdAt: value$4,\n evaluatedAt: evaluatedAt,\n feedbackSent: value$2,\n archivedAt: archivedAt\n };\n });\n var value$10 = value$1.submission;\n var value$11 = value$10.checklist;\n var value$12 = value$10.feedback;\n var feedback = value$12.map(function (value) {\n var value$1 = value.value;\n var value$2 = value.createdAt;\n var value$3 = value.coachTitle;\n var value$4 = value.coachAvatarUrl;\n var coachAvatarUrl = value$4 !== undefined ? value$4 : null;\n var value$5 = value.coachName;\n var coachName = value$5 !== undefined ? value$5 : null;\n var value$6 = value.id;\n return {\n id: value$6,\n coachName: coachName,\n coachAvatarUrl: coachAvatarUrl,\n coachTitle: value$3,\n createdAt: value$2,\n value: value$1\n };\n });\n var value$13 = value$10.grades;\n var grades = value$13.map(function (value) {\n var value$1 = value.grade;\n var value$2 = value.evaluationCriterionId;\n return {\n evaluationCriterionId: value$2,\n grade: value$1\n };\n });\n var value$14 = value$10.files;\n var files = value$14.map(function (value) {\n var value$1 = value.id;\n var value$2 = value.title;\n var value$3 = value.url;\n return {\n url: value$3,\n title: value$2,\n id: value$1\n };\n });\n var value$15 = value$10.archivedAt;\n var archivedAt = value$15 !== undefined ? Caml_option.valFromOption(value$15) : null;\n var value$16 = value$10.evaluatedAt;\n var evaluatedAt = value$16 !== undefined ? Caml_option.valFromOption(value$16) : null;\n var value$17 = value$10.createdAt;\n var value$18 = value$10.passedAt;\n var passedAt = value$18 !== undefined ? Caml_option.valFromOption(value$18) : null;\n var value$19 = value$10.evaluatorName;\n var evaluatorName = value$19 !== undefined ? value$19 : null;\n var value$20 = value$10.id;\n var submission = {\n id: value$20,\n evaluatorName: evaluatorName,\n passedAt: passedAt,\n createdAt: value$17,\n evaluatedAt: evaluatedAt,\n archivedAt: archivedAt,\n files: files,\n grades: grades,\n feedback: feedback,\n checklist: value$11\n };\n var value$21 = value$1.targetEvaluationCriteriaIds;\n var targetEvaluationCriteriaIds = value$21.map(function (value) {\n return value;\n });\n var value$22 = value$1.reviewChecklist;\n var reviewChecklist = value$22.map(function (value) {\n var value$1 = value.result;\n var result = value$1.map(function (value) {\n var value$1 = value.feedback;\n var feedback = value$1 !== undefined ? value$1 : null;\n var value$2 = value.title;\n return {\n title: value$2,\n feedback: feedback\n };\n });\n var value$2 = value.title;\n return {\n title: value$2,\n result: result\n };\n });\n var value$23 = value$1.evaluationCriteria;\n var evaluationCriteria = value$23.map(function (value) {\n var value$1 = value.gradeLabels;\n var gradeLabels = value$1.map(function (value) {\n var value$1 = value.label;\n var value$2 = value.grade;\n return {\n grade: value$2,\n label: value$1\n };\n });\n var value$2 = value.passGrade;\n var value$3 = value.maxGrade;\n var value$4 = value.name;\n var value$5 = value.id;\n return {\n id: value$5,\n name: value$4,\n maxGrade: value$3,\n passGrade: value$2,\n gradeLabels: gradeLabels\n };\n });\n var value$24 = value$1.submissionReport;\n var submissionReport;\n if (value$24 !== undefined) {\n var value$25 = value$24.queuedAt;\n var value$26 = value$24.conclusion;\n var conclusion = value$26 !== undefined ? (\n typeof value$26 === \"object\" ? value$26.VAL : (\n value$26 === \"failure\" ? \"failure\" : (\n value$26 === \"success\" ? \"success\" : \"error\"\n )\n )\n ) : null;\n var value$27 = value$24.completedAt;\n var completedAt = value$27 !== undefined ? Caml_option.valFromOption(value$27) : null;\n var value$28 = value$24.startedAt;\n var startedAt = value$28 !== undefined ? Caml_option.valFromOption(value$28) : null;\n var value$29 = value$24.status;\n var status = typeof value$29 === \"object\" ? value$29.VAL : (\n value$29 === \"completed\" ? \"completed\" : (\n value$29 === \"queued\" ? \"queued\" : \"in_progress\"\n )\n );\n var value$30 = value$24.testReport;\n var testReport = value$30 !== undefined ? value$30 : null;\n var value$31 = value$24.id;\n submissionReport = {\n id: value$31,\n testReport: testReport,\n status: status,\n startedAt: startedAt,\n completedAt: completedAt,\n conclusion: conclusion,\n queuedAt: value$25\n };\n } else {\n submissionReport = null;\n }\n var value$32 = value$1.students;\n var students = value$32.map(function (value) {\n var value$1 = value.name;\n var value$2 = value.id;\n return {\n id: value$2,\n name: value$1\n };\n });\n var value$33 = value$1.inactiveSubmissionReviewAllowedDays;\n var value$34 = value$1.submissionReportPollTime;\n var value$35 = value$1.createdAt;\n var value$36 = value$1.inactiveStudents;\n var value$37 = value$1.levelId;\n var value$38 = value$1.levelNumber;\n var value$39 = value$1.targetTitle;\n var value$40 = value$1.targetId;\n var submissionDetails = {\n targetId: value$40,\n targetTitle: value$39,\n levelNumber: value$38,\n levelId: value$37,\n inactiveStudents: value$36,\n createdAt: value$35,\n submissionReportPollTime: value$34,\n inactiveSubmissionReviewAllowedDays: value$33,\n students: students,\n submissionReport: submissionReport,\n evaluationCriteria: evaluationCriteria,\n reviewChecklist: reviewChecklist,\n targetEvaluationCriteriaIds: targetEvaluationCriteriaIds,\n submission: submission,\n allSubmissions: allSubmissions,\n coaches: coaches,\n teamName: teamName,\n courseId: value$6,\n preview: value$5,\n reviewerDetails: reviewerDetails\n };\n return {\n submissionDetails: submissionDetails\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables(submissionId, param) {\n return {\n submissionId: submissionId\n };\n}\n\nvar SubmissionDetailsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar SubmissionDetailsQuery_Graphql_error = include.Graphql_error;\n\nvar SubmissionDetailsQuery_decodeNotification = include.decodeNotification;\n\nvar SubmissionDetailsQuery_decodeObject = include.decodeObject;\n\nvar SubmissionDetailsQuery_decodeNotifications = include.decodeNotifications;\n\nvar SubmissionDetailsQuery_decodeErrors = include.decodeErrors;\n\nvar SubmissionDetailsQuery_flashNotifications = include.flashNotifications;\n\nvar SubmissionDetailsQuery_sendQuery = include.sendQuery;\n\nvar SubmissionDetailsQuery_query = include.query;\n\nvar SubmissionDetailsQuery_fetch = include.$$fetch;\n\nvar SubmissionDetailsQuery = {\n SubmissionDetailsQuery_inner: SubmissionDetailsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: SubmissionDetailsQuery_Graphql_error,\n decodeNotification: SubmissionDetailsQuery_decodeNotification,\n decodeObject: SubmissionDetailsQuery_decodeObject,\n decodeNotifications: SubmissionDetailsQuery_decodeNotifications,\n decodeErrors: SubmissionDetailsQuery_decodeErrors,\n flashNotifications: SubmissionDetailsQuery_flashNotifications,\n sendQuery: SubmissionDetailsQuery_sendQuery,\n query: SubmissionDetailsQuery_query,\n $$fetch: SubmissionDetailsQuery_fetch,\n make: make\n};\n\nfunction getSubmissionDetails(submissionId, setState, param) {\n Curry._1(setState, (function (param) {\n return /* Loading */0;\n }));\n Curry._3(make, undefined, undefined, {\n submissionId: submissionId\n }).then(function (response) {\n Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: CoursesReview__SubmissionDetails.decodeJs(response.submissionDetails)\n };\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateSubmission(setState, submissionDetails, overlaySubmission) {\n var newSubmissionDetails = CoursesReview__SubmissionDetails.updateOverlaySubmission(overlaySubmission, submissionDetails);\n return Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: newSubmissionDetails\n };\n }));\n}\n\nfunction currentSubmissionIndex(submissionId, allSubmissions) {\n return allSubmissions.length - allSubmissions.findIndex(function (s) {\n return CoursesReview__SubmissionMeta.id(s) === submissionId;\n }) | 0;\n}\n\nfunction updateReviewChecklist(submissionDetails, setState, reviewChecklist) {\n return Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: CoursesReview__SubmissionDetails.updateReviewChecklist(reviewChecklist, submissionDetails)\n };\n }));\n}\n\nfunction updateReviewer(submissionDetails, setState, reviewer) {\n return Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: CoursesReview__SubmissionDetails.updateReviewer(reviewer, submissionDetails)\n };\n }));\n}\n\nfunction updateSubmissionReport(submissionDetails, setState, submissionReport) {\n return Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: CoursesReview__SubmissionDetails.updateSubmissionReport(submissionReport, submissionDetails)\n };\n }));\n}\n\nfunction CoursesReview__SubmissionsRoot(Props) {\n var submissionId = Props.submissionId;\n var currentUser = Props.currentUser;\n var match = React.useState(function () {\n return /* Loading */0;\n });\n var setState = match[1];\n var state = match[0];\n React.useEffect((function () {\n return getSubmissionDetails(submissionId, setState, undefined);\n }), [submissionId]);\n var tmp;\n if (state) {\n var submissionDetails = state._0;\n tmp = React.createElement(CoursesReview__Editor.make, {\n overlaySubmission: CoursesReview__SubmissionDetails.submission(submissionDetails),\n teamSubmission: CoursesReview__SubmissionDetails.students(submissionDetails).length > 1,\n evaluationCriteria: CoursesReview__SubmissionDetails.evaluationCriteria(submissionDetails),\n reviewChecklist: CoursesReview__SubmissionDetails.reviewChecklist(submissionDetails),\n updateSubmissionCB: (function (param) {\n return updateSubmission(setState, submissionDetails, param);\n }),\n updateReviewChecklistCB: (function (param) {\n return updateReviewChecklist(submissionDetails, setState, param);\n }),\n targetId: CoursesReview__SubmissionDetails.targetId(submissionDetails),\n targetEvaluationCriteriaIds: CoursesReview__SubmissionDetails.targetEvaluationCriteriaIds(submissionDetails),\n currentUser: currentUser,\n number: currentSubmissionIndex(submissionId, CoursesReview__SubmissionDetails.allSubmissions(submissionDetails)),\n submissionDetails: submissionDetails,\n submissionId: submissionId,\n updateReviewerCB: (function (param) {\n return updateReviewer(submissionDetails, setState, param);\n }),\n submissionReport: CoursesReview__SubmissionDetails.submissionReport(submissionDetails),\n updateSubmissionReportCB: (function (param) {\n return updateSubmissionReport(submissionDetails, setState, param);\n }),\n submissionReportPollTime: CoursesReview__SubmissionDetails.submissionReportPollTime(submissionDetails)\n });\n } else {\n tmp = React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"bg-gray-50 md:px-4\"\n }, React.createElement(\"div\", {\n className: \"mx-auto\"\n }, SkeletonLoading.card(undefined, undefined))), React.createElement(\"div\", {\n className: \"grid md:grid-cols-2 mt-10 border-t h-full\"\n }, React.createElement(\"div\", {\n className: \"md:px-4 bg-white\"\n }, SkeletonLoading.heading(undefined), SkeletonLoading.multiple(3, SkeletonLoading.paragraph(undefined))), React.createElement(\"div\", {\n className: \"md:px-4 bg-gray-50 border-l\"\n }, SkeletonLoading.userDetails(undefined), SkeletonLoading.paragraph(undefined), SkeletonLoading.userDetails(undefined), SkeletonLoading.paragraph(undefined))));\n }\n return React.createElement(\"div\", {\n className: \"flex-1 md:flex md:flex-col md:overflow-hidden\"\n }, tmp);\n}\n\nvar UserProxyFragment;\n\nvar make$1 = CoursesReview__SubmissionsRoot;\n\nexport {\n str ,\n UserProxyFragment ,\n SubmissionDetailsQuery ,\n getSubmissionDetails ,\n updateSubmission ,\n currentSubmissionIndex ,\n updateReviewChecklist ,\n updateReviewer ,\n updateSubmissionReport ,\n make$1 as make,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../utils/I18n.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Tooltip from \"./Tooltip.bs.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.ClickToCopy\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction performCopy(_copy, setState, _event) {\n ((navigator.clipboard.writeText(_copy)));\n return Curry._1(setState, (function (param) {\n return /* Copied */1;\n }));\n}\n\nfunction refresh(setState, _event) {\n return Curry._1(setState, (function (param) {\n return /* ReadyToCopy */0;\n }));\n}\n\nfunction ClickToCopy(Props) {\n var copy = Props.copy;\n var tooltipPositionOpt = Props.tooltipPosition;\n var classNameOpt = Props.className;\n var tooltipClassName = Props.tooltipClassName;\n var children = Props.children;\n var tooltipPosition = tooltipPositionOpt !== undefined ? tooltipPositionOpt : \"Top\";\n var className = classNameOpt !== undefined ? classNameOpt : \"\";\n var match = React.useState(function () {\n return /* ReadyToCopy */0;\n });\n var setState = match[1];\n var tip = match[0] ? t(undefined, undefined, \"copied\") : t(undefined, undefined, \"copy\");\n var tmp = {\n tip: tip,\n position: tooltipPosition,\n children: children\n };\n if (tooltipClassName !== undefined) {\n tmp.className = Caml_option.valFromOption(tooltipClassName);\n }\n return React.createElement(\"div\", {\n className: \"cursor-pointer \" + className,\n onClick: (function (param) {\n return performCopy(copy, setState, param);\n }),\n onMouseLeave: (function (param) {\n return Curry._1(setState, (function (param) {\n return /* ReadyToCopy */0;\n }));\n })\n }, React.createElement(Tooltip.make, tmp));\n}\n\nvar make = ClickToCopy;\n\nexport {\n str ,\n t ,\n performCopy ,\n refresh ,\n make ,\n \n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as User from \"../../../shared/types/User.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\n\nfunction make(id, note, createdAt, author) {\n return {\n id: id,\n author: author,\n note: note,\n createdAt: createdAt\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction note(t) {\n return t.note;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction author(t) {\n return t.author;\n}\n\nfunction noteOn(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction sort(notes) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return DateFns.differenceInSeconds(y.createdAt, x.createdAt);\n }), notes);\n}\n\nfunction makeFromJs(note) {\n return make(note.id, note.note, DateFns.decodeISO(note.createdAt), OptionUtils.map(User.makeFromJs, note.author));\n}\n\nexport {\n make ,\n id ,\n note ,\n createdAt ,\n author ,\n noteOn ,\n sort ,\n makeFromJs ,\n \n}\n/* User Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as User from \"../../../shared/types/User.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as CoursesStudents__CoachNote from \"../types/CoursesStudents__CoachNote.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesStudents__CoachNoteShow\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation ArchiveCoachNoteMutation($id: ID!) {\\narchiveCoachNote(id: $id) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.archiveCoachNote;\n return {\n archiveCoachNote: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.archiveCoachNote;\n var value$2 = value$1.success;\n var archiveCoachNote = {\n success: value$2\n };\n return {\n archiveCoachNote: archiveCoachNote\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n id: inp.id\n };\n}\n\nfunction makeVariables(id, param) {\n return {\n id: id\n };\n}\n\nvar ArchiveCoachNoteMutation_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar ArchiveCoachNoteMutation_Graphql_error = include.Graphql_error;\n\nvar ArchiveCoachNoteMutation_decodeNotification = include.decodeNotification;\n\nvar ArchiveCoachNoteMutation_decodeObject = include.decodeObject;\n\nvar ArchiveCoachNoteMutation_decodeNotifications = include.decodeNotifications;\n\nvar ArchiveCoachNoteMutation_decodeErrors = include.decodeErrors;\n\nvar ArchiveCoachNoteMutation_flashNotifications = include.flashNotifications;\n\nvar ArchiveCoachNoteMutation_sendQuery = include.sendQuery;\n\nvar ArchiveCoachNoteMutation_query = include.query;\n\nvar ArchiveCoachNoteMutation_make = include.make;\n\nvar ArchiveCoachNoteMutation = {\n ArchiveCoachNoteMutation_inner: ArchiveCoachNoteMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: ArchiveCoachNoteMutation_Graphql_error,\n decodeNotification: ArchiveCoachNoteMutation_decodeNotification,\n decodeObject: ArchiveCoachNoteMutation_decodeObject,\n decodeNotifications: ArchiveCoachNoteMutation_decodeNotifications,\n decodeErrors: ArchiveCoachNoteMutation_decodeErrors,\n flashNotifications: ArchiveCoachNoteMutation_flashNotifications,\n sendQuery: ArchiveCoachNoteMutation_sendQuery,\n query: ArchiveCoachNoteMutation_query,\n $$fetch: $$fetch,\n make: ArchiveCoachNoteMutation_make\n};\n\nfunction removeCoachNote(id, removeNoteCB, setArchiving, $$event) {\n $$event.preventDefault();\n if (window.confirm(tr(undefined, undefined, \"sure_delete\"))) {\n Curry._1(setArchiving, (function (param) {\n return true;\n }));\n Curry._3($$fetch, undefined, undefined, {\n id: id\n }).then(function (response) {\n if (response.archiveCoachNote.success) {\n Curry._1(removeNoteCB, id);\n } else {\n Curry._1(setArchiving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n });\n return ;\n }\n \n}\n\nfunction deleteIcon(note, removeNoteCB, setArchiving, archiving) {\n var partial_arg = CoursesStudents__CoachNote.id(note);\n return React.createElement(\"button\", {\n \"aria-label\": tr(undefined, undefined, \"delete_note\") + CoursesStudents__CoachNote.id(note),\n className: \"w-10 text-sm text-gray-600 hover:text-gray-900 cursor-pointer flex items-center justify-center rounded hover:bg-gray-50 hover:text-red-500 focus:outline-none focus:bg-gray-50 focus:text-red-500 focus:ring-2 focus:ring-inset focus:ring-red-500 \",\n title: tr(undefined, undefined, \"delete_note\") + CoursesStudents__CoachNote.id(note),\n disabled: archiving,\n onClick: (function (param) {\n return removeCoachNote(partial_arg, removeNoteCB, setArchiving, param);\n })\n }, React.createElement(FaIcon.make, {\n classes: archiving ? \"fas fa-spinner fa-spin\" : \"fas fa-trash-alt\"\n }));\n}\n\nfunction CoursesStudents__CoachNoteShow(Props) {\n var note = Props.note;\n var userId = Props.userId;\n var removeNoteCB = Props.removeNoteCB;\n var match = React.useState(function () {\n return false;\n });\n var user = CoursesStudents__CoachNote.author(note);\n var tmp;\n if (user !== undefined) {\n var avatarUrl = User.avatarUrl(user);\n tmp = avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"w-8 h-8 md:w-10 md:h-10 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 mt-1 md:mt-0 mr-2 md:mr-3 object-cover\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: User.name(user),\n className: \"w-8 h-8 md:w-10 md:h-10 text-xs border border-gray-300 rounded-full overflow-hidden shrink-0 mt-1 md:mt-0 mr-2 md:mr-3 object-cover\"\n });\n } else {\n tmp = React.createElement(Avatar.make, {\n name: \"?\",\n className: \"w-8 h-8 md:w-10 md:h-10 text-xs border rounded-full overflow-hidden shrink-0 mt-1 md:mt-0 mr-2 md:mr-3 object-cover\"\n });\n }\n var user$1 = CoursesStudents__CoachNote.author(note);\n var user$2 = CoursesStudents__CoachNote.author(note);\n var user$3 = CoursesStudents__CoachNote.author(note);\n var showDeleteIcon = user$3 !== undefined ? User.id(user$3) === userId : false;\n return React.createElement(\"div\", {\n key: CoursesStudents__CoachNote.id(note),\n \"aria-label\": \"Note \" + CoursesStudents__CoachNote.id(note),\n className: \"mt-4\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, tmp, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-sm font-semibold inline-block leading-snug\"\n }, user$1 !== undefined ? User.name(user$1) : tr(undefined, undefined, \"deleted_coach\")), React.createElement(\"p\", {\n className: \"text-gray-600 text-xs mt-px leading-snug\"\n }, user$2 !== undefined ? User.fullTitle(user$2) : tr(undefined, undefined, \"unknown\")))), showDeleteIcon ? deleteIcon(note, removeNoteCB, match[1], match[0]) : null), React.createElement(\"div\", {\n className: \"ml-10 md:ml-13 mt-2\"\n }, React.createElement(\"p\", {\n className: \"inline-block text-xs font-semibold leading-tight bg-gray-300 text-gray-800 mt-px px-1 py-px rounded\"\n }, tr(undefined, undefined, \"coach_on\") + \" \" + CoursesStudents__CoachNote.noteOn(note)), React.createElement(MarkdownBlock.make, {\n markdown: CoursesStudents__CoachNote.note(note),\n className: \"pt-1 text-sm\",\n profile: /* Permissive */0\n })));\n}\n\nvar make = CoursesStudents__CoachNoteShow;\n\nexport {\n str ,\n tr ,\n ArchiveCoachNoteMutation ,\n removeCoachNote ,\n deleteIcon ,\n make ,\n \n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as DisablingCover from \"../../../shared/components/DisablingCover.bs.js\";\nimport * as MarkdownEditor from \"../../../shared/components/MarkdownEditor.bs.js\";\nimport * as CoursesStudents__CoachNote from \"../types/CoursesStudents__CoachNote.bs.js\";\nimport * as CoursesStudents__CoachNoteShow from \"./CoursesStudents__CoachNoteShow.bs.js\";\n\nimport \"./CoursesStudents__StudentOverlay.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesStudents__CoachNotes\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"mutation CreateCoachNoteMutation($studentId: ID!, $note: String!) {\\ncreateCoachNote(studentId: $studentId, note: $note) {\\ncoachNote {\\nid \\nnote \\ncreatedAt \\nauthor {\\nid \\navatarUrl \\nname \\nfullTitle \\n}\\n\\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createCoachNote;\n var value$2 = value$1.coachNote;\n var tmp;\n if (value$2 == null) {\n tmp = undefined;\n } else {\n var value$3 = value$2.author;\n var tmp$1;\n if (value$3 == null) {\n tmp$1 = undefined;\n } else {\n var value$4 = value$3.avatarUrl;\n tmp$1 = {\n id: value$3.id,\n avatarUrl: !(value$4 == null) ? value$4 : undefined,\n name: value$3.name,\n fullTitle: value$3.fullTitle\n };\n }\n tmp = {\n id: value$2.id,\n note: value$2.note,\n createdAt: value$2.createdAt,\n author: tmp$1\n };\n }\n return {\n createCoachNote: {\n coachNote: tmp\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createCoachNote;\n var value$2 = value$1.coachNote;\n var coachNote;\n if (value$2 !== undefined) {\n var value$3 = value$2.author;\n var author;\n if (value$3 !== undefined) {\n var value$4 = value$3.fullTitle;\n var value$5 = value$3.name;\n var value$6 = value$3.avatarUrl;\n var avatarUrl = value$6 !== undefined ? value$6 : null;\n var value$7 = value$3.id;\n author = {\n id: value$7,\n avatarUrl: avatarUrl,\n name: value$5,\n fullTitle: value$4\n };\n } else {\n author = null;\n }\n var value$8 = value$2.createdAt;\n var value$9 = value$2.note;\n var value$10 = value$2.id;\n coachNote = {\n id: value$10,\n note: value$9,\n createdAt: value$8,\n author: author\n };\n } else {\n coachNote = null;\n }\n var createCoachNote = {\n coachNote: coachNote\n };\n return {\n createCoachNote: createCoachNote\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n studentId: inp.studentId,\n note: inp.note\n };\n}\n\nfunction makeVariables(studentId, note, param) {\n return {\n studentId: studentId,\n note: note\n };\n}\n\nvar CreateCoachNotesMutation_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar CreateCoachNotesMutation_Graphql_error = include.Graphql_error;\n\nvar CreateCoachNotesMutation_decodeNotification = include.decodeNotification;\n\nvar CreateCoachNotesMutation_decodeObject = include.decodeObject;\n\nvar CreateCoachNotesMutation_decodeNotifications = include.decodeNotifications;\n\nvar CreateCoachNotesMutation_decodeErrors = include.decodeErrors;\n\nvar CreateCoachNotesMutation_flashNotifications = include.flashNotifications;\n\nvar CreateCoachNotesMutation_sendQuery = include.sendQuery;\n\nvar CreateCoachNotesMutation_query = include.query;\n\nvar CreateCoachNotesMutation_fetch = include.$$fetch;\n\nvar CreateCoachNotesMutation = {\n CreateCoachNotesMutation_inner: CreateCoachNotesMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateCoachNotesMutation_Graphql_error,\n decodeNotification: CreateCoachNotesMutation_decodeNotification,\n decodeObject: CreateCoachNotesMutation_decodeObject,\n decodeNotifications: CreateCoachNotesMutation_decodeNotifications,\n decodeErrors: CreateCoachNotesMutation_decodeErrors,\n flashNotifications: CreateCoachNotesMutation_flashNotifications,\n sendQuery: CreateCoachNotesMutation_sendQuery,\n query: CreateCoachNotesMutation_query,\n $$fetch: CreateCoachNotesMutation_fetch,\n make: make\n};\n\nfunction saveNote(studentId, setState, state, addNoteCB) {\n Curry._1(setState, (function (state) {\n return {\n newNote: state.newNote,\n saving: true\n };\n }));\n Curry._3(make, undefined, undefined, {\n studentId: studentId,\n note: state.newNote\n }).then(function (response) {\n var note = response.createCoachNote.coachNote;\n if (note !== undefined) {\n var newNote = CoursesStudents__CoachNote.makeFromJs(Caml_option.valFromOption(note));\n Curry._1(addNoteCB, newNote);\n Curry._1(setState, (function (param) {\n return {\n newNote: \"\",\n saving: false\n };\n }));\n } else {\n Curry._1(setState, (function (state) {\n return {\n newNote: state.newNote,\n saving: false\n };\n }));\n }\n return Promise.resolve(undefined);\n }).catch(function (_error) {\n Curry._1(setState, (function (state) {\n return {\n newNote: state.newNote,\n saving: false\n };\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateCoachNoteCB(setState, newNote) {\n return Curry._1(setState, (function (state) {\n return {\n newNote: newNote,\n saving: state.saving\n };\n }));\n}\n\nfunction saveNoteButtonText(title, iconClasses) {\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: iconClasses + \" mr-2\"\n }), title);\n}\n\nfunction CoursesStudents__CoachNotes(Props) {\n var studentId = Props.studentId;\n var coachNotes = Props.coachNotes;\n var hasArchivedNotes = Props.hasArchivedNotes;\n var addNoteCB = Props.addNoteCB;\n var removeNoteCB = Props.removeNoteCB;\n var userId = Props.userId;\n var match = React.useState(function () {\n return {\n newNote: \"\",\n saving: false\n };\n });\n var setState = match[1];\n var state = match[0];\n return React.createElement(\"div\", {\n className: \"mt-3 text-sm\"\n }, React.createElement(\"label\", {\n className: \"font-semibold text-sm block mb-1\",\n htmlFor: \"course-students__coach-notes-new-note\"\n }, tr(undefined, undefined, \"new_note\")), React.createElement(DisablingCover.make, {\n disabled: state.saving,\n message: \"Saving...\",\n children: React.createElement(MarkdownEditor.make, {\n value: state.newNote,\n onChange: (function (param) {\n return updateCoachNoteCB(setState, param);\n }),\n profile: /* Permissive */0,\n textareaId: \"course-students__coach-notes-new-note\",\n maxLength: 10000\n })\n }), React.createElement(\"button\", {\n className: \"btn btn-primary mt-2\",\n disabled: state.newNote.length < 1 || state.saving,\n onClick: (function (param) {\n return saveNote(studentId, setState, state, addNoteCB);\n })\n }, state.saving ? saveNoteButtonText(tr(undefined, undefined, \"saving\"), \"fas fa-spinner\") : saveNoteButtonText(tr(undefined, undefined, \"save_note\"), \"\")), React.createElement(\"div\", undefined, React.createElement(\"h6\", {\n className: \"font-semibold mt-6\"\n }, tr(undefined, undefined, \"all_notes\")), ArrayUtils.isEmpty(coachNotes) ? React.createElement(\"div\", {\n className: \"bg-gray-50 rounded text-center p-4 md:p-6 items-center justify-center mt-2\"\n }, React.createElement(Icon.make, {\n className: \"if i-long-text-light text-gray-800 text-base\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold text-gray-600 mt-2\"\n }, hasArchivedNotes ? tr(undefined, undefined, \"has_archived_notes\") : tr(undefined, undefined, \"no_notes\"))) : null, $$Array.map((function (note) {\n return React.createElement(CoursesStudents__CoachNoteShow.make, {\n note: note,\n userId: userId,\n removeNoteCB: removeNoteCB,\n key: CoursesStudents__CoachNote.id(note)\n });\n }), CoursesStudents__CoachNote.sort(coachNotes))));\n}\n\nvar make$1 = CoursesStudents__CoachNotes;\n\nexport {\n str ,\n tr ,\n CreateCoachNotesMutation ,\n saveNote ,\n updateCoachNoteCB ,\n saveNoteButtonText ,\n make$1 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction passGrade(t) {\n return t.passGrade;\n}\n\nfunction make(id, name, maxGrade, passGrade) {\n return {\n id: id,\n name: name,\n passGrade: passGrade,\n maxGrade: maxGrade\n };\n}\n\nfunction makeFromJs(ecData) {\n return ecData.map(function (ec) {\n return make(ec.id, ec.name, ec.maxGrade, ec.passGrade);\n });\n}\n\nexport {\n id ,\n name ,\n passGrade ,\n make ,\n makeFromJs ,\n \n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as $$String from \"../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Caml_format from \"../../../../../node_modules/rescript/lib/es6/caml_format.js\";\nimport * as CoursesStudents__CoachNote from \"./CoursesStudents__CoachNote.bs.js\";\nimport * as CoursesStudents__EvaluationCriterion from \"./CoursesStudents__EvaluationCriterion.bs.js\";\n\nfunction student(t) {\n return t.student;\n}\n\nfunction team(t) {\n return t.team;\n}\n\nfunction students(team) {\n return team.students;\n}\n\nfunction coachNotes(t) {\n return t.coachNotes;\n}\n\nfunction hasArchivedNotes(t) {\n return t.hasArchivedNotes;\n}\n\nfunction levels(t) {\n return t.levels;\n}\n\nfunction courseId(t) {\n return t.courseId;\n}\n\nfunction makeAverageGrade(evaluationCriterionId, grade) {\n return {\n evaluationCriterionId: evaluationCriterionId,\n grade: grade\n };\n}\n\nfunction totalTargets(t) {\n return t.totalTargets;\n}\n\nfunction gradeAsPercentage(averageGrade, evaluationCriterion) {\n var maxGrade = evaluationCriterion.maxGrade;\n return String(averageGrade.grade / maxGrade * 100.0 | 0);\n}\n\nfunction targetsCompleted(t) {\n return t.targetsCompleted;\n}\n\nfunction quizzesAttempted(t) {\n return t.quizScores.length;\n}\n\nfunction evaluationCriteria(t) {\n return t.evaluationCriteria;\n}\n\nfunction averageGrades(t) {\n return t.averageGrades;\n}\n\nfunction completedLevelIds(t) {\n return t.completedLevelIds;\n}\n\nfunction gradeValue(averageGrade) {\n return averageGrade.grade;\n}\n\nfunction evaluationCriterionForGrade(grade, evaluationCriteria, componentName) {\n return ArrayUtils.unsafeFind((function (ec) {\n return CoursesStudents__EvaluationCriterion.id(ec) === grade.evaluationCriterionId;\n }), \"Unable to find evaluation criterion with id: \" + (grade.evaluationCriterionId + (\" in component: \" + componentName)), evaluationCriteria);\n}\n\nfunction addNewNote(note, t) {\n var notes = $$Array.append(t.coachNotes, [note]);\n return {\n id: t.id,\n coachNotes: notes,\n hasArchivedNotes: t.hasArchivedNotes,\n evaluationCriteria: t.evaluationCriteria,\n totalTargets: t.totalTargets,\n targetsCompleted: t.targetsCompleted,\n quizScores: t.quizScores,\n averageGrades: t.averageGrades,\n completedLevelIds: t.completedLevelIds,\n student: t.student,\n team: t.team,\n levels: t.levels,\n courseId: t.courseId\n };\n}\n\nfunction removeNote(noteId, t) {\n var notes = t.coachNotes.filter(function (note) {\n return CoursesStudents__CoachNote.id(note) !== noteId;\n });\n return {\n id: t.id,\n coachNotes: notes,\n hasArchivedNotes: true,\n evaluationCriteria: t.evaluationCriteria,\n totalTargets: t.totalTargets,\n targetsCompleted: t.targetsCompleted,\n quizScores: t.quizScores,\n averageGrades: t.averageGrades,\n completedLevelIds: t.completedLevelIds,\n student: t.student,\n team: t.team,\n levels: t.levels,\n courseId: t.courseId\n };\n}\n\nfunction computeAverageQuizScore(quizScores) {\n var sumOfPercentageScores = $$Array.map((function (quizScore) {\n var fractionArray = $$Array.of_list($$String.split_on_char(/* '/' */47, quizScore));\n var numerator = Caml_format.caml_float_of_string(Caml_array.get(fractionArray, 0));\n var denominator = Caml_format.caml_float_of_string(Caml_array.get(fractionArray, 1));\n return numerator / denominator * 100.0;\n }), quizScores).reduce((function (a, b) {\n return a + b;\n }), 0.0);\n return sumOfPercentageScores / quizScores.length;\n}\n\nfunction averageQuizScore(t) {\n if (ArrayUtils.isEmpty(t.quizScores)) {\n return ;\n } else {\n return computeAverageQuizScore(t.quizScores);\n }\n}\n\nfunction makeTeam(id, name, students) {\n return {\n id: id,\n name: name,\n students: students\n };\n}\n\nfunction make(id, coachNotes, hasArchivedNotes, evaluationCriteria, totalTargets, targetsCompleted, quizScores, averageGrades, completedLevelIds, student, team, levels, courseId) {\n return {\n id: id,\n coachNotes: coachNotes,\n hasArchivedNotes: hasArchivedNotes,\n evaluationCriteria: evaluationCriteria,\n totalTargets: totalTargets,\n targetsCompleted: targetsCompleted,\n quizScores: quizScores,\n averageGrades: averageGrades,\n completedLevelIds: completedLevelIds,\n student: student,\n team: team,\n levels: levels,\n courseId: courseId\n };\n}\n\nexport {\n student ,\n team ,\n students ,\n coachNotes ,\n hasArchivedNotes ,\n levels ,\n courseId ,\n makeAverageGrade ,\n totalTargets ,\n gradeAsPercentage ,\n targetsCompleted ,\n quizzesAttempted ,\n evaluationCriteria ,\n averageGrades ,\n completedLevelIds ,\n gradeValue ,\n evaluationCriterionForGrade ,\n addNewNote ,\n removeNote ,\n computeAverageQuizScore ,\n averageQuizScore ,\n makeTeam ,\n make ,\n \n}\n/* ArrayUtils Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\n\nfunction make(id, title, createdAt, passedAt, levelId, evaluatedAt) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n passedAt: passedAt,\n evaluatedAt: evaluatedAt,\n levelId: levelId\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction levelId(t) {\n return t.levelId;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction evaluatedAt(t) {\n return t.evaluatedAt;\n}\n\nfunction sort(submissions) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return DateFns.differenceInSeconds(y.createdAt, x.createdAt);\n }), submissions);\n}\n\nfunction failed(t) {\n var _passedAt = t.passedAt;\n return _passedAt === undefined;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction timeDistance(t) {\n return DateFns.formatDistanceToNowStrict(t.createdAt, true, undefined, undefined, undefined);\n}\n\nfunction makeFromJs(submissions) {\n return submissions.map(function (submission) {\n var createdAt = DateFns.decodeISO(submission.createdAt);\n var passedAt = Belt_Option.map(submission.passedAt, DateFns.decodeISO);\n var evaluatedAt = Belt_Option.map(submission.evaluatedAt, DateFns.decodeISO);\n return make(submission.id, submission.title, createdAt, passedAt, submission.levelId, evaluatedAt);\n });\n}\n\nexport {\n make ,\n id ,\n levelId ,\n title ,\n evaluatedAt ,\n sort ,\n failed ,\n createdAtPretty ,\n timeDistance ,\n makeFromJs ,\n \n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as Shared__Level from \"../../../shared/types/Shared__Level.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as CoursesStudents__Submission from \"../types/CoursesStudents__Submission.bs.js\";\nimport ReviewedEmptySvg from \"../../shared/images/reviewed-empty.svg\";\n\nimport \"./CoursesStudents__StudentOverlay.css\"\n;\n\nvar reviewedEmptyImage = ReviewedEmptySvg;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesStudents__SubmissionsList\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar partial_arg$1 = \"shared\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg$1, param, param$1, param$2);\n}\n\nvar Raw = {};\n\nvar query = \"query StudentSubmissionsQuery($studentId: ID!, $after: String, $sortDirection: SortDirection!) {\\nstudentSubmissions(studentId: $studentId, after: $after, first: 20, sortDirection: $sortDirection) {\\nnodes {\\nid \\ncreatedAt \\nlevelId \\npassedAt \\ntitle \\nevaluatedAt \\n}\\n\\npageInfo {\\nhasNextPage \\nendCursor \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.studentSubmissions;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n return {\n studentSubmissions: {\n nodes: value$2.map(function (value) {\n var value$1 = value.passedAt;\n var value$2 = value.evaluatedAt;\n return {\n id: value.id,\n createdAt: value.createdAt,\n levelId: value.levelId,\n passedAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n title: value.title,\n evaluatedAt: !(value$2 == null) ? Caml_option.some(value$2) : undefined\n };\n }),\n pageInfo: {\n hasNextPage: value$3.hasNextPage,\n endCursor: !(value$4 == null) ? value$4 : undefined\n }\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.studentSubmissions;\n var value$2 = value$1.pageInfo;\n var value$3 = value$2.endCursor;\n var endCursor = value$3 !== undefined ? value$3 : null;\n var value$4 = value$2.hasNextPage;\n var pageInfo = {\n hasNextPage: value$4,\n endCursor: endCursor\n };\n var value$5 = value$1.nodes;\n var nodes = value$5.map(function (value) {\n var value$1 = value.evaluatedAt;\n var evaluatedAt = value$1 !== undefined ? Caml_option.valFromOption(value$1) : null;\n var value$2 = value.title;\n var value$3 = value.passedAt;\n var passedAt = value$3 !== undefined ? Caml_option.valFromOption(value$3) : null;\n var value$4 = value.levelId;\n var value$5 = value.createdAt;\n var value$6 = value.id;\n return {\n id: value$6,\n createdAt: value$5,\n levelId: value$4,\n passedAt: passedAt,\n title: value$2,\n evaluatedAt: evaluatedAt\n };\n });\n var studentSubmissions = {\n nodes: nodes,\n pageInfo: pageInfo\n };\n return {\n studentSubmissions: studentSubmissions\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.after;\n var a$1 = inp.sortDirection;\n return {\n studentId: inp.studentId,\n after: a !== undefined ? a : undefined,\n sortDirection: a$1 === \"Descending\" ? \"Descending\" : \"Ascending\"\n };\n}\n\nfunction makeVariables(studentId, after, sortDirection, param) {\n return {\n studentId: studentId,\n after: after,\n sortDirection: sortDirection\n };\n}\n\nvar StudentSubmissionsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar make = include.make;\n\nvar StudentSubmissionsQuery_Graphql_error = include.Graphql_error;\n\nvar StudentSubmissionsQuery_decodeNotification = include.decodeNotification;\n\nvar StudentSubmissionsQuery_decodeObject = include.decodeObject;\n\nvar StudentSubmissionsQuery_decodeNotifications = include.decodeNotifications;\n\nvar StudentSubmissionsQuery_decodeErrors = include.decodeErrors;\n\nvar StudentSubmissionsQuery_flashNotifications = include.flashNotifications;\n\nvar StudentSubmissionsQuery_sendQuery = include.sendQuery;\n\nvar StudentSubmissionsQuery_query = include.query;\n\nvar StudentSubmissionsQuery_fetch = include.$$fetch;\n\nvar StudentSubmissionsQuery = {\n StudentSubmissionsQuery_inner: StudentSubmissionsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: StudentSubmissionsQuery_Graphql_error,\n decodeNotification: StudentSubmissionsQuery_decodeNotification,\n decodeObject: StudentSubmissionsQuery_decodeObject,\n decodeNotifications: StudentSubmissionsQuery_decodeNotifications,\n decodeErrors: StudentSubmissionsQuery_decodeErrors,\n flashNotifications: StudentSubmissionsQuery_flashNotifications,\n sendQuery: StudentSubmissionsQuery_sendQuery,\n query: StudentSubmissionsQuery_query,\n $$fetch: StudentSubmissionsQuery_fetch,\n make: make\n};\n\nfunction updateStudentSubmissions(setState, updateSubmissionsCB, endCursor, hasNextPage, submissions, nodes) {\n var updatedSubmissions = submissions.concat(CoursesStudents__Submission.makeFromJs(nodes));\n var submissionsData = hasNextPage && endCursor !== undefined ? ({\n TAG: /* PartiallyLoaded */0,\n _0: updatedSubmissions,\n _1: endCursor\n }) : ({\n TAG: /* FullyLoaded */1,\n _0: updatedSubmissions\n });\n Curry._1(updateSubmissionsCB, submissionsData);\n return Curry._1(setState, (function (param) {\n return {\n loading: false\n };\n }));\n}\n\nfunction getStudentSubmissions(studentId, cursor, setState, submissions, updateSubmissionsCB) {\n Curry._1(setState, (function (param) {\n return {\n loading: true\n };\n }));\n Curry._3(make, undefined, undefined, {\n studentId: studentId,\n after: cursor,\n sortDirection: \"Descending\"\n }).then(function (response) {\n updateStudentSubmissions(setState, updateSubmissionsCB, response.studentSubmissions.pageInfo.endCursor, response.studentSubmissions.pageInfo.hasNextPage, submissions, response.studentSubmissions.nodes);\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction showSubmissionStatus(submission) {\n var _datetime = CoursesStudents__Submission.evaluatedAt(submission);\n if (_datetime !== undefined) {\n if (CoursesStudents__Submission.failed(submission)) {\n return React.createElement(\"div\", {\n className: \"bg-red-100 border border-red-500 shrink-0 leading-normal text-red-800 font-semibold px-3 py-px rounded\"\n }, ts(undefined, undefined, \"rejected\"));\n } else {\n return React.createElement(\"div\", {\n className: \"bg-green-100 border border-green-500 shrink-0 leading-normal text-green-800 font-semibold px-3 py-px rounded\"\n }, ts(undefined, undefined, \"completed\"));\n }\n } else {\n return React.createElement(\"div\", {\n className: \"bg-orange-100 border border-orange-300 shrink-0 leading-normal text-orange-600 font-semibold px-3 py-px rounded\"\n }, CoursesStudents__Submission.timeDistance(submission));\n }\n}\n\nfunction submissionCardClasses(submission) {\n var _datetime = CoursesStudents__Submission.evaluatedAt(submission);\n return \"flex flex-col md:flex-row items-start md:items-center justify-between bg-white border-l-3 p-3 md:py-6 md:px-5 mt-4 cursor-pointer rounded-r-lg shadow hover:border-primary-500 hover:text-primary-500 hover:shadow-md \" + (\n _datetime !== undefined ? (\n CoursesStudents__Submission.failed(submission) ? \"border-red-500\" : \"border-green-500\"\n ) : \"border-orange-400\"\n );\n}\n\nfunction showSubmission(submissions, levels) {\n return React.createElement(\"div\", undefined, $$Array.map((function (submission) {\n return React.createElement(\"a\", {\n key: CoursesStudents__Submission.id(submission),\n href: \"/submissions/\" + (CoursesStudents__Submission.id(submission) + \"/review\"),\n target: \"_blank\"\n }, React.createElement(\"div\", {\n key: CoursesStudents__Submission.id(submission),\n \"aria-label\": \"student-submission-card-\" + CoursesStudents__Submission.id(submission),\n className: submissionCardClasses(submission)\n }, React.createElement(\"div\", {\n className: \"w-full md:w-3/4\"\n }, React.createElement(\"div\", {\n className: \"block text-sm md:pr-2\"\n }, React.createElement(\"span\", {\n className: \"bg-gray-300 text-xs font-semibold px-2 py-px rounded\"\n }, Shared__Level.unsafeLevelNumber(levels, \"StudentSubmissionsList\", CoursesStudents__Submission.levelId(submission))), React.createElement(\"span\", {\n className: \"ml-2 font-semibold text-base\"\n }, CoursesStudents__Submission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ml-px text-xs text-gray-900\"\n }, React.createElement(\"span\", {\n className: \"ml-1\"\n }, tr(undefined, undefined, \"submitted_on\") + CoursesStudents__Submission.createdAtPretty(submission)))), React.createElement(\"div\", {\n className: \"w-auto md:w-1/4 text-xs flex justify-end mt-2 md:mt-0\"\n }, showSubmissionStatus(submission))));\n }), CoursesStudents__Submission.sort(submissions)));\n}\n\nfunction showSubmissions(submissions, levels) {\n if (ArrayUtils.isEmpty(submissions)) {\n return React.createElement(\"div\", {\n className: \"course-review__reviewed-empty text-lg font-semibold text-center py-4\"\n }, React.createElement(\"h5\", {\n className: \"py-4 mt-4 bg-gray-50 text-gray-800 font-semibold\"\n }, tr(undefined, undefined, \"no_revied_submission\")), React.createElement(\"img\", {\n className: \"w-3/4 md:w-1/2 mx-auto mt-2\",\n src: reviewedEmptyImage\n }));\n } else {\n return showSubmission(submissions, levels);\n }\n}\n\nfunction CoursesStudents__SubmissionsList(Props) {\n var studentId = Props.studentId;\n var levels = Props.levels;\n var submissions = Props.submissions;\n var updateSubmissionsCB = Props.updateSubmissionsCB;\n var match = React.useState(function () {\n return {\n loading: false\n };\n });\n var setState = match[1];\n React.useEffect((function () {\n if (typeof submissions === \"number\") {\n getStudentSubmissions(studentId, undefined, setState, [], updateSubmissionsCB);\n }\n \n }), [studentId]);\n var tmp;\n if (typeof submissions === \"number\") {\n tmp = SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined));\n } else if (submissions.TAG === /* PartiallyLoaded */0) {\n var cursor = submissions._1;\n var submissions$1 = submissions._0;\n tmp = React.createElement(\"div\", undefined, showSubmissions(submissions$1, levels), match[0].loading ? SkeletonLoading.multiple(3, SkeletonLoading.card(undefined, undefined)) : React.createElement(\"button\", {\n className: \"btn btn-primary-ghost cursor-pointer w-full mt-4\",\n onClick: (function (param) {\n return getStudentSubmissions(studentId, cursor, setState, submissions$1, updateSubmissionsCB);\n })\n }, ts(undefined, undefined, \"load_more\")));\n } else {\n tmp = showSubmissions(submissions._0, levels);\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"student-submissions\"\n }, tmp);\n}\n\nvar make$1 = CoursesStudents__SubmissionsList;\n\nexport {\n reviewedEmptyImage ,\n str ,\n tr ,\n ts ,\n StudentSubmissionsQuery ,\n updateStudentSubmissions ,\n getStudentSubmissions ,\n showSubmissionStatus ,\n submissionCardClasses ,\n showSubmission ,\n showSubmissions ,\n make$1 as make,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\nimport * as Icon from \"../../../shared/Icon.bs.js\";\nimport * as Link from \"../../../shared/components/Link.bs.js\";\nimport * as User from \"../../../shared/types/User.bs.js\";\nimport * as $$Array from \"../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Avatar from \"../../../shared/Avatar.bs.js\";\nimport * as Cohort from \"../../../shared/types/Cohort.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as ScrollLock from \"../../../shared/utils/ScrollLock.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as ClickToCopy from \"../../../shared/components/ClickToCopy.bs.js\";\nimport * as OptionUtils from \"../../../shared/utils/OptionUtils.bs.js\";\nimport * as UserDetails from \"../../../shared/types/UserDetails.bs.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as Shared__Level from \"../../../shared/types/Shared__Level.bs.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as RescriptReactRouter from \"../../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoursesStudents__CoachNote from \"../types/CoursesStudents__CoachNote.bs.js\";\nimport * as CoursesStudents__CoachNotes from \"./CoursesStudents__CoachNotes.bs.js\";\nimport * as CoursesStudents__StudentInfo from \"../types/CoursesStudents__StudentInfo.bs.js\";\nimport * as CoursesStudents__StudentDetails from \"../types/CoursesStudents__StudentDetails.bs.js\";\nimport * as CoursesStudents__PersonalCoaches from \"./CoursesStudents__PersonalCoaches.bs.js\";\nimport * as CoursesStudents__SubmissionsList from \"./CoursesStudents__SubmissionsList.bs.js\";\nimport * as CoursesStudents__EvaluationCriterion from \"../types/CoursesStudents__EvaluationCriterion.bs.js\";\n\nimport \"./CoursesStudents__StudentOverlay.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesStudents__StudentOverlay\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nvar initialState = {\n selectedTab: /* Notes */0,\n studentData: /* Loading */0,\n submissions: /* Unloaded */0\n};\n\nfunction closeOverlay(courseId) {\n var search = window.location.search;\n return RescriptReactRouter.push(\"/courses/\" + (courseId + \"/students\") + search);\n}\n\nvar Raw = {};\n\nvar query = \"query StudentDetailsQuery($studentId: ID!) {\\nstudentDetails(studentId: $studentId) {\\nemail \\nevaluationCriteria {\\nid \\nname \\nmaxGrade \\npassGrade \\n}\\n\\nstudent {\\nid \\ntaggings \\nuser {\\n...UserDetailsFragment \\n}\\n\\nlevel {\\n...LevelFragment \\n}\\n\\ncohort {\\n...CohortFragment \\n}\\n\\npersonalCoaches {\\n...UserProxyFragment \\n}\\n\\ndroppedOutAt \\ncourse {\\nid \\nlevels {\\n...LevelFragment \\n}\\n\\n}\\n\\n}\\n\\ntotalTargets \\ntargetsCompleted \\ncompletedLevelIds \\nquizScores \\naverageGrades {\\nevaluationCriterionId \\naverageGrade \\n}\\n\\nteam {\\nid \\nname \\nstudents {\\nid \\ntaggings \\nuser {\\n...UserDetailsFragment \\n}\\n\\nlevel {\\n...LevelFragment \\n}\\n\\ncohort {\\n...CohortFragment \\n}\\n\\npersonalCoaches {\\n...UserProxyFragment \\n}\\n\\ndroppedOutAt \\n}\\n\\n}\\n\\n}\\n\\ncoachNotes(studentId: $studentId) {\\nid \\nnote \\ncreatedAt \\nauthor {\\n...UserFragment \\n}\\n\\n}\\n\\nhasArchivedCoachNotes(studentId: $studentId) \\n}\\n\" + Cohort.Fragment.query + Shared__Level.Fragment.query + UserDetails.Fragment.query + User.Fragment.query + UserProxy.Fragment.query;\n\nfunction parse(value) {\n var value$1 = value.studentDetails;\n var value$2 = value$1.evaluationCriteria;\n var value$3 = value$1.student;\n var value$4 = value$3.taggings;\n var value$5 = value$3.user;\n var value$6 = value$3.level;\n var value$7 = value$3.cohort;\n var value$8 = value$3.personalCoaches;\n var value$9 = value$3.droppedOutAt;\n var value$10 = value$3.course;\n var value$11 = value$10.levels;\n var value$12 = value$1.completedLevelIds;\n var value$13 = value$1.quizScores;\n var value$14 = value$1.averageGrades;\n var value$15 = value$1.team;\n var tmp;\n if (value$15 == null) {\n tmp = undefined;\n } else {\n var value$16 = value$15.students;\n tmp = {\n id: value$15.id,\n name: value$15.name,\n students: value$16.map(function (value) {\n var value$1 = value.taggings;\n var value$2 = value.user;\n var value$3 = value.level;\n var value$4 = value.cohort;\n var value$5 = value.personalCoaches;\n var value$6 = value.droppedOutAt;\n return {\n id: value.id,\n taggings: value$1.map(function (value) {\n return value;\n }),\n user: UserDetails.Fragment.verifyArgsAndParse(\"UserDetailsFragment\", value$2),\n level: Shared__Level.Fragment.verifyArgsAndParse(\"LevelFragment\", value$3),\n cohort: Cohort.Fragment.verifyArgsAndParse(\"CohortFragment\", value$4),\n personalCoaches: value$5.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }),\n droppedOutAt: !(value$6 == null) ? Caml_option.some(value$6) : undefined\n };\n })\n };\n }\n var value$17 = value.coachNotes;\n return {\n studentDetails: {\n email: value$1.email,\n evaluationCriteria: value$2.map(function (value) {\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade,\n passGrade: value.passGrade\n };\n }),\n student: {\n id: value$3.id,\n taggings: value$4.map(function (value) {\n return value;\n }),\n user: UserDetails.Fragment.verifyArgsAndParse(\"UserDetailsFragment\", value$5),\n level: Shared__Level.Fragment.verifyArgsAndParse(\"LevelFragment\", value$6),\n cohort: Cohort.Fragment.verifyArgsAndParse(\"CohortFragment\", value$7),\n personalCoaches: value$8.map(function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }),\n droppedOutAt: !(value$9 == null) ? Caml_option.some(value$9) : undefined,\n course: {\n id: value$10.id,\n levels: value$11.map(function (value) {\n return Shared__Level.Fragment.verifyArgsAndParse(\"LevelFragment\", value);\n })\n }\n },\n totalTargets: value$1.totalTargets,\n targetsCompleted: value$1.targetsCompleted,\n completedLevelIds: value$12.map(function (value) {\n return value;\n }),\n quizScores: value$13.map(function (value) {\n return value;\n }),\n averageGrades: value$14.map(function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n averageGrade: value.averageGrade\n };\n }),\n team: tmp\n },\n coachNotes: value$17.map(function (value) {\n var value$1 = value.author;\n return {\n id: value.id,\n note: value.note,\n createdAt: value.createdAt,\n author: !(value$1 == null) ? User.Fragment.verifyArgsAndParse(\"UserFragment\", value$1) : undefined\n };\n }),\n hasArchivedCoachNotes: value.hasArchivedCoachNotes\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.hasArchivedCoachNotes;\n var value$2 = value.coachNotes;\n var coachNotes = value$2.map(function (value) {\n var value$1 = value.author;\n var author = value$1 !== undefined ? User.Fragment.serialize(value$1) : null;\n var value$2 = value.createdAt;\n var value$3 = value.note;\n var value$4 = value.id;\n return {\n id: value$4,\n note: value$3,\n createdAt: value$2,\n author: author\n };\n });\n var value$3 = value.studentDetails;\n var value$4 = value$3.team;\n var team;\n if (value$4 !== undefined) {\n var value$5 = value$4.students;\n var students = value$5.map(function (value) {\n var value$1 = value.droppedOutAt;\n var droppedOutAt = value$1 !== undefined ? Caml_option.valFromOption(value$1) : null;\n var value$2 = value.personalCoaches;\n var personalCoaches = value$2.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n var value$3 = value.cohort;\n var cohort = Cohort.Fragment.serialize(value$3);\n var value$4 = value.level;\n var level = Shared__Level.Fragment.serialize(value$4);\n var value$5 = value.user;\n var user = UserDetails.Fragment.serialize(value$5);\n var value$6 = value.taggings;\n var taggings = value$6.map(function (value) {\n return value;\n });\n var value$7 = value.id;\n return {\n id: value$7,\n taggings: taggings,\n user: user,\n level: level,\n cohort: cohort,\n personalCoaches: personalCoaches,\n droppedOutAt: droppedOutAt\n };\n });\n var value$6 = value$4.name;\n var value$7 = value$4.id;\n team = {\n id: value$7,\n name: value$6,\n students: students\n };\n } else {\n team = null;\n }\n var value$8 = value$3.averageGrades;\n var averageGrades = value$8.map(function (value) {\n var value$1 = value.averageGrade;\n var value$2 = value.evaluationCriterionId;\n return {\n evaluationCriterionId: value$2,\n averageGrade: value$1\n };\n });\n var value$9 = value$3.quizScores;\n var quizScores = value$9.map(function (value) {\n return value;\n });\n var value$10 = value$3.completedLevelIds;\n var completedLevelIds = value$10.map(function (value) {\n return value;\n });\n var value$11 = value$3.targetsCompleted;\n var value$12 = value$3.totalTargets;\n var value$13 = value$3.student;\n var value$14 = value$13.course;\n var value$15 = value$14.levels;\n var levels = value$15.map(function (value) {\n return Shared__Level.Fragment.serialize(value);\n });\n var value$16 = value$14.id;\n var course = {\n id: value$16,\n levels: levels\n };\n var value$17 = value$13.droppedOutAt;\n var droppedOutAt = value$17 !== undefined ? Caml_option.valFromOption(value$17) : null;\n var value$18 = value$13.personalCoaches;\n var personalCoaches = value$18.map(function (value) {\n return UserProxy.Fragment.serialize(value);\n });\n var value$19 = value$13.cohort;\n var cohort = Cohort.Fragment.serialize(value$19);\n var value$20 = value$13.level;\n var level = Shared__Level.Fragment.serialize(value$20);\n var value$21 = value$13.user;\n var user = UserDetails.Fragment.serialize(value$21);\n var value$22 = value$13.taggings;\n var taggings = value$22.map(function (value) {\n return value;\n });\n var value$23 = value$13.id;\n var student = {\n id: value$23,\n taggings: taggings,\n user: user,\n level: level,\n cohort: cohort,\n personalCoaches: personalCoaches,\n droppedOutAt: droppedOutAt,\n course: course\n };\n var value$24 = value$3.evaluationCriteria;\n var evaluationCriteria = value$24.map(function (value) {\n var value$1 = value.passGrade;\n var value$2 = value.maxGrade;\n var value$3 = value.name;\n var value$4 = value.id;\n return {\n id: value$4,\n name: value$3,\n maxGrade: value$2,\n passGrade: value$1\n };\n });\n var value$25 = value$3.email;\n var studentDetails = {\n email: value$25,\n evaluationCriteria: evaluationCriteria,\n student: student,\n totalTargets: value$12,\n targetsCompleted: value$11,\n completedLevelIds: completedLevelIds,\n quizScores: quizScores,\n averageGrades: averageGrades,\n team: team\n };\n return {\n studentDetails: studentDetails,\n coachNotes: coachNotes,\n hasArchivedCoachNotes: value$1\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n studentId: inp.studentId\n };\n}\n\nfunction makeVariables(studentId, param) {\n return {\n studentId: studentId\n };\n}\n\nvar StudentDetailsQuery_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar $$fetch = include.$$fetch;\n\nvar StudentDetailsQuery_Graphql_error = include.Graphql_error;\n\nvar StudentDetailsQuery_decodeNotification = include.decodeNotification;\n\nvar StudentDetailsQuery_decodeObject = include.decodeObject;\n\nvar StudentDetailsQuery_decodeNotifications = include.decodeNotifications;\n\nvar StudentDetailsQuery_decodeErrors = include.decodeErrors;\n\nvar StudentDetailsQuery_flashNotifications = include.flashNotifications;\n\nvar StudentDetailsQuery_sendQuery = include.sendQuery;\n\nvar StudentDetailsQuery_query = include.query;\n\nvar StudentDetailsQuery_make = include.make;\n\nvar StudentDetailsQuery = {\n StudentDetailsQuery_inner: StudentDetailsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: StudentDetailsQuery_Graphql_error,\n decodeNotification: StudentDetailsQuery_decodeNotification,\n decodeObject: StudentDetailsQuery_decodeObject,\n decodeNotifications: StudentDetailsQuery_decodeNotifications,\n decodeErrors: StudentDetailsQuery_decodeErrors,\n flashNotifications: StudentDetailsQuery_flashNotifications,\n sendQuery: StudentDetailsQuery_sendQuery,\n query: StudentDetailsQuery_query,\n $$fetch: $$fetch,\n make: StudentDetailsQuery_make\n};\n\nfunction getStudentDetails(studentId, setState) {\n Curry._1(setState, (function (state) {\n return {\n selectedTab: state.selectedTab,\n studentData: /* Loading */0,\n submissions: state.submissions\n };\n }));\n Curry._3($$fetch, undefined, undefined, {\n studentId: studentId\n }).then(function (response) {\n var s = response.studentDetails.student;\n var coachNotes = response.coachNotes.map(function (coachNote) {\n return CoursesStudents__CoachNote.make(coachNote.id, coachNote.note, DateFns.decodeISO(coachNote.createdAt), Belt_Option.map(coachNote.author, User.makeFromFragment));\n });\n var evaluationCriteria = response.studentDetails.evaluationCriteria.map(function (evaluationCriterion) {\n return CoursesStudents__EvaluationCriterion.make(evaluationCriterion.id, evaluationCriterion.name, evaluationCriterion.maxGrade, evaluationCriterion.passGrade);\n });\n var averageGrades = response.studentDetails.averageGrades.map(function (gradeData) {\n return CoursesStudents__StudentDetails.makeAverageGrade(gradeData.evaluationCriterionId, gradeData.averageGrade);\n });\n var studentDetails = CoursesStudents__StudentDetails.make(studentId, coachNotes, response.hasArchivedCoachNotes, evaluationCriteria, response.studentDetails.totalTargets, response.studentDetails.targetsCompleted, response.studentDetails.quizScores, averageGrades, response.studentDetails.completedLevelIds, CoursesStudents__StudentInfo.make(s.id, UserDetails.makeFromFragment(s.user), s.taggings, Shared__Level.makeFromFragment(s.level), Cohort.makeFromFragment(s.cohort), Belt_Option.map(s.droppedOutAt, DateFns.decodeISO), s.personalCoaches.map(UserProxy.makeFromFragment)), Belt_Option.map(response.studentDetails.team, (function (team) {\n return CoursesStudents__StudentDetails.makeTeam(team.id, team.name, team.students.map(function (s) {\n return CoursesStudents__StudentInfo.make(s.id, UserDetails.makeFromFragment(s.user), s.taggings, Shared__Level.makeFromFragment(s.level), Cohort.makeFromFragment(s.cohort), Belt_Option.map(s.droppedOutAt, DateFns.decodeISO), s.personalCoaches.map(UserProxy.makeFromFragment));\n }));\n })), response.studentDetails.student.course.levels.map(Shared__Level.makeFromFragment), response.studentDetails.student.course.id);\n Curry._1(setState, (function (state) {\n return {\n selectedTab: state.selectedTab,\n studentData: /* Loaded */{\n _0: studentDetails\n },\n submissions: state.submissions\n };\n }));\n return Promise.resolve(undefined);\n });\n \n}\n\nfunction updateSubmissions(setState, submissions) {\n return Curry._1(setState, (function (state) {\n return {\n selectedTab: state.selectedTab,\n studentData: state.studentData,\n submissions: submissions\n };\n }));\n}\n\nfunction doughnutChart(color, percentage) {\n return React.createElement(\"svg\", {\n className: \"student-overlay__doughnut-chart \" + color,\n viewBox: \"0 0 36 36\"\n }, React.createElement(\"path\", {\n className: \"student-overlay__doughnut-chart-bg\",\n d: \"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831\"\n }), React.createElement(\"path\", {\n className: \"student-overlay__doughnut-chart-stroke\",\n d: \"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831\",\n strokeDasharray: percentage + \", 100\"\n }), React.createElement(\"text\", {\n className: \"student-overlay__doughnut-chart-text font-semibold\",\n x: \"50%\",\n y: \"58%\"\n }, percentage + \"%\"));\n}\n\nfunction targetsCompletionStatus(targetsCompleted, totalTargets) {\n var targetCompletionPercent = String(targetsCompleted / totalTargets * 100.0 | 0);\n return React.createElement(\"div\", {\n \"aria-label\": \"target-completion-status\",\n className: \"w-full lg:w-1/2 px-2\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__doughnut-chart-container\"\n }, doughnutChart(\"purple\", targetCompletionPercent), React.createElement(\"p\", {\n className: \"text-sm font-semibold text-center mt-3\"\n }, t(undefined, undefined, \"total_targets_completed\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold text-center mt-1\"\n }, String(targetsCompleted | 0) + (\"/\" + (String(totalTargets | 0) + t(undefined, undefined, \"targets\"))))));\n}\n\nfunction quizPerformanceChart(averageQuizScore, quizzesAttempted) {\n if (averageQuizScore !== undefined) {\n return React.createElement(\"div\", {\n \"aria-label\": \"quiz-performance-chart\",\n className: \"w-full lg:w-1/2 px-2 mt-2 lg:mt-0\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__doughnut-chart-container\"\n }, doughnutChart(\"pink\", String(averageQuizScore | 0)), React.createElement(\"p\", {\n className: \"text-sm font-semibold text-center mt-3\"\n }, t(undefined, undefined, \"average_quiz_score\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold text-center leading-tight mt-1\"\n }, t(undefined, quizzesAttempted, \"quizzes_attempted\"))));\n } else {\n return null;\n }\n}\n\nfunction averageGradeCharts(evaluationCriteria, averageGrades) {\n return $$Array.map((function (grade) {\n var criterion = CoursesStudents__StudentDetails.evaluationCriterionForGrade(grade, evaluationCriteria, \"CoursesStudents__StudentOverlay\");\n var passGrade = CoursesStudents__EvaluationCriterion.passGrade(criterion);\n var averageGrade = CoursesStudents__StudentDetails.gradeValue(grade);\n return React.createElement(\"div\", {\n key: CoursesStudents__EvaluationCriterion.id(criterion),\n \"aria-label\": \"average-grade-for-criterion-\" + CoursesStudents__EvaluationCriterion.id(criterion),\n className: \"flex w-full lg:w-1/2 px-2 mt-2\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__pie-chart-container\"\n }, React.createElement(\"div\", {\n className: \"flex px-5 pt-4 text-center items-center\"\n }, React.createElement(\"svg\", {\n className: \"student-overlay__pie-chart \" + (\n averageGrade < passGrade ? \"student-overlay__pie-chart--fail\" : \"student-overlay__pie-chart--pass\"\n ),\n viewBox: \"0 0 32 32\"\n }, React.createElement(\"circle\", {\n className: \"student-overlay__pie-chart-circle \" + (\n averageGrade < passGrade ? \"student-overlay__pie-chart-circle--fail\" : \"student-overlay__pie-chart-circle--pass\"\n ),\n cx: \"16\",\n cy: \"16\",\n r: \"16\",\n strokeDasharray: CoursesStudents__StudentDetails.gradeAsPercentage(grade, criterion) + \", 100\"\n })), React.createElement(\"span\", {\n className: \"ml-3 text-lg font-semibold\"\n }, grade.grade.toString() + (\"/\" + String(criterion.maxGrade)))), React.createElement(\"p\", {\n className: \"text-sm font-semibold px-5 pt-3 pb-4\"\n }, CoursesStudents__EvaluationCriterion.name(criterion))));\n }), averageGrades);\n}\n\nfunction test(value, url) {\n var tester = new RegExp(value);\n return tester.test(url);\n}\n\nfunction socialLinkIconClass(url) {\n if (test(\"twitter\", url)) {\n return \"fab fa-twitter\";\n } else if (test(\"facebook\", url)) {\n return \"fab fa-facebook-f\";\n } else if (test(\"instagram\", url)) {\n return \"fab fa-instagram\";\n } else if (test(\"youtube\", url)) {\n return \"fab fa-youtube\";\n } else if (test(\"linkedin\", url)) {\n return \"fab fa-linkedin\";\n } else if (test(\"reddit\", url)) {\n return \"fab fa-reddit\";\n } else if (test(\"flickr\", url)) {\n return \"fab fa-flickr\";\n } else if (test(\"github\", url)) {\n return \"fab fa-github\";\n } else {\n return \"fas fa-users\";\n }\n}\n\nfunction showSocialLinks(socialLinks) {\n return React.createElement(\"div\", {\n className: \"inline-flex flex-wrap justify-center text-lg text-gray-800 mt-3 bg-gray-50 px-2 rounded-lg\"\n }, $$Array.mapi((function (index, link) {\n return React.createElement(\"a\", {\n key: String(index),\n className: \"px-2 py-1 inline-block hover:text-primary-500\",\n href: link,\n target: \"_blank\"\n }, React.createElement(\"i\", {\n className: socialLinkIconClass(link)\n }));\n }), socialLinks));\n}\n\nfunction setSelectedTab(selectedTab, setState) {\n return Curry._1(setState, (function (state) {\n return {\n selectedTab: selectedTab,\n studentData: state.studentData,\n submissions: state.submissions\n };\n }));\n}\n\nfunction studentLevelClasses(levelNumber, levelCompleted, currentLevelNumber) {\n var reached = Caml_obj.caml_lessequal(levelNumber, currentLevelNumber) ? \"student-overlay__student-level--reached\" : \"\";\n var current = Caml_obj.caml_equal(levelNumber, currentLevelNumber) ? \" student-overlay__student-level--current\" : \"\";\n var completed = levelCompleted ? \" student-overlay__student-level--completed\" : \"\";\n return reached + (current + completed);\n}\n\nfunction levelProgressBar(levelId, levels, levelsCompleted) {\n var applicableLevels = levels.filter(function (level) {\n return Shared__Level.number(level) !== 0;\n });\n var courseCompleted = $$Array.for_all((function (level) {\n return $$Array.mem(Shared__Level.id(level), levelsCompleted);\n }), applicableLevels);\n var currentLevelNumber = Shared__Level.number(ArrayUtils.unsafeFind((function (level) {\n return Shared__Level.id(level) === levelId;\n }), \"Unable to find level with id\" + (levelId + \"in StudentOverlay\"), applicableLevels));\n return React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between items-end\"\n }, React.createElement(\"h6\", {\n className: \"text-sm font-semibold\"\n }, t(undefined, undefined, \"level_progress\")), courseCompleted ? React.createElement(\"p\", {\n className: \"text-green-600 font-semibold\"\n }, \"🎉\", React.createElement(\"span\", {\n className: \"text-xs ml-px\"\n }, t(undefined, undefined, \"course_completed\"))) : null), React.createElement(\"div\", {\n className: \"h-12 flex items-center\"\n }, React.createElement(\"ul\", {\n className: \"student-overlay__student-level-progress flex w-full \" + (\n courseCompleted ? \"student-overlay__student-level-progress--completed\" : \"\"\n )\n }, $$Array.map((function (level) {\n var levelNumber = Shared__Level.number(level);\n var levelCompleted = $$Array.mem(Shared__Level.id(level), levelsCompleted);\n return React.createElement(\"li\", {\n key: Shared__Level.id(level),\n className: \"flex-1 student-overlay__student-level \" + studentLevelClasses(levelNumber, levelCompleted, currentLevelNumber)\n }, React.createElement(\"span\", {\n className: \"student-overlay__student-level-count\"\n }, String(levelNumber)));\n }), Shared__Level.sort(applicableLevels)))));\n}\n\nfunction addNote(setState, studentDetails, onAddCoachNotesCB, note) {\n Curry._1(onAddCoachNotesCB, undefined);\n return Curry._1(setState, (function (state) {\n return {\n selectedTab: state.selectedTab,\n studentData: /* Loaded */{\n _0: CoursesStudents__StudentDetails.addNewNote(note, studentDetails)\n },\n submissions: state.submissions\n };\n }));\n}\n\nfunction removeNote(setState, studentDetails, noteId) {\n return Curry._1(setState, (function (state) {\n return {\n selectedTab: state.selectedTab,\n studentData: /* Loaded */{\n _0: CoursesStudents__StudentDetails.removeNote(noteId, studentDetails)\n },\n submissions: state.submissions\n };\n }));\n}\n\nfunction userInfo(key, avatarUrl, name, fulltitle) {\n return React.createElement(\"div\", {\n key: key,\n className: \"shadow rounded-lg p-4 flex items-center mt-2\"\n }, CoursesStudents__PersonalCoaches.avatar(undefined, avatarUrl, name), React.createElement(\"div\", {\n className: \"ml-2 md:ml-3\"\n }, React.createElement(\"div\", {\n className: \"text-sm font-semibold\"\n }, name), React.createElement(\"div\", {\n className: \"text-xs\"\n }, fulltitle)));\n}\n\nfunction coachInfo(studentDetails) {\n var coaches = CoursesStudents__StudentInfo.personalCoaches(CoursesStudents__StudentDetails.student(studentDetails));\n if (ArrayUtils.isNotEmpty(coaches)) {\n return React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"personal_coaches\")), $$Array.map((function (coach) {\n return userInfo(UserProxy.userId(coach), UserProxy.avatarUrl(coach), UserProxy.name(coach), UserProxy.fullTitle(coach));\n }), coaches));\n } else {\n return null;\n }\n}\n\nfunction navigateToStudent(setState, _event) {\n return Curry._1(setState, (function (param) {\n return initialState;\n }));\n}\n\nfunction otherTeamMembers(setState, studentId, studentDetails) {\n var team = CoursesStudents__StudentDetails.team(studentDetails);\n if (team !== undefined) {\n return React.createElement(\"div\", {\n className: \"block mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"other_team_members\")), CoursesStudents__StudentDetails.students(team).filter(function (student) {\n return CoursesStudents__StudentInfo.id(student) !== studentId;\n }).map(function (student) {\n var path = \"/students/\" + (CoursesStudents__StudentInfo.id(student) + \"/report\");\n return React.createElement(Link.make, {\n href: path,\n className: \"block rounded-lg focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500\",\n onClick: (function (param) {\n return Curry._1(setState, (function (param) {\n return initialState;\n }));\n }),\n children: userInfo(CoursesStudents__StudentInfo.id(student), UserDetails.avatarUrl(CoursesStudents__StudentInfo.user(student)), UserDetails.name(CoursesStudents__StudentInfo.user(student)), UserDetails.fullTitle(CoursesStudents__StudentInfo.user(student))),\n key: CoursesStudents__StudentInfo.id(student)\n });\n }));\n } else {\n return null;\n }\n}\n\nfunction inactiveWarning(student) {\n var match = CoursesStudents__StudentInfo.droppedOutAt(student);\n var match$1 = Cohort.endsAt(CoursesStudents__StudentInfo.cohort(student));\n var warning;\n if (match !== undefined) {\n warning = t([[\n \"date\",\n DateFns.formatPreset(Caml_option.valFromOption(match), true, true, undefined, undefined)\n ]], undefined, \"dropped_out_at\");\n } else if (match$1 !== undefined) {\n var endsAt = Caml_option.valFromOption(match$1);\n warning = DateFns.isPast(endsAt) ? t([[\n \"date\",\n DateFns.formatPreset(endsAt, true, true, undefined, undefined)\n ]], undefined, \"access_ended_at\") : undefined;\n } else {\n warning = undefined;\n }\n return OptionUtils.mapWithDefault((function (warning) {\n return React.createElement(\"div\", {\n className: \"border border-yellow-400 rounded bg-yellow-400 py-2 px-3 mt-3\"\n }, React.createElement(\"i\", {\n className: \"fas fa-exclamation-triangle\"\n }), React.createElement(\"span\", {\n className: \"ml-2\"\n }, warning));\n }), null, warning);\n}\n\nfunction onAddCoachNotesCB(studentId, setState, param) {\n return getStudentDetails(studentId, setState);\n}\n\nfunction ids(student) {\n return React.createElement(\"div\", {\n className: \"text-center mt-1\"\n }, React.createElement(ClickToCopy.make, {\n copy: UserDetails.id(CoursesStudents__StudentInfo.user(student)),\n className: \"inline-block hover:text-primary-500\",\n children: null\n }, React.createElement(\"span\", {\n className: \"text-xs\"\n }, \"User ID \"), React.createElement(\"span\", {\n className: \"font-semibold text-sm underline text-primary-500\"\n }, \"#\" + UserDetails.id(CoursesStudents__StudentInfo.user(student)))), React.createElement(ClickToCopy.make, {\n copy: CoursesStudents__StudentInfo.id(student),\n className: \"ml-2 inline-block hover:text-primary-500\",\n children: null\n }, React.createElement(\"span\", {\n className: \"text-xs\"\n }, \"Student ID \"), React.createElement(\"span\", {\n className: \"font-semibold text-sm underline text-primary-500\"\n }, \"#\" + CoursesStudents__StudentInfo.id(student))));\n}\n\nfunction CoursesStudents__StudentOverlay(Props) {\n var studentId = Props.studentId;\n var userId = Props.userId;\n var match = React.useState(function () {\n return initialState;\n });\n var setState = match[1];\n var state = match[0];\n React.useEffect((function () {\n ScrollLock.activate(undefined);\n return (function (param) {\n return ScrollLock.deactivate(undefined);\n });\n }), []);\n React.useEffect((function () {\n getStudentDetails(studentId, setState);\n \n }), [studentId]);\n var studentDetails = state.studentData;\n var tmp;\n if (studentDetails) {\n var studentDetails$1 = studentDetails._0;\n var student = CoursesStudents__StudentDetails.student(studentDetails$1);\n var avatarUrl = UserDetails.avatarUrl(CoursesStudents__StudentInfo.user(student));\n var match$1 = state.selectedTab;\n var match$2 = state.selectedTab;\n var match$3 = state.selectedTab;\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:h-screen\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-2/5 bg-white p-4 md:p-8 md:py-6 2xl:px-16 2xl:py-12 md:overflow-y-auto\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__student-details relative pb-8\"\n }, React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"close_student_report\"),\n className: \"absolute z-50 left-0 cursor-pointer top-0 inline-flex p-1 rounded-full bg-gray-50 h-10 w-10 justify-center items-center text-gray-600 hover:text-gray-900 hover:bg-gray-300 focus:outline-none focus:text-gray-900 focus:bg-gray-300 focus:ring-2 focus:ring-inset focus:ring-focusColor-500\",\n title: t(undefined, undefined, \"close_student_report\"),\n onClick: (function (param) {\n return closeOverlay(CoursesStudents__StudentDetails.courseId(studentDetails$1));\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-regular text-xl lg:text-2xl\"\n })), React.createElement(\"div\", {\n className: \"student-overlay__student-avatar mx-auto w-18 h-18 md:w-24 md:h-24 text-xs border border-yellow-500 rounded-full overflow-hidden shrink-0\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"w-full object-cover\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: UserDetails.name(CoursesStudents__StudentInfo.user(student)),\n className: \"object-cover\"\n })), React.createElement(\"h2\", {\n className: \"text-lg text-center mt-3\"\n }, UserDetails.name(CoursesStudents__StudentInfo.user(student))), React.createElement(\"p\", {\n className: \"text-sm font-semibold text-center mt-1\"\n }, UserDetails.fullTitle(CoursesStudents__StudentInfo.user(student))), ids(student), inactiveWarning(student)), levelProgressBar(Shared__Level.id(CoursesStudents__StudentInfo.level(student)), CoursesStudents__StudentDetails.levels(studentDetails$1), CoursesStudents__StudentDetails.completedLevelIds(studentDetails$1)), React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"targets_overview\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap mt-2\"\n }, targetsCompletionStatus(CoursesStudents__StudentDetails.targetsCompleted(studentDetails$1), CoursesStudents__StudentDetails.totalTargets(studentDetails$1)), quizPerformanceChart(CoursesStudents__StudentDetails.averageQuizScore(studentDetails$1), CoursesStudents__StudentDetails.quizzesAttempted(studentDetails$1)))), ArrayUtils.isNotEmpty(CoursesStudents__StudentDetails.averageGrades(studentDetails$1)) ? React.createElement(\"div\", {\n className: \"mb-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"average_grades\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap\"\n }, averageGradeCharts(CoursesStudents__StudentDetails.evaluationCriteria(studentDetails$1), CoursesStudents__StudentDetails.averageGrades(studentDetails$1)))) : null, coachInfo(studentDetails$1), otherTeamMembers(setState, studentId, studentDetails$1)), React.createElement(\"div\", {\n className: \"w-full relative md:w-3/5 bg-gray-50 md:border-l pb-6 2xl:pb-12 md:overflow-y-auto\"\n }, React.createElement(\"div\", {\n className: \"sticky top-0 bg-gray-50 pt-2 md:pt-4 px-4 md:px-8 2xl:px-16 2xl:pt-10 z-30\"\n }, React.createElement(\"ul\", {\n className: \"flex flex-1 md:flex-none p-1 md:p-0 space-x-1 md:space-x-0 text-center rounded-lg justify-between md:justify-start bg-gray-300 md:bg-transparent\",\n role: \"tablist\"\n }, React.createElement(\"li\", {\n \"aria-selected\": state.selectedTab === /* Notes */0,\n className: \"cursor-pointer flex flex-1 justify-center md:flex-none rounded-md p-1.5 md:border-b-3 md:rounded-b-none md:border-transparent md:px-4 md:hover:bg-gray-50 md:py-2 text-sm font-semibold text-gray-800 hover:text-primary-600 hover:bg-gray-50 focus:outline-none focus:ring-inset focus:ring-2 focus:bg-gray-50 focus:ring-focusColor-500 md:focus:border-b-none md:focus:rounded-t-md \" + (\n match$1 ? \" \" : \"bg-white shadow md:shadow-none rounded-md md:rounded-none md:bg-transparent md:border-b-3 hover:bg-white md:hover:bg-transparent text-primary-500 md:border-primary-500 \"\n ),\n role: \"tab\",\n tabIndex: 0,\n onClick: (function (_event) {\n return setSelectedTab(/* Notes */0, setState);\n })\n }, t(undefined, undefined, \"notes\")), React.createElement(\"li\", {\n \"aria-selected\": state.selectedTab === /* Submissions */1,\n className: \"cursor-pointer flex flex-1 justify-center md:flex-none rounded-md p-1.5 md:border-b-3 md:rounded-b-none md:border-transparent md:px-4 md:hover:bg-gray-50 md:py-2 text-sm font-semibold text-gray-800 hover:text-primary-600 hover:bg-gray-50 focus:outline-none focus:ring-inset focus:ring-2 focus:bg-gray-50 focus:ring-focusColor-500 md:focus:border-b-none md:focus:rounded-t-md \" + (\n match$2 ? \"bg-white shadow md:shadow-none rounded-md md:rounded-none md:bg-transparent md:border-b-3 hover:bg-white md:hover:bg-transparent text-primary-500 md:border-primary-500 \" : \" \"\n ),\n role: \"tab\",\n tabIndex: 0,\n onClick: (function (_event) {\n return setSelectedTab(/* Submissions */1, setState);\n })\n }, t(undefined, undefined, \"submissions\")))), React.createElement(\"div\", {\n className: \"pt-2 px-4 md:px-8 2xl:px-16\"\n }, match$3 ? React.createElement(CoursesStudents__SubmissionsList.make, {\n studentId: studentId,\n levels: CoursesStudents__StudentDetails.levels(studentDetails$1),\n submissions: state.submissions,\n updateSubmissionsCB: (function (param) {\n return updateSubmissions(setState, param);\n })\n }) : React.createElement(CoursesStudents__CoachNotes.make, {\n studentId: studentId,\n coachNotes: CoursesStudents__StudentDetails.coachNotes(studentDetails$1),\n hasArchivedNotes: CoursesStudents__StudentDetails.hasArchivedNotes(studentDetails$1),\n addNoteCB: (function (param) {\n return addNote(setState, studentDetails$1, (function (param) {\n return getStudentDetails(studentId, setState);\n }), param);\n }),\n removeNoteCB: (function (param) {\n return removeNote(setState, studentDetails$1, param);\n }),\n userId: userId\n }))));\n } else {\n tmp = React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:h-screen\"\n }, React.createElement(\"div\", {\n className: \"w-full md:w-2/5 bg-white p-4 md:p-8 2xl:p-16\"\n }, SkeletonLoading.image(undefined), SkeletonLoading.multiple(2, SkeletonLoading.userDetails(undefined))), React.createElement(\"div\", {\n className: \"w-full relative md:w-3/5 bg-gray-50 md:border-l p-4 md:p-8 2xl:p-16\"\n }, SkeletonLoading.contents(undefined), SkeletonLoading.userDetails(undefined)));\n }\n return React.createElement(\"div\", {\n className: \"fixed z-30 top-0 left-0 w-full h-full overflow-y-scroll md:overflow-hidden bg-white\"\n }, tmp);\n}\n\nvar UserDetailsFragment;\n\nvar LevelFragment;\n\nvar CohortFragment;\n\nvar UserProxyFragment;\n\nvar UserFragment;\n\nvar make = CoursesStudents__StudentOverlay;\n\nexport {\n str ,\n t ,\n initialState ,\n closeOverlay ,\n UserDetailsFragment ,\n LevelFragment ,\n CohortFragment ,\n UserProxyFragment ,\n UserFragment ,\n StudentDetailsQuery ,\n getStudentDetails ,\n updateSubmissions ,\n doughnutChart ,\n targetsCompletionStatus ,\n quizPerformanceChart ,\n averageGradeCharts ,\n test ,\n socialLinkIconClass ,\n showSocialLinks ,\n setSelectedTab ,\n studentLevelClasses ,\n levelProgressBar ,\n addNote ,\n removeNote ,\n userInfo ,\n coachInfo ,\n navigateToStudent ,\n otherTeamMembers ,\n inactiveWarning ,\n onAddCoachNotesCB ,\n ids ,\n make ,\n \n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as ReactUtils from \"../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as AppRouter__Nav from \"./components/AppRouter__Nav.bs.js\";\nimport * as AppRouter__Page from \"./types/AppRouter__Page.bs.js\";\nimport * as AppRouter__User from \"./types/AppRouter__User.bs.js\";\nimport * as Caml_exceptions from \"../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as CoursesReview__Root from \"../../courses/review/CoursesReview__Root.bs.js\";\nimport * as RescriptReactRouter from \"../../../../node_modules/@rescript/react/src/RescriptReactRouter.bs.js\";\nimport * as CoursesStudents__Root from \"../../courses/students/components/CoursesStudents__Root.bs.js\";\nimport * as CoursesReview__SubmissionsRoot from \"../../courses/review/components/CoursesReview__SubmissionsRoot.bs.js\";\nimport * as CoursesStudents__StudentOverlay from \"../../courses/students/components/CoursesStudents__StudentOverlay.bs.js\";\n\nvar UnknownPathEncountered = /* @__PURE__ */Caml_exceptions.create(\"AppRouter.UnknownPathEncountered\");\n\nfunction str(prim) {\n return prim;\n}\n\nfunction classNames($$default, trueClasses, falseClasses, bool) {\n return $$default + \" \" + (\n bool ? trueClasses : falseClasses\n );\n}\n\nfunction AppRouter(Props) {\n var school = Props.school;\n var courses = Props.courses;\n var currentUser = Props.currentUser;\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var match = url.path;\n var match$1;\n var exit = 0;\n if (match) {\n switch (match.hd) {\n case \"courses\" :\n var match$2 = match.tl;\n if (match$2) {\n var match$3 = match$2.tl;\n if (match$3) {\n var courseId = match$2.hd;\n switch (match$3.hd) {\n case \"review\" :\n if (match$3.tl) {\n exit = 1;\n } else {\n match$1 = [\n React.createElement(CoursesReview__Root.make, {\n courseId: courseId,\n currentCoachId: Belt_Option.getWithDefault(AppRouter__User.coachId(AppRouter__User.defaultUser(currentUser)), \"\"),\n courses: courses\n }),\n {\n TAG: /* SelectedCourse */0,\n _0: courseId,\n _1: /* Review */2\n }\n ];\n }\n break;\n case \"students\" :\n if (match$3.tl) {\n exit = 1;\n } else {\n match$1 = [\n React.createElement(CoursesStudents__Root.make, {\n courseId: courseId\n }),\n {\n TAG: /* SelectedCourse */0,\n _0: courseId,\n _1: /* Students */3\n }\n ];\n }\n break;\n default:\n exit = 1;\n }\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n break;\n case \"students\" :\n var match$4 = match.tl;\n if (match$4) {\n var match$5 = match$4.tl;\n if (match$5) {\n var studentId = match$4.hd;\n if (match$5.hd === \"report\" && !match$5.tl) {\n match$1 = [\n React.createElement(CoursesStudents__StudentOverlay.make, {\n studentId: studentId,\n userId: AppRouter__User.id(AppRouter__User.defaultUser(currentUser))\n }),\n {\n TAG: /* Student__StudentsReport */2,\n _0: studentId\n }\n ];\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n break;\n case \"submissions\" :\n var match$6 = match.tl;\n if (match$6) {\n var match$7 = match$6.tl;\n if (match$7) {\n var submissionId = match$6.hd;\n if (match$7.hd === \"review\" && !match$7.tl) {\n match$1 = [\n React.createElement(CoursesReview__SubmissionsRoot.make, {\n submissionId: submissionId,\n currentUser: AppRouter__User.defaultUser(currentUser)\n }),\n {\n TAG: /* Student__SubmissionShow */1,\n _0: submissionId\n }\n ];\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n break;\n default:\n exit = 1;\n }\n } else {\n exit = 1;\n }\n if (exit === 1) {\n Rollbar.critical(\"Unknown path encountered by app router: \" + $$Array.of_list(url.path).join(\"/\"));\n throw {\n RE_EXN_ID: UnknownPathEncountered,\n _1: url.path,\n Error: new Error()\n };\n }\n var selectedPage = match$1[1];\n return React.createElement(\"div\", {\n className: \"md:h-screen md:flex bg-gray-50 overflow-hidden\"\n }, ReactUtils.nullUnless(React.createElement(AppRouter__Nav.make, {\n school: school,\n courses: courses,\n selectedPage: selectedPage,\n currentUser: currentUser\n }), AppRouter__Page.showSideNav(selectedPage)), match$1[0]);\n}\n\nvar make = AppRouter;\n\nexport {\n UnknownPathEncountered ,\n str ,\n classNames ,\n make ,\n \n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Psj from \"../shared/utils/Psj.bs.js\";\nimport * as React from \"react\";\nimport * as DomUtils from \"../shared/utils/DomUtils.bs.js\";\nimport * as AppRouter from \"../layouts/app_router/AppRouter.bs.js\";\nimport * as ReactDom from \"react-dom\";\nimport * as Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as AppRouter__User from \"../layouts/app_router/types/AppRouter__User.bs.js\";\nimport * as AppRouter__Course from \"../layouts/app_router/types/AppRouter__Course.bs.js\";\nimport * as AppRouter__School from \"../layouts/app_router/types/AppRouter__School.bs.js\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"courses\", (function (param) {\n return Json_decode.array(AppRouter__Course.decode, param);\n }), json),\n Json_decode.field(\"currentUser\", (function (param) {\n return Json_decode.optional(AppRouter__User.decode, param);\n }), json),\n Json_decode.field(\"school\", AppRouter__School.decode, json)\n ];\n}\n\nPsj.matchPaths(undefined, [\n \"courses/:id/review\",\n \"submissions/:id/review\",\n \"courses/:id/students\",\n \"students/:id/report\"\n ], (function (param) {\n var match = decodeProps(DomUtils.parseJSONTag(\"app-router-data\", undefined));\n var root = document.querySelector(\"#app-router\");\n if (!(root == null)) {\n ReactDom.render(React.createElement(AppRouter.make, {\n school: match[2],\n courses: match[0],\n currentUser: match[1]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n \n}\n/* Not a pure module */\n"],"names":["title","t","url","local","decode","json","Json_decode.field","Json_decode.string","Json_decode.bool","partial_arg","param","param$1","param$2","I18n.t","additionalLinks","linksVisible","links","React.createElement","link","index","StudentTopNav__NavLink.url","StudentTopNav__NavLink.title","StudentTopNav__DropDown","Props","match","React.useState","setLinksVisible","Curry._1","make","showLink","icon","text","href","FaIcon.make","selected","user","Belt_Option.mapWithDefault","Avatar.make","u","User.avatarUrl","User.name","src","StudentTopNav__UserControls","Dropdown.make","headerLink","key","tmp","tmp$1","StudentTopNav__NavLink.local","Caml_option.valFromOption","tmp$2","signOutLink","signInLink","notificationButton","hasNotifications","Notifications__Root.make","headerLinks","isLoggedIn","$$Array.to_list","match$1","match$2","$$Array.of_list","match$3","match$4","match$5","match$6","match$7","l","StudentTopNav__DropDown.make","ReactUtils.nullUnless","StudentTopNav__UserControls.make","StudentTopNav","schoolName","logoUrl","currentUser","toggleMenuHidden","menuHidden","React.useEffect","resizeCB","decodeProps","Caml_option.null_to_opt","Json_decode.nullable","Json_decode.array","StudentTopNav__NavLink.decode","Json_decode.optional","User.decode","element","DomUtils.parseJSONTag","ReactDom.render","StudentTopNav.make","RootAttributeMissing","Caml_exceptions.create","InvalidProfile","parseElement","attribute","props","Json.parseOrRaise","profileType","profile","parseMarkdown","attributeNameOpt","attributeOpt","attributeName","$$Array.map","MarkdownBlock.make","name","id","review","author","description","exited","thumbnailUrl","linkedCommunities","accessEnded","ended","enableLeaderboard","path","StringUtils.parameterize","serialNumber","createdAt","courseName","DateFns.decodeISO","headerSectiom","userName","preferredName","userTitle","avatarUrl","showUserEdit","Belt_Option.getWithDefault","navButtonClasses","navSection","view","setView","communities","issuedCertificates","ArrayUtils.isNotEmpty","courseLink","ctaButton","ctaText","message","studentLink","courseId","suffix","callToAction","course","currentSchoolAdmin","UsersDashboard__Course.author","UsersDashboard__Course.review","UsersDashboard__Course.exited","UsersDashboard__Course.ended","UsersDashboard__Course.accessEnded","ctaFooter","UsersDashboard__Course.id","communityLinks","communityIds","community","c","UsersDashboard__Community.id","UsersDashboard__Community.path","UsersDashboard__Community.name","courseLinks","cta","UsersDashboard__Course.enableLeaderboard","UsersDashboard__Course.linkedCommunities","coursesSection","courses","ArrayUtils.isEmpty","UsersDashboard__Course.thumbnailUrl","UsersDashboard__Course.name","UsersDashboard__Course.description","communitiesSection","certificatesSection","issuedCertificate","UsersDashboard__IssuedCertificate.id","UsersDashboard__IssuedCertificate.serialNumber","UsersDashboard__IssuedCertificate.courseName","DateFns.formatPreset","UsersDashboard__IssuedCertificate.createdAt","UsersDashboard__Root","UsersDashboard__Course.decode","UsersDashboard__Community.decode","UsersDashboard__IssuedCertificate.decode","Psj.match","UsersDashboard__Root.make","PermanentDeleteSvg","permanentDeleteIcon","Raw","query","parse","value","value$1","serialize","value$2","deleteAccount","serializeVariables","inp","include","GraphqlQuery.Extender","prim","$$fetch","token","setState","$$event","Curry._3","result","DomUtils.redirect","UsersDeleteAccount","root","UsersDeleteAccount.make","color","StringUtils.toColor","makeFromJs","jsObject","solved","views","lastActivityAt","liveRepliesCount","likesCount","topicCategoryId","creatorName","participants","participantsCount","makeFromJS","topicData","Belt_Option.map","creator","CommunitiesShow__TopicParticipant.makeFromJs","toArray","avatarClasses","size","mdSize","defaultSize","avatar","sizeOpt","CommunitiesShow__Participants","tooltipPositionOpt","defaultAvatarSizeOpt","mdAvatarSizeOpt","className","tooltipPosition","defaultAvatarSize","mdAvatarSize","otherParticipantsCount","participant","Tooltip.make","CommunitiesShow__TopicParticipant.name","CommunitiesShow__TopicParticipant.avatarUrl","CommunitiesShow__TopicParticipant.id","searchBy","search","reducer","state","action","newTopics","endCursor","updatedTopics","$$Array.append","CommunitiesShow__Topics.toArray","value$3","value$4","Caml_option.some","value$5","pageInfo","value$6","nodes","value$7","value$8","value$9","value$10","value$11","value$12","value$13","topics","serializeInputObjectCommunitySearchFilter","a","a$1","a$2","a$3","a$4","a$5","a$6","makeVariables","communityId","targetId","resolution","searchFilter","after","sortCriterion","sortDirection","getTopics","send","cursor","filter","OptionUtils.map","TopicCategory.id","CommunitiesShow__Target.id","variables","response","CommunitiesShow__Topic.makeFromJS","reloadTopics","filterToQueryString","filterDict","Js_dict.fromArray","Belt_Option.forEach","tc","updateParams","RescriptReactRouter.push","topicsList","topicCategories","topic","CommunitiesShow__Topic.creatorName","date","CommunitiesShow__Topic.lastActivityAt","CommunitiesShow__Topic.topicCategoryId","topicCategory","ArrayUtils.unsafeFind","TopicCategory.name","style","CommunitiesShow__Topic.id","CommunitiesShow__Topic.title","CommunitiesShow__Topic.createdAt","DateFns.formatDistanceToNowStrict","CommunitiesShow__Topic.likesCount","CommunitiesShow__Topic.liveRepliesCount","CommunitiesShow__Topic.views","PfIcon.make","CommunitiesShow__Topic.solved","CommunitiesShow__Participants.make","CommunitiesShow__Topic.participants","CommunitiesShow__Topic.participantsCount","topicsLoadedData","totalTopicsCount","loadedTopicsCount","label","searchString","topicCategory$1","search$1","solution","on","Selectable","Multiselect","MultiselectDropdown.Make","unselected","unselectedCategories","category","OptionUtils.mapWithDefault","selectedCategory","trimmedFilterString","$$String.trim","hasSolution","selectedSearchString","selectedSolutionFilter","onSelectFilter","selectable","onDeselectFilter","filterPlaceholder","categoryDropdownSelected","TopicCategory.color","categoryDropdownContents","availableTopicCategories","selectableTopicCategories","availableTopicCategory","categoryName","criterion","criterionType","_t","Sortable","TopicsSorter","Sorter.Make","topicsSorter","filterFromQueryParams","target","params","criterion$1","direction","Belt_Option.flatMap","Caml_option.nullable_to_opt","cat","Caml_option.undefined_to_opt","CommunitiesShow__Root","React.useReducer","RescriptReactRouter.useUrl","SkeletonLoading.multiple","SkeletonLoading.card","topics$1","topics$2","loading","LoadingSpinner.make","CommunitiesShow__Target.title","ReactUtils.nullIf","filterString","make$1","CommunitiesShow__Target.decode","TopicCategory.decode","CommunitiesShow__Root.make","Radio","onChange","checkedOpt","checked","toLanguageName","inputLanguage","outputLanguage","intlDisplayNames","humanize","languageCode","ConfirmWindow","body","confirmButtonText","cancelButtonText","onConfirm","onCancel","disableConfirm","alertTypeOpt","alertType","updateUser","about","locale","currentPassword","newPassword","confirmPassword","dailyDigest","Raw$1","query$1","parse$1","serialize$1","initiateAccountDeletion","serializeVariables$1","include$1","$$fetch$1","Raw$2","query$2","parse$2","serialize$2","sendUpdateEmailToken","serializeVariables$2","include$2","$$fetch$2","uploadAvatar","formData","Api.sendFormData","$$Notification.success","I18n.ts","updateEmail","email","newEmail","submitAvatarForm","formId","handleAvatarInputChange","files","file","Caml_array.get","isInvalidImageFile","error","hasCurrentPassword","hasInvalidPassword","saveDisabled","confirmDeletionWindow","ConfirmWindow.make","UserEdit","availableLocales","isSchoolAdmin","hasValidDeleteAccountToken","initialState_dailyDigest","d","initialState","School__InputGroupError.make","AuthenticityToken.fromHead","evt","EmailUtils.isInvalid","Radio.make","availableLocale","Locale.humanize","UserEdit.make","creatorId","editorId","replies","editedAt","likedByUser","postNumber","totalLikes","users","User.id","sort","posts","ArrayUtils.copyAndSort","x","y","repliesToPost","post","p","$$Array.mem","addReply","newReplyId","addLike","removeLike","markAsSolution","replyId","reply","unmarkSolution","find","postId","highestPostNumber","maxPostNumber","decodeReplyId","Json_decode.$$int","lockedAt","updateTitle","lock","lockedById","unlock","TopicsShow__UserShow","User.fullTitle","DateFns.format","navigateToPost","elementId","TopicsShow__PostReply","TopicsShow__Post.user","tip","TopicsShow__Post.id","TopicsShow__Post.body","tr","createPost","updatePost","dateTime","handlePostCreateResponse","currentUserId","handlePostCB","TopicsShow__Post.make","handlePostUpdateResponse","handleCloseCB","updatedPost","TopicsShow__Post.creatorId","TopicsShow__Post.postNumber","TopicsShow__Post.createdAt","TopicsShow__Post.totalLikes","TopicsShow__Post.likedByUser","TopicsShow__Post.replies","TopicsShow__Post.solution","cb","savePost","editReason","replyToPostId","$$Notification.error","TopicsShow__Topic.id","onBorderAnimationEnd","replyToUserInfo","TopicsShow__PostEditor","editingOpt","removeReplyToPostCB","editing","updateMarkdownCB","setEditReason","newPostNumber","TopicsShow__Post.highestPostNumber","DisablingCover.make","MarkdownEditor.make","reason","createPostLike","deletePostLike","iconClasses","liked","saving","handlePostLike","setSaving","removeLikeCB","handleCreateResponse","addLikeCB","Curry._2","TopicsShow__LikeManager","addPostLikeCB","removePostLikeCB","findUser","userId","User.findById","markPostAsSolution","unmarkPostAsSolution","archivePost","markPostAsSolutionCB","WindowUtils.confirm","unmarkPostAsSolutionCB","isFirstPost","archivePostCB","solutionIcon","userCanUnmarkSolution","solutionIcon$1","iconWithTip","optionsDropdown","isPostCreator","isTopicCreator","moderator","toggleShowPostEdit","editPostButton","showDelete","deletePostButton","_id","TopicsShow__Post.editorId","historyButton","contents","navigateToEditor","TopicsShow__PostShow","updatePostCB","addNewReplyCB","topicSolutionId","editor","TopicsShow__Post.repliesToPost","toggleShowReplies","showReplies","TopicsShow__PostEditor.make","TopicsShow__Post.editedAt","TopicsShow__LikeManager.make","Belt_Option.isNone","TopicsShow__UserShow.make","Belt_Option.isSome","TopicsShow__Topic.lockedAt","TopicsShow__PostReply.make","createTopicSubscription","deleteTopicSubscription","subscribed","handleSubscription","topicId","subscribeCB","unsubscribeCB","TopicsShow__SubscriptionManager","partial_arg$1","ts","TopicsShow__Post.addLike","TopicsShow__Post.removeLike","TopicsShow__Post.unmarkSolution","TopicsShow__Topic.unlock","newReply","updatedParentPost","TopicsShow__Post.addReply","TopicsShow__Post.find","r","post$1","updatedPost$1","TopicsShow__Post.markAsSolution","TopicsShow__Topic.lock","firstPost","archiveTopic","TopicsShow__Community.path","updateTopic","variables_id","variables_title","TopicsShow__Topic.updateTitle","lockTopic","unlockTopic","communityLink","TopicsShow__Community.name","topicCategorySelector","selectedTopicCategory","topicCategoryList","TopicsShow__Root","TopicsShow__Topic.title","TopicsShow__Topic.topicCategoryId","TopicsShow__LinkedTarget.id","TopicsShow__LinkedTarget.title","isLocked","TopicsShow__SubscriptionManager.make","_lockedAt","tmp$3","tmp$4","TopicsShow__PostShow.make","TopicsShow__Post.sort","TopicsShow__Topic.decode","TopicsShow__Post.decode","TopicsShow__Community.decode","TopicsShow__LinkedTarget.decode","TopicsShow__Root.make","repliesCount","initialState_similar","similar","similarTopics","searchForSimilarTopics","trimmedTitle","suggestions","CommunitiesNewTopic__TopicSuggestion.makeFromJs","e","$$Notification.warn","updateTitleAndSearch","timeoutId","createTopic","redirectToNewTopic","redirectPath","handleCreateTopic","OptionUtils.flatMap","suggestions$1","suggestion","askedOn","CommunitiesNewTopic__TopicSuggestion.createdAt","n","CommunitiesNewTopic__TopicSuggestion.repliesCount","CommunitiesNewTopic__TopicSuggestion.id","CommunitiesNewTopic__TopicSuggestion.title","searchingIndicator","handleSelectTopicCategory","selectedCategoryId","CommunitiesNewTopic__Root","__x","DomUtils.goBack","newTitle","markdown","CommunitiesNewTopic__Root.make","LevelLockSvg","number","unlockAt","isUnlocked","DateFns.isPast","levels","first","level","unlockDateString","findByLevelNumber","levelNumber","next","previous","previousLevelNumber","LevelEmptySvg","UnexpectedProgressionBehavior","certificateSerialNumber","progressionBehavior","progressionLimit","behavior","CannotParseUnknownRole","unknownRole","role","sortIndex","targetGroupId","prerequisiteTargetIds","resubmittable","reviewed","status","fileName","fileUrl","makeFile","makeFiles","data","findAudioFile","findFiles","ids","makeResult","kind","makeStatus","decodeFile","updateStatus","checklist","$$Array.mapi","i","makeNoAnswer","makeFailed","encodeKind","encodeResult","encodeStatus","encode","Json_encode.object_","encodeArray","Json_encode.array","UnexpectedStatusValue","pending","createdAtPretty","t1","t2","DateFns.differenceInSeconds","unknownValue","SubmissionChecklistItem.decodeFile","SubmissionChecklistItem.decode","decodeAnswerOption","question","answerOptions","answerId","answerOption","answerValue","lastQuestion","questions","maxIndex","ArrayUtils.last","q1","q2","q","nextQuestion","isLastQuestion","Caml_obj.caml_equal","criteria","grades","g1","g2","ec1","ec","EvaluationCriterion.id","ec2","$$String.compare","EvaluationCriterion.name","grade","submissionId","evaluationCriterionId","coachId","feedback","decodeQuestion","topicTitle","submissions","pendingUserIds","navigation","decodeNavigation","CoursesCurriculum__Submission.decode","CoursesCurriculum__Feedback.decode","CoursesCurriculum__QuizQuestion.decode","ContentBlock.decode","CoursesCurriculum__Community.decode","CoursesCurriculum__Grade.decode","TargetChecklistItem.decode","computeCompletionType","targetDetails","evaluated","hasQuiz","hasLinkToComplete","contentBlocks","quizQuestions","linkToComplete","completionInstructions","CoursesCurriculum__Grade.submissionId","addSubmission","submission","clearPendingUserIds","UnexpectedEligibilityString","stringValue","makeOptionFromJs","js","eligibility","string","levelUpEligibility","createQuizSubmission","b","selectedAnswersIds","addSubmissionCB","CoursesCurriculum__Target.id","submission$1","CoursesCurriculum__LevelUpEligibility.makeOptionFromJs","CoursesCurriculum__Submission.make","answerOptionClasses","selectedAnswer","defaultClasses","handleSubmit","answer","answerIds","CoursesCurriculum__QuizQuestion.answerId","CoursesCurriculum__Quiz","preview","CoursesCurriculum__TargetDetails.quizQuestions","setSelectedQuestion","selectedQuestion","setSelectedAnswer","setSelectedAnswersIds","CoursesCurriculum__QuizQuestion.isLastQuestion","CoursesCurriculum__QuizQuestion.nextQuestion","CoursesCurriculum__QuizQuestion.index","CoursesCurriculum__QuizQuestion.question","CoursesCurriculum__QuizQuestion.answerOptions","CoursesCurriculum__QuizQuestion.answerValue","CoursesCurriculum__Learn","TargetContentView.make","ContentBlock.sort","CoursesCurriculum__TargetDetails.contentBlocks","linkToCommunity","linkToNewPost","topicCard","CoursesCurriculum__Community.topicId","topicLink","CoursesCurriculum__Community.topicTitle","handleEmpty","actionButtons","CoursesCurriculum__Community.id","communityName","CoursesCurriculum__Community.name","communityTitle","CoursesCurriculum__Discuss","CoursesCurriculum__Community.topics","DateFns.parseISO","levelId","endsAt","targetGroups","milestone","hasPassed","hasBeenEvaluated","makePending","targets","lockTargets","allTargetsComplete","targetCache","targetIds","Belt_Array.every","ct","compute","student","CoursesCurriculum__Course.ended","CoursesCurriculum__Student.endsAt","studentLevelNumber","CoursesCurriculum__Level.number","CoursesCurriculum__Level.id","CoursesCurriculum__Student.levelId","targetGroup","tg","CoursesCurriculum__TargetGroup.id","CoursesCurriculum__Target.targetGroupId","CoursesCurriculum__TargetGroup.milestone","CoursesCurriculum__TargetGroup.levelId","s","CoursesCurriculum__LatestSubmission.targetId","submissionStatus","CoursesCurriculum__LatestSubmission.hasPassed","CoursesCurriculum__LatestSubmission.hasBeenEvaluated","CoursesCurriculum__Target.reviewed","CoursesCurriculum__Target.prerequisiteTargetIds","isPending","isAccessEnded","lockReasonToString","lockReason","statusToString","statusClassesSufix","canSubmit","allAttempted","allComplete","anyRejected","Belt_Array.some","CoursesCurriculum__CompletionInstructions","CoursesCurriculum__TargetDetails.completionInstructions","Icon.make","autoVerifySubmission","redirect","$$window$1","handleSuccess","createAutoVerifySubmission","details","completeButtonText","previewLinkToComplete","autoVerify","statusBar","visitLink","completionInstructionText","CoursesCurriculum__AutoVerify","targetStatus","CoursesCurriculum__TargetDetails.linkToComplete","CoursesCurriculum__TargetStatus.status","CoursesCurriculum__CompletionInstructions.make","optional","fromTargetChecklistItem","targetChecklist","TargetChecklistItem.title","TargetChecklistItem.optional","choices","TargetChecklistItem.kind","updateResultAtIndex","filename","fileId","fileIds","ArrayUtils.flattenV2","kindAsString","resultAsJson","OptionUtils.$$default","ArrayUtils.getOpt","validString","maxLength","length","validShortText","validFiles","Caml_obj.caml_notequal","validMultiChoice","validResponse","allowBlank","UrlUtils.isValid","t$1","validChecklist","validResponses","responses","f","SubmissionChecklistItem.makeFile","item","bits","curval","newval","newval30","Caml_array.set","$$int","bound","v","$$default","$$int$1","FormNotFound","UnexpectedResponse","defaultTitle","handleResponseJSON","attachFileCB","apiErrorTitle","uploadFile","Fetch.RequestInit","submitForm","addFileAttachmentCB","attachFile","attachingCB","$$Notification.notice","errors","ListUtils.isEmpty","CoursesCurriculum__FileForm","Random.$$int","List.map","global","factory","exports","BlobBuilder","URL","origBlob","createObjectURL","revokeObjectURL","strTag","blobSupported","blobSupportsArrayBufferView","arrayBufferSupported","blobBuilderSupported","mapArrayBufferViews","ary","chunk","buf","copy","BlobBuilderConstructor","options","bb","part","BlobConstructor","stringEncode","pos","len","Arr","at","tlen","extra","update","stringDecode","end","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","str","j","textEncode","textDecode","FakeBlobBuilder","isDataView","obj","bufferClone","array","array2base64","input","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","create","viewClasses","isArrayBufferView","concatTypedarrays","chunks","offset","Blob","opts","start","type","slice","File","FileReader","delegate","_read","fr","blob","_send","fixFileAndXHR","isIE","stream","position","controller","buffer","uint8array","bytesRead","promisify","resolve","reject","this","g","h","k","m","module","audioRecorder","authenticity_token","useState","mediaStreamRef","useRef","useEffect","err","startRecording","mediaRecorder","audioURL","track","_a","saveAs","CoursesCurriculum__AudioRecorder","CoursesCurriculum__AudioNavigator.audioRecorder","_e","_url","React.Fragment","kindIconClasses","computeId","checklistItem","CoursesCurriculum__ChecklistItem.kindAsString","placeholder","CoursesCurriculum__ChecklistItem.title","CoursesCurriculum__ChecklistItem.optional","CoursesCurriculum__ChecklistItem.result","showError","active","updateResultCB","UrlUtils.isInvalid","showShortText","CoursesCurriculum__ChecklistItem.validShortText","longTextWarning","currentLength","showWarning","colors","showLongText","checkboxOnChange","itemIndex","showMultiChoice","choice","CoursesCurriculum__ChecklistItem.makeFile","attachRecordingFile","removeFile","CoursesCurriculum__ChecklistItem.fileId","showFiles","CoursesCurriculum__ChecklistItem.filename","CoursesCurriculum__FileForm.make","showAudioRecorder","CoursesCurriculum__AudioRecorder.make","CoursesCurriculum__SubmissionItem","buttonContents","formState","createSubmission","isButtonDisabled","CoursesCurriculum__ChecklistItem.validChecklist","submit","CoursesCurriculum__ChecklistItem.fileIds","CoursesCurriculum__ChecklistItem.encodeArray","CoursesCurriculum__ChecklistItem.makeFiles","submissionChecklist","newSubmission","_error","updateResult","CoursesCurriculum__ChecklistItem.updateResultAtIndex","buttonClasses","setAttaching","bool","statusText","tooltipText","CoursesCurriculum__SubmissionBuilder","CoursesCurriculum__ChecklistItem.fromTargetChecklistItem","CoursesCurriculum__SubmissionItem.make","SubmissionChecklistItem.fileUrl","SubmissionChecklistItem.fileName","showlink","statusIcon","updateChecklistCB","statusButtonSelectedClasses","currentStatus","statusButtonOnClick","callback","_event","SubmissionChecklistItem.makeNoAnswer","SubmissionChecklistItem.makeFailed","statusButton","SubmissionChecklistItemShow","SubmissionChecklistItem.status","SubmissionChecklistItem.result","SubmissionChecklistItem.title","SubmissionChecklistShow","SubmissionChecklistItemShow.make","criterionName","updateGrade","newGrade","criterionId","gradeDescription","gradeLabels","grading","CoursesCurriculum__Grading.grade","CoursesCurriculum__Grading.criterionName","GradeLabel.labelFor","gradePillClasses","gradeReceived","passGrade","pillGrade","callBack","resultModifier","Caml_obj.caml_greaterthan","Caml_obj.caml_lessthan","selectableModifier","gradeBarHeader","GradeLabel.maxGrade","handleClick","gradeSelectCB","CoursesCurriculum__Grading.updateGrade","gradeBarPill","gradeLabel","myGrade","GradeLabel.grade","GradeLabel.label","gradeBarPanel","CoursesCurriculum__GradeBar","EvaluationCriterion.gradesAndLabels","EvaluationCriterion.passGrade","undoSubmission","setStatus","undoSubmissionCB","CoursesCurriculum__UndoButton","gradeBar","evaluationCriteria","CoursesCurriculum__Grade.evaluationCriterionId","gradeNumber","CoursesCurriculum__Grade.grade","CoursesCurriculum__Grading.make","CoursesCurriculum__GradeBar.make","textColor","bgColor","submissionStatusIcon","passed","gradingSection","CoursesCurriculum__Grade.sort","Curry.__1","handleAddAnotherSubmission","setShowSubmissionForm","showSubmissionForm","coaches","curriedGradeBar","submissions$1","CoursesCurriculum__TargetDetails.submissions","totalSubmissions","CoursesCurriculum__Submission.sort","CoursesCurriculum__TargetDetails.grades","CoursesCurriculum__Submission.id","CoursesCurriculum__Submission.status","CoursesCurriculum__UndoButton.make","CoursesCurriculum__Submission.createdAtPretty","SubmissionChecklistShow.make","CoursesCurriculum__Submission.checklist","CoursesCurriculum__Submission.pending","CoursesCurriculum__TargetDetails.feedback","CoursesCurriculum__Feedback.submissionId","coach","CoursesCurriculum__Feedback.coachId","CoursesCurriculum__Coach.id","up","CoursesCurriculum__User.id","CoursesCurriculum__Coach.userId","CoursesCurriculum__User.name","CoursesCurriculum__User.title","CoursesCurriculum__User.avatar","coachTitle","CoursesCurriculum__Feedback.id","CoursesCurriculum__Feedback.feedback","CoursesCurriculum__SubmissionsAndFeedback","CoursesCurriculum__TargetStatus.canSubmit","CoursesCurriculum__Target.resubmittable","CoursesCurriculum__SubmissionBuilder.make","UnexpectedSubmissionStatus","CoursesCurriculum__TargetDetails.clearPendingUserIds","closeOverlay","CoursesCurriculum__Course.id","loadTargetDetails","CoursesCurriculum__TargetDetails.decode","completionTypeToString","completionType","exit","tabToString","tab","selectableTabs","CoursesCurriculum__TargetDetails.communities","tabClasses","selection","scrollCompleteButtonIntoViewEventually","tabButton","tabLink","tabOptions","CoursesCurriculum__TargetDetails.computeCompletionType","newTargetDetails","CoursesCurriculum__TargetDetails.addSubmission","CoursesCurriculum__LatestSubmission.make","addVerifiedSubmission","renderTargetStatus","CoursesCurriculum__TargetStatus.statusClassesSufix","CoursesCurriculum__TargetStatus.statusToString","CoursesCurriculum__TargetStatus.isPending","overlayHeaderTitleCardClasses","renderLocked","overlayStatus","CoursesCurriculum__Target.title","prerequisitesIncomplete","statusOfTargets","prerequisiteTargets","CoursesCurriculum__TargetStatus.lockReasonToString","CoursesCurriculum__TargetStatus.targetId","Link.make","handleLocked","reason$1","learnSection","suffixLinkInfo","linkToTab","CoursesCurriculum__Learn.make","discussSection","CoursesCurriculum__Discuss.make","completeSectionClasses","completeSection","addVerifiedSubmissionCB","exit$1","CoursesCurriculum__TargetDetails.checklist","CoursesCurriculum__Quiz.make","CoursesCurriculum__SubmissionsAndFeedback.make","CoursesCurriculum__AutoVerify.make","renderPendingStudents","studentId","handlePendingStudents","CoursesCurriculum__TargetDetails.pendingUserIds","performQuickNavigation","navigationLink","arrow","scrollOverlayToTop","quickNavigationLinks","CoursesCurriculum__TargetDetails.navigation","previousUrl","nextUrl","updatePendingUserIdsWhenAddingSubmission","CoursesCurriculum__Target.role","CoursesCurriculum__Overlay","ScrollLock.activate","ScrollLock.deactivate","targetDetails$1","levelZeroSelectorClasses","isSelected","levelName","LevelLabel.format","CoursesCurriculum__Level.name","selectableLevels","orderedLevels","studentLevel","setSelectedLevelId","CoursesCurriculum__Level.isUnlocked","untabbedLevelSelector","selectedLevel","tabbedLevelSelector","showLevelZero","setShowLevelZero","levelZero","hideCaret","numberedLevelSelector","CoursesCurriculum__LevelSelector","CoursesCurriculum__Level.sort","LevelUpSvg","AccessEndedSvg","CourseEndedSvg","PreviewModeSvg","CourseCompleteSvg","LevelUpBlockedSvg","courseEndedImage","courseCompleteImage","accessEndedImage","levelUpImage","previewModeImage","levelUpBlockedImage","levelUp","handleSubmitButton","submitButtonText","createLevelUpQuery","CoursesCurriculum__LevelUpButton","showNotice","notice","classesOpt","classes","CoursesCurriculum__Notice.icon","courseCompleteMessage","courseEndedMessage","showPreviewMessage","CoursesCurriculum__Notice.previewModeImage","accessEndedMessage","teamMembersPendingMessage","levelUpBlockedMessage","currentLevelNumber","someSubmissionsRejected","titleKey","prefix","levelUpLimitedMessage","minimumRequiredLevelNumber","renderLevelUp","CoursesCurriculum__LevelUpButton.make","CoursesCurriculum__NoticeManager","levelLockedImage","levelEmptyImage","targetStatusClasses","statusClasses","rendertarget","CoursesCurriculum__TargetStatus.isAccessEnded","renderTargetGroup","targets$1","CoursesCurriculum__TargetGroup.name","CoursesCurriculum__TargetGroup.description","CoursesCurriculum__Target.sortIndex","latestSubmission","withoutSubmissionForThisTarget","handleLockedLevel","CoursesCurriculum__Level.unlockAt","dateString","statusOfMilestoneTargets","targetGroupsInLevel","milestoneTargetGroupIds","milestoneTargetIds","csn","CoursesCurriculum__Course.certificateSerialNumber","computeLevelUp","CoursesCurriculum__Course.progressionBehavior","statusOfCurrentMilestoneTargets","CoursesCurriculum__TargetStatus.allComplete","currentLevelAttempted","CoursesCurriculum__TargetStatus.allAttempted","hasRejectedSubmissions","CoursesCurriculum__TargetStatus.anyRejected","minimumLevelNumber","computeNotice","CoursesCurriculum__Student.accessEnded","longText","CoursesCurriculum__Level.previous","CoursesCurriculum__Level.next","CoursesCurriculum","accessLockedLevels","selectedTarget","StringUtils.paramToId","levelZero$1","studentLevelId","targetLevelId","computeTargetStatus","CoursesCurriculum__TargetStatus.compute","initialRender","React.useRef","CoursesCurriculum__Level.first","currentLevelId","currentLevel","newStatusOfTargets","CoursesCurriculum__Overlay.make","_anyOtherNotice","CoursesCurriculum__NoticeManager.make","CoursesCurriculum__LevelSelector.make","selectedLevelId","CoursesCurriculum__Level.isLocked","CoursesCurriculum__Level.unlockDateString","CoursesCurriculum__TargetGroup.sort","CoursesCurriculum__Course.decode","CoursesCurriculum__Level.decode","CoursesCurriculum__TargetGroup.decode","CoursesCurriculum__Target.decode","CoursesCurriculum__LatestSubmission.decode","CoursesCurriculum__Student.decode","CoursesCurriculum__Coach.decode","CoursesCurriculum__User.decode","EvaluationCriterion.decode","CoursesCurriculum__LevelUpEligibility.decode","Psj.matchPaths","CoursesCurriculum.make","levelLabel","maxGrade","ecData","totalTargets","targetsPendingReview","targetsCompleted","quizzesAttempted","averageGrades","completedLevelIds","makeAverageGrade","gradesData","gradeData","evaluationCriterionForGrade","CoursesReport__EvaluationCriterion.id","gradeValue","averageGrade","gradeAsPercentage","evaluationCriterion","computeAverageQuizScore","quizScores","sumOfPercentageScores","quizScore","fractionArray","$$String.split_on_char","numerator","Caml_format.caml_float_of_string","denominator","averageQuizScore","studentData","CoursesReport__EvaluationCriterion.makeFromJs","CoursesStudents__PersonalCoaches","listedCoaches","otherCoaches","names","UserProxy.userId","UserProxy.name","count","UserProxy.avatarUrl","userInfo","CoursesStudents__PersonalCoaches.avatar","coachInfo","CoursesReport__Coach.avatarUrl","CoursesReport__Coach.name","CoursesReport__Coach.title","doughnutChart","percentage","targetsCompletionStatus","overview","CoursesReport__StudentOverview.targetsCompleted","CoursesReport__StudentOverview.totalTargets","CoursesReport__StudentOverview.targetsPendingReview","incompleteTargets","targetCompletionPercent","quizPerformanceChart","averageGradeCharts","CoursesReport__StudentOverview.evaluationCriterionForGrade","CoursesReport__EvaluationCriterion.passGrade","CoursesReport__StudentOverview.gradeValue","CoursesReport__StudentOverview.gradeAsPercentage","CoursesReport__EvaluationCriterion.name","studentLevelClasses","levelCompleted","reached","Caml_obj.caml_lessequal","current","completed","levelProgressBar","levelsCompleted","applicableLevels","CoursesReport__Level.number","courseCompleted","$$Array.for_all","CoursesReport__Level.id","CoursesReport__Level.sort","CoursesReport__Overview","overviewData","CoursesReport__StudentOverview.levelId","CoursesReport__StudentOverview.completedLevelIds","CoursesReport__StudentOverview.averageQuizScore","CoursesReport__StudentOverview.quizzesAttempted","CoursesReport__StudentOverview.averageGrades","CoursesReport__StudentOverview.evaluationCriteria","SkeletonLoading.heading","SkeletonLoading.paragraph","SkeletonLoading.userDetails","targetRole","_passedAt","_time","makeFilter","filterEq","needsReloading","selectedStatus","sortBy_criterion","sortBy","statusString","studentIds","evaluatedAt","passedAt","studentSubmissions","CoursesReport__Level.name","LevelLabel.searchString","level$1","targetStatus$1","unselectedLevels","unselectedStatus","selectedLevel$1","selectedStatus$1","updateSelectedLevelCB","updateSelectedStatusCB","SubmissionsSorter","submissionsSorter","updateSortDirectionCB","updateStudentSubmissions","updateSubmissionsCB","hasNextPage","updatedSubmissions","CoursesReport__Submission.makeFromJs","CoursesReport__Submissions.makeFilter","submissionsData","CoursesReport__Submissions.make","submissionsData$1","getStudentSubmissions","status$1","showSubmissionStatus","CoursesReport__Submission.status","submissionCardClasses","showSubmission","teamStudentIds","CoursesReport__Submission.targetRole","teamMismatch","submissionHref","CoursesReport__Submission.id","CoursesReport__Submission.targetId","CoursesReport__Level.levelLabel","CoursesReport__Submission.levelId","CoursesReport__Submission.title","CoursesReport__Submission.createdAtPretty","HelpIcon.make","showSubmissions","CoursesReport__SubmissionsList","CoursesReport__Submissions.needsReloading","init","init$1","studentDetails","saveOverviewData","CoursesReport__StudentOverview.makeFromJs","getOverviewData","CoursesReport__Root","CoursesReport__Overview.make","CoursesReport__SubmissionsList.make","CoursesReport__Level.decode","CoursesReport__Coach.decode","CoursesReport__Root.make","courseOptions","CourseInfo.endsAt","DateFns.isFuture","CourseInfo.id","CourseInfo.name","courseDropdown","currentCourse","otherCourses","courseNameContainerClasses","imageWrapperClasses","coverImage","renderCourseSelector","currentCourseId","linkTitle","StudentCourse__Header","CourseInfo.decode","DomUtils.parseJSONAttribute","StudentCourse__Header.make","GraduateIconSvg","graduateIcon","printCertificate","setViewMode","heading","DOMPurify.sanitizedHTMLOpt","IssuedCertificate.profileName","DOMPurify.makeOptions","IssuedCertificate.serialNumber","issuedToName","issuedTo","IssuedCertificate.issuedTo","profileName","VerifyCertificate__Root","verifyImageUrl","IssuedCertificate__Root.make","IssuedCertificate.issuedAt","IssuedCertificate.courseName","IssuedCertificate.decode","VerifyCertificate__Root.make","connectLink","courseIds","fullTitle","affiliation","CoachesIndex__Course.name","makeCourse","makeSearch","computeInitialState","studentInCourseIds","filterCourseIds","CoachesIndex__Course.id","Belt_SetString.fromArray","Belt_SetString.add","selectable$1","Belt_SetString.remove","unselectedCourses","Belt_SetString.has","trimmedInput","overlay","CoachesIndex__Coach.avatarUrl","CoachesIndex__Coach.connectLink","CoachesIndex__Coach.name","CoachesIndex__Coach.fullTitle","card","_about","CoachesIndex__Coach.about","CoachesIndex__Coach.id","applyFilter","filterSearch","coaches$1","Belt_SetString.isEmpty","Belt_SetString.intersect","CoachesIndex__Coach.courseIds","StringUtils.includes","selectedCourses","CoachesIndex__Root","subheading","_otherPaths","selectedCoachOverlay","filteredCoaches","coachesToShow","filterInput","CoachesIndex__Coach.decode","CoachesIndex__Course.decode","CoachesIndex__Root.make","SetNewPasswordIconSvg","resetPasswordIcon","handleUpdatePasswordCB","validPassword","password","updatePassword","authenticityToken","payload","Api.create","isDisabled","renderUpdatePassword","setNewPassword","setConfirmPassword","inputClasses","labelClasses","UserSessionResetPassword","UserSessionResetPassword.make","showSideNav","coursePath","page","activeLinks","defaultLinks","linksForStudents","AppRouter__Course.isStudent","AppRouter__Course.canReview","isSPA","useSPA","selectedPage","canAccessPage","coursePage","moreLinks","AppRouter__School.linkUrl","AppRouter__School.linkTitle","AppRouter__Dropdown","Dropdown2.make","AppRouter__User.avatarUrl","AppRouter__User.name","renderLinks","AppRouter__School.localLinks","AppRouter__Dropdown.make","AppRouter__Header","school","AppRouter__User.hasNotifications","AppRouter__School.logoUrl","AppRouter__School.name","AppRouter__School.links","Layout__UserControls.make","AppRouter__Course.name","AppRouter__Course.id","AppRouter__Course.ended","nextPage","AppRouter__Page.canAccessPage","AppRouter__Page.coursePath","AppRouter__Page.useSPA","AppRouter__CourseSelector","AppRouter__Course.thumbnailUrl","AppRouter__CourseSelector.make","AppRouter__Page.activeLinks","courseSelector","renderLinksMobile","AppRouter__Nav","setSidebarOpen","AppRouter__Header.make","nameOrEmail","includeInactive","assignedCoachId","personalCoachId","reviewingCoachId","defaultDirection","makeFromQueryParams","toQueryString","PendingEmptySvg","coachName","coachAvatarUrl","evaluatorName","archivedAt","SubmissionChecklistItem.makeFiles","CoursesReview__Feedback.make","CoursesReview__Grade.make","updateFeedback","userNames","teamName","reviewer","reviewerName","reviewerAssignedAt","failed","pendingReview","feedbackSent","timeDistance","makeReviewerInfo","ReviewedEmptySvg","reviewedEmptyImage","pendingEmptyImage","CoursesReview__IndexSubmission.pendingReview","CoursesReview__IndexSubmission.timeDistance","CoursesReview__IndexSubmission.failed","feedbackSentNotice","CoursesReview__IndexSubmission.teamName","CoursesReview__IndexSubmission.reviewer","CoursesReview__IndexSubmission.id","CoursesReview__IndexSubmission.userNames","CoursesReview__IndexSubmission.levelNumber","CoursesReview__IndexSubmission.title","CoursesReview__IndexSubmission.createdAt","CoursesReview__IndexSubmission.createdAtPretty","CoursesReview__IndexSubmission.reviewerName","CoursesReview__IndexSubmission.reviewerAssignedAt","DateFns.formatDistanceToNow","CoursesReview__IndexSubmission.feedbackSent","CoursesReview__SubmissionCard","selectedTab","imageSrc","PagedSubmission","Pagination.Make","coachFilterTranslationKey","coachFilter","LoadingV2.setReloading","LoadingV2.setNotLoading","loader","CoursesReview__Filter.toQueryString","UserProxy.Fragment","targetInfo","value$14","a$7","a$8","a$9","a$10","a$11","coachIds","make$2","Raw$3","query$3","parse$3","serialize$3","reviewedTargetsInfo","serializeVariables$3","include$3","make$3","getSubmissions","CoursesReview__Filter.personalCoachId","CoursesReview__Filter.assignedCoachId","CoursesReview__Filter.reviewingCoachId","CoursesReview__Filter.nameOrEmail","CoursesReview__Filter.targetId","CoursesReview__Filter.tab","CoursesReview__Filter.defaultDirection","CoursesReview__Filter.sortCriterion","CoursesReview__Filter.levelId","CoursesReview__Filter.includeInactive","CoursesReview__TargetInfo.makeFromJs","UserProxy.makeFromJs","Shared__Level.makeFromJs","CoursesReview__IndexSubmission.makeFromJS","getLevels","getCoaches","getTargets","Shared__Level.number","Shared__Level.name","CoursesReview__TargetInfo.title","UserProxy.id","coach$1","coach$2","assignedToCoach","currentCoachId","personalCoach","reviewedBy","makeLoader","makecoachLoader","target$1","unSelectedStatus","nameOrEmailFilter","firstWord","Shared__Level.id","unselectedTargets","CoursesReview__TargetInfo.id","unselectedCoaches","getCoachId","getSelectable","selectedCoach","unselectedAssignedCoaches","unselectedPersonalCoaches","unselectedReviewers","selectedCoaches","selectedAssiginedCoach","selectedPersonalCoach","selectedReviewer","otherTab","defaultOptions","reloadSubmissions","submissionsLoadedData","totalSubmissionsCount","loadedSubmissionsCount","submissionsList","CoursesReview__SubmissionCard.make","loadFilters","StringUtils.isPresent","$$String.lowercase_ascii","StringUtils.test","shortCutClasses","LoadingV2.empty","pageTitle","CoursesReview__Root","CoursesReview__Filter.makeFromQueryParams","times","times$1","ReactHelmet.Helmet","CoursesReview__Filter.sortDirection","make$4","lastSeenAt","taggings","verifyArgsAndParse","_UserDetailsFragment","verifyName","Fragment","makeFromFragment","droppedOutAt","personalCoaches","cohort","levelInfo","userTags","tags","UserDetails.taggings","CoursesStudents__StudentInfo.user","tag","studentTags","CoursesStudents__StudentInfo.taggings","showStudent","UserDetails.lastSeenAt","CoursesStudents__StudentInfo.id","UserDetails.name","UserDetails.avatarUrl","UserDetails.fullTitle","CoursesStudents__PersonalCoaches.make","CoursesStudents__StudentInfo.personalCoaches","CoursesStudents__StudentInfo.level","CoursesStudents__StudentsList","students","PagedStudents","updatedStudent","Cohort.Fragment","Shared__Level.Fragment","UserDetails.Fragment","studentDistribution","courseStudents","skipIfLoadingMore","getStudents","loadingMoreOpt","loadingMore","CoursesStudents__StudentInfo.make","UserDetails.makeFromFragment","Shared__Level.makeFromFragment","Cohort.makeFromFragment","UserProxy.makeFromFragment","CoursesStudents__DistributionInLevel.make","makeFilters","CourseResourcesFilter.makeFilter","reloadStudents","showStudents","CoursesStudents__StudentsList.make","Curry._4","CoursesStudents__Root","SkeletonLoading.userCard","CoursesStudents__StudentDistribution.make","CourseResourcesFilter.make","CourseResourcesFilter.makeSorter","assignedAt","reviewerInfo","setReviewer","InvalidSubmissionReportCompletionStatus","decodeConclusion","conclusion","decodeCompletedStatus","startedAt","completedAt","decodeStatus","queuedAt","object","testReport","emptyTemplate","empty","replace","resultIndex","optionalFeedback","trim","title_0","Pervasives.$at","rc","CoursesReview__ReviewChecklistResult.makeFromJs","CoursesReview__ReviewChecklistResult.empty","CoursesReview__ReviewChecklistResult.emptyTemplate","updateChecklist","appendEmptyChecklistItem","moveResultItemUp","ArrayUtils.swapUp","moveResultItemDown","ArrayUtils.swapDown","deleteResultItem","_el","CoursesReview__ReviewChecklistResult.trim","CoursesReview__ReviewChecklistResult.encode","allSubmissions","targetTitle","reviewChecklist","targetEvaluationCriteriaIds","inactiveStudents","submissionReport","submissionReportPollTime","inactiveSubmissionReviewAllowedDays","decodeJs","CoursesReview__OverlaySubmission.makeFromJs","s1","s2","CoursesReview__SubmissionMeta.createdAt","CoursesReview__SubmissionMeta.makeFromJs","CoursesReview__Student.makeFromJs","EvaluationCriterion.make","GradeLabel.makeFromJs","CoursesReview__ReviewChecklistItem.makeFromJs","CoursesReview__SubmissionReport.makeFromJS","CoursesReview__Reviewer.makeFromJs","updateMetaSubmission","CoursesReview__SubmissionMeta.make","CoursesReview__OverlaySubmission.id","CoursesReview__OverlaySubmission.createdAt","CoursesReview__OverlaySubmission.passedAt","CoursesReview__OverlaySubmission.evaluatedAt","CoursesReview__OverlaySubmission.feedback","CoursesReview__OverlaySubmission.archivedAt","updateOverlaySubmission","newrecord","Caml_obj.caml_obj_dup","CoursesReview__SubmissionMeta.id","updateReviewChecklist","updateReviewer","CoursesReview__Reviewer.setReviewer","updateSubmissionReport","report","selectChecklist","setSelecton","unSelectChecklist","generateFeedback","updateFeedbackCB","newFeedback","reviewChecklistItem","resultIndexList","selectionItem","CoursesReview__ReviewChecklistItem.result","resultItem","CoursesReview__ReviewChecklistResult.feedback","checklistItemCheckedClasses","feedbackGeneratable","submissionDetails","overlaySubmission","CoursesReview__SubmissionDetails.reviewer","checklistItemChecked","updateChecklistResultFeedback","setChecklist","newReviewChecklistItem","CoursesReview__ReviewChecklistItem.updateChecklist","CoursesReview__ReviewChecklistResult.updateFeedback","CoursesReview__ReviewChecklistItem.replace","generateFeedbackButton","CoursesReview__ChecklistShow","showEditorCB","cancelCB","DateTime.randomId","Spread.make","CoursesReview__ReviewChecklistItem.title","Checkbox.make","CoursesReview__ReviewChecklistResult.title","updateReviewChecklistCB","trimmedChecklist","CoursesReview__ReviewChecklistItem.trim","CoursesReview__ReviewChecklistItem.encodeArray","updateChecklistItemTitle","CoursesReview__ReviewChecklistItem.updateTitle","updateChecklistResultTitle","CoursesReview__ReviewChecklistResult.updateTitle","addEmptyResultItem","CoursesReview__ReviewChecklistItem.appendEmptyChecklistItem","removeChecklistResult","CoursesReview__ReviewChecklistItem.deleteResultItem","initialStateForReviewChecklist","CoursesReview__ReviewChecklistItem.emptyTemplate","invalidChecklist","valid","CoursesReview__ReviewChecklistItem.empty","controlIcon","hiddenOpt","handler","hidden","CoursesReview__ChecklistEditor","closeEditModeCB","CoursesReview__ReviewChecklistItem.moveResultItemUp","CoursesReview__ReviewChecklistItem.moveResultItemDown","CoursesReview__Checklist","CoursesReview__ChecklistShow.make","CoursesReview__ChecklistEditor.make","assignReviewer","reassignReviewer","updateReviewerCB","CoursesReview__ReviewerManager","CoursesReview__Reviewer.user","CoursesReview__Reviewer.assignedAt","cardClasses","CoursesReview__SubmissionMeta.archivedAt","CoursesReview__SubmissionMeta.passedAt","CoursesReview__SubmissionMeta.evaluatedAt","linkUrl","submissionInfoCardContent","submissionNumber","CoursesReview__SubmissionMeta.feedbackSent","CoursesReview__SubmissionInfoCard","_archivedAt","createGrading","serializeInputObjectGradeInput","note","undoGrading","createFeedback","makeVariables$3","excludeSubmissionId","Raw$4","query$4","parse$4","serialize$4","unassignReviewer","serializeVariables$4","include$4","Raw$5","query$5","parse$5","serialize$5","serializeVariables$5","include$5","getNextSubmission","isSubmissionReviewAllowed","daysSinceSubmission","DateFns.differenceInDays","CoursesReview__SubmissionDetails.createdAt","submissionReviewAllowedTime","CoursesReview__SubmissionDetails.inactiveSubmissionReviewAllowedDays","submissionReviewAllowed","CoursesReview__SubmissionDetails.preview","makeFeedback","AppRouter__User.title","updateSubmissionCB","CoursesReview__OverlaySubmission.updateFeedback","DomUtils.reload","CoursesReview__Grade.evaluationCriterionId","CoursesReview__Grade.value","trimToOption","navigationDisabled","gradeSubmissionQuery","SubmissionChecklistItem.encodeArray","CoursesReview__OverlaySubmission.update","inactiveWarning","CoursesReview__SubmissionDetails.inactiveStudents","submissionDeadlineDate","DateFns.addDays","warning","CoursesReview__SubmissionDetails.students","reviewNextButton","nextSubmission","headerSection","CoursesReview__SubmissionDetails.teamName","studentCount","CoursesReview__SubmissionDetails.courseId","CoursesReview__SubmissionDetails.coaches","CoursesReview__SubmissionDetails.levelNumber","CoursesReview__SubmissionDetails.targetId","CoursesReview__SubmissionDetails.targetTitle","commaRequired","CoursesReview__Student.id","CoursesReview__Student.name","updateGrading","newGrades","handleGradePillClick","gradePillHeader","evaluationCriteriaName","selectedGrade","currentGrade","passgrade","Caml_obj.caml_greaterequal","showGradePill","gradeLabelGrade","showGrades","CoursesReview__Grade.sort","gradeEcId","renderGradePills","badgeColorClasses","statusColor","gradeBadgeClasses","badge","submissionReviewStatus","CoursesReview__OverlaySubmission.evaluatorName","gradeSubmission","reviewButtonDisabled","computeStatus","selectedGrades","currentGradingCriteria","CoursesReview__OverlaySubmission.grades","noteForm","teamSubmission","_someGrades","noteAbout","help","textareaId","feedbackGenerator","showAddFeedbackEditorOpt","showAddFeedbackEditor","showFeedback","CoursesReview__Feedback.createdAt","CoursesReview__Feedback.coachAvatarUrl","CoursesReview__Feedback.coachName","CoursesReview__Feedback.coachTitle","CoursesReview__Feedback.createdAtPretty","CoursesReview__Feedback.value","studentOrTeamName","reportStatusString","CoursesReview__SubmissionReport.status","reportStatusIconClasses","reportConclusionTimeString","completedTimestamps","DateFns.formatDistance","loadSubmissionReport","updateSubmissionReportCB","CoursesReview__SubmissionReport.id","reportData","updatedReport","reloadSubmissionReport","CoursesReview__Editor","CoursesReview__OverlaySubmission.checklist","AppRouter__User.id","findEditor","intervalId","toggleTestReportIcon","CoursesReview__SubmissionReport.testReport","CoursesReview__ReviewerManager.make","CoursesReview__Checklist.make","CoursesReview__SubmissionDetails.allSubmissions","CoursesReview__SubmissionInfoCard.make","value$15","value$16","value$17","value$18","value$19","value$20","value$21","value$22","value$23","value$24","reviewerDetails","value$25","value$26","value$27","value$28","value$29","value$30","value$31","value$32","value$33","value$34","value$35","value$36","value$37","value$38","value$39","value$40","getSubmissionDetails","CoursesReview__SubmissionDetails.decodeJs","updateSubmission","newSubmissionDetails","CoursesReview__SubmissionDetails.updateOverlaySubmission","currentSubmissionIndex","CoursesReview__SubmissionDetails.updateReviewChecklist","CoursesReview__SubmissionDetails.updateReviewer","CoursesReview__SubmissionDetails.updateSubmissionReport","CoursesReview__SubmissionsRoot","CoursesReview__Editor.make","CoursesReview__SubmissionDetails.submission","CoursesReview__SubmissionDetails.evaluationCriteria","CoursesReview__SubmissionDetails.reviewChecklist","CoursesReview__SubmissionDetails.targetEvaluationCriteriaIds","CoursesReview__SubmissionDetails.submissionReport","CoursesReview__SubmissionDetails.submissionReportPollTime","performCopy","_copy","ClickToCopy","classNameOpt","tooltipClassName","children","noteOn","notes","User.makeFromJs","archiveCoachNote","removeCoachNote","removeNoteCB","setArchiving","deleteIcon","archiving","CoursesStudents__CoachNote.id","CoursesStudents__CoachNoteShow","CoursesStudents__CoachNote.author","user$1","user$2","user$3","showDeleteIcon","CoursesStudents__CoachNote.noteOn","CoursesStudents__CoachNote.note","coachNote","createCoachNote","saveNote","addNoteCB","newNote","CoursesStudents__CoachNote.makeFromJs","updateCoachNoteCB","saveNoteButtonText","CoursesStudents__CoachNotes","coachNotes","hasArchivedNotes","CoursesStudents__CoachNoteShow.make","CoursesStudents__CoachNote.sort","team","componentName","CoursesStudents__EvaluationCriterion.id","addNewNote","removeNote","noteId","makeTeam","CoursesStudents__Submission.makeFromJs","_datetime","CoursesStudents__Submission.evaluatedAt","CoursesStudents__Submission.failed","CoursesStudents__Submission.timeDistance","CoursesStudents__Submission.id","Shared__Level.unsafeLevelNumber","CoursesStudents__Submission.levelId","CoursesStudents__Submission.title","CoursesStudents__Submission.createdAtPretty","CoursesStudents__Submission.sort","CoursesStudents__SubmissionsList","User.Fragment","getStudentDetails","CoursesStudents__CoachNote.make","User.makeFromFragment","CoursesStudents__EvaluationCriterion.make","CoursesStudents__StudentDetails.makeAverageGrade","CoursesStudents__StudentDetails.make","CoursesStudents__StudentDetails.makeTeam","updateSubmissions","CoursesStudents__StudentDetails.evaluationCriterionForGrade","CoursesStudents__EvaluationCriterion.passGrade","CoursesStudents__StudentDetails.gradeValue","CoursesStudents__StudentDetails.gradeAsPercentage","CoursesStudents__EvaluationCriterion.name","setSelectedTab","Shared__Level.sort","addNote","onAddCoachNotesCB","CoursesStudents__StudentDetails.addNewNote","CoursesStudents__StudentDetails.removeNote","fulltitle","CoursesStudents__StudentDetails.student","UserProxy.fullTitle","otherTeamMembers","CoursesStudents__StudentDetails.team","CoursesStudents__StudentDetails.students","CoursesStudents__StudentInfo.droppedOutAt","Cohort.endsAt","CoursesStudents__StudentInfo.cohort","ClickToCopy.make","UserDetails.id","CoursesStudents__StudentOverlay","studentDetails$1","CoursesStudents__StudentDetails.courseId","CoursesStudents__StudentDetails.levels","CoursesStudents__StudentDetails.completedLevelIds","CoursesStudents__StudentDetails.targetsCompleted","CoursesStudents__StudentDetails.totalTargets","CoursesStudents__StudentDetails.averageQuizScore","CoursesStudents__StudentDetails.quizzesAttempted","CoursesStudents__StudentDetails.averageGrades","CoursesStudents__StudentDetails.evaluationCriteria","CoursesStudents__SubmissionsList.make","CoursesStudents__CoachNotes.make","CoursesStudents__StudentDetails.coachNotes","CoursesStudents__StudentDetails.hasArchivedNotes","SkeletonLoading.image","SkeletonLoading.contents","UnknownPathEncountered","AppRouter","CoursesReview__Root.make","AppRouter__User.coachId","AppRouter__User.defaultUser","CoursesStudents__Root.make","CoursesStudents__StudentOverlay.make","CoursesReview__SubmissionsRoot.make","AppRouter__Nav.make","AppRouter__Page.showSideNav","AppRouter__Course.decode","AppRouter__User.decode","AppRouter__School.decode","AppRouter.make"],"mappings":"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"}