{"version":3,"file":"student-CK5bzRQl.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__Standing.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__Reaction.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__Community.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__User.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__ModerationReport.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__SubmissionComment.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__TargetDetails.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Quiz.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__CurrentUser.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/images/no-peer-submissions.svg","../../../app/frontend/courses/review/components/SubmissionChecklistItemShow.bs.js","../../../app/frontend/courses/review/components/SubmissionChecklistShow.bs.js","../../../node_modules/rescript/lib/es6/belt_internalAVLtree.js","../../../node_modules/rescript/lib/es6/belt_internalMapString.js","../../../node_modules/rescript/lib/es6/belt_MapString.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__ReactionButton.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__Reactions.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__ModerationReportButton.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__SubmissionCommentShow.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__SubmissionComments.bs.js","../../../app/frontend/courses/curricula/types/CoursesCurriculum__DiscussionSubmission.bs.js","../../../app/frontend/courses/curricula/components/CoursesCurriculum__DiscussSubmission.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/curricula/images/assignment-discussion-icon.svg","../../../app/frontend/courses/curricula/components/CoursesCurriculum__CompletionInstructions.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/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/types/CoursesCurriculum__Notice.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__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/types/CoursesReport__MilestoneCompletionStatus.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/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/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/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__SubmissionReportShow.bs.js","../../../app/frontend/courses/review/components/CoursesReview__Editor.bs.js","../../../app/frontend/courses/review/components/CoursesReview__SubmissionsRoot.bs.js","../../../app/frontend/shared/types/UserDetails.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__StudentInfo.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/types/CoursesStudents__MilestonesCompletionStatus.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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\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 max-w-min z-50\"\n }, Js_array.mapi((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-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 }), links));\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 ms-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 ms-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/* 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: \"ps-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:ms-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/* 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 Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.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:ms-2 text-sm font-medium text-center cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-e 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:ms-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-e 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: \"ms-2\"\n }, t(undefined, undefined, \"sign_out\")))));\n}\n\nfunction editProfileLink(param) {\n return React.createElement(\"div\", {\n key: \"edit-profile-button\",\n className: \"md:ms-2 text-sm font-medium text-center cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-e border-b md:border-0\"\n }, React.createElement(\"a\", {\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: \"/user/edit\",\n rel: \"nofollow\"\n }, React.createElement(\"span\", {\n className: \"ms-2\"\n }, t(undefined, undefined, \"edit_profile\"))));\n}\n\nfunction signInLink(param) {\n return React.createElement(\"div\", {\n key: \"SignIn-button\",\n className: \"md:ms-2 text-sm font-semibold cursor-default flex w-1/2 sm:w-1/3 md:w-auto justify-center border-e 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: \"ms-2\"\n }, t(undefined, undefined, \"sign_in\")))));\n}\n\nfunction notificationButton(hasNotifications) {\n return React.createElement(Notifications__Root.make, {\n wrapperClasses: \"relative md:ms-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 Js_array.concat($$Array.of_list(match$6.tl), [\n match$5.hd,\n match$6.hd\n ])\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 Js_array.concat([isLoggedIn ? (\n match$7 ? signOutLink(undefined) : React.createElement(StudentTopNav__UserControls.make, {\n user: user,\n key: \"user-controls\"\n })\n ) : signInLink(undefined)], Js_array.concat([ReactUtils.nullUnless(editProfileLink(undefined), isLoggedIn && window.innerWidth < 768)], Js_array.concat([ReactUtils.nullUnless(notificationButton(hasNotifications), isLoggedIn && window.innerWidth >= 768)], Js_array.concat([React.createElement(StudentTopNav__DropDown.make, {\n links: match$2[1],\n key: \"more-links\"\n })], Js_array.mapi((function (l, index) {\n return headerLink(String(index), l);\n }), match$2[0])))));\n}\n\nfunction renderLogo(logoUrl, schoolName, additionalClasses) {\n if (logoUrl !== undefined) {\n return React.createElement(\"img\", {\n className: \"h-8 md:h-10 object-contain flex text-sm items-center \" + additionalClasses,\n alt: \"Logo of \" + schoolName,\n src: logoUrl\n });\n } else {\n return React.createElement(\"div\", {\n className: \"p-2 rounded-lg bg-white text-gray-900 hover:bg-gray-50 hover:text-primary-600 \" + additionalClasses\n }, React.createElement(\"span\", {\n className: \"text-xl font-bold leading-tight\"\n }, schoolName));\n }\n}\n\nfunction StudentTopNav(Props) {\n var schoolName = Props.schoolName;\n var logoOnLightBgUrl = Props.logoOnLightBgUrl;\n var logoOnDarkBgUrl = Props.logoOnDarkBgUrl;\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 Curry._1(toggleMenuHidden, (function (param) {\n return window.innerWidth < 768;\n }));\n };\n window.addEventListener(\"resize\", resizeCB);\n });\n return React.createElement(\"div\", {\n className: \"border-b\"\n }, React.createElement(\"div\", {\n className: \"mx-auto p-4\"\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:outline-none\",\n href: isLoggedIn ? \"/dashboard\" : \"/\"\n }, renderLogo(logoOnLightBgUrl, schoolName, \"logo_on_light_bg\"), renderLogo(logoOnDarkBgUrl, schoolName, \"logo_on_dark_bg\")), 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 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 editProfileLink ,\n signInLink ,\n notificationButton ,\n isMobile ,\n headerLinks ,\n renderLogo ,\n make ,\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(\"logoOnLightBgUrl\", (function (param) {\n return Json_decode.nullable(Json_decode.string, param);\n }), json)),\n Caml_option.null_to_opt(Json_decode.field(\"logoOnDarkBgUrl\", (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 logoOnLightBgUrl: match[1],\n logoOnDarkBgUrl: match[2],\n links: match[3],\n isLoggedIn: match[4],\n currentUser: match[5],\n hasNotifications: match[6]\n }), element);\n}\n\nexport {\n decodeProps ,\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 }), 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/* 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/* 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 name(t) {\n return t.name;\n}\n\nfunction color(t) {\n return t.color;\n}\n\nfunction decode(json) {\n return {\n name: Json_decode.field(\"name\", Json_decode.string, json),\n color: Json_decode.field(\"color\", Json_decode.string, json)\n };\n}\n\nexport {\n name ,\n color ,\n decode ,\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/* 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/* 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 PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 StandingShield from \"../../../shared/components/StandingShield.bs.js\";\nimport * as UsersDashboard__Course from \"../types/UsersDashboard__Course.bs.js\";\nimport * as UsersDashboard__Standing from \"../types/UsersDashboard__Standing.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 headerSection(userName, preferredName, userTitle, avatarUrl, showUserEdit, standing) {\n var name = Belt_Option.getWithDefault(preferredName, userName);\n return React.createElement(\"div\", {\n className: \"max-w-5xl mx-auto pt-12 flex flex-col md:flex-row items-start justify-start md:justify-between px-3 lg:px-0 gap-1\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-center gap-2\"\n }, avatarUrl !== undefined ? React.createElement(\"img\", {\n className: \"w-16 h-16 rounded-full border border-gray-300 overflow-hidden shrink-0\",\n src: avatarUrl\n }) : React.createElement(Avatar.make, {\n name: name,\n className: \"w-16 h-16 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 flex items-center justify-start\"\n }, name, ReactUtils.nullUnless(React.createElement(\"a\", {\n className: \"hidden md:block ms-2 text-primary-400 font-medium text-xs hover:text-primary-500 rounded-full border px-3 py-1 bg-primary-50 hover:bg-primary-100\",\n href: \"/user/edit\"\n }, React.createElement(\"span\", undefined, t(undefined, undefined, \"edit_profile\"))), showUserEdit)), React.createElement(\"div\", {\n className: \"text-gray-600 inline-block\"\n }, userTitle))), standing !== undefined ? React.createElement(\"div\", {\n className: \"flex flex-row-reverse md:flex-row items-center justify-start md:justify-start gap-2\"\n }, React.createElement(\"div\", {\n className: \"text-left rtl:text-right rtl:md:text-left md:text-right\"\n }, React.createElement(\"p\", {\n className: \"font-semibold text-sm\",\n style: {\n color: UsersDashboard__Standing.color(standing)\n }\n }, UsersDashboard__Standing.name(standing)), React.createElement(\"a\", {\n className: \"text-sm text-primary-500 hover:text-primary-700 hover:underline transition\",\n href: \"/user/standing\"\n }, I18n.ts(undefined, undefined, \"view_standing\"))), React.createElement(\"div\", {\n className: \"w-16 h-16 flex items-center justify-center border border-gray-300 rounded-full\",\n id: \"standing_shield\"\n }, React.createElement(StandingShield.make, {\n color: UsersDashboard__Standing.color(standing),\n sizeClass: \"w-12 h-12\"\n }))) : null);\n}\n\nfunction navButtonClasses(selected) {\n return \"font-semibold border-b-2 text-sm py-4 me-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 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 me-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 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 me-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 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 me-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 me-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 ms-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: \"ms-2\"\n }, title)), React.createElement(\"i\", {\n className: \"fas fa-arrow-right rtl:rotate-180\"\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: \"ms-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 Js_array.map((function (id) {\n var community = Js_array.find((function (c) {\n return UsersDashboard__Community.id(c) === id;\n }), communities);\n if (community !== undefined) {\n return React.createElement(\"a\", {\n key: UsersDashboard__Community.id(community),\n className: \"px-2 py-1 me-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 ms-2\"\n }, UsersDashboard__Community.name(community)));\n } else {\n return null;\n }\n }), communityIds);\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, \"cohorts\"), t(undefined, undefined, \"cta.my_cohorts\"), \"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 }, Js_array.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: \"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: \"flex gap-2 border-b border-gray-200\"\n }, React.createElement(\"div\", {\n className: \"block h-min ms-6 pt-3 pb-2 px-2 bg-primary-100 rounded-b-full\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-book-solid if-fw text-primary-400\"\n })), React.createElement(\"h4\", {\n className: \"w-full text-black font-semibold leading-tight pe-6 py-3 text-lg md:text-xl\"\n }, UsersDashboard__Course.name(course))), React.createElement(\"div\", {\n className: \"user-dashboard-course__description text-sm px-6 pt-3 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 }), courses)));\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 }, Js_array.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 bg-white border border-gray-300 rounded-lg overflow-hidden\",\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\"\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 }), communities)));\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 }, Js_array.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 bg-white border border-gray-300 rounded-lg overflow-hidden\",\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\"\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: \"ms-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 }), issuedCertificates)));\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 standing = Props.standing;\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 h-full\"\n }, React.createElement(\"div\", {\n className: \"bg-white\"\n }, headerSection(userName, preferredName, userTitle, avatarUrl, showUserEdit, standing), 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 headerSection ,\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/* 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__Standing from \"../users/home/types/UsersDashboard__Standing.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 Json_decode.optional((function (param) {\n return Json_decode.field(\"standing\", UsersDashboard__Standing.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 standing: match[9]\n }), element);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__TY3xtlF2__\"","// 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 Js_promise from \"../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$catch((function (param) {\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (result) {\n if (result.deleteAccount.success) {\n Curry._1(setState, (function (param) {\n return /* Deleted */2;\n }));\n setTimeout((function (param) {\n DomUtils.redirect(\"/users/sign_out\");\n }), 5000);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch, undefined, undefined, {\n token: token\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\", {\n className: \"text-xl font-semibold\"\n }, t(undefined, undefined, \"head\")), React.createElement(\"p\", {\n className: \"mt-1 text-gray-600\"\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 me-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: \"p-4 pb-12 md:pt-18\"\n }, React.createElement(\"div\", {\n className: \"pt-8\"\n }, React.createElement(\"img\", {\n className: \"w-64 h-64 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/* 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/* 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/* 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/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../shared/utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.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, Js_array.map(CommunitiesShow__TopicParticipant.makeFromJs, topicData.participants));\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/* 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/* 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/* 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: \"-me-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/* 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 Js_array from \"../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../node_modules/rescript/lib/es6/js_promise.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: Js_array.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: Js_array.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 }), value$4)\n };\n }), value$2),\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 = Js_array.map((function (value) {\n var value$1 = value.participants;\n var participants = Js_array.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 }), value$1);\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 }), value$6);\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 Js_promise.then_((function (response) {\n var newTopics = Js_array.map(CommunitiesShow__Topic.makeFromJS, response.topics.nodes);\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 }), Curry._3(make, undefined, undefined, variables));\n}\n\nfunction reloadTopics(communityId, filter, send) {\n Curry._1(send, /* BeginReloading */1);\n 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 Belt_Option.forEach(filter.topicCategory, (function (tc) {\n filterDict[\"topicCategory\"] = TopicCategory.id(tc);\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 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 Js_array.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 me-2\"\n }, React.createElement(\"div\", {\n className: \"w-3 h-3 rounded\",\n style: style\n }), React.createElement(\"span\", {\n className: \"ms-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 me-2\"\n }, name !== undefined ? \" \" + (name + \" \") : \"Unknown \"), React.createElement(\"span\", {\n className: \"hidden md:inline-block md:me-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-s 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 me-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-thumbs-up text-sm text-gray-600 me-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ms-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 me-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-comment-dots text-sm text-gray-600 me-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ms-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 me-2 py-1 px-2 rounded bg-gray-50\"\n }, React.createElement(\"i\", {\n className: \"far fa-eye text-sm text-gray-600 me-1\"\n }), React.createElement(\"p\", {\n className: \"text-xs font-semibold\"\n }, React.createElement(\"span\", {\n className: \"ms-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 pe-4 md:pe-6\",\n participants: CommunitiesShow__Topic.participants(topic),\n participantsCount: CommunitiesShow__Topic.participantsCount(topic)\n }))));\n }), topics);\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, Js_array.filter((function (category) {\n return OptionUtils.mapWithDefault((function (selectedCategory) {\n return TopicCategory.id(category) !== TopicCategory.id(selectedCategory);\n }), true, filter.topicCategory);\n }), topicCategories));\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 Js_array.concat(hasSolution, Js_array.concat(search, unselectedCategories));\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 Js_array.concat(selectedSolutionFilter, Js_array.concat(selectedSearchString, selectedCategory));\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: \"ms-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: \"ms-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 Js_array.filter((function (availableTopicCategory) {\n return TopicCategory.id(availableTopicCategory) !== TopicCategory.id(topicCategory);\n }), availableTopicCategories);\n }));\n return Js_array.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: \"ps-3 pe-4 py-2 font-normal flex items-center\",\n onClick: (function (param) {\n 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: \"ms-1\"\n }, categoryName));\n }), selectableTopicCategories);\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 pb-1\"\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 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 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 Js_array.find((function (c) {\n return TopicCategory.id(c) === cat;\n }), topicCategories);\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 }), [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 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 space-y-3 md:space-y-0\"\n }, React.createElement(\"div\", {\n className: \"flex-1 pe-2\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase pb-1 ps-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 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/* 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/* 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 className: \"fill-white\",\n height: \"14px\",\n width: \"14px\",\n viewBox: \"0 0 14 14\"\n }, React.createElement(\"circle\", {\n cx: \"8\",\n cy: \"8\",\n r: \"3\"\n }))), React.createElement(\"span\", {\n className: \"text-sm flex-1 me-3 font-semibold leading-loose\"\n }, label)));\n}\n\nvar make = Radio;\n\nexport {\n str ,\n make ,\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/* 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 ms-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg text-center ltr:sm:text-left rtl:sm:text-right 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 ms-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 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 Curry._1(onCancel, undefined);\n })\n }, cancelButtonText)))));\n}\n\nvar make = ConfirmWindow;\n\nexport {\n str ,\n make ,\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 PfIcon from \"../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as $$String from \"../../../node_modules/rescript/lib/es6/string.js\";\nimport * as Zxcvbn from \"../shared/Zxcvbn.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 Caml_array from \"../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as EmailUtils from \"../shared/utils/EmailUtils.bs.js\";\nimport * as Js_promise from \"../../../node_modules/rescript/lib/es6/js_promise.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 Json_decode from \"../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as OptionUtils from \"../shared/utils/OptionUtils.bs.js\";\nimport * as StringUtils from \"../shared/utils/StringUtils.bs.js\";\nimport * as ThemeSwitch from \"../shared/components/ThemeSwitch.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\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 reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* StartSaving */0 :\n var newrecord = Caml_obj.obj_dup(state);\n newrecord.saving = true;\n return newrecord;\n case /* ResetSaving */1 :\n var newrecord$1 = Caml_obj.obj_dup(state);\n newrecord$1.saving = false;\n return newrecord$1;\n case /* StartDeletingAccount */2 :\n var newrecord$2 = Caml_obj.obj_dup(state);\n newrecord$2.deletingAccount = true;\n return newrecord$2;\n case /* FinishAccountDeletion */3 :\n var newrecord$3 = Caml_obj.obj_dup(state);\n newrecord$3.deletingAccount = false;\n newrecord$3.showDeleteAccountForm = false;\n newrecord$3.emailForAccountDeletion = \"\";\n return newrecord$3;\n case /* ShowEmailChangePasswordConfirm */4 :\n var newrecord$4 = Caml_obj.obj_dup(state);\n newrecord$4.showEmailChangePasswordConfirm = true;\n return newrecord$4;\n case /* InitiatePasswordReset */5 :\n var newrecord$5 = Caml_obj.obj_dup(state);\n newrecord$5.initiatePasswordReset = true;\n return newrecord$5;\n case /* FinishPasswordReset */6 :\n var newrecord$6 = Caml_obj.obj_dup(state);\n newrecord$6.initiatePasswordReset = false;\n return newrecord$6;\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateName */0 :\n var newrecord$7 = Caml_obj.obj_dup(state);\n newrecord$7.dirty = true;\n newrecord$7.name = action._0;\n return newrecord$7;\n case /* UpdatePreferredName */1 :\n var newrecord$8 = Caml_obj.obj_dup(state);\n newrecord$8.dirty = true;\n newrecord$8.preferredName = action._0;\n return newrecord$8;\n case /* UpdateAbout */2 :\n var newrecord$9 = Caml_obj.obj_dup(state);\n newrecord$9.dirty = true;\n newrecord$9.about = action._0;\n return newrecord$9;\n case /* UpdateEmail */3 :\n var newrecord$10 = Caml_obj.obj_dup(state);\n newrecord$10.dirty = true;\n newrecord$10.email = action._0;\n return newrecord$10;\n case /* SetDisableUpdateEmail */4 :\n var newrecord$11 = Caml_obj.obj_dup(state);\n newrecord$11.disableEmailInput = action._0;\n return newrecord$11;\n case /* UpdateLocale */5 :\n var newrecord$12 = Caml_obj.obj_dup(state);\n newrecord$12.dirty = true;\n newrecord$12.locale = action._0;\n return newrecord$12;\n case /* UpdateCurrentPassword */6 :\n var newrecord$13 = Caml_obj.obj_dup(state);\n newrecord$13.dirty = true;\n newrecord$13.currentPassword = action._0;\n return newrecord$13;\n case /* UpdateNewPassword */7 :\n var newrecord$14 = Caml_obj.obj_dup(state);\n newrecord$14.dirty = true;\n newrecord$14.newPassword = action._0;\n return newrecord$14;\n case /* UpdateNewPassWordConfirm */8 :\n var newrecord$15 = Caml_obj.obj_dup(state);\n newrecord$15.dirty = true;\n newrecord$15.confirmPassword = action._0;\n return newrecord$15;\n case /* UpdateEmailForDeletion */9 :\n var newrecord$16 = Caml_obj.obj_dup(state);\n newrecord$16.emailForAccountDeletion = action._0;\n return newrecord$16;\n case /* UpdateDailyDigest */10 :\n var newrecord$17 = Caml_obj.obj_dup(state);\n newrecord$17.dirty = true;\n newrecord$17.dailyDigest = action._0;\n return newrecord$17;\n case /* UpdateThemePreference */11 :\n var themePreference = action._0;\n localStorage.setItem(\"themePreference\", themePreference);\n ThemeSwitch.setThemeBasedOnPreference(undefined);\n var newrecord$18 = Caml_obj.obj_dup(state);\n newrecord$18.themePreference = themePreference;\n return newrecord$18;\n case /* UpdateAvatarUrl */12 :\n var newrecord$19 = Caml_obj.obj_dup(state);\n newrecord$19.avatarUploadError = undefined;\n newrecord$19.avatarUrl = action._0;\n return newrecord$19;\n case /* ChangeDeleteAccountFormVisibility */13 :\n var newrecord$20 = Caml_obj.obj_dup(state);\n newrecord$20.showDeleteAccountForm = action._0;\n newrecord$20.emailForAccountDeletion = \"\";\n return newrecord$20;\n case /* SetAvatarUploadError */14 :\n var newrecord$21 = Caml_obj.obj_dup(state);\n newrecord$21.avatarUploadError = action._0;\n return newrecord$21;\n case /* FinishSaving */15 :\n var newrecord$22 = Caml_obj.obj_dup(state);\n newrecord$22.dirty = false;\n newrecord$22.saving = false;\n newrecord$22.hasCurrentPassword = action._0;\n newrecord$22.confirmPassword = \"\";\n newrecord$22.newPassword = \"\";\n newrecord$22.currentPassword = \"\";\n return newrecord$22;\n case /* UpdateEmailAndDisableInput */16 :\n var newrecord$23 = Caml_obj.obj_dup(state);\n newrecord$23.dirty = true;\n newrecord$23.showEmailChangePasswordConfirm = false;\n newrecord$23.passwordForEmailChange = \"\";\n newrecord$23.disableEmailInput = true;\n newrecord$23.email = action._0;\n return newrecord$23;\n case /* UpdatePasswordForEmailChange */17 :\n var newrecord$24 = Caml_obj.obj_dup(state);\n newrecord$24.passwordForEmailChange = action._0;\n return newrecord$24;\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!, $password: String!) {\\nsendUpdateEmailToken(newEmail: $newEmail, password: $password) {\\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 password: inp.password\n };\n}\n\nfunction makeVariables$2(newEmail, password, param) {\n return {\n newEmail: newEmail,\n password: password\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\nvar Raw$3 = {};\n\nvar query$3 = \"mutation InitiatePasswordResetMutation($email: String!) {\\ninitiatePasswordReset(email: $email) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$3(value) {\n var value$1 = value.initiatePasswordReset;\n return {\n initiatePasswordReset: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$3(value) {\n var value$1 = value.initiatePasswordReset;\n var value$2 = value$1.success;\n var initiatePasswordReset = {\n success: value$2\n };\n return {\n initiatePasswordReset: initiatePasswordReset\n };\n}\n\nfunction serializeVariables$3(inp) {\n return {\n email: inp.email\n };\n}\n\nfunction makeVariables$3(email, param) {\n return {\n email: email\n };\n}\n\nvar InitiatePasswordResetQuery_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 $$fetch$3 = include$3.$$fetch;\n\nvar InitiatePasswordResetQuery_Graphql_error = include$3.Graphql_error;\n\nvar InitiatePasswordResetQuery_decodeNotification = include$3.decodeNotification;\n\nvar InitiatePasswordResetQuery_decodeObject = include$3.decodeObject;\n\nvar InitiatePasswordResetQuery_decodeNotifications = include$3.decodeNotifications;\n\nvar InitiatePasswordResetQuery_decodeErrors = include$3.decodeErrors;\n\nvar InitiatePasswordResetQuery_flashNotifications = include$3.flashNotifications;\n\nvar InitiatePasswordResetQuery_sendQuery = include$3.sendQuery;\n\nvar InitiatePasswordResetQuery_query = include$3.query;\n\nvar InitiatePasswordResetQuery_make = include$3.make;\n\nvar InitiatePasswordResetQuery = {\n InitiatePasswordResetQuery_inner: InitiatePasswordResetQuery_inner,\n Raw: Raw$3,\n parse: parse$3,\n serialize: serialize$3,\n serializeVariables: serializeVariables$3,\n makeVariables: makeVariables$3,\n Graphql_error: InitiatePasswordResetQuery_Graphql_error,\n decodeNotification: InitiatePasswordResetQuery_decodeNotification,\n decodeObject: InitiatePasswordResetQuery_decodeObject,\n decodeNotifications: InitiatePasswordResetQuery_decodeNotifications,\n decodeErrors: InitiatePasswordResetQuery_decodeErrors,\n flashNotifications: InitiatePasswordResetQuery_flashNotifications,\n sendQuery: InitiatePasswordResetQuery_sendQuery,\n query: InitiatePasswordResetQuery_query,\n $$fetch: $$fetch$3,\n make: InitiatePasswordResetQuery_make\n};\n\nfunction uploadAvatar(send, formData) {\n Api.sendFormData(\"/user/upload_avatar\", formData, (function (json) {\n $$Notification.success(ts(undefined, undefined, \"notifications.done_exclamation\"), t(undefined, undefined, \"avatar_uploaded_notification\"));\n var avatarUrl = Json_decode.field(\"avatarUrl\", Json_decode.string, json);\n Curry._1(send, {\n TAG: /* UpdateAvatarUrl */12,\n _0: avatarUrl\n });\n }), (function (param) {\n Curry._1(send, {\n TAG: /* SetAvatarUploadError */14,\n _0: t(undefined, undefined, \"upload_failed\")\n });\n }));\n}\n\nfunction updateEmail(send, email, newEmail, password) {\n Curry._1(send, {\n TAG: /* SetDisableUpdateEmail */4,\n _0: false\n });\n Js_promise.$$catch((function (param) {\n Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */16,\n _0: email\n });\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (param) {\n Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */16,\n _0: newEmail\n });\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$2, undefined, undefined, {\n newEmail: newEmail,\n password: password\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 */14,\n _0: error\n });\n } else {\n return submitAvatarForm(send, formId);\n }\n}\n\nfunction initiatePasswordReset(send, email) {\n Curry._1(send, /* InitiatePasswordReset */5);\n Js_promise.$$catch((function (param) {\n Curry._1(send, /* FinishPasswordReset */6);\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (param) {\n Curry._1(send, /* FinishPasswordReset */6);\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$3, undefined, undefined, {\n email: email\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 Js_promise.$$catch((function (param) {\n Curry._1(send, /* ResetSaving */1);\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (result) {\n if (result.updateUser.success) {\n var hasCurrentPassword = state.newPassword.length !== 0;\n Curry._1(send, {\n TAG: /* FinishSaving */15,\n _0: hasCurrentPassword\n });\n } else {\n Curry._1(send, {\n TAG: /* FinishSaving */15,\n _0: state.hasCurrentPassword\n });\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch, undefined, undefined, variables)));\n}\n\nfunction initiateAccountDeletion(state, send) {\n Curry._1(send, /* StartDeletingAccount */2);\n Js_promise.$$catch((function (param) {\n Curry._1(send, /* FinishAccountDeletion */3);\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (result) {\n Curry._1(send, /* FinishAccountDeletion */3);\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$1, undefined, undefined, {\n email: state.emailForAccountDeletion\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 < 2) {\n return true;\n } else {\n return !state.dirty;\n }\n}\n\nfunction confirmEmailChangeWindow(currentEmail, state, send) {\n if (!state.showEmailChangePasswordConfirm) {\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 ltr:sm:text-left rtl:sm:text-right text-gray-600\"\n }, t(undefined, undefined, \"email_change_q\")), React.createElement(\"div\", {\n className: \"mt-3\"\n }, React.createElement(\"label\", {\n className: \"block text-sm font-semibold\",\n htmlFor: \"password\"\n }, t(undefined, undefined, \"confirm_using_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: \"password\",\n autoComplete: \"off\",\n placeholder: t(undefined, undefined, \"current_password_placeholder\"),\n type: \"password\",\n value: state.passwordForEmailChange,\n onChange: (function ($$event) {\n Curry._1(send, {\n TAG: /* UpdatePasswordForEmailChange */17,\n _0: $$event.target.value\n });\n })\n })));\n return React.createElement(ConfirmWindow.make, {\n title: t(undefined, undefined, \"change_account_email\"),\n body: body,\n confirmButtonText: t(undefined, undefined, \"update_email\"),\n cancelButtonText: t(undefined, undefined, \"cancel\"),\n onConfirm: (function (param) {\n updateEmail(send, currentEmail, state.email, state.passwordForEmailChange);\n }),\n onCancel: (function (param) {\n Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */16,\n _0: currentEmail\n });\n }),\n disableConfirm: state.passwordForEmailChange.length < 1,\n alertType: \"Normal\"\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 ltr:sm:text-left rtl:sm:text-right 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 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 initiateAccountDeletion(state, send);\n }),\n onCancel: (function (param) {\n Curry._1(send, {\n TAG: /* ChangeDeleteAccountFormVisibility */13,\n _0: false\n });\n }),\n disableConfirm: state.deletingAccount || state.email !== state.emailForAccountDeletion,\n alertType: \"Critical\"\n });\n}\n\nfunction themeChip(theme) {\n return React.createElement(\"div\", {\n className: theme + \" w-16 h-8 grid grid-cols-3 gap-1 p-1 rounded-md border border-gray-200 bg-white\"\n }, React.createElement(\"div\", {\n className: \"w-full h-full col-span-1 grid grid-rows-2 gap-1\"\n }, React.createElement(\"div\", {\n className: \"bg-black h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-primary-500 h-full w-full rounded-md\"\n })), React.createElement(\"div\", {\n className: \"col-span-2 grid grid-cols-3 gap-1\"\n }, React.createElement(\"div\", {\n className: \"bg-primary-300 h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-primary-200 h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-primary-100 h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-gray-400 h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-gray-300 h-full w-full rounded-md\"\n }), React.createElement(\"div\", {\n className: \"bg-gray-200 h-full w-full rounded-md\"\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 schoolName = Props.schoolName;\n var initialState_dailyDigest = OptionUtils.mapWithDefault((function (d) {\n return d;\n }), false, dailyDigest);\n var initialState_themePreference = Belt_Option.getWithDefault(Caml_option.null_to_opt(localStorage.getItem(\"themePreference\")), \"system\");\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 passwordForEmailChange: \"\",\n showEmailChangePasswordConfirm: false,\n dailyDigest: initialState_dailyDigest,\n themePreference: initialState_themePreference,\n emailForAccountDeletion: \"\",\n showDeleteAccountForm: false,\n hasCurrentPassword: hasCurrentPassword,\n deletingAccount: false,\n avatarUploadError: undefined,\n initiatePasswordReset: false,\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 var tmp;\n if (state.hasCurrentPassword) {\n var zxcvbn = Zxcvbn.make([\n state.name,\n state.email,\n schoolName\n ], state.newPassword);\n var tmp$1;\n if (zxcvbn !== undefined) {\n var zxcvbn$1 = Caml_option.valFromOption(zxcvbn);\n var suggestion = ArrayUtils.getOpt(Zxcvbn.suggestions(zxcvbn$1), 0);\n tmp$1 = React.createElement(\"div\", {\n className: \"h-6\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between items-center\"\n }, React.createElement(\"p\", {\n className: \"text-xs text-gray-400 font-inter\"\n }, ts(undefined, undefined, \"password_strength\")), React.createElement(\"div\", {\n className: \"flex items-center gap-1 mt-1\"\n }, React.createElement(\"span\", {\n key: \"0\",\n className: \"text-xs text-gray-400 pe-2 text-right rtl:text-left\"\n }, Zxcvbn.label(zxcvbn$1)), [\n 1,\n 2,\n 3,\n 4\n ].map(function (score) {\n return React.createElement(\"span\", {\n key: String(score),\n className: \"rounded-md h-1 \" + Zxcvbn.colorClass(zxcvbn$1, score) + \" w-10\"\n });\n }))), React.createElement(\"div\", undefined, React.createElement(\"ul\", {\n className: \"text-yellow-900 text-[10px]\"\n }, suggestion !== undefined ? React.createElement(\"li\", undefined, React.createElement(PfIcon.make, {\n className: \"if i-info-light if-fw\"\n }), suggestion) : null)));\n } else {\n tmp$1 = React.createElement(\"div\", {\n className: \"h-6\"\n });\n }\n tmp = React.createElement(\"div\", {\n className: \"mb-4\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"change_password\")), 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 Curry._1(send, {\n TAG: /* UpdateCurrentPassword */6,\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: \"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 Curry._1(send, {\n TAG: /* UpdateNewPassword */7,\n _0: $$event.target.value\n });\n })\n }), tmp$1), 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 Curry._1(send, {\n TAG: /* UpdateNewPassWordConfirm */8,\n _0: $$event.target.value\n });\n })\n }), ReactUtils.nullUnless(React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"confirm_password_error\"),\n active: hasInvalidPassword(state)\n }), StringUtils.isPresent(state.confirmPassword))));\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n className: \"container mx-auto px-3 pt-4 pb-8 max-w-5xl\"\n }, confirmEmailChangeWindow(email, state, send), confirmDeletionWindow(state, send), React.createElement(\"div\", {\n className: \"bg-white max-w-5xl mx-auto shadow sm:rounded-lg mt-4\"\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 pe-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 }, 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 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 < 1\n }), React.createElement(School__InputGroupError.make, {\n message: t(undefined, undefined, \"name_error_length\"),\n active: $$String.trim(state.name).length === 1\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 }, 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 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 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: \"ms-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 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 disabled: !state.hasCurrentPassword,\n onClick: (function (evt) {\n Curry._1(send, {\n TAG: /* SetDisableUpdateEmail */4,\n _0: false\n });\n })\n }, 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 Curry._1(send, {\n TAG: /* UpdateEmailAndDisableInput */16,\n _0: email\n });\n })\n }, 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 Curry._1(send, /* ShowEmailChangePasswordConfirm */4);\n })\n }, ts(undefined, undefined, \"update\")))), ReactUtils.nullIf(React.createElement(\"p\", {\n className: \"text-yellow-900 text-xs font-inter mt-1\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-info-light if-fw\"\n }), t(undefined, undefined, \"update_email_disabled_notice\")), state.hasCurrentPassword)))), 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 pe-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 }, tmp, React.createElement(\"div\", undefined, React.createElement(\"h3\", {\n className: \"font-semibold\"\n }, state.hasCurrentPassword ? t(undefined, undefined, \"forgot_password\") : t(undefined, undefined, \"set_up_password\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, state.hasCurrentPassword ? t(undefined, undefined, \"reset_password_subtext\") : t(undefined, undefined, \"set_password_subtext\")), React.createElement(\"button\", {\n className: \"bg-primary-100 text-primary-600 border border-primary-200 rounded-md px-4 py-2 mt-2 text-sm font-semibold\",\n disabled: state.initiatePasswordReset,\n onClick: (function (param) {\n initiatePasswordReset(send, email);\n })\n }, state.hasCurrentPassword ? t(undefined, undefined, \"reset_password_button_text\") : t(undefined, undefined, \"set_password_button_text\"))))), 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 pe-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 }, t(undefined, undefined, \"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 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 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 pe-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 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-100 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 max-w-5xl mx-auto 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 pe-4\"\n }, React.createElement(\"h3\", {\n className: \"text-lg font-semibold\"\n }, t(undefined, undefined, \"appearance_title\")), React.createElement(\"p\", {\n className: \"mt-1 text-sm text-gray-600\"\n }, t(undefined, undefined, \"appearance_description\"))), 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, \"theme_title\")), React.createElement(\"div\", {\n className: \"mt-6 flex flex-col md:flex-row items-start md:grow-0 md:items-center gap-3\"\n }, React.createElement(\"label\", {\n className: \"w-full md:w-auto p-3 cursor-pointer flex justify-between items-center border border-gray-300 rounded-lg focus-within:outline-none focus-within:border-transparent focus-within:ring-2 focus-within:ring-focusColor-500 \",\n htmlFor: \"theme-system\"\n }, React.createElement(Radio.make, {\n id: \"theme-system\",\n label: t(undefined, undefined, \"system\"),\n onChange: (function ($$event) {\n Curry._1(send, {\n TAG: /* UpdateThemePreference */11,\n _0: \"system\"\n });\n }),\n checked: state.themePreference === \"system\"\n }), React.createElement(\"div\", {\n className: \"w-16 h-8 flex items-center justify-center p-1 rounded-md border border-gray-200 bg-gray-100\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-desktop-monitor-regular if-fw text-lg text-gray-500\"\n }))), React.createElement(\"label\", {\n className: \"w-full md:w-auto p-3 cursor-pointer flex justify-between items-center border border-gray-300 rounded-lg focus-within:outline-none focus-within:border-transparent focus-within:ring-2 focus-within:ring-focusColor-500 \",\n htmlFor: \"theme-light\"\n }, React.createElement(Radio.make, {\n id: \"theme-light\",\n label: t(undefined, undefined, \"light\"),\n onChange: (function ($$event) {\n Curry._1(send, {\n TAG: /* UpdateThemePreference */11,\n _0: \"light\"\n });\n }),\n checked: state.themePreference === \"light\"\n }), themeChip(\"theme-pupilfirst\")), React.createElement(\"label\", {\n className: \"w-full md:w-auto p-3 cursor-pointer flex justify-between items-center border border-gray-300 rounded-lg focus-within:outline-none focus-within:border-transparent focus-within:ring-2 focus-within:ring-focusColor-500 \",\n htmlFor: \"theme-dark\"\n }, React.createElement(Radio.make, {\n id: \"theme-dark\",\n label: t(undefined, undefined, \"dark\"),\n onChange: (function ($$event) {\n Curry._1(send, {\n TAG: /* UpdateThemePreference */11,\n _0: \"dark\"\n });\n }),\n checked: state.themePreference === \"dark\"\n }), themeChip(\"dark\"))))))), React.createElement(\"div\", {\n className: \"bg-white max-w-5xl mx-auto 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 pe-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-s-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: \"ms-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 Curry._1(send, {\n TAG: /* ChangeDeleteAccountFormVisibility */13,\n _0: true\n });\n })\n }, t(undefined, undefined, \"delete_your_account\"))))))));\n}\n\nvar make = UserEdit;\n\nexport {\n str ,\n t ,\n ts ,\n reducer ,\n UpdateUserQuery ,\n InitiateAccountDeletionQuery ,\n SendEmailUpdateTokenQuery ,\n InitiatePasswordResetQuery ,\n uploadAvatar ,\n updateEmail ,\n submitAvatarForm ,\n handleAvatarInputChange ,\n initiatePasswordReset ,\n updateUser ,\n initiateAccountDeletion ,\n hasInvalidPassword ,\n saveDisabled ,\n confirmEmailChangeWindow ,\n confirmDeletionWindow ,\n themeChip ,\n make ,\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 Json_decode.field(\"schoolName\", Json_decode.string, 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 schoolName: match[11]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\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 Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.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(Js_array.filter((function (p) {\n return $$Array.mem(p.id, post.replies);\n }), posts));\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 Js_array.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 }), replies);\n}\n\nfunction unmarkSolution(replies) {\n return Js_array.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 }), replies);\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 Js_array.reduce((function (maxPostNumber, t) {\n if (t.postNumber > maxPostNumber) {\n return t.postNumber;\n } else {\n return maxPostNumber;\n }\n }), 0, posts);\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/* 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/* 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: \"ps-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: \"ps-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/* 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\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: \"\"\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 ms-2\"\n }, Belt_Option.mapWithDefault(user, \"Unknown\", User.name))), React.createElement(Tooltip.make, {\n tip: tip,\n position: \"Start\",\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 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 ms-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/* 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 Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../node_modules/rescript/lib/es6/js_promise.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 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 Js_promise.$$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 }), Js_promise.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 }), Curry._3($$fetch$1, undefined, undefined, variables)));\n return ;\n }\n Js_promise.$$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 }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n body: body,\n topicId: TopicsShow__Topic.id(topic),\n replyToPostId: replyToPostId\n })));\n}\n\nfunction onBorderAnimationEnd($$event) {\n var element = $$event.target;\n element.className = \"w-full flex flex-col\";\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 ms-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 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 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 Js_array.find((function (reply) {\n return postId === TopicsShow__Post.id(reply);\n }), replies);\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 OptionUtils.mapWithDefault((function (cb) {\n 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 me-2\",\n disabled: state.saving,\n onClick: (function (param) {\n 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/* 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 Js_promise from \"../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3($$fetch$1, undefined, undefined, {\n postId: postId\n })));\n } else {\n Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n postId: postId\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 pe-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/* 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 Js_promise from \"../../../../node_modules/rescript/lib/es6/js_promise.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 WindowUtils.confirm(undefined, t(undefined, undefined, \"mark_solution_confirm\"), (function (param) {\n Js_promise.then_((function (response) {\n if (response.markPostAsSolution.success) {\n Curry._1(markPostAsSolutionCB, undefined);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch, undefined, undefined, {\n id: postId\n }));\n }));\n}\n\nfunction unmarkPostAsSolution(postId, unmarkPostAsSolutionCB) {\n WindowUtils.confirm(undefined, t(undefined, undefined, \"unmark_solution_confirm\"), (function (param) {\n Js_promise.then_((function (response) {\n if (response.unmarkPostAsSolution.success) {\n Curry._1(unmarkPostAsSolutionCB, undefined);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$1, undefined, undefined, {\n id: postId\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 Js_promise.then_((function (response) {\n if (response.archivePost.success) {\n Curry._1(archivePostCB, undefined);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$2, undefined, undefined, {\n id: postId\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 w-8 h-8 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 w-8 h-8 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-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 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: \"ms-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 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: \"ms-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: \"ms-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\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 }), 50);\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 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 ms-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 pe-3 md:pe-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 justify-center text-center rounded-full w-8 h-8 hover:bg-gray-50 text-gray-600\",\n onClick: (function (param) {\n 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 me-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: \"pe-3\"\n }, ArrayUtils.isNotEmpty(repliesToPost) ? React.createElement(\"button\", {\n className: \"cursor-pointer flex items-center justify-center\",\n onClick: (function (param) {\n 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 hover:bg-gray-50 text-gray-600\",\n onClick: (function (param) {\n 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: \"ms-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 me-3 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 ps-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 me-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 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: \"ms-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 navigateToEditor(undefined);\n })\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-reply me-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:ps-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/* 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/* 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/* 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 Js_promise from \"../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3($$fetch$1, undefined, undefined, {\n topicId: topicId\n })));\n } else {\n Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n topicId: topicId\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: \"ms-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/* 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 Js_array from \"../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../node_modules/rescript/lib/es6/js_promise.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 ], Js_array.filter((function (r) {\n return TopicsShow__Post.id(r) !== replyToPostId;\n }), 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 /* 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], Js_array.filter((function (reply) {\n return TopicsShow__Post.id(reply) !== TopicsShow__Post.id(post);\n }), 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 /* 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], Js_array.filter((function (reply) {\n return TopicsShow__Post.id(reply) !== TopicsShow__Post.id(post$1);\n }), 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 /* 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], Js_array.filter((function (r) {\n return TopicsShow__Post.id(r) !== TopicsShow__Post.id(reply);\n }), 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 /* ArchivePost */6 :\n var postId = action._0;\n return {\n topic: state.topic,\n firstPost: state.firstPost,\n replies: Js_array.filter((function (r) {\n return TopicsShow__Post.id(r) !== postId;\n }), 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 /* 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\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 Js_promise.$$catch((function (param) {\n Curry._1(send, {\n TAG: /* UpdateSavingTopic */10,\n _0: false\n });\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, variables)));\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 WindowUtils.confirm(undefined, t(undefined, undefined, \"lock_topic_confirm\"), (function (param) {\n Curry._1(send, /* StartChangingLockStatus */4);\n Js_promise.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 }), Curry._3($$fetch$1, undefined, undefined, {\n id: topicId\n }));\n }));\n}\n\nfunction unlockTopic(topicId, send) {\n WindowUtils.confirm(undefined, t(undefined, undefined, \"unlock_topic_confirm\"), (function (param) {\n Curry._1(send, /* StartChangingLockStatus */4);\n Js_promise.then_((function (response) {\n if (response.unlockTopic.success) {\n Curry._1(send, /* FinishUnlockingTopic */5);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$2, undefined, undefined, {\n id: topicId\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: \"ms-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: \"ms-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: \"ms-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 Js_array.filter((function (availableTopicCategory) {\n return TopicCategory.id(availableTopicCategory) !== TopicCategory.id(topicCategory);\n }), availableTopicCategories);\n }));\n var topicCategoryList = Js_array.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 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: \"ms-2\"\n }, categoryName));\n }), selectableTopicCategories);\n if (selectedTopicCategory !== undefined) {\n return Js_array.concat(topicCategoryList, [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 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: \"ms-2\"\n }, ts(undefined, undefined, \"none\")))]);\n } else {\n return topicCategoryList;\n }\n}\n\nfunction topicSolutionId(replies) {\n return Belt_Option.map(Js_array.find(TopicsShow__Post.solution, replies), 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:ms-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 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 me-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 me-3\",\n onClick: (function (param) {\n 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:ps-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: \"ms-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:ps-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 ms-3\",\n onClick: (function (param) {\n 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 ms-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 ms-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 ms-1\"\n }, isLocked ? t(undefined, undefined, \"unlock_topic_button\") : t(undefined, undefined, \"lock_topic_button\"))) : null)), tmp$2, React.createElement(\"div\", {\n className: \"lg:ps-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-s-4 rounded-e-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: \"ms-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 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 md:pt-18\"\n }, React.createElement(\"div\", {\n className: \"max-w-4xl w-full pt-5 ps-4 lg:ps-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 Curry._1(send, /* LikeFirstPost */0);\n }),\n removePostLikeCB: (function (param) {\n Curry._1(send, /* RemoveLikeFromFirstPost */1);\n }),\n markPostAsSolutionCB: (function (param) {\n \n }),\n unmarkPostAsSolutionCB: (function (param) {\n \n }),\n archivePostCB: (function (param) {\n 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:ms-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 Curry._1(send, {\n TAG: /* LikeReply */2,\n _0: reply\n });\n }),\n removePostLikeCB: (function (param) {\n Curry._1(send, {\n TAG: /* RemoveLikeFromReply */3,\n _0: reply\n });\n }),\n markPostAsSolutionCB: (function (param) {\n Curry._1(send, {\n TAG: /* MarkReplyAsSolution */11,\n _0: TopicsShow__Post.id(reply)\n });\n }),\n unmarkPostAsSolutionCB: (function (param) {\n Curry._1(send, /* UnmarkReplyAsSolution */3);\n }),\n archivePostCB: (function (param) {\n 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/* 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/* 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/* 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 Js_array from \"../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../node_modules/rescript/lib/es6/js_promise.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: Js_array.map((function (value) {\n return {\n id: value.id,\n title: value.title,\n createdAt: value.createdAt,\n liveRepliesCount: value.liveRepliesCount\n };\n }), value$1)\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.similarTopics;\n var similarTopics = Js_array.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 }), value$1);\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 Js_promise.$$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 }), Js_promise.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 }), Curry._3(make, undefined, undefined, {\n communityId: communityId,\n title: trimmedTitle\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 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 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\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 Js_promise.$$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 }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n title: state.title,\n body: state.body,\n communityId: communityId,\n targetId: targetId,\n topicCategoryId: topicCategoryId\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: \"ms-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 pe-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 ms-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 ps-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 md:pt-18\"\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 DomUtils.goBack(undefined);\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-arrow-left rtl:rotate-180\"\n }), React.createElement(\"span\", {\n className: \"ms-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 me-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 updateTitleAndSearch(state, send, communityId, newTitle);\n })\n })), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"md: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 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/* 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/* Not a pure module */\n","export default \"__VITE_ASSET__wy0tzA9V__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 Js_array.find((function (l) {\n return l.number === levelNumber;\n }), levels);\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/* DateFns Not a pure module */\n","export default \"__VITE_ASSET__BvC$2CgD__\"","// 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 return t.progressionBehavior;\n}\n\nfunction progressionLimit(t) {\n var limit = t.progressionBehavior;\n if (limit) {\n return limit._0;\n } else {\n return 0;\n }\n}\n\nfunction decode(json) {\n var progressionLimit = Json_decode.field(\"progressionLimit\", Json_decode.$$int, json);\n var progressionBehavior = progressionLimit !== 0 ? /* Limited */({\n _0: progressionLimit\n }) : /* Unlimited */0;\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 progressionLimit ,\n decode ,\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 milestone: Json_decode.field(\"milestone\", Json_decode.bool, json),\n hasAssignment: Json_decode.field(\"hasAssignment\", 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\nfunction milestone(t) {\n return t.milestone;\n}\n\nfunction hasAssignment(t) {\n return t.hasAssignment;\n}\n\nexport {\n CannotParseUnknownRole ,\n decode ,\n id ,\n role ,\n title ,\n sortIndex ,\n targetGroupId ,\n prerequisiteTargetIds ,\n resubmittable ,\n reviewed ,\n milestone ,\n hasAssignment ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_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 Js_array.map((function (a) {\n return {\n id: a.id,\n name: a.title,\n url: a.url\n };\n }), data);\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 Js_array.filter((function (file) {\n return Js_array.includes(file.id, ids);\n }), files);\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\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), 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 t$1 = t.result;\n switch (t$1.TAG | 0) {\n case /* Files */3 :\n return Js_array.map((function (file) {\n return file.id;\n }), t$1._0);\n case /* MultiChoice */4 :\n return t$1._0;\n case /* AudioRecord */5 :\n return t$1._0.id;\n default:\n return t$1._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/* 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 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 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 hiddenAt(t) {\n return t.hiddenAt;\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 hiddenAtPretty(t) {\n var hiddenAt = t.hiddenAt;\n if (hiddenAt !== undefined) {\n return DateFns.format(Caml_option.valFromOption(hiddenAt), \"MMMM d, yyyy\");\n } else {\n return \"\";\n }\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 hiddenAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"hiddenAt\", DateFns.decodeISO, param);\n }), json)\n };\n}\n\nfunction make(id, createdAt, status, checklist, hiddenAt) {\n return {\n id: id,\n createdAt: createdAt,\n status: status,\n checklist: checklist,\n hiddenAt: hiddenAt\n };\n}\n\nexport {\n UnexpectedStatusValue ,\n id ,\n createdAt ,\n status ,\n checklist ,\n hiddenAt ,\n pending ,\n createdAtPretty ,\n hiddenAtPretty ,\n sort ,\n decode ,\n make ,\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.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/* 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/* 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/* 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 userId(t) {\n return t.userId;\n}\n\nfunction userName(t) {\n return t.userName;\n}\n\nfunction reactionableId(t) {\n return t.reactionableId;\n}\n\nfunction reactionableType(t) {\n return t.reactionableType;\n}\n\nfunction reactionValue(t) {\n return t.reactionValue;\n}\n\nfunction updatedAt(t) {\n return t.updatedAt;\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 userName: Json_decode.field(\"userName\", Json_decode.string, json),\n reactionableId: Json_decode.field(\"reactionableId\", Json_decode.string, json),\n reactionableType: Json_decode.field(\"reactionableType\", Json_decode.string, json),\n reactionValue: Json_decode.field(\"reactionValue\", Json_decode.string, json),\n updatedAt: Json_decode.field(\"updatedAt\", DateFns.decodeISO, json)\n };\n}\n\nexport {\n id ,\n userId ,\n userName ,\n reactionableId ,\n reactionableType ,\n reactionValue ,\n updatedAt ,\n decode ,\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 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/* No side effect */\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/* react 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 reportableId(t) {\n return t.reportableId;\n}\n\nfunction reportableType(t) {\n return t.reportableType;\n}\n\nfunction reason(t) {\n return t.reason;\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 reportableId: Json_decode.field(\"reportableId\", Json_decode.string, json),\n reportableType: Json_decode.field(\"reportableType\", Json_decode.string, json),\n reason: Json_decode.field(\"reason\", Json_decode.string, json)\n };\n}\n\nexport {\n id ,\n userId ,\n reportableId ,\n reportableType ,\n reason ,\n decode ,\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 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 CoursesCurriculum__User from \"./CoursesCurriculum__User.bs.js\";\nimport * as CoursesCurriculum__Reaction from \"./CoursesCurriculum__Reaction.bs.js\";\nimport * as CoursesCurriculum__ModerationReport from \"./CoursesCurriculum__ModerationReport.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction userId(t) {\n return t.userId;\n}\n\nfunction user(t) {\n return t.user;\n}\n\nfunction submissionId(t) {\n return t.submissionId;\n}\n\nfunction comment(t) {\n return t.comment;\n}\n\nfunction reactions(t) {\n return t.reactions;\n}\n\nfunction moderationReports(t) {\n return t.moderationReports;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction hiddenAt(t) {\n return t.hiddenAt;\n}\n\nfunction hiddenById(t) {\n return t.hiddenById;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction hiddenAtPretty(t) {\n var hiddenAt = t.hiddenAt;\n if (hiddenAt !== undefined) {\n return DateFns.format(Caml_option.valFromOption(hiddenAt), \"MMMM d, yyyy\");\n } else {\n return \"\";\n }\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 user: Json_decode.field(\"user\", CoursesCurriculum__User.decode, json),\n submissionId: Json_decode.field(\"submissionId\", Json_decode.string, json),\n comment: Json_decode.field(\"comment\", Json_decode.string, json),\n reactions: Json_decode.field(\"reactions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Reaction.decode, param);\n }), json),\n moderationReports: Json_decode.field(\"moderationReports\", (function (param) {\n return Json_decode.array(CoursesCurriculum__ModerationReport.decode, param);\n }), json),\n createdAt: Json_decode.field(\"createdAt\", DateFns.decodeISO, json),\n hiddenAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"hiddenAt\", DateFns.decodeISO, param);\n }), json),\n hiddenById: Json_decode.optional((function (param) {\n return Json_decode.field(\"hiddenById\", Json_decode.string, param);\n }), json)\n };\n}\n\nexport {\n id ,\n userId ,\n user ,\n submissionId ,\n comment ,\n reactions ,\n moderationReports ,\n createdAt ,\n hiddenAt ,\n hiddenById ,\n createdAtPretty ,\n hiddenAtPretty ,\n decode ,\n}\n/* DateFns Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_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 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__Reaction from \"./CoursesCurriculum__Reaction.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\";\nimport * as CoursesCurriculum__SubmissionComment from \"./CoursesCurriculum__SubmissionComment.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 discussion(t) {\n return t.discussion;\n}\n\nfunction allowAnonymous(t) {\n return t.allowAnonymous;\n}\n\nfunction comments(t) {\n return t.comments;\n}\n\nfunction reactions(t) {\n return t.reactions;\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 comments: Json_decode.field(\"comments\", (function (param) {\n return Json_decode.array(CoursesCurriculum__SubmissionComment.decode, param);\n }), json),\n reactions: Json_decode.field(\"reactions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Reaction.decode, 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 discussion: Json_decode.field(\"discussion\", Json_decode.bool, json),\n allowAnonymous: Json_decode.field(\"allowAnonymous\", Json_decode.bool, json)\n };\n}\n\nfunction computeCompletionType(targetDetails) {\n var evaluated = targetDetails.evaluated;\n var hasQuiz = targetDetails.quizQuestions.length > 0;\n var hasChecklist = targetDetails.checklist.length > 0;\n if (evaluated) {\n return /* Evaluated */0;\n } else if (hasQuiz) {\n return /* TakeQuiz */1;\n } else if (hasChecklist) {\n return /* SubmitForm */2;\n } else {\n return /* NoAssignment */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 completionInstructions(t) {\n return t.completionInstructions;\n}\n\nfunction grades(submissionId, t) {\n return Js_array.filter((function (grade) {\n return CoursesCurriculum__Grade.submissionId(grade) === submissionId;\n }), t.grading);\n}\n\nfunction addSubmission(submission, t) {\n return {\n pendingUserIds: t.pendingUserIds,\n submissions: Js_array.concat([submission], t.submissions),\n feedback: t.feedback,\n quizQuestions: t.quizQuestions,\n contentBlocks: t.contentBlocks,\n communities: t.communities,\n comments: t.comments,\n reactions: t.reactions,\n evaluated: t.evaluated,\n grading: t.grading,\n completionInstructions: t.completionInstructions,\n navigation: t.navigation,\n checklist: t.checklist,\n discussion: t.discussion,\n allowAnonymous: t.allowAnonymous\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 comments: t.comments,\n reactions: t.reactions,\n evaluated: t.evaluated,\n grading: t.grading,\n completionInstructions: t.completionInstructions,\n navigation: t.navigation,\n checklist: t.checklist,\n discussion: t.discussion,\n allowAnonymous: t.allowAnonymous\n };\n}\n\nexport {\n submissions ,\n pendingUserIds ,\n feedback ,\n navigation ,\n checklist ,\n discussion ,\n allowAnonymous ,\n comments ,\n reactions ,\n decodeNavigation ,\n decode ,\n computeCompletionType ,\n contentBlocks ,\n quizQuestions ,\n communities ,\n completionInstructions ,\n grades ,\n addSubmission ,\n clearPendingUserIds ,\n}\n/* ContentBlock 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_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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\";\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\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createQuizSubmission;\n var value$2 = value$1.submission;\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 }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createQuizSubmission;\n var value$2 = value$1.submission;\n var submission;\n if (value$2 !== undefined) {\n var value$3 = value$2.checklist;\n var value$4 = value$2.createdAt;\n var value$5 = value$2.id;\n submission = {\n id: value$5,\n createdAt: value$4,\n checklist: value$3\n };\n } else {\n submission = null;\n }\n var createQuizSubmission = {\n submission: submission\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: Js_array.map((function (b) {\n return b;\n }), a)\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 Js_promise.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 Curry._1(addSubmissionCB, CoursesCurriculum__Submission.make(submission$1.id, DateFns.decodeISO(submission$1.createdAt), /* MarkedAsComplete */0, checklist, undefined));\n } else {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n targetId: CoursesCurriculum__Target.id(target),\n answerIds: selectedAnswersIds\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 transition \";\n if (selectedAnswer !== undefined && Caml_obj.equal(Caml_option.valFromOption(selectedAnswer), answerOption)) {\n return defaultClasses + \"text-primary-500 shadow-md quiz-root__answer-selected \";\n } else {\n return defaultClasses;\n }\n}\n\nfunction iconClasses(answerOption, selectedAnswer) {\n var defaultClasses = \"quiz-root__answer-option-icon mb-1 far fa-check-circle text-lg \";\n if (selectedAnswer !== undefined) {\n if (Caml_obj.equal(Caml_option.valFromOption(selectedAnswer), answerOption)) {\n return defaultClasses + \"text-primary-500\";\n } else {\n return defaultClasses + \"text-gray-500\";\n }\n } else {\n return defaultClasses + \"text-gray-500\";\n }\n}\n\nfunction handleSubmit(answer, target, selectedAnswersIds, setSaving, addSubmissionCB, $$event) {\n $$event.preventDefault();\n var answerIds = Js_array.concat(selectedAnswersIds, [CoursesCurriculum__QuizQuestion.answerId(answer)]);\n 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 Js_array.concat(selectedAnswersIds, [CoursesCurriculum__QuizQuestion.answerId(selectedAnswer)]);\n }));\n 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 }, Js_array.map((function (answerOption) {\n return React.createElement(\"button\", {\n key: CoursesCurriculum__QuizQuestion.answerId(answerOption),\n className: answerOptionClasses(answerOption, selectedAnswer),\n onClick: (function (param) {\n 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 ms-2 w-full\",\n profile: /* Permissive */0\n }));\n }), CoursesCurriculum__QuizQuestion.answerOptions(selectedQuestion)))), 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/* 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: \"ms-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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\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 me-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\", undefined, Js_array.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 }), communities));\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/* I18n 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 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 isAdmin(t) {\n return t.isAdmin;\n}\n\nfunction isAuthor(t) {\n return t.isAuthor;\n}\n\nfunction isCoach(t) {\n return t.isCoach;\n}\n\nfunction isStudent(t) {\n return t.isStudent;\n}\n\nfunction isModerator(t) {\n if (t.isAdmin) {\n return true;\n } else {\n return t.isCoach;\n }\n}\n\nfunction isParticipant(t) {\n if (t.isAdmin || t.isAuthor || t.isCoach) {\n return true;\n } else {\n return t.isStudent;\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 avatarUrl: Json_decode.optional((function (param) {\n return Json_decode.field(\"avatarUrl\", Json_decode.string, param);\n }), json),\n isAdmin: Json_decode.field(\"isAdmin\", Json_decode.bool, json),\n isAuthor: Json_decode.field(\"isAuthor\", Json_decode.bool, json),\n isCoach: Json_decode.field(\"isCoach\", Json_decode.bool, json),\n isStudent: Json_decode.field(\"isStudent\", Json_decode.bool, 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 isAdmin ,\n isAuthor ,\n isCoach ,\n isStudent ,\n isModerator ,\n isParticipant ,\n decode ,\n avatar ,\n}\n/* react 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 completedAt: Belt_Option.map(Json_decode.optional((function (param) {\n return Json_decode.field(\"completedAt\", 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 completedAt(t) {\n return t.completedAt;\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 completedAt ,\n accessEnded ,\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 };\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 description(t) {\n return t.description;\n}\n\nexport {\n decode ,\n sort ,\n id ,\n name ,\n levelId ,\n description ,\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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 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 Js_array.map((function (t) {\n return {\n targetId: CoursesCurriculum__Target.id(t),\n status: /* Pending */0\n };\n }), targets);\n}\n\nfunction lockTargets(targets, reason) {\n return Js_array.map((function (t) {\n return {\n targetId: CoursesCurriculum__Target.id(t),\n status: /* Locked */{\n _0: reason\n }\n };\n }), targets);\n}\n\nfunction allTargetsAttempted(targetCache, targetIds) {\n return Belt_Array.every(targetIds, (function (targetId) {\n return Belt_Option.mapWithDefault(Js_array.find((function (ct) {\n return ct.targetId === targetId;\n }), targetCache), true, (function (target) {\n return target.submissionStatus !== /* SubmissionMissing */0;\n }));\n }));\n}\n\nfunction compute(preview, student, course, levels, targetGroups, targets, targetsRead, 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 targetCache = Js_array.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 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 = Js_array.find((function (s) {\n return CoursesCurriculum__LatestSubmission.targetId(s) === targetId;\n }), submissions);\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: CoursesCurriculum__Target.milestone(target),\n hasAssignment: CoursesCurriculum__Target.hasAssignment(target),\n submissionStatus: submissionStatus,\n prerequisiteTargetIds: CoursesCurriculum__Target.prerequisiteTargetIds(target)\n };\n }), targets);\n var submissionsPendingReviewCount = Js_array.filter((function (ct) {\n return ct.submissionStatus === /* SubmissionPendingReview */1;\n }), targetCache).length;\n return Js_array.map((function (ct) {\n var match = ct.submissionStatus;\n var status;\n switch (match) {\n case /* SubmissionMissing */0 :\n status = ct.targetReviewed && CoursesCurriculum__Course.progressionLimit(course) !== 0 && submissionsPendingReviewCount >= CoursesCurriculum__Course.progressionLimit(course) ? /* Locked */({\n _0: /* SubmissionLimitReached */{\n _0: String(submissionsPendingReviewCount)\n }\n }) : (\n allTargetsAttempted(targetCache, ct.prerequisiteTargetIds) ? (\n !ct.hasAssignment && Js_array.includes(ct.targetId, targetsRead) ? /* Completed */2 : /* Pending */0\n ) : /* 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 }), targetCache);\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 \"pending_count\",\n lockReason._0\n ]], undefined, \"submission_limit_reached\");\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 Js_array.includes(t.status, [\n /* PendingReview */1,\n /* Completed */2,\n /* Rejected */3\n ]);\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\nfunction readable(t) {\n var match = t.status;\n if (typeof match === \"number\") {\n return true;\n }\n var match$1 = match._0;\n if (typeof match$1 === \"number\") {\n return match$1 >= 2;\n } else {\n return true;\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 allTargetsAttempted ,\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 readable ,\n}\n/* I18n Not a pure module */\n","export default \"__VITE_ASSET__Cgrh5pSU__\"","// 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 me-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 me-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 rtl:-rotate-90\"\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 text-red-500 gap-2 text-xs px-1 py-px mt-px\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-times-square-solid block 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 showChoices(choices) {\n return choices.map(function (choice) {\n return React.createElement(\"p\", {\n className: \"text-sm text-gray-800\"\n }, \"- \" + choice);\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-e 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 \"ps-7 md:ps-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 showTitleOpt = Props.showTitle;\n var showTitle = showTitleOpt !== undefined ? showTitleOpt : true;\n var status = SubmissionChecklistItem.status(checklistItem);\n var text = SubmissionChecklistItem.result(checklistItem);\n var tmp;\n switch (text.TAG | 0) {\n case /* ShortText */0 :\n tmp = React.createElement(\"div\", undefined, text._0);\n break;\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 /* MultiChoice */4 :\n tmp = React.createElement(\"div\", {\n className: \"space-y-2\"\n }, showChoices(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 }, showTitle ? React.createElement(\"div\", {\n className: \"text-sm font-medium\"\n }, React.createElement(\"div\", {\n className: \"flex items-start space-x-2\"\n }, React.createElement(\"div\", {\n className: \"flex items-start w-full gap-3\"\n }, React.createElement(PfIcon.make, {\n className: kindIconClasses(SubmissionChecklistItem.result(checklistItem))\n }), React.createElement(\"div\", {\n className: \"overflow-x-auto\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: SubmissionChecklistItem.title(checklistItem),\n className: \"block tracking-wide\",\n profile: /* Permissive */0\n }))), statusIcon(updateChecklistCB, status))) : null, React.createElement(\"div\", {\n className: \"ps-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 showChoices ,\n statusButtonSelectedClasses ,\n statusButtonIcon ,\n statusButtonOnClick ,\n statusButton ,\n cardBodyClasses ,\n make ,\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 forDiscussionOpt = Props.forDiscussion;\n var forDiscussion = forDiscussionOpt !== undefined ? forDiscussionOpt : false;\n var showTitle = forDiscussion ? checklist.length !== 1 : true;\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 showTitle: showTitle,\n key: String(index)\n });\n }));\n}\n\nvar make = SubmissionChecklistShow;\n\nexport {\n str ,\n t ,\n make ,\n}\n/* I18n Not a pure module */\n","\n\nimport * as Curry from \"./curry.js\";\nimport * as Caml_option from \"./caml_option.js\";\nimport * as Belt_SortArray from \"./belt_SortArray.js\";\n\nfunction treeHeight(n) {\n if (n !== undefined) {\n return n.h;\n } else {\n return 0;\n }\n}\n\nfunction copy(n) {\n if (n !== undefined) {\n return {\n k: n.k,\n v: n.v,\n h: n.h,\n l: copy(n.l),\n r: copy(n.r)\n };\n } else {\n return n;\n }\n}\n\nfunction create(l, x, d, r) {\n var hl = treeHeight(l);\n var hr = treeHeight(r);\n return {\n k: x,\n v: d,\n h: hl >= hr ? hl + 1 | 0 : hr + 1 | 0,\n l: l,\n r: r\n };\n}\n\nfunction singleton(x, d) {\n return {\n k: x,\n v: d,\n h: 1,\n l: undefined,\n r: undefined\n };\n}\n\nfunction heightGe(l, r) {\n if (r !== undefined) {\n if (l !== undefined) {\n return l.h >= r.h;\n } else {\n return false;\n }\n } else {\n return true;\n }\n}\n\nfunction updateValue(n, newValue) {\n if (n.v === newValue) {\n return n;\n } else {\n return {\n k: n.k,\n v: newValue,\n h: n.h,\n l: n.l,\n r: n.r\n };\n }\n}\n\nfunction bal(l, x, d, r) {\n var hl = l !== undefined ? l.h : 0;\n var hr = r !== undefined ? r.h : 0;\n if (hl > (hr + 2 | 0)) {\n var ll = l.l;\n var lr = l.r;\n if (treeHeight(ll) >= treeHeight(lr)) {\n return create(ll, l.k, l.v, create(lr, x, d, r));\n } else {\n return create(create(ll, l.k, l.v, lr.l), lr.k, lr.v, create(lr.r, x, d, r));\n }\n }\n if (hr <= (hl + 2 | 0)) {\n return {\n k: x,\n v: d,\n h: hl >= hr ? hl + 1 | 0 : hr + 1 | 0,\n l: l,\n r: r\n };\n }\n var rl = r.l;\n var rr = r.r;\n if (treeHeight(rr) >= treeHeight(rl)) {\n return create(create(l, x, d, rl), r.k, r.v, rr);\n } else {\n return create(create(l, x, d, rl.l), rl.k, rl.v, create(rl.r, r.k, r.v, rr));\n }\n}\n\nfunction minKey0Aux(_n) {\n while(true) {\n var n = _n;\n var n$1 = n.l;\n if (n$1 === undefined) {\n return n.k;\n }\n _n = n$1;\n continue ;\n };\n}\n\nfunction minKey(n) {\n if (n !== undefined) {\n return Caml_option.some(minKey0Aux(n));\n }\n \n}\n\nfunction minKeyUndefined(n) {\n if (n !== undefined) {\n return minKey0Aux(n);\n }\n \n}\n\nfunction maxKey0Aux(_n) {\n while(true) {\n var n = _n;\n var n$1 = n.r;\n if (n$1 === undefined) {\n return n.k;\n }\n _n = n$1;\n continue ;\n };\n}\n\nfunction maxKey(n) {\n if (n !== undefined) {\n return Caml_option.some(maxKey0Aux(n));\n }\n \n}\n\nfunction maxKeyUndefined(n) {\n if (n !== undefined) {\n return maxKey0Aux(n);\n }\n \n}\n\nfunction minKV0Aux(_n) {\n while(true) {\n var n = _n;\n var n$1 = n.l;\n if (n$1 === undefined) {\n return [\n n.k,\n n.v\n ];\n }\n _n = n$1;\n continue ;\n };\n}\n\nfunction minimum(n) {\n if (n !== undefined) {\n return minKV0Aux(n);\n }\n \n}\n\nfunction minUndefined(n) {\n if (n !== undefined) {\n return minKV0Aux(n);\n }\n \n}\n\nfunction maxKV0Aux(_n) {\n while(true) {\n var n = _n;\n var n$1 = n.r;\n if (n$1 === undefined) {\n return [\n n.k,\n n.v\n ];\n }\n _n = n$1;\n continue ;\n };\n}\n\nfunction maximum(n) {\n if (n !== undefined) {\n return maxKV0Aux(n);\n }\n \n}\n\nfunction maxUndefined(n) {\n if (n !== undefined) {\n return maxKV0Aux(n);\n }\n \n}\n\nfunction removeMinAuxWithRef(n, kr, vr) {\n var ln = n.l;\n if (ln !== undefined) {\n return bal(removeMinAuxWithRef(ln, kr, vr), n.k, n.v, n.r);\n } else {\n kr.contents = n.k;\n vr.contents = n.v;\n return n.r;\n }\n}\n\nfunction isEmpty(x) {\n return x === undefined;\n}\n\nfunction stackAllLeft(_v, _s) {\n while(true) {\n var s = _s;\n var v = _v;\n if (v === undefined) {\n return s;\n }\n _s = {\n hd: v,\n tl: s\n };\n _v = v.l;\n continue ;\n };\n}\n\nfunction findFirstByU(n, p) {\n if (n === undefined) {\n return ;\n }\n var left = findFirstByU(n.l, p);\n if (left !== undefined) {\n return left;\n }\n var v = n.k;\n var d = n.v;\n var pvd = p(v, d);\n if (pvd) {\n return [\n v,\n d\n ];\n }\n var right = findFirstByU(n.r, p);\n if (right !== undefined) {\n return right;\n }\n \n}\n\nfunction findFirstBy(n, p) {\n return findFirstByU(n, Curry.__2(p));\n}\n\nfunction forEachU(_n, f) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return ;\n }\n forEachU(n.l, f);\n f(n.k, n.v);\n _n = n.r;\n continue ;\n };\n}\n\nfunction forEach(n, f) {\n forEachU(n, Curry.__2(f));\n}\n\nfunction mapU(n, f) {\n if (n === undefined) {\n return ;\n }\n var newLeft = mapU(n.l, f);\n var newD = f(n.v);\n var newRight = mapU(n.r, f);\n return {\n k: n.k,\n v: newD,\n h: n.h,\n l: newLeft,\n r: newRight\n };\n}\n\nfunction map(n, f) {\n return mapU(n, Curry.__1(f));\n}\n\nfunction mapWithKeyU(n, f) {\n if (n === undefined) {\n return ;\n }\n var key = n.k;\n var newLeft = mapWithKeyU(n.l, f);\n var newD = f(key, n.v);\n var newRight = mapWithKeyU(n.r, f);\n return {\n k: key,\n v: newD,\n h: n.h,\n l: newLeft,\n r: newRight\n };\n}\n\nfunction mapWithKey(n, f) {\n return mapWithKeyU(n, Curry.__2(f));\n}\n\nfunction reduceU(_m, _accu, f) {\n while(true) {\n var accu = _accu;\n var m = _m;\n if (m === undefined) {\n return accu;\n }\n var v = m.k;\n var d = m.v;\n var l = m.l;\n var r = m.r;\n _accu = f(reduceU(l, accu, f), v, d);\n _m = r;\n continue ;\n };\n}\n\nfunction reduce(m, accu, f) {\n return reduceU(m, accu, Curry.__3(f));\n}\n\nfunction everyU(_n, p) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return true;\n }\n if (!p(n.k, n.v)) {\n return false;\n }\n if (!everyU(n.l, p)) {\n return false;\n }\n _n = n.r;\n continue ;\n };\n}\n\nfunction every(n, p) {\n return everyU(n, Curry.__2(p));\n}\n\nfunction someU(_n, p) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return false;\n }\n if (p(n.k, n.v)) {\n return true;\n }\n if (someU(n.l, p)) {\n return true;\n }\n _n = n.r;\n continue ;\n };\n}\n\nfunction some(n, p) {\n return someU(n, Curry.__2(p));\n}\n\nfunction addMinElement(n, k, v) {\n if (n !== undefined) {\n return bal(addMinElement(n.l, k, v), n.k, n.v, n.r);\n } else {\n return singleton(k, v);\n }\n}\n\nfunction addMaxElement(n, k, v) {\n if (n !== undefined) {\n return bal(n.l, n.k, n.v, addMaxElement(n.r, k, v));\n } else {\n return singleton(k, v);\n }\n}\n\nfunction join(ln, v, d, rn) {\n if (ln === undefined) {\n return addMinElement(rn, v, d);\n }\n if (rn === undefined) {\n return addMaxElement(ln, v, d);\n }\n var lv = ln.k;\n var ld = ln.v;\n var lh = ln.h;\n var ll = ln.l;\n var lr = ln.r;\n var rv = rn.k;\n var rd = rn.v;\n var rh = rn.h;\n var rl = rn.l;\n var rr = rn.r;\n if (lh > (rh + 2 | 0)) {\n return bal(ll, lv, ld, join(lr, v, d, rn));\n } else if (rh > (lh + 2 | 0)) {\n return bal(join(ln, v, d, rl), rv, rd, rr);\n } else {\n return create(ln, v, d, rn);\n }\n}\n\nfunction concat(t1, t2) {\n if (t1 === undefined) {\n return t2;\n }\n if (t2 === undefined) {\n return t1;\n }\n var kr = {\n contents: t2.k\n };\n var vr = {\n contents: t2.v\n };\n var t2r = removeMinAuxWithRef(t2, kr, vr);\n return join(t1, kr.contents, vr.contents, t2r);\n}\n\nfunction concatOrJoin(t1, v, d, t2) {\n if (d !== undefined) {\n return join(t1, v, Caml_option.valFromOption(d), t2);\n } else {\n return concat(t1, t2);\n }\n}\n\nfunction keepSharedU(n, p) {\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n var d = n.v;\n var newLeft = keepSharedU(n.l, p);\n var pvd = p(v, d);\n var newRight = keepSharedU(n.r, p);\n if (pvd) {\n return join(newLeft, v, d, newRight);\n } else {\n return concat(newLeft, newRight);\n }\n}\n\nfunction keepShared(n, p) {\n return keepSharedU(n, Curry.__2(p));\n}\n\nfunction keepMapU(n, p) {\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n var d = n.v;\n var newLeft = keepMapU(n.l, p);\n var pvd = p(v, d);\n var newRight = keepMapU(n.r, p);\n if (pvd !== undefined) {\n return join(newLeft, v, Caml_option.valFromOption(pvd), newRight);\n } else {\n return concat(newLeft, newRight);\n }\n}\n\nfunction keepMap(n, p) {\n return keepMapU(n, Curry.__2(p));\n}\n\nfunction partitionSharedU(n, p) {\n if (n === undefined) {\n return [\n undefined,\n undefined\n ];\n }\n var key = n.k;\n var value = n.v;\n var match = partitionSharedU(n.l, p);\n var lf = match[1];\n var lt = match[0];\n var pvd = p(key, value);\n var match$1 = partitionSharedU(n.r, p);\n var rf = match$1[1];\n var rt = match$1[0];\n if (pvd) {\n return [\n join(lt, key, value, rt),\n concat(lf, rf)\n ];\n } else {\n return [\n concat(lt, rt),\n join(lf, key, value, rf)\n ];\n }\n}\n\nfunction partitionShared(n, p) {\n return partitionSharedU(n, Curry.__2(p));\n}\n\nfunction lengthNode(n) {\n var l = n.l;\n var r = n.r;\n var sizeL = l !== undefined ? lengthNode(l) : 0;\n var sizeR = r !== undefined ? lengthNode(r) : 0;\n return (1 + sizeL | 0) + sizeR | 0;\n}\n\nfunction size(n) {\n if (n !== undefined) {\n return lengthNode(n);\n } else {\n return 0;\n }\n}\n\nfunction toListAux(_n, _accu) {\n while(true) {\n var accu = _accu;\n var n = _n;\n if (n === undefined) {\n return accu;\n }\n var k = n.k;\n var v = n.v;\n var l = n.l;\n var r = n.r;\n _accu = {\n hd: [\n k,\n v\n ],\n tl: toListAux(r, accu)\n };\n _n = l;\n continue ;\n };\n}\n\nfunction toList(s) {\n return toListAux(s, /* [] */0);\n}\n\nfunction checkInvariantInternal(_v) {\n while(true) {\n var v = _v;\n if (v === undefined) {\n return ;\n }\n var l = v.l;\n var r = v.r;\n var diff = treeHeight(l) - treeHeight(r) | 0;\n if (!(diff <= 2 && diff >= -2)) {\n throw {\n RE_EXN_ID: \"Assert_failure\",\n _1: [\n \"belt_internalAVLtree.ml\",\n 373,\n 4\n ],\n Error: new Error()\n };\n }\n checkInvariantInternal(l);\n _v = r;\n continue ;\n };\n}\n\nfunction fillArrayKey(_n, _i, arr) {\n while(true) {\n var i = _i;\n var n = _n;\n var v = n.k;\n var l = n.l;\n var r = n.r;\n var next = l !== undefined ? fillArrayKey(l, i, arr) : i;\n arr[next] = v;\n var rnext = next + 1 | 0;\n if (r === undefined) {\n return rnext;\n }\n _i = rnext;\n _n = r;\n continue ;\n };\n}\n\nfunction fillArrayValue(_n, _i, arr) {\n while(true) {\n var i = _i;\n var n = _n;\n var l = n.l;\n var r = n.r;\n var next = l !== undefined ? fillArrayValue(l, i, arr) : i;\n arr[next] = n.v;\n var rnext = next + 1 | 0;\n if (r === undefined) {\n return rnext;\n }\n _i = rnext;\n _n = r;\n continue ;\n };\n}\n\nfunction fillArray(_n, _i, arr) {\n while(true) {\n var i = _i;\n var n = _n;\n var l = n.l;\n var v = n.k;\n var r = n.r;\n var next = l !== undefined ? fillArray(l, i, arr) : i;\n arr[next] = [\n v,\n n.v\n ];\n var rnext = next + 1 | 0;\n if (r === undefined) {\n return rnext;\n }\n _i = rnext;\n _n = r;\n continue ;\n };\n}\n\nfunction toArray(n) {\n if (n === undefined) {\n return [];\n }\n var size = lengthNode(n);\n var v = new Array(size);\n fillArray(n, 0, v);\n return v;\n}\n\nfunction keysToArray(n) {\n if (n === undefined) {\n return [];\n }\n var size = lengthNode(n);\n var v = new Array(size);\n fillArrayKey(n, 0, v);\n return v;\n}\n\nfunction valuesToArray(n) {\n if (n === undefined) {\n return [];\n }\n var size = lengthNode(n);\n var v = new Array(size);\n fillArrayValue(n, 0, v);\n return v;\n}\n\nfunction fromSortedArrayRevAux(arr, off, len) {\n switch (len) {\n case 0 :\n return ;\n case 1 :\n var match = arr[off];\n return singleton(match[0], match[1]);\n case 2 :\n var match_0 = arr[off];\n var match_1 = arr[off - 1 | 0];\n var match$1 = match_1;\n var match$2 = match_0;\n return {\n k: match$1[0],\n v: match$1[1],\n h: 2,\n l: singleton(match$2[0], match$2[1]),\n r: undefined\n };\n case 3 :\n var match_0$1 = arr[off];\n var match_1$1 = arr[off - 1 | 0];\n var match_2 = arr[off - 2 | 0];\n var match$3 = match_2;\n var match$4 = match_1$1;\n var match$5 = match_0$1;\n return {\n k: match$4[0],\n v: match$4[1],\n h: 2,\n l: singleton(match$5[0], match$5[1]),\n r: singleton(match$3[0], match$3[1])\n };\n default:\n var nl = len / 2 | 0;\n var left = fromSortedArrayRevAux(arr, off, nl);\n var match$6 = arr[off - nl | 0];\n var right = fromSortedArrayRevAux(arr, (off - nl | 0) - 1 | 0, (len - nl | 0) - 1 | 0);\n return create(left, match$6[0], match$6[1], right);\n }\n}\n\nfunction fromSortedArrayAux(arr, off, len) {\n switch (len) {\n case 0 :\n return ;\n case 1 :\n var match = arr[off];\n return singleton(match[0], match[1]);\n case 2 :\n var match_0 = arr[off];\n var match_1 = arr[off + 1 | 0];\n var match$1 = match_1;\n var match$2 = match_0;\n return {\n k: match$1[0],\n v: match$1[1],\n h: 2,\n l: singleton(match$2[0], match$2[1]),\n r: undefined\n };\n case 3 :\n var match_0$1 = arr[off];\n var match_1$1 = arr[off + 1 | 0];\n var match_2 = arr[off + 2 | 0];\n var match$3 = match_2;\n var match$4 = match_1$1;\n var match$5 = match_0$1;\n return {\n k: match$4[0],\n v: match$4[1],\n h: 2,\n l: singleton(match$5[0], match$5[1]),\n r: singleton(match$3[0], match$3[1])\n };\n default:\n var nl = len / 2 | 0;\n var left = fromSortedArrayAux(arr, off, nl);\n var match$6 = arr[off + nl | 0];\n var right = fromSortedArrayAux(arr, (off + nl | 0) + 1 | 0, (len - nl | 0) - 1 | 0);\n return create(left, match$6[0], match$6[1], right);\n }\n}\n\nfunction fromSortedArrayUnsafe(arr) {\n return fromSortedArrayAux(arr, 0, arr.length);\n}\n\nfunction cmpU(s1, s2, kcmp, vcmp) {\n var len1 = size(s1);\n var len2 = size(s2);\n if (len1 === len2) {\n var _e1 = stackAllLeft(s1, /* [] */0);\n var _e2 = stackAllLeft(s2, /* [] */0);\n while(true) {\n var e2 = _e2;\n var e1 = _e1;\n if (!e1) {\n return 0;\n }\n if (!e2) {\n return 0;\n }\n var h2 = e2.hd;\n var h1 = e1.hd;\n var c = kcmp(h1.k, h2.k);\n if (c !== 0) {\n return c;\n }\n var cx = vcmp(h1.v, h2.v);\n if (cx !== 0) {\n return cx;\n }\n _e2 = stackAllLeft(h2.r, e2.tl);\n _e1 = stackAllLeft(h1.r, e1.tl);\n continue ;\n };\n } else if (len1 < len2) {\n return -1;\n } else {\n return 1;\n }\n}\n\nfunction cmp(s1, s2, kcmp, vcmp) {\n return cmpU(s1, s2, kcmp, Curry.__2(vcmp));\n}\n\nfunction eqU(s1, s2, kcmp, veq) {\n var len1 = size(s1);\n var len2 = size(s2);\n if (len1 === len2) {\n var _e1 = stackAllLeft(s1, /* [] */0);\n var _e2 = stackAllLeft(s2, /* [] */0);\n while(true) {\n var e2 = _e2;\n var e1 = _e1;\n if (!e1) {\n return true;\n }\n if (!e2) {\n return true;\n }\n var h2 = e2.hd;\n var h1 = e1.hd;\n if (!(kcmp(h1.k, h2.k) === 0 && veq(h1.v, h2.v))) {\n return false;\n }\n _e2 = stackAllLeft(h2.r, e2.tl);\n _e1 = stackAllLeft(h1.r, e1.tl);\n continue ;\n };\n } else {\n return false;\n }\n}\n\nfunction eq(s1, s2, kcmp, veq) {\n return eqU(s1, s2, kcmp, Curry.__2(veq));\n}\n\nfunction get(_n, x, cmp) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n var c = cmp(x, v);\n if (c === 0) {\n return Caml_option.some(n.v);\n }\n _n = c < 0 ? n.l : n.r;\n continue ;\n };\n}\n\nfunction getUndefined(_n, x, cmp) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n var c = cmp(x, v);\n if (c === 0) {\n return n.v;\n }\n _n = c < 0 ? n.l : n.r;\n continue ;\n };\n}\n\nfunction getExn(_n, x, cmp) {\n while(true) {\n var n = _n;\n if (n !== undefined) {\n var v = n.k;\n var c = cmp(x, v);\n if (c === 0) {\n return n.v;\n }\n _n = c < 0 ? n.l : n.r;\n continue ;\n }\n throw {\n RE_EXN_ID: \"Not_found\",\n Error: new Error()\n };\n };\n}\n\nfunction getWithDefault(_n, x, def, cmp) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return def;\n }\n var v = n.k;\n var c = cmp(x, v);\n if (c === 0) {\n return n.v;\n }\n _n = c < 0 ? n.l : n.r;\n continue ;\n };\n}\n\nfunction has(_n, x, cmp) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return false;\n }\n var v = n.k;\n var c = cmp(x, v);\n if (c === 0) {\n return true;\n }\n _n = c < 0 ? n.l : n.r;\n continue ;\n };\n}\n\nfunction rotateWithLeftChild(k2) {\n var k1 = k2.l;\n k2.l = k1.r;\n k1.r = k2;\n var hlk2 = treeHeight(k2.l);\n var hrk2 = treeHeight(k2.r);\n k2.h = (\n hlk2 > hrk2 ? hlk2 : hrk2\n ) + 1 | 0;\n var hlk1 = treeHeight(k1.l);\n var hk2 = k2.h;\n k1.h = (\n hlk1 > hk2 ? hlk1 : hk2\n ) + 1 | 0;\n return k1;\n}\n\nfunction rotateWithRightChild(k1) {\n var k2 = k1.r;\n k1.r = k2.l;\n k2.l = k1;\n var hlk1 = treeHeight(k1.l);\n var hrk1 = treeHeight(k1.r);\n k1.h = (\n hlk1 > hrk1 ? hlk1 : hrk1\n ) + 1 | 0;\n var hrk2 = treeHeight(k2.r);\n var hk1 = k1.h;\n k2.h = (\n hrk2 > hk1 ? hrk2 : hk1\n ) + 1 | 0;\n return k2;\n}\n\nfunction doubleWithLeftChild(k3) {\n var x = k3.l;\n var v = rotateWithRightChild(x);\n k3.l = v;\n return rotateWithLeftChild(k3);\n}\n\nfunction doubleWithRightChild(k2) {\n var x = k2.r;\n var v = rotateWithLeftChild(x);\n k2.r = v;\n return rotateWithRightChild(k2);\n}\n\nfunction heightUpdateMutate(t) {\n var hlt = treeHeight(t.l);\n var hrt = treeHeight(t.r);\n t.h = (\n hlt > hrt ? hlt : hrt\n ) + 1 | 0;\n return t;\n}\n\nfunction balMutate(nt) {\n var l = nt.l;\n var r = nt.r;\n var hl = treeHeight(l);\n var hr = treeHeight(r);\n if (hl > (2 + hr | 0)) {\n var ll = l.l;\n var lr = l.r;\n if (heightGe(ll, lr)) {\n return heightUpdateMutate(rotateWithLeftChild(nt));\n } else {\n return heightUpdateMutate(doubleWithLeftChild(nt));\n }\n }\n if (hr > (2 + hl | 0)) {\n var rl = r.l;\n var rr = r.r;\n if (heightGe(rr, rl)) {\n return heightUpdateMutate(rotateWithRightChild(nt));\n } else {\n return heightUpdateMutate(doubleWithRightChild(nt));\n }\n }\n nt.h = (\n hl > hr ? hl : hr\n ) + 1 | 0;\n return nt;\n}\n\nfunction updateMutate(t, x, data, cmp) {\n if (t === undefined) {\n return singleton(x, data);\n }\n var k = t.k;\n var c = cmp(x, k);\n if (c === 0) {\n t.v = data;\n return t;\n }\n var l = t.l;\n var r = t.r;\n if (c < 0) {\n var ll = updateMutate(l, x, data, cmp);\n t.l = ll;\n } else {\n t.r = updateMutate(r, x, data, cmp);\n }\n return balMutate(t);\n}\n\nfunction fromArray(xs, cmp) {\n var len = xs.length;\n if (len === 0) {\n return ;\n }\n var next = Belt_SortArray.strictlySortedLengthU(xs, (function (param, param$1) {\n return cmp(param[0], param$1[0]) < 0;\n }));\n var result;\n if (next >= 0) {\n result = fromSortedArrayAux(xs, 0, next);\n } else {\n next = -next | 0;\n result = fromSortedArrayRevAux(xs, next - 1 | 0, next);\n }\n for(var i = next; i < len; ++i){\n var match = xs[i];\n result = updateMutate(result, match[0], match[1], cmp);\n }\n return result;\n}\n\nfunction removeMinAuxWithRootMutate(nt, n) {\n var rn = n.r;\n var ln = n.l;\n if (ln !== undefined) {\n n.l = removeMinAuxWithRootMutate(nt, ln);\n return balMutate(n);\n } else {\n nt.k = n.k;\n nt.v = n.v;\n return rn;\n }\n}\n\nexport {\n copy ,\n create ,\n bal ,\n singleton ,\n updateValue ,\n minKey ,\n minKeyUndefined ,\n maxKey ,\n maxKeyUndefined ,\n minimum ,\n minUndefined ,\n maximum ,\n maxUndefined ,\n removeMinAuxWithRef ,\n isEmpty ,\n stackAllLeft ,\n findFirstByU ,\n findFirstBy ,\n forEachU ,\n forEach ,\n mapU ,\n map ,\n mapWithKeyU ,\n mapWithKey ,\n reduceU ,\n reduce ,\n everyU ,\n every ,\n someU ,\n some ,\n join ,\n concat ,\n concatOrJoin ,\n keepSharedU ,\n keepShared ,\n keepMapU ,\n keepMap ,\n partitionSharedU ,\n partitionShared ,\n lengthNode ,\n size ,\n toList ,\n checkInvariantInternal ,\n fillArray ,\n toArray ,\n keysToArray ,\n valuesToArray ,\n fromSortedArrayAux ,\n fromSortedArrayRevAux ,\n fromSortedArrayUnsafe ,\n cmpU ,\n cmp ,\n eqU ,\n eq ,\n get ,\n getUndefined ,\n getWithDefault ,\n getExn ,\n has ,\n fromArray ,\n updateMutate ,\n balMutate ,\n removeMinAuxWithRootMutate ,\n}\n/* No side effect */\n","\n\nimport * as Caml from \"./caml.js\";\nimport * as Curry from \"./curry.js\";\nimport * as Caml_option from \"./caml_option.js\";\nimport * as Belt_SortArray from \"./belt_SortArray.js\";\nimport * as Belt_internalAVLtree from \"./belt_internalAVLtree.js\";\n\nfunction add(t, x, data) {\n if (t === undefined) {\n return Belt_internalAVLtree.singleton(x, data);\n }\n var k = t.k;\n if (x === k) {\n return Belt_internalAVLtree.updateValue(t, data);\n }\n var v = t.v;\n if (x < k) {\n return Belt_internalAVLtree.bal(add(t.l, x, data), k, v, t.r);\n } else {\n return Belt_internalAVLtree.bal(t.l, k, v, add(t.r, x, data));\n }\n}\n\nfunction get(_n, x) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n if (x === v) {\n return Caml_option.some(n.v);\n }\n _n = x < v ? n.l : n.r;\n continue ;\n };\n}\n\nfunction getUndefined(_n, x) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return ;\n }\n var v = n.k;\n if (x === v) {\n return n.v;\n }\n _n = x < v ? n.l : n.r;\n continue ;\n };\n}\n\nfunction getExn(_n, x) {\n while(true) {\n var n = _n;\n if (n !== undefined) {\n var v = n.k;\n if (x === v) {\n return n.v;\n }\n _n = x < v ? n.l : n.r;\n continue ;\n }\n throw {\n RE_EXN_ID: \"Not_found\",\n Error: new Error()\n };\n };\n}\n\nfunction getWithDefault(_n, x, def) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return def;\n }\n var v = n.k;\n if (x === v) {\n return n.v;\n }\n _n = x < v ? n.l : n.r;\n continue ;\n };\n}\n\nfunction has(_n, x) {\n while(true) {\n var n = _n;\n if (n === undefined) {\n return false;\n }\n var v = n.k;\n if (x === v) {\n return true;\n }\n _n = x < v ? n.l : n.r;\n continue ;\n };\n}\n\nfunction remove(n, x) {\n if (n === undefined) {\n return n;\n }\n var v = n.k;\n var l = n.l;\n var r = n.r;\n if (x !== v) {\n if (x < v) {\n return Belt_internalAVLtree.bal(remove(l, x), v, n.v, r);\n } else {\n return Belt_internalAVLtree.bal(l, v, n.v, remove(r, x));\n }\n }\n if (l === undefined) {\n return r;\n }\n if (r === undefined) {\n return l;\n }\n var kr = {\n contents: r.k\n };\n var vr = {\n contents: r.v\n };\n var r$1 = Belt_internalAVLtree.removeMinAuxWithRef(r, kr, vr);\n return Belt_internalAVLtree.bal(l, kr.contents, vr.contents, r$1);\n}\n\nfunction splitAux(x, n) {\n var v = n.k;\n var d = n.v;\n var l = n.l;\n var r = n.r;\n if (x === v) {\n return [\n l,\n Caml_option.some(d),\n r\n ];\n }\n if (x < v) {\n if (l === undefined) {\n return [\n undefined,\n undefined,\n n\n ];\n }\n var match = splitAux(x, l);\n return [\n match[0],\n match[1],\n Belt_internalAVLtree.join(match[2], v, d, r)\n ];\n }\n if (r === undefined) {\n return [\n n,\n undefined,\n undefined\n ];\n }\n var match$1 = splitAux(x, r);\n return [\n Belt_internalAVLtree.join(l, v, d, match$1[0]),\n match$1[1],\n match$1[2]\n ];\n}\n\nfunction split(x, n) {\n if (n !== undefined) {\n return splitAux(x, n);\n } else {\n return [\n undefined,\n undefined,\n undefined\n ];\n }\n}\n\nfunction mergeU(s1, s2, f) {\n if (s1 !== undefined) {\n if (s1.h >= (\n s2 !== undefined ? s2.h : 0\n )) {\n var v1 = s1.k;\n var d1 = s1.v;\n var l1 = s1.l;\n var r1 = s1.r;\n var match = split(v1, s2);\n return Belt_internalAVLtree.concatOrJoin(mergeU(l1, match[0], f), v1, f(v1, Caml_option.some(d1), match[1]), mergeU(r1, match[2], f));\n }\n \n } else if (s2 === undefined) {\n return ;\n }\n var v2 = s2.k;\n var d2 = s2.v;\n var l2 = s2.l;\n var r2 = s2.r;\n var match$1 = split(v2, s1);\n return Belt_internalAVLtree.concatOrJoin(mergeU(match$1[0], l2, f), v2, f(v2, match$1[1], Caml_option.some(d2)), mergeU(match$1[2], r2, f));\n}\n\nfunction merge(s1, s2, f) {\n return mergeU(s1, s2, Curry.__3(f));\n}\n\nfunction compareAux(_e1, _e2, vcmp) {\n while(true) {\n var e2 = _e2;\n var e1 = _e1;\n if (!e1) {\n return 0;\n }\n if (!e2) {\n return 0;\n }\n var h2 = e2.hd;\n var h1 = e1.hd;\n var c = Caml.string_compare(h1.k, h2.k);\n if (c !== 0) {\n return c;\n }\n var cx = vcmp(h1.v, h2.v);\n if (cx !== 0) {\n return cx;\n }\n _e2 = Belt_internalAVLtree.stackAllLeft(h2.r, e2.tl);\n _e1 = Belt_internalAVLtree.stackAllLeft(h1.r, e1.tl);\n continue ;\n };\n}\n\nfunction cmpU(s1, s2, cmp) {\n var len1 = Belt_internalAVLtree.size(s1);\n var len2 = Belt_internalAVLtree.size(s2);\n if (len1 === len2) {\n return compareAux(Belt_internalAVLtree.stackAllLeft(s1, /* [] */0), Belt_internalAVLtree.stackAllLeft(s2, /* [] */0), cmp);\n } else if (len1 < len2) {\n return -1;\n } else {\n return 1;\n }\n}\n\nfunction cmp(s1, s2, f) {\n return cmpU(s1, s2, Curry.__2(f));\n}\n\nfunction eqAux(_e1, _e2, eq) {\n while(true) {\n var e2 = _e2;\n var e1 = _e1;\n if (!e1) {\n return true;\n }\n if (!e2) {\n return true;\n }\n var h2 = e2.hd;\n var h1 = e1.hd;\n if (!(h1.k === h2.k && eq(h1.v, h2.v))) {\n return false;\n }\n _e2 = Belt_internalAVLtree.stackAllLeft(h2.r, e2.tl);\n _e1 = Belt_internalAVLtree.stackAllLeft(h1.r, e1.tl);\n continue ;\n };\n}\n\nfunction eqU(s1, s2, eq) {\n var len1 = Belt_internalAVLtree.size(s1);\n var len2 = Belt_internalAVLtree.size(s2);\n if (len1 === len2) {\n return eqAux(Belt_internalAVLtree.stackAllLeft(s1, /* [] */0), Belt_internalAVLtree.stackAllLeft(s2, /* [] */0), eq);\n } else {\n return false;\n }\n}\n\nfunction eq(s1, s2, f) {\n return eqU(s1, s2, Curry.__2(f));\n}\n\nfunction addMutate(t, x, data) {\n if (t === undefined) {\n return Belt_internalAVLtree.singleton(x, data);\n }\n var k = t.k;\n if (x === k) {\n t.k = x;\n t.v = data;\n return t;\n }\n var l = t.l;\n var r = t.r;\n if (x < k) {\n var ll = addMutate(l, x, data);\n t.l = ll;\n } else {\n t.r = addMutate(r, x, data);\n }\n return Belt_internalAVLtree.balMutate(t);\n}\n\nfunction fromArray(xs) {\n var len = xs.length;\n if (len === 0) {\n return ;\n }\n var next = Belt_SortArray.strictlySortedLengthU(xs, (function (param, param$1) {\n return param[0] < param$1[0];\n }));\n var result;\n if (next >= 0) {\n result = Belt_internalAVLtree.fromSortedArrayAux(xs, 0, next);\n } else {\n next = -next | 0;\n result = Belt_internalAVLtree.fromSortedArrayRevAux(xs, next - 1 | 0, next);\n }\n for(var i = next; i < len; ++i){\n var match = xs[i];\n result = addMutate(result, match[0], match[1]);\n }\n return result;\n}\n\nvar N;\n\nvar A;\n\nvar S;\n\nexport {\n N ,\n A ,\n S ,\n add ,\n get ,\n getUndefined ,\n getExn ,\n getWithDefault ,\n has ,\n remove ,\n splitAux ,\n split ,\n mergeU ,\n merge ,\n compareAux ,\n cmpU ,\n cmp ,\n eqAux ,\n eqU ,\n eq ,\n addMutate ,\n fromArray ,\n}\n/* No side effect */\n","\n\nimport * as Curry from \"./curry.js\";\nimport * as Caml_option from \"./caml_option.js\";\nimport * as Belt_internalAVLtree from \"./belt_internalAVLtree.js\";\nimport * as Belt_internalMapString from \"./belt_internalMapString.js\";\n\nfunction set(t, newK, newD) {\n if (t === undefined) {\n return Belt_internalAVLtree.singleton(newK, newD);\n }\n var k = t.k;\n if (newK === k) {\n return Belt_internalAVLtree.updateValue(t, newD);\n }\n var v = t.v;\n if (newK < k) {\n return Belt_internalAVLtree.bal(set(t.l, newK, newD), k, v, t.r);\n } else {\n return Belt_internalAVLtree.bal(t.l, k, v, set(t.r, newK, newD));\n }\n}\n\nfunction updateU(t, x, f) {\n if (t !== undefined) {\n var k = t.k;\n if (x === k) {\n var data = f(Caml_option.some(t.v));\n if (data !== undefined) {\n return Belt_internalAVLtree.updateValue(t, Caml_option.valFromOption(data));\n }\n var l = t.l;\n var r = t.r;\n if (l === undefined) {\n return r;\n }\n if (r === undefined) {\n return l;\n }\n var kr = {\n contents: r.k\n };\n var vr = {\n contents: r.v\n };\n var r$1 = Belt_internalAVLtree.removeMinAuxWithRef(r, kr, vr);\n return Belt_internalAVLtree.bal(l, kr.contents, vr.contents, r$1);\n }\n var v = t.v;\n var l$1 = t.l;\n var r$2 = t.r;\n if (x < k) {\n var ll = updateU(l$1, x, f);\n if (l$1 === ll) {\n return t;\n } else {\n return Belt_internalAVLtree.bal(ll, k, v, r$2);\n }\n }\n var rr = updateU(r$2, x, f);\n if (r$2 === rr) {\n return t;\n } else {\n return Belt_internalAVLtree.bal(l$1, k, v, rr);\n }\n }\n var data$1 = f(undefined);\n if (data$1 !== undefined) {\n return Belt_internalAVLtree.singleton(x, Caml_option.valFromOption(data$1));\n } else {\n return t;\n }\n}\n\nfunction update(t, x, f) {\n return updateU(t, x, Curry.__1(f));\n}\n\nfunction removeAux(n, x) {\n var v = n.k;\n var l = n.l;\n var r = n.r;\n if (x === v) {\n if (l === undefined) {\n return r;\n }\n if (r === undefined) {\n return l;\n }\n var kr = {\n contents: r.k\n };\n var vr = {\n contents: r.v\n };\n var r$1 = Belt_internalAVLtree.removeMinAuxWithRef(r, kr, vr);\n return Belt_internalAVLtree.bal(l, kr.contents, vr.contents, r$1);\n }\n if (x < v) {\n if (l === undefined) {\n return n;\n }\n var ll = removeAux(l, x);\n if (ll === l) {\n return n;\n } else {\n return Belt_internalAVLtree.bal(ll, v, n.v, r);\n }\n }\n if (r === undefined) {\n return n;\n }\n var rr = removeAux(r, x);\n return Belt_internalAVLtree.bal(l, v, n.v, rr);\n}\n\nfunction remove(n, x) {\n if (n !== undefined) {\n return removeAux(n, x);\n }\n \n}\n\nfunction removeMany(t, keys) {\n var len = keys.length;\n if (t !== undefined) {\n var _t = t;\n var _i = 0;\n while(true) {\n var i = _i;\n var t$1 = _t;\n if (i >= len) {\n return t$1;\n }\n var ele = keys[i];\n var u = removeAux(t$1, ele);\n if (u === undefined) {\n return u;\n }\n _i = i + 1 | 0;\n _t = u;\n continue ;\n };\n }\n \n}\n\nfunction mergeMany(h, arr) {\n var len = arr.length;\n var v = h;\n for(var i = 0; i < len; ++i){\n var match = arr[i];\n v = set(v, match[0], match[1]);\n }\n return v;\n}\n\nvar empty;\n\nvar isEmpty = Belt_internalAVLtree.isEmpty;\n\nvar has = Belt_internalMapString.has;\n\nvar cmpU = Belt_internalMapString.cmpU;\n\nvar cmp = Belt_internalMapString.cmp;\n\nvar eqU = Belt_internalMapString.eqU;\n\nvar eq = Belt_internalMapString.eq;\n\nvar findFirstByU = Belt_internalAVLtree.findFirstByU;\n\nvar findFirstBy = Belt_internalAVLtree.findFirstBy;\n\nvar forEachU = Belt_internalAVLtree.forEachU;\n\nvar forEach = Belt_internalAVLtree.forEach;\n\nvar reduceU = Belt_internalAVLtree.reduceU;\n\nvar reduce = Belt_internalAVLtree.reduce;\n\nvar everyU = Belt_internalAVLtree.everyU;\n\nvar every = Belt_internalAVLtree.every;\n\nvar someU = Belt_internalAVLtree.someU;\n\nvar some = Belt_internalAVLtree.some;\n\nvar size = Belt_internalAVLtree.size;\n\nvar toList = Belt_internalAVLtree.toList;\n\nvar toArray = Belt_internalAVLtree.toArray;\n\nvar fromArray = Belt_internalMapString.fromArray;\n\nvar keysToArray = Belt_internalAVLtree.keysToArray;\n\nvar valuesToArray = Belt_internalAVLtree.valuesToArray;\n\nvar minKey = Belt_internalAVLtree.minKey;\n\nvar minKeyUndefined = Belt_internalAVLtree.minKeyUndefined;\n\nvar maxKey = Belt_internalAVLtree.maxKey;\n\nvar maxKeyUndefined = Belt_internalAVLtree.maxKeyUndefined;\n\nvar minimum = Belt_internalAVLtree.minimum;\n\nvar minUndefined = Belt_internalAVLtree.minUndefined;\n\nvar maximum = Belt_internalAVLtree.maximum;\n\nvar maxUndefined = Belt_internalAVLtree.maxUndefined;\n\nvar get = Belt_internalMapString.get;\n\nvar getUndefined = Belt_internalMapString.getUndefined;\n\nvar getWithDefault = Belt_internalMapString.getWithDefault;\n\nvar getExn = Belt_internalMapString.getExn;\n\nvar checkInvariantInternal = Belt_internalAVLtree.checkInvariantInternal;\n\nvar mergeU = Belt_internalMapString.mergeU;\n\nvar merge = Belt_internalMapString.merge;\n\nvar keepU = Belt_internalAVLtree.keepSharedU;\n\nvar keep = Belt_internalAVLtree.keepShared;\n\nvar partitionU = Belt_internalAVLtree.partitionSharedU;\n\nvar partition = Belt_internalAVLtree.partitionShared;\n\nvar split = Belt_internalMapString.split;\n\nvar mapU = Belt_internalAVLtree.mapU;\n\nvar map = Belt_internalAVLtree.map;\n\nvar mapWithKeyU = Belt_internalAVLtree.mapWithKeyU;\n\nvar mapWithKey = Belt_internalAVLtree.mapWithKey;\n\nexport {\n empty ,\n isEmpty ,\n has ,\n cmpU ,\n cmp ,\n eqU ,\n eq ,\n findFirstByU ,\n findFirstBy ,\n forEachU ,\n forEach ,\n reduceU ,\n reduce ,\n everyU ,\n every ,\n someU ,\n some ,\n size ,\n toList ,\n toArray ,\n fromArray ,\n keysToArray ,\n valuesToArray ,\n minKey ,\n minKeyUndefined ,\n maxKey ,\n maxKeyUndefined ,\n minimum ,\n minUndefined ,\n maximum ,\n maxUndefined ,\n get ,\n getUndefined ,\n getWithDefault ,\n getExn ,\n checkInvariantInternal ,\n remove ,\n removeMany ,\n set ,\n updateU ,\n update ,\n mergeU ,\n merge ,\n mergeMany ,\n keepU ,\n keep ,\n partitionU ,\n partition ,\n split ,\n mapU ,\n map ,\n mapWithKeyU ,\n mapWithKey ,\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 CoursesCurriculum__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__ReactionButton\";\n\nfunction tr(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction CoursesCurriculum__ReactionButton(Props) {\n var currentUser = Props.currentUser;\n var reactionValue = Props.reactionValue;\n var reactionDetails = Props.reactionDetails;\n var addReactionCB = Props.addReactionCB;\n var removeReactionCB = Props.removeReactionCB;\n var match = React.useState(function () {\n return false;\n });\n var setIsHovered = match[1];\n var currentUserReacted = reactionDetails.userIds.includes(CoursesCurriculum__CurrentUser.id(currentUser));\n var onMouseEnter = function ($$event) {\n $$event.preventDefault();\n Curry._1(setIsHovered, (function (param) {\n return true;\n }));\n };\n var onMouseLeave = function ($$event) {\n $$event.preventDefault();\n Curry._1(setIsHovered, (function (param) {\n return false;\n }));\n };\n return React.createElement(\"div\", {\n className: \"flex shrink-0\",\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n }, React.createElement(\"button\", {\n className: \"rounded-full flex items-center space-x-1 relative px-1 md:px-2 py-0.5 border focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500 transition \\\" \" + (\n currentUserReacted ? \"bg-primary-100 border-primary-300\" : \"bg-gray-100 border-gray-300\"\n ) + \" hover:text-primary-500 hover:border-primary-500 hover:bg-gray-100 transition\",\n onClick: currentUserReacted ? Curry._1(removeReactionCB, reactionValue) : Curry._1(addReactionCB, reactionValue)\n }, React.createElement(\"span\", {\n className: \"text-xs\"\n }, reactionValue), React.createElement(\"span\", {\n className: \"text-xs md:text-sm\"\n }, String(reactionDetails.count))), match[0] ? React.createElement(\"div\", {\n className: \"modal absolute z-10 bg-gray-950 text-gray-400 border p-2 mt-9 rounded space-y-1\"\n }, reactionDetails.userNames.map(function (userName) {\n return React.createElement(\"div\", {\n key: userName,\n className: \"text-xs whitespace-nowrap font-medium\"\n }, userName);\n })) : null);\n}\n\nvar make = CoursesCurriculum__ReactionButton;\n\nexport {\n str ,\n tr ,\n make ,\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 Belt_Array from \"../../../../../node_modules/rescript/lib/es6/belt_Array.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 EmojiPicker from \"../../../shared/components/EmojiPicker.bs.js\";\nimport * as Js_promise2 from \"../../../../../node_modules/rescript/lib/es6/js_promise2.js\";\nimport * as GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as Belt_MapString from \"../../../../../node_modules/rescript/lib/es6/belt_MapString.js\";\nimport * as CoursesCurriculum__Reaction from \"../types/CoursesCurriculum__Reaction.bs.js\";\nimport * as CoursesCurriculum__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__ReactionButton from \"./CoursesCurriculum__ReactionButton.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__Reactions\";\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 CreateReactionMutation($reactionValue: String!, $reactionableId: String!, $reactionableType: String!) {\\ncreateReaction(reactionValue: $reactionValue, reactionableId: $reactionableId, reactionableType: $reactionableType) {\\nreaction {\\nid \\nreactionValue \\nreactionableId \\nreactionableType \\nuserName \\nuserId \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createReaction;\n var value$2 = value$1.reaction;\n var value$3 = value$2.reactionableId;\n return {\n createReaction: {\n reaction: {\n id: value$2.id,\n reactionValue: value$2.reactionValue,\n reactionableId: !(value$3 == null) ? value$3 : undefined,\n reactionableType: value$2.reactionableType,\n userName: value$2.userName,\n userId: value$2.userId\n }\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createReaction;\n var value$2 = value$1.reaction;\n var value$3 = value$2.userId;\n var value$4 = value$2.userName;\n var value$5 = value$2.reactionableType;\n var value$6 = value$2.reactionableId;\n var reactionableId = value$6 !== undefined ? value$6 : null;\n var value$7 = value$2.reactionValue;\n var value$8 = value$2.id;\n var reaction = {\n id: value$8,\n reactionValue: value$7,\n reactionableId: reactionableId,\n reactionableType: value$5,\n userName: value$4,\n userId: value$3\n };\n var createReaction = {\n reaction: reaction\n };\n return {\n createReaction: createReaction\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n reactionValue: inp.reactionValue,\n reactionableId: inp.reactionableId,\n reactionableType: inp.reactionableType\n };\n}\n\nfunction makeVariables(reactionValue, reactionableId, reactionableType, param) {\n return {\n reactionValue: reactionValue,\n reactionableId: reactionableId,\n reactionableType: reactionableType\n };\n}\n\nvar CreateReactionMutation_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 CreateReactionMutation_Graphql_error = include.Graphql_error;\n\nvar CreateReactionMutation_decodeNotification = include.decodeNotification;\n\nvar CreateReactionMutation_decodeObject = include.decodeObject;\n\nvar CreateReactionMutation_decodeNotifications = include.decodeNotifications;\n\nvar CreateReactionMutation_decodeErrors = include.decodeErrors;\n\nvar CreateReactionMutation_flashNotifications = include.flashNotifications;\n\nvar CreateReactionMutation_sendQuery = include.sendQuery;\n\nvar CreateReactionMutation_query = include.query;\n\nvar CreateReactionMutation_fetch = include.$$fetch;\n\nvar CreateReactionMutation = {\n CreateReactionMutation_inner: CreateReactionMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateReactionMutation_Graphql_error,\n decodeNotification: CreateReactionMutation_decodeNotification,\n decodeObject: CreateReactionMutation_decodeObject,\n decodeNotifications: CreateReactionMutation_decodeNotifications,\n decodeErrors: CreateReactionMutation_decodeErrors,\n flashNotifications: CreateReactionMutation_flashNotifications,\n sendQuery: CreateReactionMutation_sendQuery,\n query: CreateReactionMutation_query,\n $$fetch: CreateReactionMutation_fetch,\n make: make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation RemoveReactionMutation($reactionId: String!) {\\nremoveReaction(reactionId: $reactionId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.removeReaction;\n return {\n removeReaction: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.removeReaction;\n var value$2 = value$1.success;\n var removeReaction = {\n success: value$2\n };\n return {\n removeReaction: removeReaction\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n reactionId: inp.reactionId\n };\n}\n\nfunction makeVariables$1(reactionId, param) {\n return {\n reactionId: reactionId\n };\n}\n\nvar RemoveReactionMutation_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 RemoveReactionMutation_Graphql_error = include$1.Graphql_error;\n\nvar RemoveReactionMutation_decodeNotification = include$1.decodeNotification;\n\nvar RemoveReactionMutation_decodeObject = include$1.decodeObject;\n\nvar RemoveReactionMutation_decodeNotifications = include$1.decodeNotifications;\n\nvar RemoveReactionMutation_decodeErrors = include$1.decodeErrors;\n\nvar RemoveReactionMutation_flashNotifications = include$1.flashNotifications;\n\nvar RemoveReactionMutation_sendQuery = include$1.sendQuery;\n\nvar RemoveReactionMutation_query = include$1.query;\n\nvar RemoveReactionMutation_make = include$1.make;\n\nvar RemoveReactionMutation = {\n RemoveReactionMutation_inner: RemoveReactionMutation_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: RemoveReactionMutation_Graphql_error,\n decodeNotification: RemoveReactionMutation_decodeNotification,\n decodeObject: RemoveReactionMutation_decodeObject,\n decodeNotifications: RemoveReactionMutation_decodeNotifications,\n decodeErrors: RemoveReactionMutation_decodeErrors,\n flashNotifications: RemoveReactionMutation_flashNotifications,\n sendQuery: RemoveReactionMutation_sendQuery,\n query: RemoveReactionMutation_query,\n $$fetch: $$fetch,\n make: RemoveReactionMutation_make\n};\n\nfunction groupByReaction(reactions) {\n return Belt_Array.reduce(reactions, undefined, (function (accumulator, currentItem) {\n var reactionValue = CoursesCurriculum__Reaction.reactionValue(currentItem);\n var userName = CoursesCurriculum__Reaction.userName(currentItem);\n var userId = CoursesCurriculum__Reaction.userId(currentItem);\n var reactionDetails = Belt_MapString.get(accumulator, reactionValue);\n if (reactionDetails === undefined) {\n return Belt_MapString.set(accumulator, reactionValue, {\n userNames: [userName],\n userIds: [userId],\n count: 1\n });\n }\n var reactionDetails$1 = Caml_option.valFromOption(reactionDetails);\n var newCount = reactionDetails$1.count + 1 | 0;\n return Belt_MapString.set(accumulator, reactionValue, {\n userNames: [userName].concat(reactionDetails$1.userNames),\n userIds: [userId].concat(reactionDetails$1.userIds),\n count: newCount\n });\n }));\n}\n\nfunction CoursesCurriculum__Reactions(Props) {\n var currentUser = Props.currentUser;\n var reactionableType = Props.reactionableType;\n var reactionableId = Props.reactionableId;\n var reactions = Props.reactions;\n var match = React.useState(function () {\n return reactions;\n });\n var setReactions = match[1];\n var reactions$1 = match[0];\n var handleCreateReaction = function (reactionValue) {\n Js_promise.then_((function (response) {\n var reaction = response.createReaction.reaction;\n if (reaction !== undefined) {\n var existingReaction = reactions$1.find(function (existingReaction) {\n return CoursesCurriculum__Reaction.id(existingReaction) === CoursesCurriculum__Reaction.id(reaction);\n });\n if (Belt_Option.isNone(existingReaction === undefined ? undefined : Caml_option.some(existingReaction))) {\n Curry._1(setReactions, (function (reactions) {\n return [reaction].concat(reactions);\n }));\n }\n \n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n reactionValue: reactionValue,\n reactionableId: reactionableId,\n reactionableType: reactionableType\n }));\n };\n var removeReactionCB = function (reactionValue, $$event) {\n $$event.preventDefault();\n var reactionId = Belt_Array.reduce(reactions$1, undefined, (function (acc, reaction) {\n if (acc !== undefined) {\n return acc;\n } else if (CoursesCurriculum__Reaction.reactionValue(reaction) === reactionValue && CoursesCurriculum__Reaction.userId(reaction) === CoursesCurriculum__CurrentUser.id(currentUser)) {\n return CoursesCurriculum__Reaction.id(reaction);\n } else {\n return ;\n }\n }));\n if (reactionId !== undefined) {\n Js_promise2.then(Curry._3($$fetch, undefined, undefined, {\n reactionId: reactionId\n }), (function (response) {\n if (response.removeReaction.success) {\n Curry._1(setReactions, (function (reactions) {\n return reactions.filter(function (reaction) {\n return CoursesCurriculum__Reaction.id(reaction) !== reactionId;\n });\n }));\n }\n return Promise.resolve(undefined);\n }));\n return ;\n }\n \n };\n var addReactionCB = function (reactionValue, $$event) {\n $$event.preventDefault();\n handleCreateReaction(reactionValue);\n };\n var handleAddNewEmoji = function (e) {\n handleCreateReaction(e.native);\n };\n var aggregatedReactions = groupByReaction(reactions$1);\n return React.createElement(\"div\", {\n className: \"flex md:flex-row flex-wrap gap-1.5\"\n }, Belt_Array.map(Belt_MapString.toArray(aggregatedReactions), (function (param) {\n var reactionValue = param[0];\n return React.createElement(CoursesCurriculum__ReactionButton.make, {\n currentUser: currentUser,\n reactionValue: reactionValue,\n reactionDetails: param[1],\n addReactionCB: addReactionCB,\n removeReactionCB: removeReactionCB,\n key: reactionValue\n });\n })), React.createElement(EmojiPicker.make, {\n className: \"relative z-[9] px-1 md:px-2 py-0.5 md:pt-1 md:pb-0.5 flex items-center justify-center bg-white border border-gray-300 rounded-full text-gray-600 hover:text-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500 transition text-base md:text-lg\",\n title: tr(undefined, undefined, \"emoji_picker\"),\n onChange: handleAddNewEmoji\n }));\n}\n\nvar make$1 = CoursesCurriculum__Reactions;\n\nexport {\n str ,\n tr ,\n CreateReactionMutation ,\n RemoveReactionMutation ,\n groupByReaction ,\n make$1 as make,\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 Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Belt_Array from \"../../../../../node_modules/rescript/lib/es6/belt_Array.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__ModerationReport from \"../types/CoursesCurriculum__ModerationReport.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__ModerationReportButton\";\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 CreateModerationReportMutation($reason: String!, $reportableId: String!, $reportableType: String!) {\\ncreateModerationReport(reason: $reason, reportableId: $reportableId, reportableType: $reportableType) {\\nmoderationReport {\\nid \\nreason \\nreportableId \\nreportableType \\nuserId \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createModerationReport;\n var value$2 = value$1.moderationReport;\n var value$3 = value$2.reportableId;\n return {\n createModerationReport: {\n moderationReport: {\n id: value$2.id,\n reason: value$2.reason,\n reportableId: !(value$3 == null) ? value$3 : undefined,\n reportableType: value$2.reportableType,\n userId: value$2.userId\n }\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createModerationReport;\n var value$2 = value$1.moderationReport;\n var value$3 = value$2.userId;\n var value$4 = value$2.reportableType;\n var value$5 = value$2.reportableId;\n var reportableId = value$5 !== undefined ? value$5 : null;\n var value$6 = value$2.reason;\n var value$7 = value$2.id;\n var moderationReport = {\n id: value$7,\n reason: value$6,\n reportableId: reportableId,\n reportableType: value$4,\n userId: value$3\n };\n var createModerationReport = {\n moderationReport: moderationReport\n };\n return {\n createModerationReport: createModerationReport\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n reason: inp.reason,\n reportableId: inp.reportableId,\n reportableType: inp.reportableType\n };\n}\n\nfunction makeVariables(reason, reportableId, reportableType, param) {\n return {\n reason: reason,\n reportableId: reportableId,\n reportableType: reportableType\n };\n}\n\nvar CreateModerationReportMutation_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 CreateModerationReportMutation_Graphql_error = include.Graphql_error;\n\nvar CreateModerationReportMutation_decodeNotification = include.decodeNotification;\n\nvar CreateModerationReportMutation_decodeObject = include.decodeObject;\n\nvar CreateModerationReportMutation_decodeNotifications = include.decodeNotifications;\n\nvar CreateModerationReportMutation_decodeErrors = include.decodeErrors;\n\nvar CreateModerationReportMutation_flashNotifications = include.flashNotifications;\n\nvar CreateModerationReportMutation_sendQuery = include.sendQuery;\n\nvar CreateModerationReportMutation_query = include.query;\n\nvar CreateModerationReportMutation_fetch = include.$$fetch;\n\nvar CreateModerationReportMutation = {\n CreateModerationReportMutation_inner: CreateModerationReportMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateModerationReportMutation_Graphql_error,\n decodeNotification: CreateModerationReportMutation_decodeNotification,\n decodeObject: CreateModerationReportMutation_decodeObject,\n decodeNotifications: CreateModerationReportMutation_decodeNotifications,\n decodeErrors: CreateModerationReportMutation_decodeErrors,\n flashNotifications: CreateModerationReportMutation_flashNotifications,\n sendQuery: CreateModerationReportMutation_sendQuery,\n query: CreateModerationReportMutation_query,\n $$fetch: CreateModerationReportMutation_fetch,\n make: make\n};\n\nfunction createModerationReport(reportableType, reportableId, reason, setModerationReports, setShowReport, setReportReason, $$event) {\n $$event.preventDefault();\n Js_promise.then_((function (response) {\n var moderationReport = response.createModerationReport.moderationReport;\n if (moderationReport !== undefined) {\n var moderationReport$1 = Caml_option.valFromOption(moderationReport);\n Curry._1(setModerationReports, (function (moderationReports) {\n return [moderationReport$1].concat(moderationReports);\n }));\n Curry._1(setShowReport, (function (param) {\n return false;\n }));\n Curry._1(setReportReason, (function (param) {\n return \"\";\n }));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n reason: reason,\n reportableId: reportableId,\n reportableType: reportableType\n }));\n}\n\nfunction updateReportReason(setReportReason, $$event) {\n $$event.preventDefault();\n return Curry._1(setReportReason, $$event.currentTarget.value);\n}\n\nfunction updateShowReport(setShowReport, showReport, $$event) {\n $$event.preventDefault();\n return Curry._1(setShowReport, (function (param) {\n return showReport;\n }));\n}\n\nfunction CoursesCurriculum__ModerationReportButton(Props) {\n var currentUser = Props.currentUser;\n var moderationReports = Props.moderationReports;\n var reportableId = Props.reportableId;\n var reportableType = Props.reportableType;\n var match = React.useState(function () {\n return moderationReports;\n });\n var setModerationReports = match[1];\n var match$1 = React.useState(function () {\n return false;\n });\n var setShowReport = match$1[1];\n var match$2 = React.useState(function () {\n return \"\";\n });\n var setReportReason = match$2[1];\n var reportReason = match$2[0];\n var reported = Belt_Array.reduce(match[0], false, (function (acc, report) {\n if (acc) {\n return true;\n } else {\n return CoursesCurriculum__ModerationReport.userId(report) === CoursesCurriculum__CurrentUser.id(currentUser);\n }\n }));\n return React.createElement(\"div\", {\n className: \"relative\"\n }, match$1[0] ? React.createElement(\"dialog\", {\n className: \"fixed inset-0 z-[999] grid place-items-center w-full h-full bg-gray-950/75 dark:bg-gray-50/75 backdrop-blur-sm ease-in duration-300\",\n role: \"dialog\"\n }, React.createElement(\"div\", {\n className: \"max-w-xl w-full mx-auto p-4 bg-white rounded-lg shadow-lg\"\n }, React.createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, React.createElement(\"h2\", {\n className: \"font-semibold leading-tight text-gray-900\"\n }, tr(undefined, undefined, \"report\")), React.createElement(\"button\", {\n className: \"w-6 h-6 flex items-center justify-center rounded-md text-gray-700 bg-gray-100 hover:bg-gray-200 hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-focusColor-500 focus:ring-offset-2 transition\",\n onClick: (function (param) {\n return updateShowReport(setShowReport, false, param);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-light text-xl if-fw\"\n }), React.createElement(\"span\", {\n className: \"sr-only\"\n }, tr(undefined, undefined, \"close\")))), React.createElement(\"textarea\", {\n className: \"w-full text-sm text-gray-900 p-2 border rounded-md mt-4\",\n id: \"report_reason-\" + reportableId,\n autoFocus: true,\n placeholder: tr(undefined, undefined, \"share_reason\"),\n type: \"text\",\n value: reportReason,\n onChange: (function (param) {\n return updateReportReason(setReportReason, param);\n })\n }), React.createElement(\"div\", {\n className: \"mt-3 sm:mt-4 sm:flex\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary\",\n disabled: reportReason === \"\",\n onClick: (function (param) {\n return createModerationReport(reportableType, reportableId, reportReason, setModerationReports, setShowReport, setReportReason, param);\n })\n }, tr(undefined, undefined, \"report\")), React.createElement(\"button\", {\n className: \"mt-3 inline-flex w-full justify-center rounded bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:ml-3 sm:mt-0 sm:w-auto focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500\",\n onClick: (function (param) {\n return updateShowReport(setShowReport, false, param);\n })\n }, tr(undefined, undefined, \"cancel\"))))) : null, reported ? React.createElement(\"div\", {\n className: \"flex items-center justify-center p-1 text-sm text-red-600 whitespace-nowrap\"\n }, React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-flag-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, tr(undefined, undefined, \"reported\")))) : React.createElement(\"button\", {\n className: \"curriculum-moderation__report-button md:hidden md:group-hover:flex md:group-focus-within:flex items-center justify-center cursor-pointer p-1 text-sm border rounded-md text-gray-700 bg-gray-100 hover:text-gray-800 hover:bg-gray-50 whitespace-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500 transition\",\n disabled: reported,\n onClick: (function (param) {\n return updateShowReport(setShowReport, true, param);\n })\n }, React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-flag-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, tr(undefined, undefined, \"report\")))));\n}\n\nvar make$1 = CoursesCurriculum__ModerationReportButton;\n\nexport {\n str ,\n tr ,\n CreateModerationReportMutation ,\n createModerationReport ,\n updateReportReason ,\n updateShowReport ,\n make$1 as make,\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 Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as CoursesCurriculum__User from \"../types/CoursesCurriculum__User.bs.js\";\nimport * as CoursesCurriculum__Reactions from \"./CoursesCurriculum__Reactions.bs.js\";\nimport * as CoursesCurriculum__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__SubmissionComment from \"../types/CoursesCurriculum__SubmissionComment.bs.js\";\nimport * as CoursesCurriculum__ModerationReportButton from \"./CoursesCurriculum__ModerationReportButton.bs.js\";\n\nimport \"./CoursesCurriculum__SubmissionCommentShow.css\";\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__SubmissionCommentShow\";\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 HideSubmissionCommentMutation($submissionCommentId: String!, $hide: Boolean!) {\\nhideSubmissionComment(submissionCommentId: $submissionCommentId, hide: $hide) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.hideSubmissionComment;\n return {\n hideSubmissionComment: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.hideSubmissionComment;\n var value$2 = value$1.success;\n var hideSubmissionComment = {\n success: value$2\n };\n return {\n hideSubmissionComment: hideSubmissionComment\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n submissionCommentId: inp.submissionCommentId,\n hide: inp.hide\n };\n}\n\nfunction makeVariables(submissionCommentId, hide, param) {\n return {\n submissionCommentId: submissionCommentId,\n hide: hide\n };\n}\n\nvar HideSubmissionCommentMutation_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 HideSubmissionCommentMutation_Graphql_error = include.Graphql_error;\n\nvar HideSubmissionCommentMutation_decodeNotification = include.decodeNotification;\n\nvar HideSubmissionCommentMutation_decodeObject = include.decodeObject;\n\nvar HideSubmissionCommentMutation_decodeNotifications = include.decodeNotifications;\n\nvar HideSubmissionCommentMutation_decodeErrors = include.decodeErrors;\n\nvar HideSubmissionCommentMutation_flashNotifications = include.flashNotifications;\n\nvar HideSubmissionCommentMutation_sendQuery = include.sendQuery;\n\nvar HideSubmissionCommentMutation_query = include.query;\n\nvar HideSubmissionCommentMutation_fetch = include.$$fetch;\n\nvar HideSubmissionCommentMutation = {\n HideSubmissionCommentMutation_inner: HideSubmissionCommentMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: HideSubmissionCommentMutation_Graphql_error,\n decodeNotification: HideSubmissionCommentMutation_decodeNotification,\n decodeObject: HideSubmissionCommentMutation_decodeObject,\n decodeNotifications: HideSubmissionCommentMutation_decodeNotifications,\n decodeErrors: HideSubmissionCommentMutation_decodeErrors,\n flashNotifications: HideSubmissionCommentMutation_flashNotifications,\n sendQuery: HideSubmissionCommentMutation_sendQuery,\n query: HideSubmissionCommentMutation_query,\n $$fetch: HideSubmissionCommentMutation_fetch,\n make: make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation ArchiveSubmissionCommentMutation($submissionCommentId: String!) {\\narchiveSubmissionComment(submissionCommentId: $submissionCommentId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.archiveSubmissionComment;\n return {\n archiveSubmissionComment: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.archiveSubmissionComment;\n var value$2 = value$1.success;\n var archiveSubmissionComment = {\n success: value$2\n };\n return {\n archiveSubmissionComment: archiveSubmissionComment\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n submissionCommentId: inp.submissionCommentId\n };\n}\n\nfunction makeVariables$1(submissionCommentId, param) {\n return {\n submissionCommentId: submissionCommentId\n };\n}\n\nvar ArchiveSubmissionCommentMutation_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 ArchiveSubmissionCommentMutation_Graphql_error = include$1.Graphql_error;\n\nvar ArchiveSubmissionCommentMutation_decodeNotification = include$1.decodeNotification;\n\nvar ArchiveSubmissionCommentMutation_decodeObject = include$1.decodeObject;\n\nvar ArchiveSubmissionCommentMutation_decodeNotifications = include$1.decodeNotifications;\n\nvar ArchiveSubmissionCommentMutation_decodeErrors = include$1.decodeErrors;\n\nvar ArchiveSubmissionCommentMutation_flashNotifications = include$1.flashNotifications;\n\nvar ArchiveSubmissionCommentMutation_sendQuery = include$1.sendQuery;\n\nvar ArchiveSubmissionCommentMutation_query = include$1.query;\n\nvar ArchiveSubmissionCommentMutation_fetch = include$1.$$fetch;\n\nvar ArchiveSubmissionCommentMutation = {\n ArchiveSubmissionCommentMutation_inner: ArchiveSubmissionCommentMutation_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: ArchiveSubmissionCommentMutation_Graphql_error,\n decodeNotification: ArchiveSubmissionCommentMutation_decodeNotification,\n decodeObject: ArchiveSubmissionCommentMutation_decodeObject,\n decodeNotifications: ArchiveSubmissionCommentMutation_decodeNotifications,\n decodeErrors: ArchiveSubmissionCommentMutation_decodeErrors,\n flashNotifications: ArchiveSubmissionCommentMutation_flashNotifications,\n sendQuery: ArchiveSubmissionCommentMutation_sendQuery,\n query: ArchiveSubmissionCommentMutation_query,\n $$fetch: ArchiveSubmissionCommentMutation_fetch,\n make: make$1\n};\n\nfunction hideComment(submissionCommentId, hide, setCommentHidden, $$event) {\n $$event.preventDefault();\n Js_promise.then_((function (response) {\n if (response.hideSubmissionComment.success) {\n Curry._1(setCommentHidden, (function (param) {\n return hide;\n }));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n submissionCommentId: submissionCommentId,\n hide: hide\n }));\n}\n\nfunction archiveComment(submissionCommentId, setShowConfirmDelete, archiveCommentCB, $$event) {\n $$event.preventDefault();\n Curry._1(setShowConfirmDelete, (function (param) {\n return false;\n }));\n Js_promise.then_((function (response) {\n if (response.archiveSubmissionComment.success) {\n Curry._1(archiveCommentCB, submissionCommentId);\n }\n return Promise.resolve(undefined);\n }), Curry._3(make$1, undefined, undefined, {\n submissionCommentId: submissionCommentId\n }));\n}\n\nfunction updateShowConfirmDelete(setShowConfirmDelete, showConfirmDelete, $$event) {\n $$event.preventDefault();\n return Curry._1(setShowConfirmDelete, (function (param) {\n return showConfirmDelete;\n }));\n}\n\nfunction CoursesCurriculum__SubmissionCommentShow(Props) {\n var currentUser = Props.currentUser;\n var comment = Props.comment;\n var archiveCommentCB = Props.archiveCommentCB;\n var match = React.useState(function () {\n return Belt_Option.isSome(CoursesCurriculum__SubmissionComment.hiddenAt(comment));\n });\n var setCommentHidden = match[1];\n var commentHidden = match[0];\n var match$1 = React.useState(function () {\n return false;\n });\n var setShowConfirmDelete = match$1[1];\n var isModerator = CoursesCurriculum__CurrentUser.isModerator(currentUser);\n var userName = CoursesCurriculum__User.name(CoursesCurriculum__SubmissionComment.user(comment));\n var tmp;\n if (isModerator) {\n var partial_arg = !commentHidden;\n var partial_arg$1 = CoursesCurriculum__SubmissionComment.id(comment);\n tmp = React.createElement(\"div\", {\n className: \"relative z-[11]\"\n }, React.createElement(\"button\", {\n className: \"md:hidden md:group-hover:flex md:group-focus-within:flex md:space-x-1 items-center justify-center cursor-pointer p-1 text-sm border rounded-md text-gray-700 bg-gray-100 hover:text-gray-800 hover:bg-gray-50 whitespace-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-600 transition\",\n title: commentHidden ? \"Unhide Comment\" : \"Hide Comment\",\n onClick: (function (param) {\n return hideComment(partial_arg$1, partial_arg, setCommentHidden, param);\n })\n }, commentHidden ? React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-eye-closed-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, tr(undefined, undefined, \"unhide\"))) : React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-eye-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, tr(undefined, undefined, \"hide\")))));\n } else {\n tmp = null;\n }\n var commentDisplay = React.createElement(\"div\", {\n \"aria-label\": \"comment-\" + CoursesCurriculum__SubmissionComment.id(comment),\n className: \"relative mt-4 group curriculum-submission__comment focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500\",\n tabIndex: 0\n }, React.createElement(\"div\", {\n className: commentHidden ? \"relative curriculum__submission-comment-hidden rounded-b-xl\" : \"flex-1\"\n }, React.createElement(\"div\", {\n className: \"flex flex-row items-center justify-between\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex gap-3\"\n }, React.createElement(\"div\", {\n className: \"submission-comments__line flex justify-end align-start absolute h-full -left-8 -ml-[0.5px] bottom-1 w-8\"\n }, React.createElement(\"div\", {\n className: \"h-6 border-b cursor-pointer w-7 border-l border-gray-300 rounded-bl-3xl\"\n })), React.createElement(\"div\", {\n className: \"w-8 h-8 border bg-gray-200 rounded-full flex items-center justify-center\"\n }, CoursesCurriculum__User.avatar(CoursesCurriculum__SubmissionComment.user(comment))), React.createElement(\"div\", {\n className: \"flex flex-col flex-wrap\"\n }, React.createElement(\"p\", {\n className: \"font-semibold text-xs leading-tight block md:inline-flex\"\n }, userName), React.createElement(\"p\", {\n className: \"text-xs text-gray-600 leading-tight pt-1\",\n title: CoursesCurriculum__SubmissionComment.createdAtPretty(comment)\n }, CoursesCurriculum__SubmissionComment.createdAtPretty(comment))))), React.createElement(\"div\", {\n className: \"flex space-x-2 relative\"\n }, tmp, CoursesCurriculum__CurrentUser.id(currentUser) === CoursesCurriculum__SubmissionComment.userId(comment) ? React.createElement(\"div\", {\n className: \"md:hidden md:group-hover:flex relative z-[11]\"\n }, React.createElement(\"button\", {\n className: \"md:hidden md:group-hover:flex md:group-focus-within:flex md:space-x-1 items-center justify-center cursor-pointer p-1 text-sm border rounded-md text-gray-700 bg-gray-100 hover:text-gray-800 hover:bg-gray-50 whitespace-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-600 transition\",\n onClick: (function (param) {\n return updateShowConfirmDelete(setShowConfirmDelete, true, param);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-trash-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, tr(undefined, undefined, \"delete\")))) : React.createElement(\"div\", {\n className: \"relative z-[13]\"\n }, React.createElement(CoursesCurriculum__ModerationReportButton.make, {\n currentUser: currentUser,\n moderationReports: CoursesCurriculum__SubmissionComment.moderationReports(comment),\n reportableId: CoursesCurriculum__SubmissionComment.id(comment),\n reportableType: \"SubmissionComment\"\n })))), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__SubmissionComment.comment(comment),\n className: \"text-sm ms-11 mt-2\",\n profile: /* Permissive */0\n }), React.createElement(\"div\", {\n className: \"ms-11\"\n }, React.createElement(CoursesCurriculum__Reactions.make, {\n currentUser: currentUser,\n reactionableType: \"SubmissionComment\",\n reactionableId: CoursesCurriculum__SubmissionComment.id(comment),\n reactions: CoursesCurriculum__SubmissionComment.reactions(comment)\n }))), commentHidden ? React.createElement(\"div\", {\n className: \"absolute -translate-x-1/2 left-1/2 z-[10] flex justify-end mx-auto bottom-px\"\n }, React.createElement(\"p\", {\n className: \"px-2 py-1 bg-white/20 border border-gray-300 border-b-0 whitespace-nowrap rounded-t-lg text-xs leading-tight italic text-gray-500\"\n }, tr(undefined, undefined, \"hidden\"))) : null);\n var tmp$1;\n if (match$1[0]) {\n var partial_arg$2 = CoursesCurriculum__SubmissionComment.id(comment);\n tmp$1 = React.createElement(\"dialog\", {\n className: \"fixed inset-0 z-[999] grid place-items-center w-full h-full bg-gray-950/75 dark:bg-gray-50/75 backdrop-blur-sm ease-in duration-300\",\n role: \"dialog\"\n }, React.createElement(\"div\", {\n className: \"max-w-xl mx-auto relative p-4 bg-white rounded-lg shadow-lg\"\n }, React.createElement(\"div\", {\n className: \"sm:flex sm:items-start\"\n }, React.createElement(\"div\", {\n className: \"mx-auto flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\"\n }, React.createElement(\"svg\", {\n \"aria-hidden\": true,\n className: \"h-6 w-6 text-red-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n viewBox: \"0 0 24 24\"\n }, React.createElement(\"path\", {\n d: \"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }))), React.createElement(\"div\", {\n className: \"mt-3 text-center sm:ml-4 sm:mt-0 sm:text-left\"\n }, React.createElement(\"h3\", {\n className: \"text-base font-semibold leading-6 text-gray-900\",\n id: \"modal-title\"\n }, tr(undefined, undefined, \"delete_comment\")), React.createElement(\"div\", {\n className: \"mt-2\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-gray-500\"\n }, tr(undefined, undefined, \"delete_confirm\"))), React.createElement(\"div\", {\n className: \"absolute right-0 top-0 hidden pr-4 pt-4 sm:block\"\n }, React.createElement(\"button\", {\n className: \"w-6 h-6 flex items-center justify-center rounded-md text-gray-700 bg-gray-100 hover:bg-gray-200 hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition\",\n autoFocus: true,\n onClick: (function (param) {\n return updateShowConfirmDelete(setShowConfirmDelete, false, param);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-light text-xl if-fw\"\n }), React.createElement(\"span\", {\n className: \"sr-only\"\n }, tr(undefined, undefined, \"close\")))))), React.createElement(\"div\", {\n className: \"mt-5 sm:ml-10 sm:mt-4 sm:flex sm:pl-4\"\n }, React.createElement(\"button\", {\n className: \"inline-flex w-full justify-center rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 sm:w-auto\",\n onClick: (function (param) {\n return archiveComment(partial_arg$2, setShowConfirmDelete, archiveCommentCB, param);\n })\n }, tr(undefined, undefined, \"delete\")), React.createElement(\"button\", {\n className: \"mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:ml-3 sm:mt-0 sm:w-auto\",\n onClick: (function (param) {\n return updateShowConfirmDelete(setShowConfirmDelete, false, param);\n })\n }, tr(undefined, undefined, \"cancel\")))));\n } else {\n tmp$1 = null;\n }\n return React.createElement(\"div\", {\n id: \"comment-\" + CoursesCurriculum__SubmissionComment.id(comment)\n }, tmp$1, commentDisplay);\n}\n\nvar make$2 = CoursesCurriculum__SubmissionCommentShow;\n\nexport {\n str ,\n tr ,\n HideSubmissionCommentMutation ,\n ArchiveSubmissionCommentMutation ,\n hideComment ,\n archiveComment ,\n updateShowConfirmDelete ,\n make$2 as make,\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 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__SubmissionComment from \"../types/CoursesCurriculum__SubmissionComment.bs.js\";\nimport * as CoursesCurriculum__SubmissionCommentShow from \"./CoursesCurriculum__SubmissionCommentShow.bs.js\";\n\nimport \"./CoursesCurriculum__SubmissionComments.css\";\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__SubmissionComments\";\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 CreateSubmissionCommentMutation($comment: String!, $submissionId: String!) {\\ncreateSubmissionComment(comment: $comment, submissionId: $submissionId) {\\ncomment {\\nid \\nuserId \\ncomment \\nsubmissionId \\nuser {\\nid \\nname \\ntitle \\navatarUrl \\n}\\n\\ncreatedAt \\nreactions {\\nid \\nreactionableId \\nreactionValue \\nreactionableType \\nuserName \\nupdatedAt \\n}\\n\\nmoderationReports {\\nid \\nuserId \\nreportableId \\nreason \\nreportableType \\n}\\n\\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createSubmissionComment;\n var value$2 = value$1.comment;\n var value$3 = value$2.user;\n var value$4 = value$3.avatarUrl;\n var value$5 = value$2.reactions;\n var value$6 = value$2.moderationReports;\n return {\n createSubmissionComment: {\n comment: {\n id: value$2.id,\n userId: value$2.userId,\n comment: value$2.comment,\n submissionId: value$2.submissionId,\n user: {\n id: value$3.id,\n name: value$3.name,\n title: value$3.title,\n avatarUrl: !(value$4 == null) ? value$4 : undefined\n },\n createdAt: value$2.createdAt,\n reactions: Js_array.map((function (value) {\n var value$1 = value.reactionableId;\n return {\n id: value.id,\n reactionableId: !(value$1 == null) ? value$1 : undefined,\n reactionValue: value.reactionValue,\n reactionableType: value.reactionableType,\n userName: value.userName,\n updatedAt: value.updatedAt\n };\n }), value$5),\n moderationReports: Js_array.map((function (value) {\n var value$1 = value.reportableId;\n return {\n id: value.id,\n userId: value.userId,\n reportableId: !(value$1 == null) ? value$1 : undefined,\n reason: value.reason,\n reportableType: value.reportableType\n };\n }), value$6)\n }\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createSubmissionComment;\n var value$2 = value$1.comment;\n var value$3 = value$2.moderationReports;\n var moderationReports = Js_array.map((function (value) {\n var value$1 = value.reportableType;\n var value$2 = value.reason;\n var value$3 = value.reportableId;\n var reportableId = value$3 !== undefined ? value$3 : null;\n var value$4 = value.userId;\n var value$5 = value.id;\n return {\n id: value$5,\n userId: value$4,\n reportableId: reportableId,\n reason: value$2,\n reportableType: value$1\n };\n }), value$3);\n var value$4 = value$2.reactions;\n var reactions = Js_array.map((function (value) {\n var value$1 = value.updatedAt;\n var value$2 = value.userName;\n var value$3 = value.reactionableType;\n var value$4 = value.reactionValue;\n var value$5 = value.reactionableId;\n var reactionableId = value$5 !== undefined ? value$5 : null;\n var value$6 = value.id;\n return {\n id: value$6,\n reactionableId: reactionableId,\n reactionValue: value$4,\n reactionableType: value$3,\n userName: value$2,\n updatedAt: value$1\n };\n }), value$4);\n var value$5 = value$2.createdAt;\n var value$6 = value$2.user;\n var value$7 = value$6.avatarUrl;\n var avatarUrl = value$7 !== undefined ? value$7 : null;\n var value$8 = value$6.title;\n var value$9 = value$6.name;\n var value$10 = value$6.id;\n var user = {\n id: value$10,\n name: value$9,\n title: value$8,\n avatarUrl: avatarUrl\n };\n var value$11 = value$2.submissionId;\n var value$12 = value$2.comment;\n var value$13 = value$2.userId;\n var value$14 = value$2.id;\n var comment = {\n id: value$14,\n userId: value$13,\n comment: value$12,\n submissionId: value$11,\n user: user,\n createdAt: value$5,\n reactions: reactions,\n moderationReports: moderationReports\n };\n var createSubmissionComment = {\n comment: comment\n };\n return {\n createSubmissionComment: createSubmissionComment\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n comment: inp.comment,\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables(comment, submissionId, param) {\n return {\n comment: comment,\n submissionId: submissionId\n };\n}\n\nvar CreateSubmissionCommentMutation_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 CreateSubmissionCommentMutation_Graphql_error = include.Graphql_error;\n\nvar CreateSubmissionCommentMutation_decodeNotification = include.decodeNotification;\n\nvar CreateSubmissionCommentMutation_decodeObject = include.decodeObject;\n\nvar CreateSubmissionCommentMutation_decodeNotifications = include.decodeNotifications;\n\nvar CreateSubmissionCommentMutation_decodeErrors = include.decodeErrors;\n\nvar CreateSubmissionCommentMutation_flashNotifications = include.flashNotifications;\n\nvar CreateSubmissionCommentMutation_sendQuery = include.sendQuery;\n\nvar CreateSubmissionCommentMutation_query = include.query;\n\nvar CreateSubmissionCommentMutation_fetch = include.$$fetch;\n\nvar CreateSubmissionCommentMutation = {\n CreateSubmissionCommentMutation_inner: CreateSubmissionCommentMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: CreateSubmissionCommentMutation_Graphql_error,\n decodeNotification: CreateSubmissionCommentMutation_decodeNotification,\n decodeObject: CreateSubmissionCommentMutation_decodeObject,\n decodeNotifications: CreateSubmissionCommentMutation_decodeNotifications,\n decodeErrors: CreateSubmissionCommentMutation_decodeErrors,\n flashNotifications: CreateSubmissionCommentMutation_flashNotifications,\n sendQuery: CreateSubmissionCommentMutation_sendQuery,\n query: CreateSubmissionCommentMutation_query,\n $$fetch: CreateSubmissionCommentMutation_fetch,\n make: make\n};\n\nfunction toggleComments(setShowComments, $$event) {\n $$event.preventDefault();\n return Curry._1(setShowComments, (function (prevState) {\n return !prevState;\n }));\n}\n\nfunction archiveCommentCB(setSubmissionComments, submissionComments, commentId) {\n var newComments = submissionComments.filter(function (comment) {\n return CoursesCurriculum__SubmissionComment.id(comment) !== commentId;\n });\n return Curry._1(setSubmissionComments, (function (param) {\n return newComments;\n }));\n}\n\nfunction CoursesCurriculum__SubmissionComments(Props) {\n var currentUser = Props.currentUser;\n var submissionId = Props.submissionId;\n var comments = Props.comments;\n var commentsInitiallyVisible = Props.commentsInitiallyVisible;\n var match = React.useState(function () {\n return comments;\n });\n var setSubmissionComments = match[1];\n var submissionComments = match[0];\n var match$1 = React.useState(function () {\n return commentsInitiallyVisible;\n });\n var setShowComments = match$1[1];\n var showComments = match$1[0];\n var match$2 = React.useState(function () {\n return \"\";\n });\n var setNewComment = match$2[1];\n var newComment = match$2[0];\n var commentsCount = submissionComments.length;\n var handleInputChange = function ($$event) {\n Curry._1(setNewComment, $$event.currentTarget.value);\n };\n var handleCreateSubmissionComment = function ($$event) {\n $$event.preventDefault();\n Js_promise.then_((function (response) {\n var createdComment = response.createSubmissionComment.comment;\n if (createdComment !== undefined) {\n var createdComment$1 = Caml_option.valFromOption(createdComment);\n Curry._1(setNewComment, (function (param) {\n return \"\";\n }));\n Curry._1(setSubmissionComments, (function (existingComments) {\n return [CoursesCurriculum__SubmissionComment.decode(createdComment$1)].concat(existingComments);\n }));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n comment: newComment,\n submissionId: submissionId\n }));\n };\n return React.createElement(\"div\", {\n className: \"w-full\"\n }, commentsCount !== 0 ? React.createElement(\"div\", {\n className: \"flex items-center justify-between mx-auto\"\n }, React.createElement(\"div\", {\n id: \"show_comments-\" + submissionId\n }, React.createElement(\"button\", {\n className: \"flex items-center border border-gray-300 bg-white text-gray-600 px-3 py-1 font-medium text-xs leading-snug rounded-full hover:text-primary-500 hover:border-primary-500 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-600 transition\",\n onClick: (function (param) {\n return toggleComments(setShowComments, param);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-comment-alt-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"ps-1\"\n }, commentsCount === 1 ? \"1 \" + tr(undefined, undefined, \"comment_text\") : String(commentsCount) + \" \" + tr(undefined, undefined, \"comments\"))))) : (showComments ? undefined : Curry._1(setShowComments, (function (param) {\n return true;\n })), null), React.createElement(Spread.make, {\n props: {\n \"data-submission-id\": submissionId\n },\n children: React.createElement(\"div\", {\n key: submissionId,\n className: \"mt-4 space-y-8\",\n hidden: !showComments\n }, React.createElement(\"div\", {\n className: \"submission-comments__comment\"\n }, React.createElement(\"div\", {\n className: \"flex gap-2 relative\"\n }, React.createElement(\"div\", {\n className: \"submission-comments__line flex justify-end align-start absolute h-full -left-8 -ml-[0.5px] bottom-1 w-8 \"\n }, React.createElement(\"div\", {\n className: \"h-6 border-b cursor-pointer w-7 border-l border-gray-300 rounded-bl-3xl\"\n })), React.createElement(\"div\", {\n className: \"w-8 h-8 shrink-0 border bg-gray-200 rounded-full flex items-center justify-center\"\n }, CoursesCurriculum__CurrentUser.avatar(currentUser)), React.createElement(\"input\", {\n className: \"appearance-none block text-sm w-full bg-white leading-tight border border-gray-300 rounded px-3 py-2 focus:outline-none focus:bg-white focus:border-transparent focus:ring-2 focus:ring-focusColor-500\",\n id: \"add_comment-\" + submissionId,\n maxLength: 255,\n placeholder: tr(undefined, undefined, \"write_comment\"),\n type: \"text\",\n value: newComment,\n onChange: handleInputChange\n }), React.createElement(\"button\", {\n className: \"btn btn-primary text-sm\",\n disabled: newComment === \"\",\n onClick: handleCreateSubmissionComment\n }, tr(undefined, undefined, \"comment_button\")))), submissionComments.map(function (comment) {\n return React.createElement(\"div\", {\n key: \"comment-\" + CoursesCurriculum__SubmissionComment.id(comment),\n className: \"submission-comments__comment\"\n }, React.createElement(CoursesCurriculum__SubmissionCommentShow.make, {\n currentUser: currentUser,\n comment: comment,\n archiveCommentCB: (function (param) {\n return archiveCommentCB(setSubmissionComments, submissionComments, param);\n })\n }));\n }))\n }));\n}\n\nvar make$1 = CoursesCurriculum__SubmissionComments;\n\nexport {\n str ,\n tr ,\n CreateSubmissionCommentMutation ,\n toggleComments ,\n archiveCommentCB ,\n make$1 as make,\n}\n/* 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 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 Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as CoursesCurriculum__User from \"./CoursesCurriculum__User.bs.js\";\nimport * as SubmissionChecklistItem from \"../../review/types/SubmissionChecklistItem.bs.js\";\nimport * as CoursesCurriculum__Reaction from \"./CoursesCurriculum__Reaction.bs.js\";\nimport * as CoursesCurriculum__ModerationReport from \"./CoursesCurriculum__ModerationReport.bs.js\";\nimport * as CoursesCurriculum__SubmissionComment from \"./CoursesCurriculum__SubmissionComment.bs.js\";\n\nvar UnexpectedStatusValue = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__DiscussionSubmission.UnexpectedStatusValue\");\n\nfunction id(t) {\n return t.id;\n}\n\nfunction targetId(t) {\n return t.targetId;\n}\n\nfunction createdAt(t) {\n return t.createdAt;\n}\n\nfunction checklist(t) {\n return t.checklist;\n}\n\nfunction userNames(t) {\n return t.userNames;\n}\n\nfunction users(t) {\n return t.users;\n}\n\nfunction teamName(t) {\n return t.teamName;\n}\n\nfunction comments(t) {\n return t.comments;\n}\n\nfunction reactions(t) {\n return t.reactions;\n}\n\nfunction anonymous(t) {\n return t.anonymous;\n}\n\nfunction pinned(t) {\n return t.pinned;\n}\n\nfunction moderationReports(t) {\n return t.moderationReports;\n}\n\nfunction hiddenAt(t) {\n return t.hiddenAt;\n}\n\nfunction createdAtPretty(t) {\n return DateFns.format(t.createdAt, \"MMMM d, yyyy\");\n}\n\nfunction hiddenAtPretty(t) {\n var hiddenAt = t.hiddenAt;\n if (hiddenAt !== undefined) {\n return DateFns.format(Caml_option.valFromOption(hiddenAt), \"MMMM d, yyyy\");\n } else {\n return \"\";\n }\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 firstUser(t) {\n return Caml_array.get(t.users, 0);\n}\n\nfunction decode(json) {\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 targetId: Json_decode.field(\"targetId\", Json_decode.string, json),\n createdAt: Json_decode.field(\"createdAt\", DateFns.decodeISO, json),\n checklist: Json_decode.field(\"checklist\", (function (param) {\n return Json_decode.array(partial_arg$1, param);\n }), json),\n userNames: Json_decode.field(\"userNames\", Json_decode.string, json),\n users: Json_decode.field(\"users\", (function (param) {\n return Json_decode.array(CoursesCurriculum__User.decode, param);\n }), json),\n teamName: Json_decode.optional((function (param) {\n return Json_decode.field(\"teamName\", Json_decode.string, param);\n }), json),\n comments: Json_decode.field(\"comments\", (function (param) {\n return Json_decode.array(CoursesCurriculum__SubmissionComment.decode, param);\n }), json),\n reactions: Json_decode.field(\"reactions\", (function (param) {\n return Json_decode.array(CoursesCurriculum__Reaction.decode, param);\n }), json),\n anonymous: Json_decode.field(\"anonymous\", Json_decode.bool, json),\n pinned: Json_decode.field(\"pinned\", Json_decode.bool, json),\n moderationReports: Json_decode.field(\"moderationReports\", (function (param) {\n return Json_decode.array(CoursesCurriculum__ModerationReport.decode, param);\n }), json),\n hiddenAt: Json_decode.optional((function (param) {\n return Json_decode.field(\"hiddenAt\", DateFns.decodeISO, param);\n }), json)\n };\n}\n\nfunction make(id, targetId, createdAt, checklist, userNames, users, teamName, comments, reactions, anonymous, pinned, moderationReports, hiddenAt) {\n return {\n id: id,\n targetId: targetId,\n createdAt: createdAt,\n checklist: checklist,\n userNames: userNames,\n users: users,\n teamName: teamName,\n comments: comments,\n reactions: reactions,\n anonymous: anonymous,\n pinned: pinned,\n moderationReports: moderationReports,\n hiddenAt: hiddenAt\n };\n}\n\nexport {\n UnexpectedStatusValue ,\n id ,\n targetId ,\n createdAt ,\n checklist ,\n userNames ,\n users ,\n teamName ,\n comments ,\n reactions ,\n anonymous ,\n pinned ,\n moderationReports ,\n hiddenAt ,\n createdAtPretty ,\n hiddenAtPretty ,\n sort ,\n firstUser ,\n decode ,\n make ,\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 Icon from \"../../../shared/Icon.bs.js\";\nimport * as Curry from \"../../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 CoursesCurriculum__User from \"../types/CoursesCurriculum__User.bs.js\";\nimport * as SubmissionChecklistShow from \"../../review/components/SubmissionChecklistShow.bs.js\";\nimport * as CoursesCurriculum__Reactions from \"./CoursesCurriculum__Reactions.bs.js\";\nimport * as CoursesCurriculum__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__SubmissionComments from \"./CoursesCurriculum__SubmissionComments.bs.js\";\nimport * as CoursesCurriculum__DiscussionSubmission from \"../types/CoursesCurriculum__DiscussionSubmission.bs.js\";\nimport * as CoursesCurriculum__ModerationReportButton from \"./CoursesCurriculum__ModerationReportButton.bs.js\";\n\nimport \"./CoursesCurriculum__DiscussSubmission.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.CoursesCurriculum__DiscussSubmission\";\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 PinSubmissionMutation($pin: Boolean!, $submissionId: String!) {\\npinSubmission(pin: $pin, submissionId: $submissionId) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.pinSubmission;\n return {\n pinSubmission: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.pinSubmission;\n var value$2 = value$1.success;\n var pinSubmission = {\n success: value$2\n };\n return {\n pinSubmission: pinSubmission\n };\n}\n\nfunction serializeVariables(inp) {\n return {\n pin: inp.pin,\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables(pin, submissionId, param) {\n return {\n pin: pin,\n submissionId: submissionId\n };\n}\n\nvar PinSubmissionMutation_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 PinSubmissionMutation_Graphql_error = include.Graphql_error;\n\nvar PinSubmissionMutation_decodeNotification = include.decodeNotification;\n\nvar PinSubmissionMutation_decodeObject = include.decodeObject;\n\nvar PinSubmissionMutation_decodeNotifications = include.decodeNotifications;\n\nvar PinSubmissionMutation_decodeErrors = include.decodeErrors;\n\nvar PinSubmissionMutation_flashNotifications = include.flashNotifications;\n\nvar PinSubmissionMutation_sendQuery = include.sendQuery;\n\nvar PinSubmissionMutation_query = include.query;\n\nvar PinSubmissionMutation_fetch = include.$$fetch;\n\nvar PinSubmissionMutation = {\n PinSubmissionMutation_inner: PinSubmissionMutation_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: PinSubmissionMutation_Graphql_error,\n decodeNotification: PinSubmissionMutation_decodeNotification,\n decodeObject: PinSubmissionMutation_decodeObject,\n decodeNotifications: PinSubmissionMutation_decodeNotifications,\n decodeErrors: PinSubmissionMutation_decodeErrors,\n flashNotifications: PinSubmissionMutation_flashNotifications,\n sendQuery: PinSubmissionMutation_sendQuery,\n query: PinSubmissionMutation_query,\n $$fetch: PinSubmissionMutation_fetch,\n make: make\n};\n\nvar Raw$1 = {};\n\nvar query$1 = \"mutation HideSubmissionMutation($submissionId: String!, $hide: Boolean!) {\\nhideSubmission(submissionId: $submissionId, hide: $hide) {\\nsuccess \\n}\\n\\n}\\n\";\n\nfunction parse$1(value) {\n var value$1 = value.hideSubmission;\n return {\n hideSubmission: {\n success: value$1.success\n }\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.hideSubmission;\n var value$2 = value$1.success;\n var hideSubmission = {\n success: value$2\n };\n return {\n hideSubmission: hideSubmission\n };\n}\n\nfunction serializeVariables$1(inp) {\n return {\n submissionId: inp.submissionId,\n hide: inp.hide\n };\n}\n\nfunction makeVariables$1(submissionId, hide, param) {\n return {\n submissionId: submissionId,\n hide: hide\n };\n}\n\nvar HideSubmissionMutation_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 HideSubmissionMutation_Graphql_error = include$1.Graphql_error;\n\nvar HideSubmissionMutation_decodeNotification = include$1.decodeNotification;\n\nvar HideSubmissionMutation_decodeObject = include$1.decodeObject;\n\nvar HideSubmissionMutation_decodeNotifications = include$1.decodeNotifications;\n\nvar HideSubmissionMutation_decodeErrors = include$1.decodeErrors;\n\nvar HideSubmissionMutation_flashNotifications = include$1.flashNotifications;\n\nvar HideSubmissionMutation_sendQuery = include$1.sendQuery;\n\nvar HideSubmissionMutation_query = include$1.query;\n\nvar HideSubmissionMutation_fetch = include$1.$$fetch;\n\nvar HideSubmissionMutation = {\n HideSubmissionMutation_inner: HideSubmissionMutation_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\n Graphql_error: HideSubmissionMutation_Graphql_error,\n decodeNotification: HideSubmissionMutation_decodeNotification,\n decodeObject: HideSubmissionMutation_decodeObject,\n decodeNotifications: HideSubmissionMutation_decodeNotifications,\n decodeErrors: HideSubmissionMutation_decodeErrors,\n flashNotifications: HideSubmissionMutation_flashNotifications,\n sendQuery: HideSubmissionMutation_sendQuery,\n query: HideSubmissionMutation_query,\n $$fetch: HideSubmissionMutation_fetch,\n make: make$1\n};\n\nfunction pinSubmission(submission, callback, $$event) {\n $$event.preventDefault();\n var pin = !CoursesCurriculum__DiscussionSubmission.pinned(submission);\n var submissionId = CoursesCurriculum__DiscussionSubmission.id(submission);\n Js_promise.then_((function (response) {\n if (response.pinSubmission.success) {\n Curry._1(callback, CoursesCurriculum__DiscussionSubmission.targetId(submission));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n pin: pin,\n submissionId: submissionId\n }));\n}\n\nfunction hideSubmission(submission, hide, setSubmissionHidden, $$event) {\n $$event.preventDefault();\n var submissionId = CoursesCurriculum__DiscussionSubmission.id(submission);\n Js_promise.then_((function (response) {\n if (response.hideSubmission.success) {\n Curry._1(setSubmissionHidden, (function (param) {\n return hide;\n }));\n }\n return Promise.resolve(undefined);\n }), Curry._3(make$1, undefined, undefined, {\n submissionId: submissionId,\n hide: hide\n }));\n}\n\nfunction pinnedClasses(pinned) {\n if (pinned) {\n return \"bg-white px-4 md:px-6 pt-6 pb-2 rounded-lg shadow-xl dark:shadow-2xl border border-gray-200/75 dark:border-gray-200\";\n } else {\n return \"py-4\";\n }\n}\n\nfunction CoursesCurriculum__DiscussSubmission(Props) {\n var currentUser = Props.currentUser;\n var submission = Props.submission;\n var callBack = Props.callBack;\n var submissionId = CoursesCurriculum__DiscussionSubmission.id(submission);\n var match = React.useState(function () {\n return Belt_Option.isSome(CoursesCurriculum__DiscussionSubmission.hiddenAt(submission));\n });\n var setSubmissionHidden = match[1];\n var submissionHidden = match[0];\n var teamStrength = CoursesCurriculum__DiscussionSubmission.users(submission).length;\n var pinned = CoursesCurriculum__DiscussionSubmission.pinned(submission);\n var tmp;\n if (CoursesCurriculum__DiscussionSubmission.anonymous(submission)) {\n tmp = React.createElement(\"span\", {\n className: \"font-semibold text-xs leading-tight block md:inline-flex\"\n }, t(undefined, undefined, \"anonymous_name\"));\n } else {\n var name = CoursesCurriculum__DiscussionSubmission.teamName(submission);\n tmp = name !== undefined ? React.createElement(\"span\", {\n className: \"font-semibold text-xs leading-tight block md:inline-flex\"\n }, React.createElement(\"span\", {\n className: \"text-gray-500\"\n }, t(undefined, undefined, \"submitted_by_team\")), React.createElement(\"span\", {\n className: \"ms-1\"\n }, name)) : React.createElement(\"span\", {\n className: \"font-semibold text-xs leading-tight block md:inline-flex\"\n }, CoursesCurriculum__DiscussionSubmission.userNames(submission));\n }\n var tmp$1;\n if (CoursesCurriculum__CurrentUser.isModerator(currentUser)) {\n var partial_arg = !submissionHidden;\n tmp$1 = React.createElement(\"div\", {\n className: \"flex space-x-2 relative z-[12]\"\n }, React.createElement(\"button\", {\n className: \"curriculum-discuss-submission__pin-button md:hidden md:group-hover:flex md:group-focus-within:flex items-center justify-center cursor-pointer p-1 text-sm border rounded-md text-gray-700 bg-gray-100 hover:text-gray-800 hover:bg-gray-50 whitespace-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-600 transition\",\n onClick: (function (param) {\n return pinSubmission(submission, callBack, param);\n })\n }, CoursesCurriculum__DiscussionSubmission.pinned(submission) ? React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-pin-angle-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, t(undefined, undefined, \"unpin\"))) : React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-pin-angle-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, t(undefined, undefined, \"pin\")))), React.createElement(\"button\", {\n className: \"curriculum-discuss-submission__hide-button md:hidden md:group-hover:flex md:group-focus-within:flex items-center justify-center cursor-pointer p-1 text-sm border rounded-md text-gray-700 bg-gray-100 hover:text-gray-800 hover:bg-gray-50 whitespace-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-600 transition\",\n onClick: (function (param) {\n return hideSubmission(submission, partial_arg, setSubmissionHidden, param);\n })\n }, submissionHidden ? React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-eye-closed-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, t(undefined, undefined, \"unhide\"))) : React.createElement(\"span\", {\n className: \"flex items-center md:space-x-1\"\n }, React.createElement(Icon.make, {\n className: \"if i-eye-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline-block text-xs\"\n }, t(undefined, undefined, \"hide\")))));\n } else {\n tmp$1 = null;\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"discuss_submission-\" + submissionId,\n className: \"relative curriculum-discuss-submission__container focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focusColor-500 \" + (\n pinned ? \"bg-white px-4 md:px-6 pt-6 pb-2 rounded-lg shadow-xl dark:shadow-2xl border border-gray-200/75 dark:border-gray-200\" : \"py-4\"\n ) + (\n submissionHidden ? \" curriculum-discuss-submission__hidden max-h-48 overflow-y-hidden\" : \"\"\n ),\n id: \"discuss_submission-\" + submissionId,\n tabIndex: 0\n }, CoursesCurriculum__DiscussionSubmission.pinned(submission) ? React.createElement(\"p\", {\n className: \"absolute bg-green-100 inline-flex items-center text-green-800 text-xs border border-green-300 px-1.5 py-0.5 leading-tight rounded-md -top-3 \" + (\n submissionHidden ? \" hidden\" : \"\"\n )\n }, React.createElement(Icon.make, {\n className: \"if i-pin-angle-light if-fw\"\n }), React.createElement(\"span\", {\n className: \"ps-1.5\"\n }, t(undefined, undefined, \"pinned_submission\"))) : null, React.createElement(\"div\", {\n className: \"flex items-start justify-between\"\n }, React.createElement(\"div\", {\n className: \"flex gap-3\"\n }, React.createElement(\"div\", {\n className: \"isolate flex -space-x-2 overflow-hidden\"\n }, React.createElement(\"div\", {\n className: \"w-8 h-8 relative z-10 uppercase text-xs font-semibold border bg-gray-200 rounded-full flex items-center justify-center\"\n }, CoursesCurriculum__DiscussionSubmission.anonymous(submission) ? React.createElement(\"span\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"anonymous_avatar\")) : CoursesCurriculum__User.avatar(CoursesCurriculum__DiscussionSubmission.firstUser(submission)), React.createElement(\"span\", {\n className: \"font-semibold\"\n })), teamStrength !== 1 ? React.createElement(\"div\", {\n className: \"flex items-center justify-center w-8 h-8 text-xs border bg-gray-200 text-gray-600 relative z-0 rounded-full\"\n }, React.createElement(\"span\", undefined, \"+\" + String(teamStrength - 1 | 0))) : null), React.createElement(\"div\", {\n className: \"flex flex-col flex-wrap\"\n }, tmp, React.createElement(\"span\", {\n className: \"text-xs text-gray-600 leading-tight pt-1\",\n title: CoursesCurriculum__DiscussionSubmission.createdAtPretty(submission)\n }, t([[\n \"created_at\",\n CoursesCurriculum__DiscussionSubmission.createdAtPretty(submission)\n ]], undefined, \"created_at\")))), React.createElement(\"div\", {\n className: \"flex space-x-2 relative\"\n }, tmp$1, React.createElement(\"div\", {\n className: \"relative z-[13]\"\n }, React.createElement(CoursesCurriculum__ModerationReportButton.make, {\n currentUser: currentUser,\n moderationReports: CoursesCurriculum__DiscussionSubmission.moderationReports(submission),\n reportableId: CoursesCurriculum__DiscussionSubmission.id(submission),\n reportableType: \"TimelineEvent\"\n })))), React.createElement(\"div\", {\n className: \"relative\"\n }, React.createElement(\"div\", {\n className: \"absolute w-8 top-0 left-0 bottom-0 flex justify-center items-center z-0\"\n }, React.createElement(\"div\", {\n className: \"w-px h-full bg-gradient-to-b from-gray-300 via-gray-300 \"\n })), React.createElement(\"div\", {\n className: \"ms-11 pb-4 pt-6\"\n }, React.createElement(SubmissionChecklistShow.make, {\n checklist: CoursesCurriculum__DiscussionSubmission.checklist(submission),\n updateChecklistCB: undefined,\n forDiscussion: true\n })), React.createElement(\"div\", {\n className: \"flex flex-col gap-4 items-start relative py-4 ps-11\"\n }, React.createElement(\"div\", undefined, React.createElement(CoursesCurriculum__Reactions.make, {\n currentUser: currentUser,\n reactionableType: \"TimelineEvent\",\n reactionableId: submissionId,\n reactions: CoursesCurriculum__DiscussionSubmission.reactions(submission)\n })), React.createElement(\"div\", {\n className: \"relative w-full\"\n }, React.createElement(CoursesCurriculum__SubmissionComments.make, {\n currentUser: currentUser,\n submissionId: submissionId,\n comments: CoursesCurriculum__DiscussionSubmission.comments(submission),\n commentsInitiallyVisible: false\n })))), submissionHidden ? React.createElement(\"div\", {\n className: \"absolute -translate-x-1/2 left-1/2 z-[12] flex justify-end mx-auto bottom-px\"\n }, React.createElement(\"p\", {\n className: \"px-2 py-1 bg-white/20 border border-gray-300 border-b-0 whitespace-nowrap rounded-t-lg text-xs leading-tight italic text-gray-500\"\n }, t(undefined, undefined, \"submission_hidden\"))) : null);\n}\n\nvar make$2 = CoursesCurriculum__DiscussSubmission;\n\nexport {\n str ,\n t ,\n PinSubmissionMutation ,\n HideSubmissionMutation ,\n pinSubmission ,\n hideSubmission ,\n pinnedClasses ,\n make$2 as make,\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 Caml_obj from \"../../../../../node_modules/rescript/lib/es6/caml_obj.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 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 match = TargetChecklistItem.kind(tc);\n var result;\n if (typeof match === \"number\") {\n switch (match) {\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: match._0,\n _1: match._1,\n _2: []\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 Js_array.mapi((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 }), checklist);\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(Js_array.map((function (c) {\n var files = c.result;\n switch (files.TAG | 0) {\n case /* Files */0 :\n return Js_array.map((function (a) {\n return a.id;\n }), files._0);\n case /* AudioRecord */5 :\n return [files._0.id];\n default:\n return [];\n }\n }), checklist));\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 Js_array.map((function (file) {\n return file.id;\n }), files._0);\n case /* MultiChoice */4 :\n return files._2;\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.notequal(files, [])) {\n return files.length < 4;\n } else {\n return false;\n }\n}\n\nfunction validMultiChoice(selected, choices) {\n if (ArrayUtils.isNotEmpty(selected)) {\n return selected.every(function (s) {\n return choices.includes(s);\n });\n } else {\n return false;\n }\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 selected = match._2;\n var choices = match._0;\n if (optional && ArrayUtils.isEmpty(selected)) {\n return true;\n } else {\n return validMultiChoice(selected, choices);\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(Js_array.filter((function (c) {\n return !c;\n }), Js_array.map((function (c) {\n return validResponse(c, true);\n }), checklist)));\n}\n\nfunction validResponses(responses) {\n return Js_array.filter((function (c) {\n return validResponse(c, false);\n }), responses);\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(Js_array.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 }), checklist)));\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/* 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\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\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 full_init($$default, seed);\n}\n\nfunction init(seed) {\n full_init($$default, [seed]);\n}\n\nfunction self_init(param) {\n full_init$1(random_seed(undefined));\n}\n\nfunction get_state(param) {\n return copy($$default);\n}\n\nfunction set_state(s) {\n 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/* 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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$catch((function (error) {\n var title = apiErrorTitle(error);\n $$Notification.error(title, tr(undefined, undefined, \"please_reload\"));\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (json) {\n return Promise.resolve(handleResponseJSON(filename, send, attachFileCB, json));\n }), Js_promise.then_((function (response) {\n if (response.ok) {\n return Fetch.$$Response.json(response);\n } else {\n return Promise.reject({\n RE_EXN_ID: UnexpectedResponse,\n _1: response.status\n });\n }\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)))));\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 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 me-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 me-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/* 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 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 ps-3 pe-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 ps-3 pe-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:ps-4\",\n controls: true,\n src: url\n }) : null, match !== undefined ? React.createElement(\"div\", {\n className: \"btn btn-success ms-4\",\n onClick: (function (_e) {\n 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 me-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/* 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 Checkbox from \"../../../shared/components/Checkbox.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as UrlUtils from \"../../../shared/utils/UrlUtils.bs.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 rlt:rotate-180\";\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 ps-2 tracking-wide overflow-auto\",\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: \"me-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 me-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 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 me-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 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-flex px-2 py-px rounded text-xs font-semibold items-center \" + colors\n }, React.createElement(\"span\", {\n className: \"me-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, allowMultiple, label, selected, updateResultCB, $$event) {\n var checked = $$event.target.checked;\n if (checked) {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: allowMultiple,\n _2: selected.concat([label])\n });\n } else {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: allowMultiple,\n _2: selected.filter(function (i) {\n return i !== label;\n })\n });\n }\n}\n\nfunction radioOnChange(choices, allowMultiple, label, updateResultCB, $$event) {\n var checked = $$event.target.checked;\n if (checked) {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: allowMultiple,\n _2: [label]\n });\n } else {\n return Curry._1(updateResultCB, {\n TAG: /* MultiChoice */4,\n _0: choices,\n _1: allowMultiple,\n _2: []\n });\n }\n}\n\nfunction showMultiChoice(choices, allowMultiple, selected, id, updateResultCB) {\n if (allowMultiple) {\n return choices.map(function (label, index) {\n return React.createElement(\"div\", undefined, React.createElement(Checkbox.make, {\n id: id + String(index),\n onChange: (function (param) {\n return checkboxOnChange(choices, allowMultiple, label, selected, updateResultCB, param);\n }),\n checked: selected.includes(label),\n label: label,\n key: String(index)\n }));\n });\n } else {\n return choices.map(function (label, index) {\n return React.createElement(Radio.make, {\n id: id + String(index),\n label: label,\n onChange: (function (param) {\n return radioOnChange(choices, allowMultiple, label, updateResultCB, param);\n }),\n checked: selected.includes(label),\n key: String(index)\n });\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: Js_array.filter((function (a) {\n return CoursesCurriculum__ChecklistItem.fileId(a) !== id;\n }), files)\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 pe-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 ps-3 pe-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-s 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 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, files._2, 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:ps-7 pt-2 pe-0 pb-4 space-y-2\"\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 radioOnChange ,\n showMultiChoice ,\n attachFile ,\n attachRecordingFile ,\n removeFile ,\n showFiles ,\n showAudioRecorder ,\n make ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport * as CoursesCurriculum__SubmissionItem from \"./CoursesCurriculum__SubmissionItem.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 me-2\"\n }) : React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-pulse me-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 anonymous: false\n };\n}\n\nfunction reducer(state, action) {\n if (typeof action !== \"number\") {\n return {\n formState: /* Ready */2,\n checklist: action._0,\n anonymous: state.anonymous\n };\n }\n switch (action) {\n case /* SetAttaching */0 :\n return {\n formState: /* Attaching */0,\n checklist: state.checklist,\n anonymous: state.anonymous\n };\n case /* SetSaving */1 :\n return {\n formState: /* Saving */1,\n checklist: state.checklist,\n anonymous: state.anonymous\n };\n case /* SetReady */2 :\n return {\n formState: /* Ready */2,\n checklist: state.checklist,\n anonymous: state.anonymous\n };\n case /* ToggleAnonymous */3 :\n return {\n formState: state.formState,\n checklist: state.checklist,\n anonymous: !state.anonymous\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!]!, $anonymous: Boolean!) {\\ncreateSubmission(targetId: $targetId, checklist: $checklist, fileIds: $fileIds, anonymous: $anonymous) {\\nsubmission {\\nid \\ncreatedAt \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.createSubmission;\n var value$2 = value$1.submission;\n return {\n createSubmission: {\n submission: !(value$2 == null) ? ({\n id: value$2.id,\n createdAt: value$2.createdAt\n }) : undefined\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.createSubmission;\n var value$2 = value$1.submission;\n var submission;\n if (value$2 !== undefined) {\n var value$3 = value$2.createdAt;\n var value$4 = value$2.id;\n submission = {\n id: value$4,\n createdAt: value$3\n };\n } else {\n submission = null;\n }\n var createSubmission = {\n submission: submission\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: Js_array.map((function (b) {\n return b;\n }), a),\n anonymous: inp.anonymous\n };\n}\n\nfunction makeVariables(targetId, checklist, fileIds, anonymous, param) {\n return {\n targetId: targetId,\n checklist: checklist,\n fileIds: fileIds,\n anonymous: anonymous\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, targetDetails, 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 anonymous = state.anonymous;\n var targetId = CoursesCurriculum__Target.id(target);\n Js_promise.$$catch((function (_error) {\n Curry._1(send, /* SetReady */2);\n return Promise.resolve(undefined);\n }), Js_promise.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 completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails);\n var status = completionType !== 0 ? /* MarkedAsComplete */0 : /* Pending */1;\n Curry._1(addSubmissionCB, CoursesCurriculum__Submission.make(submission$1.id, DateFns.decodeISO(submission$1.createdAt), status, submissionChecklist, undefined));\n } else {\n Curry._1(send, /* SetReady */2);\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n targetId: targetId,\n checklist: checklist,\n fileIds: fileIds,\n anonymous: anonymous\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 targetDetails = Props.targetDetails;\n var addSubmissionCB = Props.addSubmissionCB;\n var preview = Props.preview;\n var checklist = Props.checklist;\n var match = React.useReducer(reducer, initialState(checklist));\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\", undefined, CoursesCurriculum__TargetDetails.discussion(targetDetails) && CoursesCurriculum__TargetDetails.allowAnonymous(targetDetails) ? React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"mt-4\"\n }, React.createElement(\"input\", {\n className: \"checkbox-input h-4 w-4 rounded border border-gray-300 text-primary-500 focus:ring-focusColor-500\",\n id: \"anonymous\",\n checked: state.anonymous,\n type: \"checkbox\",\n onChange: (function (_event) {\n Curry._1(send, /* ToggleAnonymous */3);\n })\n }), React.createElement(\"label\", {\n className: \"checkbox-label ps-2 cursor-pointer text-sm\",\n htmlFor: \"anonymous\"\n }, tr(undefined, undefined, \"submit_anonymous_label\"))), React.createElement(\"p\", {\n className: \"text-xs ml-6 italic text-gray-700 mt-1\",\n htmlFor: \"anonymous\"\n }, tr(undefined, undefined, \"submit_anonymous_notice\"))) : null, React.createElement(\"div\", {\n className: buttonClasses(state.checklist)\n }, React.createElement(Tooltip.make, {\n tip: tooltipText(preview),\n position: \"Start\",\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, targetDetails, 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/* include Not a pure module */\n","export default \"__VITE_ASSET__D_Sd3hZi__\"","// 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/* Icon 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/* 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 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 criterionId ,\n criterionName ,\n updateGrade ,\n gradingEncoder ,\n make ,\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, pillGrade, callBack) {\n var resultModifier = gradeReceived !== undefined && !Caml_obj.greaterthan(pillGrade, Caml_option.valFromOption(gradeReceived)) ? \" grade-bar__grade-pill--completed\" : \"\";\n var selectableModifier = callBack !== undefined ? \" grade-bar__grade-pill--selectable-pass cursor-pointer\" : \"\";\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) {\n var myGrade = GradeLabel.grade(gradeLabel);\n return React.createElement(\"div\", {\n key: String(myGrade),\n className: gradePillClasses(CoursesCurriculum__Grading.grade(grading), myGrade, gradeSelectCB),\n role: \"button\",\n title: GradeLabel.label(gradeLabel),\n onClick: (function (_event) {\n handleClick(gradeSelectCB, grading, myGrade);\n })\n }, gradeSelectCB !== undefined ? String(myGrade) : null);\n}\n\nfunction gradeBarPanel(grading, gradeLabels, gradeSelectCB) {\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);\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 return React.createElement(\"div\", {\n className: \"flex-column\",\n role: \"toolbar\"\n }, gradeBarHeader(grading, gradeLabels), gradeBarPanel(grading, gradeLabels, gradeSelectCB));\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/* 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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$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 }), Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n targetId: targetId\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 me-2\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, tr(undefined, undefined, \"undo_submission\")), React.createElement(\"span\", {\n className: \"md:hidden\"\n }, tr(undefined, undefined, \"undo\")));\n case /* Undoing */1 :\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-spin me-2\"\n }), tr(undefined, undefined, \"undoing\"));\n case /* Errored */2 :\n return React.createElement(\"span\", undefined, React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle me-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/* 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 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 DomUtils from \"../../../shared/utils/DomUtils.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 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__Reaction from \"../types/CoursesCurriculum__Reaction.bs.js\";\nimport * as CoursesCurriculum__Reactions from \"./CoursesCurriculum__Reactions.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\";\nimport * as CoursesCurriculum__SubmissionComment from \"../types/CoursesCurriculum__SubmissionComment.bs.js\";\nimport * as CoursesCurriculum__SubmissionComments from \"./CoursesCurriculum__SubmissionComments.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 = Js_array.find((function (c) {\n return EvaluationCriterion.id(c) === CoursesCurriculum__Grade.evaluationCriterionId(grade);\n }), evaluationCriteria);\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 me-1 \" + textColor\n }, icon), text);\n}\n\nfunction submissionStatusIcon(passed) {\n var text = passed ? tr(undefined, undefined, \"completed\") : tr(undefined, undefined, \"rejected\");\n var textColor = passed ? \"text-green-700\" : \"text-red-700\";\n return React.createElement(\"div\", {\n className: \"max-w-fit flex items-center\"\n }, passed ? React.createElement(\"span\", {\n className: \"flex text-green-500 text-lg me-2\"\n }, React.createElement(Icon.make, {\n className: \"if i-badge-check-solid text-2xl\"\n })) : null, React.createElement(\"p\", {\n className: \"text-center text-sm font-semibold \" + textColor\n }, text));\n}\n\nfunction undoSubmissionCB(param) {\n window.location.reload();\n}\n\nfunction gradingSection(grades, evaluationCriteria, gradeBar, passed) {\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex border-t flex-wrap items-center justify-center py-4\\n \" + (\n passed ? \"bg-gradient-to-br from-white via-white via-40% to-green-200\" : \"bg-gradient-to-br from-red-50 via-red-50 via-40% to-red-200\"\n ) + \"\"\n }, 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-2 text-sm font-semibold\"\n }, tr(undefined, undefined, \"grading\")), React.createElement(\"div\", {\n className: \"mt-3\"\n }, Js_array.map(Curry.__1(gradeBar), CoursesCurriculum__Grade.sort(evaluationCriteria, grades)))) : null, React.createElement(\"div\", {\n className: \"w-full md:w-1/2 shrink-0 justify-center flex px-6\"\n }, submissionStatusIcon(passed))));\n}\n\nfunction handleAddAnotherSubmission(setShowSubmissionForm, $$event) {\n $$event.preventDefault();\n return Curry._1(setShowSubmissionForm, (function (showSubmissionForm) {\n return !showSubmissionForm;\n }));\n}\n\nfunction submissions(currentUser, 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 var completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails);\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 ps-2 pe-3 py-1 bg-orange-100 text-orange-600 rounded\"\n }, React.createElement(\"span\", {\n className: \"fa-stack text-orange-400 me-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 var tmp$1;\n if (CoursesCurriculum__TargetDetails.discussion(targetDetails)) {\n var comments = CoursesCurriculum__TargetDetails.comments(targetDetails).filter(function (comment) {\n return CoursesCurriculum__SubmissionComment.submissionId(comment) === CoursesCurriculum__Submission.id(submission);\n });\n var reactions = CoursesCurriculum__TargetDetails.reactions(targetDetails).filter(function (reaction) {\n return CoursesCurriculum__Reaction.reactionableId(reaction) === CoursesCurriculum__Submission.id(submission);\n });\n var showComments = DomUtils.hasUrlParam(\"comment_id\") && Belt_Option.getWithDefault(DomUtils.getUrlParam(\"submission_id\"), \"\") === CoursesCurriculum__Submission.id(submission);\n var match$2 = CoursesCurriculum__Submission.hiddenAt(submission);\n tmp$1 = React.createElement(\"div\", {\n className: \"flex flex-col gap-4 items-start relative p-4\"\n }, React.createElement(\"div\", undefined, React.createElement(CoursesCurriculum__Reactions.make, {\n currentUser: currentUser,\n reactionableType: \"TimelineEvent\",\n reactionableId: CoursesCurriculum__Submission.id(submission),\n reactions: reactions\n })), React.createElement(\"div\", {\n className: \"curriculum-submission-comments__container relative flex w-full flex-col-reverse md:flex-row justify-end\"\n }, match$2 !== undefined ? React.createElement(\"div\", {\n className: \"inline-flex md:absolute z-1 justify-center md:justify-end text-xs pt-1.5\"\n }, React.createElement(\"p\", undefined, \"This submission was hidden by course moderators on \" + CoursesCurriculum__Submission.hiddenAtPretty(submission))) : null, React.createElement(CoursesCurriculum__SubmissionComments.make, {\n currentUser: currentUser,\n submissionId: CoursesCurriculum__Submission.id(submission),\n comments: comments,\n commentsInitiallyVisible: showComments\n })));\n } else {\n tmp$1 = null;\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 id: \"submission-\" + CoursesCurriculum__Submission.id(submission)\n }, React.createElement(\"div\", {\n className: \"rounded-lg bg-gray-50 border border-gray-200\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-100 rounded-t-lg flex justify-between items-end p-4\"\n }, React.createElement(\"h2\", {\n className: \"font-medium text-sm lg:text-base leading-tight\"\n }, completionType !== 2 ? tr(undefined, undefined, \"submission_number\") + String(totalSubmissions - index | 0) : tr(undefined, undefined, \"form_response_number\") + String(totalSubmissions - index | 0)), React.createElement(\"div\", {\n className: \"text-xs font-mdium inline-block px-3 py-1 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\", undefined, 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 })), tmp, Js_array.map((function (feedback) {\n var coach = Belt_Option.flatMap(CoursesCurriculum__Feedback.coachId(feedback), (function (id) {\n return Js_array.find((function (c) {\n return CoursesCurriculum__Coach.id(c) === id;\n }), coaches);\n }));\n var user = coach !== undefined ? Js_array.find((function (up) {\n return CoursesCurriculum__User.id(up) === CoursesCurriculum__Coach.userId(coach);\n }), users) : 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 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 ltr:mr me-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 ms-2 leading-tight self-end\"\n }, \"(\" + (coachTitle + \")\")) : null))), React.createElement(MarkdownBlock.make, {\n markdown: CoursesCurriculum__Feedback.feedback(feedback),\n className: \"ms-15\",\n profile: /* Permissive */0\n }));\n }), Js_array.filter((function (feedback) {\n return CoursesCurriculum__Feedback.submissionId(feedback) === CoursesCurriculum__Submission.id(submission);\n }), CoursesCurriculum__TargetDetails.feedback(targetDetails))), tmp$1)));\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 currentUser = Props.currentUser;\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 var completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails);\n return React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto mt-8\"\n }, React.createElement(\"div\", {\n className: \"flex justify-between items-end pb-2\"\n }, React.createElement(\"h4\", {\n className: \"text-sm md:text-base md:leading-tight font-semibold\"\n }, completionType !== 2 ? tr(undefined, undefined, \"your_submissions\") : tr(undefined, undefined, \"your_responses\")), 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 me-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 me-2\"\n }), React.createElement(\"span\", {\n className: \"hidden md:inline\"\n }, completionType !== 2 ? tr(undefined, undefined, \"add_another_submission\") : tr(undefined, undefined, \"add_another_response\")), 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 targetDetails: targetDetails,\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(currentUser, 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/* 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 Fetch from \"../../../../../node_modules/bs-fetch/src/Fetch.bs.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 DomUtils from \"../../../shared/utils/DomUtils.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as LoadingV2 from \"../../../shared/types/LoadingV2.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.js\";\nimport * as Pagination from \"../../../shared/utils/Pagination.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 GraphqlQuery from \"../../../shared/utils/GraphqlQuery.bs.js\";\nimport * as LoadingSpinner from \"../../../shared/components/LoadingSpinner.bs.js\";\nimport * as Caml_exceptions from \"../../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\nimport * as SkeletonLoading from \"../../../shared/components/SkeletonLoading.bs.js\";\nimport * as AuthenticityToken from \"../../../shared/utils/AuthenticityToken.bs.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__Submission from \"../types/CoursesCurriculum__Submission.bs.js\";\nimport * as CoursesCurriculum__CurrentUser from \"../types/CoursesCurriculum__CurrentUser.bs.js\";\nimport * as CoursesCurriculum__TargetStatus from \"../types/CoursesCurriculum__TargetStatus.bs.js\";\nimport * as CoursesCurriculum__TargetDetails from \"../types/CoursesCurriculum__TargetDetails.bs.js\";\nimport NoPeerSubmissionsSvg from \"../images/no-peer-submissions.svg\";\nimport * as CoursesCurriculum__LatestSubmission from \"../types/CoursesCurriculum__LatestSubmission.bs.js\";\nimport * as CoursesCurriculum__DiscussSubmission from \"./CoursesCurriculum__DiscussSubmission.bs.js\";\nimport * as CoursesCurriculum__SubmissionBuilder from \"./CoursesCurriculum__SubmissionBuilder.bs.js\";\nimport * as CoursesCurriculum__DiscussionSubmission from \"../types/CoursesCurriculum__DiscussionSubmission.bs.js\";\nimport AssignmentDiscussionIconSvg from \"../images/assignment-discussion-icon.svg\";\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\nvar UnexpectedResponse = /* @__PURE__ */Caml_exceptions.create(\"CoursesCurriculum__Overlay.UnexpectedResponse\");\n\nimport \"./CoursesCurriculum__Overlay.css\"\n;\n\nvar noPeerSubmissionIcon = NoPeerSubmissionsSvg;\n\nvar assignmentDiscussionIcon = AssignmentDiscussionIconSvg;\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 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 PagedSubmission = Pagination.Make(Item);\n\nvar initialState_loading = LoadingV2.empty(undefined);\n\nvar initialState = {\n loading: initialState_loading,\n targetDetails: undefined,\n tab: /* Learn */0,\n peerSubmissions: /* Unloaded */0,\n totalEntriesCount: 0\n};\n\nfunction reducer(state, action) {\n if (typeof action === \"number\") {\n switch (action) {\n case /* ResetState */0 :\n case /* PerformQuickNavigation */1 :\n return initialState;\n case /* BeginReloading */2 :\n return {\n loading: LoadingV2.setReloading(state.loading),\n targetDetails: state.targetDetails,\n tab: state.tab,\n peerSubmissions: state.peerSubmissions,\n totalEntriesCount: state.totalEntriesCount\n };\n case /* BeginLoadingMore */3 :\n return {\n loading: /* LoadingMore */0,\n targetDetails: state.targetDetails,\n tab: state.tab,\n peerSubmissions: state.peerSubmissions,\n totalEntriesCount: state.totalEntriesCount\n };\n \n }\n } else {\n switch (action.TAG | 0) {\n case /* Select */0 :\n return {\n loading: state.loading,\n targetDetails: state.targetDetails,\n tab: action._0,\n peerSubmissions: state.peerSubmissions,\n totalEntriesCount: state.totalEntriesCount\n };\n case /* SetTargetDetails */1 :\n return {\n loading: state.loading,\n targetDetails: action._0,\n tab: state.tab,\n peerSubmissions: state.peerSubmissions,\n totalEntriesCount: state.totalEntriesCount\n };\n case /* AddSubmission */2 :\n if (action._0) {\n return {\n loading: state.loading,\n targetDetails: OptionUtils.map(CoursesCurriculum__TargetDetails.clearPendingUserIds, state.targetDetails),\n tab: state.tab,\n peerSubmissions: state.peerSubmissions,\n totalEntriesCount: state.totalEntriesCount\n };\n } else {\n return state;\n }\n case /* LoadSubmissions */3 :\n var newSubmissions = action._2;\n var match = state.loading;\n var updatedSubmissions = match ? newSubmissions : Curry._1(PagedSubmission.toArray, state.peerSubmissions).concat(newSubmissions);\n return {\n loading: LoadingV2.setNotLoading(state.loading),\n targetDetails: state.targetDetails,\n tab: state.tab,\n peerSubmissions: Curry._3(PagedSubmission.make, updatedSubmissions, action._1, action._0),\n totalEntriesCount: action._3\n };\n \n }\n }\n}\n\nfunction closeOverlay(course) {\n RescriptReactRouter.push(\"/courses/\" + (CoursesCurriculum__Course.id(course) + \"/curriculum\"));\n}\n\nvar Raw = {};\n\nvar query = \"query DiscussionSubmissionsQuery($targetId: ID!, $after: String) {\\ndiscussionSubmissions(targetId: $targetId, first: 10, after: $after) {\\nnodes {\\nid \\ntargetId \\ncreatedAt \\nhiddenAt \\nchecklist \\nfiles {\\nid \\nname \\nurl \\n}\\n\\nuserNames \\nusers {\\nid \\nname \\ntitle \\navatarUrl \\n}\\n\\nteamName \\ncomments {\\nid \\nuserId \\nsubmissionId \\ncomment \\nreactions {\\nid \\nuserId \\nreactionableId \\nreactionValue \\nreactionableType \\nuserName \\nupdatedAt \\n}\\n\\nmoderationReports {\\nid \\nuserId \\nreportableId \\nreason \\nreportableType \\n}\\n\\nuser {\\nid \\nname \\ntitle \\navatarUrl \\n}\\n\\ncreatedAt \\nhiddenAt \\nhiddenById \\n}\\n\\nreactions {\\nid \\nuserId \\nreactionableId \\nreactionValue \\nreactionableType \\nuserName \\nupdatedAt \\n}\\n\\nanonymous \\npinned \\nmoderationReports {\\nid \\nuserId \\nreportableId \\nreason \\nreportableType \\n}\\n\\n}\\n\\npageInfo {\\nendCursor \\nhasNextPage \\n}\\n\\ntotalCount \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.discussionSubmissions;\n var value$2 = value$1.nodes;\n var value$3 = value$1.pageInfo;\n var value$4 = value$3.endCursor;\n return {\n discussionSubmissions: {\n nodes: Js_array.map((function (value) {\n var value$1 = value.hiddenAt;\n var value$2 = value.files;\n var value$3 = value.users;\n var value$4 = value.teamName;\n var value$5 = value.comments;\n var value$6 = value.reactions;\n var value$7 = value.moderationReports;\n return {\n id: value.id,\n targetId: value.targetId,\n createdAt: value.createdAt,\n hiddenAt: !(value$1 == null) ? Caml_option.some(value$1) : undefined,\n checklist: value.checklist,\n files: Js_array.map((function (value) {\n return {\n id: value.id,\n name: value.name,\n url: value.url\n };\n }), value$2),\n userNames: value.userNames,\n users: Js_array.map((function (value) {\n var value$1 = value.avatarUrl;\n return {\n id: value.id,\n name: value.name,\n title: value.title,\n avatarUrl: !(value$1 == null) ? value$1 : undefined\n };\n }), value$3),\n teamName: !(value$4 == null) ? value$4 : undefined,\n comments: !(value$5 == null) ? Js_array.map((function (value) {\n var value$1 = value.reactions;\n var value$2 = value.moderationReports;\n var value$3 = value.user;\n var value$4 = value$3.avatarUrl;\n var value$5 = value.hiddenAt;\n var value$6 = value.hiddenById;\n return {\n id: value.id,\n userId: value.userId,\n submissionId: value.submissionId,\n comment: value.comment,\n reactions: Js_array.map((function (value) {\n var value$1 = value.reactionableId;\n return {\n id: value.id,\n userId: value.userId,\n reactionableId: !(value$1 == null) ? value$1 : undefined,\n reactionValue: value.reactionValue,\n reactionableType: value.reactionableType,\n userName: value.userName,\n updatedAt: value.updatedAt\n };\n }), value$1),\n moderationReports: Js_array.map((function (value) {\n var value$1 = value.reportableId;\n return {\n id: value.id,\n userId: value.userId,\n reportableId: !(value$1 == null) ? value$1 : undefined,\n reason: value.reason,\n reportableType: value.reportableType\n };\n }), value$2),\n user: {\n id: value$3.id,\n name: value$3.name,\n title: value$3.title,\n avatarUrl: !(value$4 == null) ? value$4 : undefined\n },\n createdAt: value.createdAt,\n hiddenAt: !(value$5 == null) ? Caml_option.some(value$5) : undefined,\n hiddenById: !(value$6 == null) ? value$6 : undefined\n };\n }), value$5) : undefined,\n reactions: !(value$6 == null) ? Js_array.map((function (value) {\n var value$1 = value.reactionableId;\n return {\n id: value.id,\n userId: value.userId,\n reactionableId: !(value$1 == null) ? value$1 : undefined,\n reactionValue: value.reactionValue,\n reactionableType: value.reactionableType,\n userName: value.userName,\n updatedAt: value.updatedAt\n };\n }), value$6) : undefined,\n anonymous: value.anonymous,\n pinned: value.pinned,\n moderationReports: Js_array.map((function (value) {\n var value$1 = value.reportableId;\n return {\n id: value.id,\n userId: value.userId,\n reportableId: !(value$1 == null) ? value$1 : undefined,\n reason: value.reason,\n reportableType: value.reportableType\n };\n }), value$7)\n };\n }), value$2),\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.discussionSubmissions;\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 = Js_array.map((function (value) {\n var value$1 = value.moderationReports;\n var moderationReports = Js_array.map((function (value) {\n var value$1 = value.reportableType;\n var value$2 = value.reason;\n var value$3 = value.reportableId;\n var reportableId = value$3 !== undefined ? value$3 : null;\n var value$4 = value.userId;\n var value$5 = value.id;\n return {\n id: value$5,\n userId: value$4,\n reportableId: reportableId,\n reason: value$2,\n reportableType: value$1\n };\n }), value$1);\n var value$2 = value.pinned;\n var value$3 = value.anonymous;\n var value$4 = value.reactions;\n var reactions = value$4 !== undefined ? Js_array.map((function (value) {\n var value$1 = value.updatedAt;\n var value$2 = value.userName;\n var value$3 = value.reactionableType;\n var value$4 = value.reactionValue;\n var value$5 = value.reactionableId;\n var reactionableId = value$5 !== undefined ? value$5 : null;\n var value$6 = value.userId;\n var value$7 = value.id;\n return {\n id: value$7,\n userId: value$6,\n reactionableId: reactionableId,\n reactionValue: value$4,\n reactionableType: value$3,\n userName: value$2,\n updatedAt: value$1\n };\n }), value$4) : null;\n var value$5 = value.comments;\n var comments = value$5 !== undefined ? Js_array.map((function (value) {\n var value$1 = value.hiddenById;\n var hiddenById = value$1 !== undefined ? value$1 : null;\n var value$2 = value.hiddenAt;\n var hiddenAt = value$2 !== undefined ? Caml_option.valFromOption(value$2) : null;\n var value$3 = value.createdAt;\n var value$4 = value.user;\n var value$5 = value$4.avatarUrl;\n var avatarUrl = value$5 !== undefined ? value$5 : null;\n var value$6 = value$4.title;\n var value$7 = value$4.name;\n var value$8 = value$4.id;\n var user = {\n id: value$8,\n name: value$7,\n title: value$6,\n avatarUrl: avatarUrl\n };\n var value$9 = value.moderationReports;\n var moderationReports = Js_array.map((function (value) {\n var value$1 = value.reportableType;\n var value$2 = value.reason;\n var value$3 = value.reportableId;\n var reportableId = value$3 !== undefined ? value$3 : null;\n var value$4 = value.userId;\n var value$5 = value.id;\n return {\n id: value$5,\n userId: value$4,\n reportableId: reportableId,\n reason: value$2,\n reportableType: value$1\n };\n }), value$9);\n var value$10 = value.reactions;\n var reactions = Js_array.map((function (value) {\n var value$1 = value.updatedAt;\n var value$2 = value.userName;\n var value$3 = value.reactionableType;\n var value$4 = value.reactionValue;\n var value$5 = value.reactionableId;\n var reactionableId = value$5 !== undefined ? value$5 : null;\n var value$6 = value.userId;\n var value$7 = value.id;\n return {\n id: value$7,\n userId: value$6,\n reactionableId: reactionableId,\n reactionValue: value$4,\n reactionableType: value$3,\n userName: value$2,\n updatedAt: value$1\n };\n }), value$10);\n var value$11 = value.comment;\n var value$12 = value.submissionId;\n var value$13 = value.userId;\n var value$14 = value.id;\n return {\n id: value$14,\n userId: value$13,\n submissionId: value$12,\n comment: value$11,\n reactions: reactions,\n moderationReports: moderationReports,\n user: user,\n createdAt: value$3,\n hiddenAt: hiddenAt,\n hiddenById: hiddenById\n };\n }), value$5) : null;\n var value$6 = value.teamName;\n var teamName = value$6 !== undefined ? value$6 : null;\n var value$7 = value.users;\n var users = Js_array.map((function (value) {\n var value$1 = value.avatarUrl;\n var avatarUrl = value$1 !== undefined ? value$1 : null;\n var value$2 = value.title;\n var value$3 = value.name;\n var value$4 = value.id;\n return {\n id: value$4,\n name: value$3,\n title: value$2,\n avatarUrl: avatarUrl\n };\n }), value$7);\n var value$8 = value.userNames;\n var value$9 = value.files;\n var files = Js_array.map((function (value) {\n var value$1 = value.url;\n var value$2 = value.name;\n var value$3 = value.id;\n return {\n id: value$3,\n name: value$2,\n url: value$1\n };\n }), value$9);\n var value$10 = value.checklist;\n var value$11 = value.hiddenAt;\n var hiddenAt = value$11 !== undefined ? Caml_option.valFromOption(value$11) : null;\n var value$12 = value.createdAt;\n var value$13 = value.targetId;\n var value$14 = value.id;\n return {\n id: value$14,\n targetId: value$13,\n createdAt: value$12,\n hiddenAt: hiddenAt,\n checklist: value$10,\n files: files,\n userNames: value$8,\n users: users,\n teamName: teamName,\n comments: comments,\n reactions: reactions,\n anonymous: value$3,\n pinned: value$2,\n moderationReports: moderationReports\n };\n }), value$6);\n var discussionSubmissions = {\n nodes: nodes,\n pageInfo: pageInfo,\n totalCount: value$2\n };\n return {\n discussionSubmissions: discussionSubmissions\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.after;\n return {\n targetId: inp.targetId,\n after: a !== undefined ? a : undefined\n };\n}\n\nfunction makeVariables(targetId, after, param) {\n return {\n targetId: targetId,\n after: after\n };\n}\n\nvar DiscussionSubmissionsQuery_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 DiscussionSubmissionsQuery_Graphql_error = include.Graphql_error;\n\nvar DiscussionSubmissionsQuery_decodeNotification = include.decodeNotification;\n\nvar DiscussionSubmissionsQuery_decodeObject = include.decodeObject;\n\nvar DiscussionSubmissionsQuery_decodeNotifications = include.decodeNotifications;\n\nvar DiscussionSubmissionsQuery_decodeErrors = include.decodeErrors;\n\nvar DiscussionSubmissionsQuery_flashNotifications = include.flashNotifications;\n\nvar DiscussionSubmissionsQuery_sendQuery = include.sendQuery;\n\nvar DiscussionSubmissionsQuery_query = include.query;\n\nvar DiscussionSubmissionsQuery_fetch = include.$$fetch;\n\nvar DiscussionSubmissionsQuery = {\n DiscussionSubmissionsQuery_inner: DiscussionSubmissionsQuery_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: DiscussionSubmissionsQuery_Graphql_error,\n decodeNotification: DiscussionSubmissionsQuery_decodeNotification,\n decodeObject: DiscussionSubmissionsQuery_decodeObject,\n decodeNotifications: DiscussionSubmissionsQuery_decodeNotifications,\n decodeErrors: DiscussionSubmissionsQuery_decodeErrors,\n flashNotifications: DiscussionSubmissionsQuery_flashNotifications,\n sendQuery: DiscussionSubmissionsQuery_sendQuery,\n query: DiscussionSubmissionsQuery_query,\n $$fetch: DiscussionSubmissionsQuery_fetch,\n make: make\n};\n\nfunction getDiscussionSubmissions(send, cursor, targetId) {\n Js_promise.then_((function (response) {\n Curry._1(send, {\n TAG: /* LoadSubmissions */3,\n _0: response.discussionSubmissions.pageInfo.endCursor,\n _1: response.discussionSubmissions.pageInfo.hasNextPage,\n _2: Js_array.map(CoursesCurriculum__DiscussionSubmission.decode, response.discussionSubmissions.nodes),\n _3: response.discussionSubmissions.totalCount\n });\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n targetId: targetId,\n after: cursor\n }));\n}\n\nfunction reloadSubmissions(send, targetId) {\n Curry._1(send, /* BeginReloading */2);\n getDiscussionSubmissions(send, undefined, targetId);\n}\n\nfunction handleUrlParam(key, prefix, send, targetDetails) {\n var paramValue = DomUtils.getUrlParam(key);\n var elementId = prefix + Belt_Option.getWithDefault(paramValue, \"\");\n var element = document.getElementById(elementId);\n if (element == null) {\n Rollbar.error(prefix + \" not found\");\n return ;\n }\n var completionType = CoursesCurriculum__TargetDetails.computeCompletionType(targetDetails);\n Curry._1(send, {\n TAG: /* Select */0,\n _0: /* Complete */{\n _0: completionType\n }\n });\n element.scrollIntoView();\n element.classList.add(\"element--highlighted\");\n}\n\nfunction loadTargetDetails(target, currentUser, send, param) {\n Js_promise.then_((function (json) {\n var targetDetails = CoursesCurriculum__TargetDetails.decode(json);\n Curry._1(send, {\n TAG: /* SetTargetDetails */1,\n _0: targetDetails\n });\n if (CoursesCurriculum__CurrentUser.isParticipant(currentUser) && CoursesCurriculum__TargetDetails.discussion(targetDetails)) {\n reloadSubmissions(send, CoursesCurriculum__Target.id(target));\n }\n var hasCommentParam = DomUtils.hasUrlParam(\"comment_id\");\n var hasSubmissionParam = DomUtils.hasUrlParam(\"submission_id\");\n if (hasCommentParam && hasSubmissionParam) {\n handleUrlParam(\"comment_id\", \"comment-\", send, targetDetails);\n }\n if (hasSubmissionParam && !hasCommentParam) {\n handleUrlParam(\"submission_id\", \"submission-\", send, targetDetails);\n }\n return Promise.resolve(targetDetails);\n }), Js_promise.then_(Fetch.$$Response.json, fetch(\"/targets/\" + (CoursesCurriculum__Target.id(target) + \"/details_v2\"))));\n}\n\nfunction submissionsLoadedData(totalSubmissionsCount, loadedSubmissionsCount) {\n return React.createElement(\"p\", {\n className: \"inline-block mt-8 mx-auto text-gray-800 text-xs px-2 text-center font-semibold\",\n tabIndex: 0\n }, totalSubmissionsCount === loadedSubmissionsCount ? t(undefined, loadedSubmissionsCount, \"submissions_fully_loaded_text\") : t([\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, currentUser, callBack) {\n return React.createElement(\"div\", {\n className: \"discussion-submissions__container space-y-16\"\n }, ArrayUtils.isEmpty(submissions) ? React.createElement(\"div\", {\n className: \"bg-gray-50/50 rounded-lg mt-2 p-4\"\n }, React.createElement(\"img\", {\n className: \"w-64 mx-auto\",\n src: noPeerSubmissionIcon\n }), React.createElement(\"p\", {\n className: \"text-center text-gray-600\"\n }, t(undefined, undefined, \"no_peer_submissions\"))) : submissions.map(function (submission) {\n return React.createElement(CoursesCurriculum__DiscussSubmission.make, {\n currentUser: currentUser,\n submission: submission,\n callBack: callBack,\n key: CoursesCurriculum__DiscussionSubmission.id(submission)\n });\n }), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"text-center pb-4\"\n }, submissionsLoadedData(state.totalEntriesCount, submissions.length)), ArrayUtils.isEmpty(submissions)));\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 /* SubmitForm */2 :\n return t(undefined, undefined, \"completion_tab_submit_form\");\n case /* NoAssignment */3 :\n return \"\";\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 switch (completionType) {\n case /* Evaluated */0 :\n return t(undefined, undefined, \"completion_tab_submissions\");\n case /* TakeQuiz */1 :\n return t(undefined, undefined, \"completion_tab_quiz_result\");\n case /* SubmitForm */2 :\n return t(undefined, undefined, \"completion_tab_form_response\");\n case /* NoAssignment */3 :\n break;\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.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.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 }), 50);\n}\n\nfunction handleTablink(send, _event) {\n Curry._1(send, {\n TAG: /* Select */0,\n _0: /* Learn */0\n });\n 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.equal(tab, state.tab),\n className: tabClasses(tab, state.tab),\n role: \"tab\",\n onClick: (function (_e) {\n 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 >= 3 ? null : 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 >= 3 || !Caml_obj.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 }, Js_array.map((function (selection) {\n return tabButton(selection, state, send, targetStatus);\n }), selectableTabs(targetDetails)), tmp);\n}\n\nfunction addSubmission(target, state, send, addSubmissionCB, submission) {\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._1(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(false, CoursesCurriculum__Target.id(target)));\n case /* Pending */1 :\n return Curry._1(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(true, CoursesCurriculum__Target.id(target)));\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) {\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._1(addSubmissionCB, CoursesCurriculum__LatestSubmission.make(false, CoursesCurriculum__Target.id(target)));\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-3 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: \"ms-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 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(\"div\", {\n className: \"flex flex-col md:flex-row items-start md:items-center font-medium leading-snug\"\n }, CoursesCurriculum__Target.milestone(target) ? React.createElement(\"div\", {\n className: \"flex items-center flex-shrink-0 text-xs font-medium bg-yellow-100 text-yellow-800 border border-yellow-300 px-1.5 md:px-2 py-1 rounded-md mr-2\"\n }, React.createElement(Icon.make, {\n className: \"if i-milestone-solid text-sm\"\n }), React.createElement(\"span\", {\n className: \"ms-1\"\n }, ts(undefined, undefined, \"milestone_label\"))) : null, React.createElement(\"h1\", {\n className: \"text-base leading-snug md:me-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 = Js_array.filter((function (target) {\n return Js_array.includes(CoursesCurriculum__Target.id(target), prerequisiteTargetIds);\n }), targets);\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 }, Js_array.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 Curry._1(send, /* ResetState */0);\n }),\n children: null,\n key: CoursesCurriculum__Target.id(target)\n }, React.createElement(\"span\", {\n className: \"font-semibold leading-snug\"\n }, CoursesCurriculum__Target.title(target)), renderTargetStatus(targetStatus));\n }), prerequisiteTargets)));\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 addPageRead(targetId, markReadCB) {\n Js_promise.then_((function (response) {\n if (response.ok) {\n Curry._1(markReadCB, targetId);\n return Promise.resolve(undefined);\n } else {\n return Promise.reject({\n RE_EXN_ID: UnexpectedResponse,\n _1: response.status\n });\n }\n }), fetch(\"/targets/\" + (targetId + \"/mark_as_read\"), Fetch.RequestInit.make(/* Post */2, [\n [\n \"X-CSRF-Token\",\n AuthenticityToken.fromHead(undefined)\n ],\n [\n \"Content-Type\",\n \"application/json\"\n ]\n ], undefined, undefined, undefined, undefined, /* SameOrigin */1, undefined, undefined, undefined, undefined, undefined)(undefined)));\n}\n\nfunction learnSection(send, targetDetails, targetRead, tab, author, courseId, targetId, markReadCB, targetStatus, completionType, preview) {\n var match = CoursesCurriculum__TargetStatus.status(targetStatus);\n var suffixLinkInfo;\n if (typeof match === \"number\" && !(match === 2 || match === 1)) {\n switch (completionType) {\n case /* Evaluated */0 :\n suffixLinkInfo = [\n /* Complete */{\n _0: completionType\n },\n t(undefined, undefined, \"learn_cta_submit_work\"),\n \"fas fa-feather-alt\"\n ];\n break;\n case /* TakeQuiz */1 :\n suffixLinkInfo = [\n /* Complete */{\n _0: completionType\n },\n t(undefined, undefined, \"learn_cta_take_quiz\"),\n \"fas fa-tasks\"\n ];\n break;\n case /* SubmitForm */2 :\n suffixLinkInfo = [\n /* Complete */{\n _0: completionType\n },\n t(undefined, undefined, \"learn_cta_submit_form\"),\n \"fas fa-feather-alt\"\n ];\n break;\n case /* NoAssignment */3 :\n suffixLinkInfo = undefined;\n break;\n \n }\n } else {\n suffixLinkInfo = undefined;\n }\n var linkToTab = Belt_Option.mapWithDefault(suffixLinkInfo, null, (function (param) {\n var tab = param[0];\n return React.createElement(\"button\", {\n className: \"cursor-pointer flex rounded btn-success text-base justify-center w-full font-semibold 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 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] + \" me-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 }), React.createElement(\"div\", {\n className: \"flex flex-wrap gap-4 mt-4\"\n }, targetRead ? React.createElement(\"div\", {\n className: \"flex rounded text-base italic space-x-2 bg-gray-50 text-gray-600 items-center justify-center w-full font-semibold p-3\"\n }, React.createElement(\"span\", {\n className: \"w-5 h-5 flex items-center justify-center\",\n title: \"Marked read\"\n }, React.createElement(\"svg\", {\n className: \"w-5 h-5 text-gray-500\",\n height: \"16\",\n width: \"16\",\n fill: \"currentColor\",\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, React.createElement(\"path\", {\n d: \"M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z\"\n }), React.createElement(\"path\", {\n d: \"m5.354 7.146.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z\"\n }))), React.createElement(\"span\", undefined, t(undefined, undefined, \"marked_read\"))) : React.createElement(\"button\", {\n className: \"btn btn-default flex space-x-2 text-base w-full p-3 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 curriculum-overlay__learn-submit-btn\",\n disabled: preview || !CoursesCurriculum__TargetStatus.readable(targetStatus),\n onClick: (function (param) {\n addPageRead(targetId, markReadCB);\n })\n }, React.createElement(\"span\", {\n className: \"w-2 h-2 inline-block rounded-full bg-blue-600\"\n }), React.createElement(\"span\", undefined, t(undefined, undefined, \"mark_as_read\"))), 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 < 3)) {\n return \"hidden\";\n } else {\n return \"\";\n }\n}\n\nfunction completeSection(state, send, target, targetDetails, targetStatus, addSubmissionCB, evaluationCriteria, coaches, users, preview, completionType, currentUser) {\n var addVerifiedSubmissionCB = function (param) {\n return addVerifiedSubmission(target, state, send, addSubmissionCB, param);\n };\n var targetId = CoursesCurriculum__Target.id(target);\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 {\n switch (completionType) {\n case /* Evaluated */0 :\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 targetDetails: targetDetails,\n addSubmissionCB: (function (param) {\n return addSubmission(target, state, send, addSubmissionCB, param);\n }),\n preview: preview,\n checklist: CoursesCurriculum__TargetDetails.checklist(targetDetails),\n key: \"courses-curriculum-submission-form\"\n })\n ];\n break;\n case /* TakeQuiz */1 :\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 break;\n case /* SubmitForm */2 :\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 targetDetails: targetDetails,\n addSubmissionCB: (function (param) {\n return addSubmission(target, state, send, addSubmissionCB, param);\n }),\n preview: preview,\n checklist: CoursesCurriculum__TargetDetails.checklist(targetDetails),\n key: \"courses-curriculum-submission-form\"\n })\n ];\n break;\n case /* NoAssignment */3 :\n exit = 1;\n break;\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 >= 3) {\n exit = 1;\n } else {\n tmp = React.createElement(CoursesCurriculum__SubmissionsAndFeedback.make, {\n currentUser: currentUser,\n targetDetails: targetDetails,\n target: target,\n evaluationCriteria: evaluationCriteria,\n addSubmissionCB: (function (param) {\n return addSubmission(target, state, send, addSubmissionCB, param);\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 = null;\n }\n var tmp$1;\n if (CoursesCurriculum__TargetDetails.discussion(targetDetails) && CoursesCurriculum__CurrentUser.isParticipant(currentUser)) {\n var submissions = state.peerSubmissions;\n var tmp$2;\n if (typeof submissions === \"number\") {\n tmp$2 = 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$2 = React.createElement(\"div\", undefined, submissionsList(submissions._0, state, currentUser, (function (param) {\n return getDiscussionSubmissions(send, undefined, param);\n })), 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 */3);\n getDiscussionSubmissions(send, cursor, targetId);\n })\n }, t(undefined, undefined, \"button_load_more\"))), ArrayUtils.isEmpty(times._0)) : React.createElement(\"div\", undefined, SkeletonLoading.multiple(1, SkeletonLoading.card(undefined, undefined))));\n } else {\n tmp$2 = React.createElement(\"div\", undefined, submissionsList(submissions._0, state, currentUser, (function (param) {\n return getDiscussionSubmissions(send, undefined, param);\n })));\n }\n var match$2 = state.peerSubmissions;\n var tmp$3;\n if (typeof match$2 === \"number\") {\n tmp$3 = null;\n } else {\n var times$1 = state.loading;\n var loading = times$1 ? ArrayUtils.isNotEmpty(times$1._0) : false;\n tmp$3 = React.createElement(LoadingSpinner.make, {\n loading: loading\n });\n }\n tmp$1 = React.createElement(\"div\", {\n className: \"border-t mt-12\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, React.createElement(\"h4\", {\n className: \"text-base md:text-lg font-semibold pt-12 pb-4\"\n }, t(undefined, undefined, \"submissions_peers\")), React.createElement(\"div\", undefined, tmp$2), tmp$3));\n } else {\n tmp$1 = null;\n }\n return React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: completeSectionClasses(state.tab, completionType)\n }, CoursesCurriculum__TargetDetails.discussion(targetDetails) ? React.createElement(\"div\", {\n className: \"bg-primary-100 max-w-3xl mx-auto rounded-lg px-4 md:px-6 py-4 flex flex-col-reverse sm:flex-row items-start md:items-center justify-between\"\n }, React.createElement(\"div\", {\n className: \"sm:me-12 mt-2 sm:mt-0\"\n }, React.createElement(\"h3\", {\n className: \"leading-tight font-semibold\"\n }, t(undefined, undefined, \"discussion_assignment_notice.title\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 pt-1\"\n }, t(undefined, undefined, \"discussion_assignment_notice.description\"))), React.createElement(\"div\", {\n className: \"shrink-0 w-16 sm:w-32 me-4 sm:me-0\"\n }, React.createElement(\"img\", {\n className: \"object-contain mx-auto\",\n src: assignmentDiscussionIcon\n }))) : null, React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, tmp), tmp$1));\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 }, Js_array.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 }), pendingUserIds)));\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.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: \"rtl:rotate-180 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 Belt_Option.mapWithDefault((element == null) ? undefined : Caml_option.some(element), undefined, (function (element) {\n element.scrollTop = 0.0;\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: \"mx-auto max-w-3xl flex px-3 lg:px-0\",\n id: \"target-navigation\"\n }, React.createElement(\"div\", {\n className: \"w-1/3 me-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 ms-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) {\n Curry._1(send, {\n TAG: /* AddSubmission */2,\n _0: CoursesCurriculum__Target.role(target)\n });\n return Curry._1(addSubmissionCB, submission);\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 targetRead = Props.targetRead;\n var markReadCB = Props.markReadCB;\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 currentUser = Props.currentUser;\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, currentUser, send, undefined);\n }), [CoursesCurriculum__Target.id(target)]);\n React.useEffect(function () {\n ScrollLock.activate(undefined);\n return (function (param) {\n 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: \"mx-auto mt-6 md:mt-8 px-3 lg:px-0\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, learnSection(send, targetDetails$1, targetRead, state.tab, author, CoursesCurriculum__Course.id(course), CoursesCurriculum__Target.id(target), markReadCB, targetStatus, completionType, preview)), React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\n }, discussSection(target, targetDetails$1, state.tab)), completeSection(state, send, target, targetDetails$1, targetStatus, (function (param) {\n return updatePendingUserIdsWhenAddingSubmission(send, target, addSubmissionCB, param);\n }), evaluationCriteria, coaches, users, preview, completionType, currentUser)), 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-50 top-0 start-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$1 = CoursesCurriculum__Overlay;\n\nexport {\n UnexpectedSubmissionStatus ,\n UnexpectedResponse ,\n TargetStatus ,\n noPeerSubmissionIcon ,\n assignmentDiscussionIcon ,\n str ,\n t ,\n ts ,\n Item ,\n PagedSubmission ,\n initialState ,\n reducer ,\n closeOverlay ,\n DiscussionSubmissionsQuery ,\n getDiscussionSubmissions ,\n reloadSubmissions ,\n handleUrlParam ,\n loadTargetDetails ,\n submissionsLoadedData ,\n submissionsList ,\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 addPageRead ,\n learnSection ,\n discussSection ,\n completeSectionClasses ,\n completeSection ,\n renderPendingStudents ,\n handlePendingStudents ,\n performQuickNavigation ,\n navigationLink ,\n scrollOverlayToTop ,\n quickNavigationLinks ,\n updatePendingUserIdsWhenAddingSubmission ,\n make$1 as make,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 flex items-center justify-center \" + (\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, setSelectedLevelId, preview) {\n return Js_array.map((function (level) {\n var icon = preview ? \"fas fa-eye\" : (\n CoursesCurriculum__Level.isUnlocked(level) ? \"inline-block\" : \"fas fa-lock text-gray-600\"\n );\n return React.createElement(\"button\", {\n key: CoursesCurriculum__Level.id(level),\n className: \"flex focus:outline-none p-2 w-full whitespace-normal\",\n onClick: (function (param) {\n Curry._1(setSelectedLevelId, CoursesCurriculum__Level.id(level));\n })\n }, React.createElement(\"span\", {\n className: \"me-2 mt-px\"\n }, React.createElement(FaIcon.make, {\n classes: \"fa-fw \" + icon\n })), levelName(level));\n }), orderedLevels);\n}\n\nfunction untabbedLevelSelector(selectedLevel, orderedLevels, 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 truncate w-0\"\n }, levelName(selectedLevel)), React.createElement(FaIcon.make, {\n classes: \"fas fa-caret-down ms-1\"\n }));\n return React.createElement(Dropdown.make, {\n selected: selected,\n contents: selectableLevels(orderedLevels, 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, selectedLevel, setSelectedLevelId, showLevelZero, setShowLevelZero, levelZero, preview) {\n var selected = function (hideCaret) {\n return React.createElement(\"button\", {\n className: \"rounded-s-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 ms-1\" + (\n hideCaret ? \" invisible\" : \"\"\n )\n }));\n };\n var numberedLevelSelector = showLevelZero ? React.createElement(\"div\", {\n className: \"cursor-pointer text-sm grow rounded-s-lg hover:bg-gray-50 hover:text-primary-500\",\n onClick: (function (param) {\n Curry._1(setShowLevelZero, false);\n })\n }, selected(true)) : React.createElement(Dropdown.make, {\n selected: selected(false),\n contents: selectableLevels(orderedLevels, setSelectedLevelId, preview),\n className: \"cursor-pointer grow rounded-s-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-s rounded-e-lg bg-white border-gray-300 font-semibold truncate hover:bg-gray-50 hover:text-primary-500 \" + levelZeroSelectorClasses(showLevelZero),\n onClick: (function (_e) {\n Curry._1(setShowLevelZero, true);\n })\n }, CoursesCurriculum__Level.name(levelZero))\n ];\n}\n\nfunction CoursesCurriculum__LevelSelector(Props) {\n var levels = Props.levels;\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(Js_array.filter((function (l) {\n return CoursesCurriculum__Level.number(l) !== 0;\n }), levels));\n return React.createElement(\"div\", {\n className: \"bg-gray-50 px-3 py-2 mt-3 md:px-0 sticky top-0 z-10\"\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, selectedLevel, setSelectedLevelId, showLevelZero, setShowLevelZero, levelZero, preview) : untabbedLevelSelector(selectedLevel, orderedLevels, 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/* react Not a pure module */\n","export default \"__VITE_ASSET__BY_iT8zi__\"","export default \"__VITE_ASSET__Brs5iiVl__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M300.4%2084.8c-21.3.2-42.5%203.1-63.1%208.6-54.6%2014.3-107.6%2045.4-149.2%2087.6-42.2%2042.8-68.6%2093.1-74.3%20141.7C7%20380.3%2028.9%20429.5%2074%20457.7m102.2%2024.5c19.9-.8%2039.6-3.8%2058.9-8.9C301%20456%20359.8%20418.4%20403.2%20365.9c41.5-50.5%2061.8-109%2055.6-160.5-4.6-39.8-24.7-72.3-58.1-94'%20fill='none'%20stroke='%23b08ee6'%20stroke-width='4'%20stroke-miterlimit='10'/%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20d='M238.4%20304.4c2.6-7.8%207.1-14.8%2013-20.4%202.2%205.1%206.9%208.7%2012.4%209.7%206.4%201.1%2012.9-1.8%2016.3-7.3%202.8-4.6%203.2-10.4%201-15.3%207.7-.5%2015.3%201%2022.3%204.2%2021.8%2010.2%2032.5%2036.7%2024.6%2060-8.6%2025.3-35.6%2039.4-60.6%2030.7-24.1-8.5-37.5-36.3-29-61.6zM197%20161.9c6.9-3.3%209-11.6%204.9-18.7l-43.5-74.5c-4.4-7.6-14.1-11.5-21.6-8.6s-10%2011.6-5.4%2019.3l45.1%2075.5c2.7%204.6%207.5%207.6%2012.8%208.2%202.7.4%205.3%200%207.7-1.2zm98.8-24.1v-73c-.2-7.5-5.4-13.9-12.7-15.6-7.1-1.4-12.9%203.3-12.9%2010.7v74.5c.1%207.5%205.6%2013.7%2012.9%2014.9%206.1.9%2011.7-3.4%2012.6-9.4.1-.7.2-1.4.1-2.1zm78.5%2038.8l31.2-53.5c3-5.1%201.4-12.7-3.5-16.9-4.9-4.3-11.5-3.6-14.6%201.5l-32.2%2054c-3.3%205.5-1.6%2013.3%203.8%2017.4%201.7%201.3%203.7%202.2%205.8%202.4%203.9.4%207.6-1.5%209.5-4.9z'%20fill='%234d1e9a'/%3e%3cpath%20d='M420%20290.4c-24.4-38.4-79.5-111.7-150.3-118.8-79.6-8-157.2%2068.6-197.2%20116.1-16.6%2019.7-16.6%2046.8%200%2066.1%2040%2046.4%20117.5%20120.7%20197.2%20110.3%2070.8-9.2%20125.9-84%20150.3-123.3%209.5-15.5%209.5-35%200-50.4zm-62.5%2035.3c-3.8%2042.7-35.9%2079.9-78.1%2088.2-61.9%2012-118.5-38.4-111.5-105.4%205.1-49.1%2045.4-86.5%2092.1-88.3%2058.1-2.3%20102.6%2048.4%2097.5%20105.5z'%20fill='%23d69e2e'/%3e%3cg%20stroke-width='4'%20stroke-miterlimit='10'%20stroke='%231f0d40'%3e%3cpath%20d='M246.1%20304.4c2.6-7.8%207-14.8%2013-20.4a16.86%2016.86%200%200%200%2012.4%209.7c6.4%201.1%2012.9-1.8%2016.3-7.3%202.8-4.6%203.2-10.4%201-15.3%207.7-.5%2015.3%201%2022.3%204.2%2021.8%2010.2%2032.5%2036.7%2024.7%2060-8.6%2025.3-35.6%2039.4-60.6%2030.7-24.2-8.5-37.6-36.3-29.1-61.6z'%20fill='%23976ae2'/%3e%3cpath%20d='M443%20292.3c-24.4-38.4-79.5-111.7-150.3-118.8-79.6-8-157.2%2068.6-197.2%20116.1-16.6%2019.7-16.6%2046.8%200%2066%2040%2046.4%20117.5%20120.7%20197.2%20110.3%2070.8-9.2%20125.9-84%20150.3-123.3%209.5-15.4%209.5-34.9%200-50.3zm-62.5%2035.3c-3.8%2042.7-35.9%2079.9-78.1%2088.1-61.9%2012.1-118.5-38.4-111.5-105.4%205.1-49.1%2045.4-86.5%2092.1-88.3%2058-2.2%20102.6%2048.5%2097.5%20105.6z'%20fill='%23ecc94b'/%3e%3cpath%20d='M206.5%20158.1c6.9-3.3%209-11.6%204.9-18.7L168%2064.9c-4.4-7.6-14.1-11.5-21.6-8.6s-10%2011.6-5.4%2019.3l45.1%2075.5c2.7%204.6%207.5%207.6%2012.8%208.2%202.6.4%205.3-.1%207.6-1.2zm98.9-24.1V61c-.2-7.5-5.4-13.9-12.7-15.6-5.6-1.4-11.3%202-12.6%207.6-.2%201-.3%202-.3%203.1v74.5c.1%207.5%205.6%2013.7%2012.9%2014.9%206.1.9%2011.7-3.4%2012.6-9.5.1-.7.1-1.3.1-2zm78.5%2038.8l31.2-53.5c3-5.1%201.4-12.7-3.5-16.9-4.9-4.3-11.5-3.6-14.6%201.5l-32.2%2054c-3.3%205.5-1.5%2013.3%203.8%2017.4%201.7%201.3%203.7%202.2%205.8%202.4%203.9.4%207.6-1.5%209.5-4.9z'%20fill='%23976ae2'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D_QIZKF0__\"","// Generated by ReScript, PLEASE EDIT WITH CARE\n\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\";\n\nvar courseEndedImage = CourseEndedSvg;\n\nvar courseCompleteImage = CourseCompleteSvg;\n\nvar accessEndedImage = AccessEndedSvg;\n\nvar previewModeImage = PreviewModeSvg;\n\nfunction icon(t) {\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 /* Nothing */4 :\n return \"\";\n \n }\n}\n\nexport {\n courseEndedImage ,\n courseCompleteImage ,\n accessEndedImage ,\n previewModeImage ,\n icon ,\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 React from \"react\";\nimport * as CoursesCurriculum__Notice from \"../types/CoursesCurriculum__Notice.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 ms-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 CoursesCurriculum__NoticeManager(Props) {\n var notice = Props.notice;\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 /* Nothing */4 :\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 make ,\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 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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\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 targetStatusClasses(targetStatus) {\n var statusClasses = \"curriculum__target-status--\" + CoursesCurriculum__TargetStatus.statusClassesSufix(targetStatus);\n return \"curriculum__target-status px-1 md:px-3 py-px ms-4 h-6 \" + statusClasses;\n}\n\nfunction rendertarget(target, statusOfTargets, targetsRead, 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 var targetRead = Js_array.includes(targetId, targetsRead);\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-3 md:p-6 flex flex-1 items-start 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: \"inline-flex items-center space-x-3\"\n }, targetRead ? React.createElement(\"span\", {\n className: \"w-5 h-5 flex items-center justify-center\",\n title: \"Marked read\"\n }, React.createElement(\"svg\", {\n className: \"w-4 h-4 text-gray-500\",\n height: \"16\",\n width: \"16\",\n fill: \"currentColor\",\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, React.createElement(\"path\", {\n d: \"M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z\"\n }), React.createElement(\"path\", {\n d: \"m5.354 7.146.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z\"\n }))) : React.createElement(\"span\", {\n className: \"w-5 h-5 flex items-center justify-center\",\n title: \"Not read yet\"\n }, React.createElement(\"span\", {\n className: \"w-2 h-2 inline-block rounded-full bg-blue-600\"\n })), React.createElement(\"span\", {\n className: \"text-sm md:text-base font-medium\"\n }, CoursesCurriculum__Target.title(target))), React.createElement(\"div\", {\n className: \"flex\"\n }, CoursesCurriculum__Target.milestone(target) ? React.createElement(\"div\", {\n className: \"flex items-center flex-shrink-0 text-xs font-medium border border-yellow-200 bg-yellow-100 text-yellow-800 ms-3 px-1.5 md:px-2 py-1 rounded-md\"\n }, React.createElement(Icon.make, {\n className: \"if i-milestone-solid text-sm\"\n }), React.createElement(\"span\", {\n className: \"hidden md:block ms-1\"\n }, ts(undefined, undefined, \"milestone_label\"))) : null, 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-s 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, targetsRead, author, courseId) {\n var targetGroupId = CoursesCurriculum__TargetGroup.id(targetGroup);\n var targets$1 = Js_array.filter((function (t) {\n return CoursesCurriculum__Target.targetGroupId(t) === targetGroupId;\n }), targets);\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 md:max-w-4xl 2xl:max-w-5xl mx-auto bg-white rounded-lg shadow-md relative overflow-hidden \"\n }, React.createElement(\"div\", {\n className: \"p-3 md:p-6 pt-5 text-center\"\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 })), Js_array.map((function (target) {\n return rendertarget(target, statusOfTargets, targetsRead, author, courseId);\n }), ArrayUtils.copyAndSort((function (t1, t2) {\n return CoursesCurriculum__Target.sortIndex(t1) - CoursesCurriculum__Target.sortIndex(t2) | 0;\n }), targets$1))));\n}\n\nfunction addSubmission(setState, latestSubmission) {\n return Curry._1(setState, (function (state) {\n var withoutSubmissionForThisTarget = Js_array.filter((function (s) {\n return CoursesCurriculum__LatestSubmission.targetId(s) !== CoursesCurriculum__LatestSubmission.targetId(latestSubmission);\n }), state.latestSubmissions);\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: Js_array.concat([latestSubmission], withoutSubmissionForThisTarget),\n statusOfTargets: state.statusOfTargets,\n targetsRead: state.targetsRead,\n notice: state.notice\n };\n }));\n}\n\nfunction addMarkRead(setState, markedReadTargetId) {\n return Curry._1(setState, (function (state) {\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n targetsRead: Js_array.concat([markedReadTargetId], state.targetsRead),\n notice: state.notice\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 issuedCertificate(course) {\n var csn = CoursesCurriculum__Course.certificateSerialNumber(course);\n if (csn !== undefined) {\n return React.createElement(\"div\", {\n className: \"max-w-3xl md:max-w-4xl 2xl:max-w-5xl 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: \"font-semibold 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: \"ms-2\"\n }, t(undefined, undefined, \"issued_certificate_button\"))));\n } else {\n return null;\n }\n}\n\nfunction computeNotice(course, student, preview) {\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 if (Belt_Option.isSome(CoursesCurriculum__Student.completedAt(student))) {\n return /* CourseComplete */2;\n } else {\n return /* Nothing */4;\n }\n}\n\nfunction navigationLink(direction, level, setState) {\n var match = direction === \"Next\" ? [\n undefined,\n t(undefined, undefined, \"nav_aria_next_level\"),\n t(undefined, undefined, \"nav_long_next_level\"),\n t(undefined, undefined, \"nav_short_next_level\"),\n \"fa-arrow-right rtl:rotate-180\"\n ] : [\n \"fa-arrow-left rtl:rotate-180\",\n t(undefined, undefined, \"nav_aria_previous_level\"),\n t(undefined, undefined, \"nav_long_previous_level\"),\n t(undefined, undefined, \"nav_short_previous_level\"),\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(\"button\", {\n \"aria-label\": match[1],\n className: \"block w-full focus:outline-none p-4 text-center border rounded-lg bg-gray-100 hover:bg-primary-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 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 targetsRead: state.targetsRead,\n notice: state.notice\n };\n }));\n })\n }, arrow(match[0]), React.createElement(\"span\", {\n className: \"mx-2 hidden md:inline\"\n }, match[2]), React.createElement(\"span\", {\n className: \"mx-2 inline md:hidden\"\n }, match[3]), arrow(match[4]));\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 me-2\"\n }, navigationLink(\"Previous\", previous, setState)),\n React.createElement(\"div\", {\n key: \"next\",\n className: \"w-1/2 ms-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 currentUser = Props.currentUser;\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 targetsRead = Props.targetsRead;\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 = Js_array.find((function (l) {\n return CoursesCurriculum__Level.number(l) === 0;\n }), levels);\n var studentLevelId = CoursesCurriculum__Student.levelId(student);\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, param$1) {\n return CoursesCurriculum__TargetStatus.compute(preview, student, course, levels, targetGroups, targets, param, param$1);\n };\n var initialRender = React.useRef(true);\n var match$2 = React.useState(function () {\n var statusOfTargets = computeTargetStatus(targetsRead, 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 targetsRead: targetsRead,\n notice: computeNotice(course, student, preview)\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.targetsRead, 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 targetsRead: state.targetsRead,\n notice: computeNotice(course, student, preview)\n };\n }));\n }\n }), [\n state.latestSubmissions,\n state.targetsRead\n ]);\n var targetGroupsInLevel = Js_array.filter((function (tg) {\n return CoursesCurriculum__TargetGroup.levelId(tg) === currentLevelId;\n }), targetGroups);\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 var targetRead = Js_array.includes(CoursesCurriculum__Target.id(selectedTarget), state.targetsRead);\n tmp = React.createElement(CoursesCurriculum__Overlay.make, {\n target: selectedTarget,\n course: course,\n targetStatus: targetStatus,\n addSubmissionCB: (function (param) {\n return addSubmission(setState, param);\n }),\n targets: targets,\n targetRead: targetRead,\n markReadCB: (function (param) {\n return addMarkRead(setState, param);\n }),\n statusOfTargets: state.statusOfTargets,\n users: users,\n evaluationCriteria: evaluationCriteria,\n coaches: coaches,\n preview: preview,\n author: author,\n currentUser: currentUser\n });\n } else {\n tmp = null;\n }\n return React.createElement(\"div\", {\n \"aria-label\": \"Curriculum\",\n className: \"md:h-screen bg-gray-50 md:pt-18 pb-20 md:pb-8 overflow-y-auto\",\n role: \"main\"\n }, tmp, issuedCertificate(course), React.createElement(CoursesCurriculum__NoticeManager.make, {\n notice: state.notice\n }), [\n React.createElement(\"div\", {\n key: \"curriculum-body\",\n className: \"relative\"\n }, React.createElement(CoursesCurriculum__LevelSelector.make, {\n levels: levels,\n selectedLevel: selectedLevel,\n preview: preview,\n setSelectedLevelId: (function (selectedLevelId) {\n Curry._1(setState, (function (state) {\n return {\n selectedLevelId: selectedLevelId,\n showLevelZero: state.showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n targetsRead: state.targetsRead,\n notice: state.notice\n };\n }));\n }),\n showLevelZero: state.showLevelZero,\n setShowLevelZero: (function (showLevelZero) {\n Curry._1(setState, (function (state) {\n return {\n selectedLevelId: state.selectedLevelId,\n showLevelZero: showLevelZero,\n latestSubmissions: state.latestSubmissions,\n statusOfTargets: state.statusOfTargets,\n targetsRead: state.targetsRead,\n notice: state.notice\n };\n }));\n }),\n levelZero: levelZero\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: \"ms-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.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\"))) : Js_array.map((function (targetGroup) {\n return renderTargetGroup(targetGroup, targets, state.statusOfTargets, state.targetsRead, author, CoursesCurriculum__Course.id(course));\n }), CoursesCurriculum__TargetGroup.sort(targetGroupsInLevel))\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 ts ,\n targetStatusClasses ,\n rendertarget ,\n renderTargetGroup ,\n addSubmission ,\n addMarkRead ,\n handleLockedLevel ,\n issuedCertificate ,\n computeNotice ,\n navigationLink ,\n quickNavigationLinks ,\n make ,\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__CurrentUser from \"../courses/curricula/types/CoursesCurriculum__CurrentUser.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\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"currentUser\", CoursesCurriculum__CurrentUser.decode, json),\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(\"targetsRead\", (function (param) {\n return Json_decode.array(Json_decode.string, 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 ];\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 currentUser: match[0],\n author: match[1],\n course: match[2],\n levels: match[3],\n targetGroups: match[4],\n targets: match[5],\n submissions: match[6],\n student: match[8],\n coaches: match[9],\n users: match[10],\n evaluationCriteria: match[11],\n preview: match[12],\n accessLockedLevels: match[13],\n targetsRead: match[7]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\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/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction make(id, name, maxGrade) {\n return {\n id: id,\n name: name,\n maxGrade: maxGrade\n };\n}\n\nfunction makeFromJs(ecData) {\n return Js_array.map((function (ec) {\n return {\n id: ec.id,\n name: ec.name,\n maxGrade: ec.maxGrade\n };\n }), ecData);\n}\n\nexport {\n id ,\n name ,\n make ,\n makeFromJs ,\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 cohortName(t) {\n return t.cohortName;\n}\n\nfunction evaluationCriteria(t) {\n return t.evaluationCriteria;\n}\n\nfunction totalPageReads(t) {\n return t.totalPageReads;\n}\n\nfunction totalTargets(t) {\n return t.totalTargets;\n}\n\nfunction assignmentsPendingReview(t) {\n return t.assignmentsPendingReview;\n}\n\nfunction assignmentsCompleted(t) {\n return t.assignmentsCompleted;\n}\n\nfunction totalAssignments(t) {\n return t.totalAssignments;\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 makeAverageGrade(evaluationCriterionId, grade) {\n return {\n evaluationCriterionId: evaluationCriterionId,\n grade: grade\n };\n}\n\nfunction milestonesCompletionStatus(t) {\n return t.milestonesCompletionStatus;\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 = quizScores.map(function (quizScore) {\n var fractionArray = $$Array.of_list($$String.split_on_char(/* '/' */47, quizScore));\n var numerator = Caml_format.float_of_string(Caml_array.get(fractionArray, 0));\n var denominator = Caml_format.float_of_string(Caml_array.get(fractionArray, 1));\n return numerator / denominator * 100.0;\n }).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 make(id, cohortName, evaluationCriteria, totalPageReads, totalTargets, assignmentsCompleted, totalAssignments, quizScores, averageGrades, assignmentsPendingReview, milestonesCompletionStatus) {\n return {\n id: id,\n cohortName: cohortName,\n evaluationCriteria: evaluationCriteria,\n totalPageReads: totalPageReads,\n totalTargets: totalTargets,\n assignmentsPendingReview: assignmentsPendingReview,\n assignmentsCompleted: assignmentsCompleted,\n totalAssignments: totalAssignments,\n quizScores: quizScores,\n averageGrades: averageGrades,\n milestonesCompletionStatus: milestonesCompletionStatus\n };\n}\n\nexport {\n id ,\n cohortName ,\n evaluationCriteria ,\n totalPageReads ,\n totalTargets ,\n assignmentsPendingReview ,\n assignmentsCompleted ,\n totalAssignments ,\n quizzesAttempted ,\n quizScores ,\n averageGrades ,\n makeAverageGrade ,\n milestonesCompletionStatus ,\n evaluationCriterionForGrade ,\n gradeValue ,\n gradeAsPercentage ,\n computeAverageQuizScore ,\n averageQuizScore ,\n make ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 : Js_array.slice(0, 3, coaches);\n var otherCoaches;\n if (coaches.length > 4) {\n var names = Js_array.map((function (coach) {\n return React.createElement(\"div\", {\n key: UserProxy.userId(coach)\n }, UserProxy.name(coach));\n }), Js_array.sliceFrom(3, coaches));\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: \"-me-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: \"-me-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/* react Not a pure module */\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 completed(t) {\n return t.completed;\n}\n\nfunction milestoneNumber(t) {\n return t.milestoneNumber;\n}\n\nfunction make(id, title, completed, milestoneNumber) {\n return {\n id: id,\n title: title,\n milestoneNumber: milestoneNumber,\n completed: completed\n };\n}\n\nfunction makeFromJs(data) {\n return data.map(function (data) {\n return make(data.id, data.title, data.completed, data.milestoneNumber);\n });\n}\n\nexport {\n id ,\n title ,\n completed ,\n milestoneNumber ,\n make ,\n makeFromJs ,\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 Icon from \"../../../shared/Icon.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 PfIcon from \"../../../packages/pf-icon/src/PfIcon.bs.js\";\nimport * as HelpIcon from \"../../../shared/components/HelpIcon.bs.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__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\";\nimport * as CoursesReport__MilestoneCompletionStatus from \"../types/CoursesReport__MilestoneCompletionStatus.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\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 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: \"ms-2 md:ms-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: \"mt-8\"\n }, React.createElement(\"p\", {\n className: \"text-sm 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 assignmentsCompletionStatus(overview) {\n var assignmentsCompleted = CoursesReport__StudentOverview.assignmentsCompleted(overview);\n var totalAssignments = CoursesReport__StudentOverview.totalAssignments(overview);\n var assignmentsPendingReview = CoursesReport__StudentOverview.assignmentsPendingReview(overview);\n var incompleteAssignments = ((totalAssignments | 0) - (assignmentsCompleted | 0) | 0) - assignmentsPendingReview | 0;\n var assignmentsCompletionPercent = String(assignmentsCompleted / totalAssignments * 100.0 | 0);\n return React.createElement(\"div\", {\n \"aria-label\": \"assignments-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-col gap-1\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(\"div\", undefined, doughnutChart(\"purple\", assignmentsCompletionPercent)), React.createElement(\"div\", {\n className: \"ms-4\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"count\",\n String(incompleteAssignments)\n ]], undefined, \"incomplete_assignments\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"targetsCount\",\n String(assignmentsPendingReview)\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(assignmentsCompleted | 0)\n ]], undefined, \"targets_completed\")))), React.createElement(\"div\", {\n className: \"text-sm font-semibold text-center\"\n }, ts(undefined, undefined, \"assignments\"))));\n}\n\nfunction pagesReadStatus(overview) {\n var totalPageReads = CoursesReport__StudentOverview.totalPageReads(overview);\n var totalTargets = CoursesReport__StudentOverview.totalTargets(overview);\n var pagesReadPercent = String(totalPageReads / totalTargets * 100.0 | 0);\n var pendingTargets = (totalTargets | 0) - (totalPageReads | 0) | 0;\n return React.createElement(\"div\", {\n \"aria-label\": \"targets-read-status\",\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 flex-col gap-1\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(\"div\", undefined, doughnutChart(\"purple\", pagesReadPercent)), React.createElement(\"div\", {\n className: \"ms-4\"\n }, React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"pagesUnread\",\n String(pendingTargets)\n ]], undefined, \"pages_unread\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold mt-1\"\n }, t([[\n \"pagesRead\",\n String(totalPageReads | 0)\n ]], undefined, \"pages_read\")))), React.createElement(\"div\", {\n className: \"text-sm font-semibold text-center\"\n }, ts(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\"\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: \"ms-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 milestonesCompletionStatus(overview) {\n var milestones = CoursesReport__StudentOverview.milestonesCompletionStatus(overview);\n var totalMilestones = milestones.length;\n var completedMilestones = milestones.filter(function (milestone) {\n return milestone.completed === true;\n }).length;\n var milestonesCompletionPercentage = String(completedMilestones / totalMilestones * 100.0 | 0);\n return React.createElement(\"div\", {\n className: \"flex items-center gap-2 flex-shrink-0\"\n }, React.createElement(\"p\", {\n className: \"text-xs font-medium text-gray-500\"\n }, String(completedMilestones) + \" / \" + String(totalMilestones), React.createElement(\"span\", {\n className: \"px-2 text-gray-300\"\n }, \"|\"), ts([[\n \"percentage\",\n milestonesCompletionPercentage\n ]], undefined, \"percentage_completed\")), React.createElement(\"div\", undefined, React.createElement(\"svg\", {\n className: \"courses-milestone-complete__doughnut-chart \",\n viewBox: \"0 0 36 36\"\n }, React.createElement(\"path\", {\n className: \"courses-milestone-complete__doughnut-chart-bg \",\n d: \"M18 2.0845\\n a 15.9155 15.9155 0 0 1 0 31.831\\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n }), React.createElement(\"path\", {\n className: \"courses-milestone-complete__doughnut-chart-stroke\",\n d: \"M18 2.0845\\n a 15.9155 15.9155 0 0 1 0 31.831\\n a 15.9155 15.9155 0 0 1 0 -31.831\",\n strokeDasharray: milestonesCompletionPercentage + \", 100\"\n }))));\n}\n\nfunction averageGradeCharts(evaluationCriteria, averageGrades) {\n return $$Array.map((function (grade) {\n var criterion = CoursesReport__StudentOverview.evaluationCriterionForGrade(grade, evaluationCriteria);\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 courses-report-overview__pie-chart--pass\",\n viewBox: \"0 0 32 32\"\n }, React.createElement(\"circle\", {\n className: \"courses-report-overview__pie-chart-circle courses-report-overview__pie-chart-circle--pass\",\n cx: \"16\",\n cy: \"16\",\n r: \"16\",\n strokeDasharray: CoursesReport__StudentOverview.gradeAsPercentage(grade, criterion) + \", 100\"\n })), React.createElement(\"span\", {\n className: \"ms-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 CoursesReport__Overview(Props) {\n var overviewData = Props.overviewData;\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 }, React.createElement(\"div\", {\n className: \"mt-8\"\n }, React.createElement(\"h6\", {\n className: \"text-sm font-semibold\"\n }, ts(undefined, undefined, \"cohort\")), React.createElement(\"div\", {\n className: \"max-w-auto shadow rounded-lg p-4 items-center mt-2 bg-white flex shrink gap-2\"\n }, React.createElement(\"div\", undefined, React.createElement(PfIcon.make, {\n className: \"if i-users-light font-normal text-lg\"\n })), React.createElement(\"p\", {\n className: \"text-sm font-semibold break-all\"\n }, CoursesReport__StudentOverview.cohortName(overview)))), React.createElement(\"div\", {\n className: \"mt-8\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, ts(undefined, undefined, \"targets_overview\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap mt-2\"\n }, assignmentsCompletionStatus(overview), pagesReadStatus(overview), quizPerformanceChart(CoursesReport__StudentOverview.averageQuizScore(overview), CoursesReport__StudentOverview.quizzesAttempted(overview)))), ArrayUtils.isNotEmpty(CoursesReport__StudentOverview.averageGrades(overview)) ? React.createElement(\"div\", {\n className: \"mt-8\"\n }, React.createElement(\"h6\", {\n className: \"text-sm 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), React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex justify-between mt-8\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, React.createElement(\"span\", undefined, ts(undefined, undefined, \"milestones\")), React.createElement(HelpIcon.make, {\n className: \"ml-2\",\n responsiveAlignment: {\n TAG: /* Responsive */1,\n _0: /* AlignLeft */0,\n _1: /* AlignCenter */2\n },\n children: t(undefined, undefined, \"milestone_status_help\")\n })), milestonesCompletionStatus(overview)), React.createElement(\"div\", {\n className: \"grid gap-2 mt-2\"\n }, ArrayUtils.copyAndSort((function (a, b) {\n return CoursesReport__MilestoneCompletionStatus.milestoneNumber(a) - CoursesReport__MilestoneCompletionStatus.milestoneNumber(b) | 0;\n }), CoursesReport__StudentOverview.milestonesCompletionStatus(overview)).map(function (data) {\n return React.createElement(\"a\", {\n className: \"flex gap-2 items-center justify-between p-2 rounded-md border bg-gray-100 hover:bg-primary-100 hover:border-primary-500 hover:text-primary-500 transition\",\n href: \"/targets/\" + CoursesReport__MilestoneCompletionStatus.id(data)\n }, React.createElement(\"div\", {\n className: \"flex items-center gap-2\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, ts(undefined, undefined, \"m\") + String(CoursesReport__MilestoneCompletionStatus.milestoneNumber(data))), React.createElement(\"p\", {\n className: \"max-w-[16ch] sm:max-w-[40ch] md:max-w-[32ch] lg:max-w-[56ch] 2xl:max-w-[64ch] truncate text-sm\"\n }, CoursesReport__MilestoneCompletionStatus.title(data))), React.createElement(\"div\", {\n className: \"flex-shrink-0\"\n }, React.createElement(\"span\", {\n className: \"text-xs font-medium inline-flex items-center \" + (\n CoursesReport__MilestoneCompletionStatus.completed(data) ? \"text-green-700 bg-green-100 px-1 py-0.5 rounded\" : \"text-orange-700 bg-orange-100 px-1 py-0.5 rounded\"\n )\n }, React.createElement(Icon.make, {\n className: CoursesReport__MilestoneCompletionStatus.completed(data) ? \"if i-check-circle-solid text-green-600\" : \"if i-dashed-circle-light text-orange-600\"\n }), CoursesReport__MilestoneCompletionStatus.completed(data) ? React.createElement(\"span\", {\n className: \"ms-1\"\n }, t(undefined, undefined, \"milestone_completed\")) : React.createElement(\"span\", {\n className: \"ms-1\"\n }, t(undefined, undefined, \"milestone_pending\")))));\n })))));\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 ts ,\n avatar ,\n userInfo ,\n coachInfo ,\n doughnutChart ,\n assignmentsCompletionStatus ,\n pagesReadStatus ,\n quizPerformanceChart ,\n milestonesCompletionStatus ,\n averageGradeCharts ,\n make ,\n}\n/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../../../shared/utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\n\nfunction make(id, title, createdAt, status, targetId, targetRole, milestoneNumber) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n status: status,\n targetId: targetId,\n targetRole: targetRole,\n milestoneNumber: milestoneNumber\n };\n}\n\nfunction id(t) {\n return t.id;\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 milestoneNumber(t) {\n return t.milestoneNumber;\n}\n\nfunction makeFromJs(submissions) {\n return Js_array.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, status, submission.targetId, targetRole, submission.milestoneNumber);\n }), submissions);\n}\n\nexport {\n make ,\n id ,\n title ,\n status ,\n createdAt ,\n targetId ,\n targetRole ,\n createdAtPretty ,\n milestoneNumber ,\n makeFromJs ,\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\";\n\nfunction make(submissions, filter, sortDirection) {\n return {\n submissions: submissions,\n filter: filter,\n sortDirection: sortDirection\n };\n}\n\nfunction makeFilter(status) {\n return {\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 filterEq(status, filter) {\n return Caml_obj.equal(filter.status, status);\n}\n\nfunction needsReloading(selectedStatus, sortDirection, t) {\n if (typeof t === \"number\") {\n return true;\n }\n var data = t._0;\n return !(Caml_obj.equal(data.filter.status, selectedStatus) && data.sortDirection === sortDirection);\n}\n\nexport {\n make ,\n makeFilter ,\n partiallyLoaded ,\n fullyLoaded ,\n filterEq ,\n needsReloading ,\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 $$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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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__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, $sortDirection: SortDirection!) {\\nstudentSubmissions(studentId: $studentId, after: $after, first: 20, status: $status, sortDirection: $sortDirection) {\\nnodes {\\nid \\ncreatedAt \\ntargetId \\npassedAt \\ntitle \\nevaluatedAt \\nstudentIds \\nteamTarget \\nmilestoneNumber \\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: Js_array.map((function (value) {\n var value$1 = value.passedAt;\n var value$2 = value.evaluatedAt;\n var value$3 = value.studentIds;\n var value$4 = value.milestoneNumber;\n return {\n id: value.id,\n createdAt: value.createdAt,\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: Js_array.map((function (value) {\n return value;\n }), value$3),\n teamTarget: value.teamTarget,\n milestoneNumber: !(value$4 == null) ? value$4 : undefined\n };\n }), value$2),\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 = Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n var milestoneNumber = value$1 !== undefined ? value$1 : null;\n var value$2 = value.teamTarget;\n var value$3 = value.studentIds;\n var studentIds = Js_array.map((function (value) {\n return value;\n }), value$3);\n var value$4 = value.evaluatedAt;\n var evaluatedAt = value$4 !== undefined ? Caml_option.valFromOption(value$4) : null;\n var value$5 = value.title;\n var value$6 = value.passedAt;\n var passedAt = value$6 !== undefined ? Caml_option.valFromOption(value$6) : null;\n var value$7 = value.targetId;\n var value$8 = value.createdAt;\n var value$9 = value.id;\n return {\n id: value$9,\n createdAt: value$8,\n targetId: value$7,\n passedAt: passedAt,\n title: value$5,\n evaluatedAt: evaluatedAt,\n studentIds: studentIds,\n teamTarget: value$2,\n milestoneNumber: milestoneNumber\n };\n }), value$5);\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.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 sortDirection: a$2 === \"Descending\" ? \"Descending\" : \"Ascending\"\n };\n}\n\nfunction makeVariables(studentId, after, status, sortDirection, param) {\n return {\n studentId: studentId,\n after: after,\n status: status,\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 return tr(undefined, undefined, \"status\");\n}\n\nfunction value(t) {\n return statusString(t._0);\n}\n\nfunction searchString(t) {\n return \"status \" + statusString(t._0);\n}\n\nfunction color(t) {\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 targetStatus(targetStatus$1) {\n return /* TargetStatus */{\n _0: targetStatus$1\n };\n}\n\nvar Selectable = {\n label: label,\n value: value,\n searchString: searchString,\n color: color,\n targetStatus: targetStatus\n};\n\nvar Multiselect = MultiselectDropdown.Make(Selectable);\n\nfunction unselected(selectedStatus) {\n return $$Array.map(targetStatus, Js_array.filter((function (status) {\n return OptionUtils.mapWithDefault((function (selectedStatus) {\n return status !== selectedStatus;\n }), true, selectedStatus);\n }), [\n \"PendingReview\",\n \"Rejected\",\n \"Completed\"\n ]));\n}\n\nfunction selected(selectedStatus) {\n return OptionUtils.mapWithDefault((function (selectedStatus) {\n return [/* TargetStatus */{\n _0: selectedStatus\n }];\n }), [], selectedStatus);\n}\n\nfunction onSelectFilter(send, updateSelectedStatusCB, selectable) {\n Curry._1(send, /* UpdateFilterString */{\n _0: \"\"\n });\n return Curry._1(updateSelectedStatusCB, selectable._0);\n}\n\nfunction onDeselectFilter(updateSelectedStatusCB, selectable) {\n return Curry._1(updateSelectedStatusCB, undefined);\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:ms-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(selectedStatus) {\n if (selectedStatus !== undefined) {\n return tr(undefined, undefined, \"filter_by_another_status\");\n } else {\n return tr(undefined, undefined, \"filter_by_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, selectedStatus, sortDirection, nodes) {\n var updatedSubmissions = Js_array.concat(CoursesReport__Submission.makeFromJs(nodes), submissions);\n var filter = CoursesReport__Submissions.makeFilter(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, status, sortDirection, submissions, updateSubmissionsCB) {\n var status$1 = Belt_Option.flatMap(status, (function (status) {\n return status;\n }));\n Js_promise.then_((function (response) {\n updateStudentSubmissions(send, updateSubmissionsCB, response.studentSubmissions.pageInfo.endCursor, response.studentSubmissions.pageInfo.hasNextPage, submissions, status$1, sortDirection, response.studentSubmissions.nodes);\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n studentId: studentId,\n after: cursor,\n status: status$1,\n sortDirection: sortDirection\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-s-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, teamStudentIds) {\n return React.createElement(\"div\", undefined, $$Array.map((function (submission) {\n var studentIds = CoursesReport__Submission.targetRole(submission);\n var teamMismatch = studentIds ? Caml_obj.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 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:pe-2\"\n }, React.createElement(\"span\", {\n className: \"ms-1 font-semibold text-base\"\n }, Belt_Option.mapWithDefault(CoursesReport__Submission.milestoneNumber(submission), \"\", (function (number) {\n return ts(undefined, undefined, \"m\") + String(number) + \" - \";\n })) + CoursesReport__Submission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ms-px text-xs text-gray-900\"\n }, React.createElement(\"span\", {\n className: \"ms-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 pe-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 ps-3 \"\n }, tr(undefined, undefined, \"submission_not_considered\"), React.createElement(HelpIcon.make, {\n className: \"ms-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 ms-2 rtl:rotate-180\"\n }))) : null);\n }), submissions));\n}\n\nfunction showSubmissions(submissions, 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, teamStudentIds);\n }\n}\n\nfunction CoursesReport__SubmissionsList(Props) {\n var studentId = Props.studentId;\n var submissions = Props.submissions;\n var updateSubmissionsCB = Props.updateSubmissionsCB;\n var teamStudentIds = Props.teamStudentIds;\n var selectedStatus = Props.selectedStatus;\n var sortDirection = Props.sortDirection;\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(selectedStatus, sortDirection, submissions)) {\n Curry._1(send, /* BeginReloading */1);\n getStudentSubmissions(studentId, undefined, send, selectedStatus, sortDirection, [], updateSubmissionsCB);\n }\n \n }), [\n selected,\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 getStudentSubmissions(studentId, cursor, send, 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, teamStudentIds), tmp$1);\n } else {\n tmp = showSubmissions(submissions._0.submissions, 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 mt-4\",\n role: \"form\"\n }, React.createElement(\"div\", {\n className: \"flex-1\"\n }, React.createElement(\"label\", {\n className: \"block text-tiny font-semibold uppercase pb-1\",\n htmlFor: \"filter\"\n }, \"Filter by:\"), React.createElement(Multiselect.make, {\n id: \"filter\",\n placeholder: filterPlaceholder(selectedStatus),\n onChange: (function (filterString) {\n Curry._1(send, /* UpdateFilterString */{\n _0: filterString\n });\n }),\n value: state.filterString,\n unselected: unselected(selectedStatus),\n selected: selected(selectedStatus),\n onSelect: (function (param) {\n return onSelectFilter(send, updateSelectedStatusCB, param);\n }),\n onDeselect: (function (param) {\n return onDeselectFilter(updateSelectedStatusCB, param);\n }),\n defaultOptions: unselected(selectedStatus)\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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.js\";\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\";\nimport * as CoursesReport__EvaluationCriterion from \"../types/CoursesReport__EvaluationCriterion.bs.js\";\nimport * as CoursesReport__MilestoneCompletionStatus from \"../types/CoursesReport__MilestoneCompletionStatus.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: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\" : \"md:border-transparent\"\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 /* UpdateStatusFilter */2 :\n return {\n selectedTab: state.selectedTab,\n overviewData: state.overviewData,\n submissionsData: state.submissionsData,\n submissionsFilter: {\n selectedStatus: action._0\n },\n sortDirection: state.sortDirection\n };\n case /* UpdateSortDirection */3 :\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 \\n}\\n\\nstudent {\\ncohort {\\nname \\n}\\n\\n}\\n\\ntotalPageReads \\ntotalTargets \\nassignmentsCompleted \\nassignmentsPendingReview \\ntotalAssignments \\nquizScores \\naverageGrades {\\nevaluationCriterionId \\naverageGrade \\n}\\n\\nmilestonesCompletionStatus {\\nid \\ntitle \\ncompleted \\nmilestoneNumber \\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.cohort;\n var value$5 = value$1.quizScores;\n var value$6 = value$1.averageGrades;\n var value$7 = value$1.milestonesCompletionStatus;\n return {\n studentDetails: {\n evaluationCriteria: Js_array.map((function (value) {\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade\n };\n }), value$2),\n student: {\n cohort: {\n name: value$4.name\n }\n },\n totalPageReads: value$1.totalPageReads,\n totalTargets: value$1.totalTargets,\n assignmentsCompleted: value$1.assignmentsCompleted,\n assignmentsPendingReview: value$1.assignmentsPendingReview,\n totalAssignments: value$1.totalAssignments,\n quizScores: Js_array.map((function (value) {\n return value;\n }), value$5),\n averageGrades: Js_array.map((function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n averageGrade: value.averageGrade\n };\n }), value$6),\n milestonesCompletionStatus: Js_array.map((function (value) {\n return {\n id: value.id,\n title: value.title,\n completed: value.completed,\n milestoneNumber: value.milestoneNumber\n };\n }), value$7)\n }\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.studentDetails;\n var value$2 = value$1.milestonesCompletionStatus;\n var milestonesCompletionStatus = Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n var value$2 = value.completed;\n var value$3 = value.title;\n var value$4 = value.id;\n return {\n id: value$4,\n title: value$3,\n completed: value$2,\n milestoneNumber: value$1\n };\n }), value$2);\n var value$3 = value$1.averageGrades;\n var averageGrades = Js_array.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 }), value$3);\n var value$4 = value$1.quizScores;\n var quizScores = Js_array.map((function (value) {\n return value;\n }), value$4);\n var value$5 = value$1.totalAssignments;\n var value$6 = value$1.assignmentsPendingReview;\n var value$7 = value$1.assignmentsCompleted;\n var value$8 = value$1.totalTargets;\n var value$9 = value$1.totalPageReads;\n var value$10 = value$1.student;\n var value$11 = value$10.cohort;\n var value$12 = value$11.name;\n var cohort = {\n name: value$12\n };\n var student = {\n cohort: cohort\n };\n var value$13 = value$1.evaluationCriteria;\n var evaluationCriteria = Js_array.map((function (value) {\n var value$1 = value.maxGrade;\n var value$2 = value.name;\n var value$3 = value.id;\n return {\n id: value$3,\n name: value$2,\n maxGrade: value$1\n };\n }), value$13);\n var studentDetails = {\n evaluationCriteria: evaluationCriteria,\n student: student,\n totalPageReads: value$9,\n totalTargets: value$8,\n assignmentsCompleted: value$7,\n assignmentsPendingReview: value$6,\n totalAssignments: value$5,\n quizScores: quizScores,\n averageGrades: averageGrades,\n milestonesCompletionStatus: milestonesCompletionStatus\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 $$fetch = include.$$fetch;\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_make = include.make;\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: $$fetch,\n make: StudentReportOverviewQuery_make\n};\n\nfunction getOverviewData(studentId, send, param) {\n Js_promise.$$catch((function (param) {\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (response) {\n var evaluationCriteria = response.studentDetails.evaluationCriteria.map(function (evaluationCriterion) {\n return CoursesReport__EvaluationCriterion.make(evaluationCriterion.id, evaluationCriterion.name, evaluationCriterion.maxGrade);\n });\n var averageGrades = response.studentDetails.averageGrades.map(function (gradeData) {\n return CoursesReport__StudentOverview.makeAverageGrade(gradeData.evaluationCriterionId, gradeData.averageGrade);\n });\n var milestonesCompletionStatus = response.studentDetails.milestonesCompletionStatus.map(function (milestone) {\n return CoursesReport__MilestoneCompletionStatus.make(milestone.id, milestone.title, milestone.completed, milestone.milestoneNumber);\n });\n var overviewData = CoursesReport__StudentOverview.make(studentId, response.studentDetails.student.cohort.name, evaluationCriteria, response.studentDetails.totalPageReads, response.studentDetails.totalTargets, response.studentDetails.assignmentsCompleted, response.studentDetails.totalAssignments, response.studentDetails.quizScores, averageGrades, response.studentDetails.assignmentsPendingReview, milestonesCompletionStatus);\n Curry._1(send, {\n TAG: /* SaveOverviewData */0,\n _0: /* Loaded */{\n _0: overviewData\n }\n });\n return Promise.resolve(undefined);\n }), Curry._3($$fetch, undefined, undefined, {\n studentId: studentId\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 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 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: \"md:pt-18 pb-20 md:pb-5 px-4 bg-gray-50 md:h-screen overflow-y-auto\",\n role: \"main\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-50 sticky top-0 z-10\"\n }, React.createElement(\"div\", {\n className: \"max-w-3xl mx-auto\"\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(\"button\", {\n \"aria-selected\": state.selectedTab === \"Overview\",\n className: buttonClasses(state.selectedTab === \"Overview\"),\n role: \"tab\",\n onClick: (function (param) {\n 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 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 coaches: coaches\n }) : React.createElement(CoursesReport__SubmissionsList.make, {\n studentId: studentId,\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 selectedStatus: state.submissionsFilter.selectedStatus,\n sortDirection: state.sortDirection,\n updateSelectedStatusCB: (function (status) {\n Curry._1(send, {\n TAG: /* UpdateStatusFilter */2,\n _0: status\n });\n }),\n updateSortDirectionCB: (function (direction) {\n Curry._1(send, {\n TAG: /* UpdateSortDirection */3,\n _0: direction\n });\n })\n })));\n}\n\nvar make = CoursesReport__Root;\n\nexport {\n str ,\n tr ,\n buttonClasses ,\n reducer ,\n StudentReportOverviewQuery ,\n getOverviewData ,\n updateSubmissions ,\n make ,\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\";\n\nfunction decodeProps(json) {\n return [\n Json_decode.field(\"studentId\", Json_decode.string, 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 coaches: match[1],\n teamStudentIds: match[2]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\n}\n/* Not a pure module */\n","export default \"__VITE_ASSET__By0VdEmx__\"","// 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 }), 1000);\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-start\"\n }, React.createElement(\"div\", {\n className: \"print:hidden pb-4 md:pt-20\"\n }, React.createElement(\"button\", {\n className: \"btn btn-subtle 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: \"ms-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 mt-16 mx-auto px-3 max-w-5xl py-8\"\n }, React.createElement(\"div\", {\n className: \"border border-gray-300 rounded-lg bg-gray-50 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 pe-0 md:pe-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: \"ms-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: \"ms-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/* 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/* 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/* 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/* 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 Js_array from \"../../../node_modules/rescript/lib/es6/js_array.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 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 = Js_array.map(CoachesIndex__Course.id, Js_array.filter((function (course) {\n return Js_array.includes(CoachesIndex__Course.id(course), studentInCourseIds);\n }), courses));\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 = Js_array.map(makeCourse, Js_array.filter((function (course) {\n return !Belt_SetString.has(filterCourseIds, CoachesIndex__Course.id(course));\n }), courses));\n var trimmedInput = input.trim();\n var search = trimmedInput.length > 0 ? [{\n TAG: /* Search */1,\n _0: trimmedInput\n }] : [];\n return Js_array.concat(search, unselectedCourses);\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 start-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 : Js_array.filter((function (coach) {\n return !Belt_SetString.isEmpty(Belt_SetString.intersect(Belt_SetString.fromArray(CoachesIndex__Coach.courseIds(coach)), filterCourseIds));\n }), coaches);\n if (filterSearch === \"\") {\n return coaches$1;\n } else {\n return Js_array.filter((function (coach) {\n return StringUtils.includes(undefined, filterSearch, CoachesIndex__Coach.name(coach));\n }), coaches$1);\n }\n}\n\nfunction selected(courses, filterSearch, filterCourseIds) {\n var search = filterSearch === \"\" ? [] : [{\n TAG: /* Search */1,\n _0: filterSearch\n }];\n var selectedCourses = Js_array.map(makeCourse, Js_array.filter((function (course) {\n return Belt_SetString.has(filterCourseIds, CoachesIndex__Course.id(course));\n }), courses));\n return Js_array.concat(selectedCourses, search);\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 Js_array.find((function (coach) {\n return CoachesIndex__Coach.id(coach) === coachId;\n }), coaches);\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\", {\n className: \"md:pt-18\"\n }, 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 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 Curry._1(send, {\n TAG: /* SelectFilter */0,\n _0: selectable\n });\n }),\n onDeselect: (function (selectable) {\n 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 }, Js_array.map(card, coachesToShow))));\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/* 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/* 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 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 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 Belt_Option.forEach(filter.targetId, (function (targetId) {\n filterDict[\"targetId\"] = targetId;\n }));\n Belt_Option.forEach(filter.personalCoachId, (function (coachId) {\n filterDict[\"personalCoachId\"] = coachId;\n }));\n if (Caml_obj.notequal(filter.tab, \"Reviewed\")) {\n Belt_Option.forEach(filter.assignedCoachId, (function (assignedCoachId) {\n filterDict[\"assignedCoachId\"] = assignedCoachId;\n }));\n }\n if (Caml_obj.notequal(filter.tab, \"Pending\")) {\n Belt_Option.forEach(filter.reviewingCoachId, (function (reviewingCoachId) {\n filterDict[\"reviewingCoachId\"] = reviewingCoachId;\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 targetId ,\n sortCriterion ,\n sortDirection ,\n tab ,\n includeInactive ,\n assignedCoachId ,\n personalCoachId ,\n reviewingCoachId ,\n defaultDirection ,\n makeFromQueryParams ,\n toQueryString ,\n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../shared/utils/I18n.bs.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n var milestoneNumber = t.milestoneNumber;\n if (milestoneNumber !== undefined) {\n return I18n.t(undefined, undefined, undefined, \"shared.m\") + String(milestoneNumber) + \" - \" + t.title;\n } else {\n return t.title;\n }\n}\n\nfunction milestoneNumber(t) {\n return t.milestoneNumber;\n}\n\nfunction make(id, title, milestoneNumber) {\n return {\n id: id,\n title: title,\n milestoneNumber: milestoneNumber\n };\n}\n\nfunction makeFromJs(target) {\n return {\n id: target.id,\n title: target.title,\n milestoneNumber: target.milestoneNumber\n };\n}\n\nexport {\n id ,\n title ,\n milestoneNumber ,\n make ,\n makeFromJs ,\n}\n/* I18n Not a pure module */\n","export default \"__VITE_ASSET__BIZh4FaE__\"","// 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/* 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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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, Js_array.map((function (f) {\n return CoursesReview__Feedback.make(f.coachName, f.coachAvatarUrl, f.coachTitle, DateFns.decodeISO(f.createdAt), f.value);\n }), s.feedback), Js_array.map((function (g) {\n return CoursesReview__Grade.make(g.evaluationCriterionId, g.grade);\n }), s.grades), 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/* 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 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 milestoneNumber(t) {\n return t.milestoneNumber;\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, reviewer, milestoneNumber) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n userNames: userNames,\n status: status,\n teamName: teamName,\n reviewer: reviewer,\n milestoneNumber: milestoneNumber\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, Belt_Option.map(submission.reviewer, makeReviewerInfo), submission.milestoneNumber);\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.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 userNames ,\n teamName ,\n reviewer ,\n reviewerName ,\n reviewerAssignedAt ,\n milestoneNumber ,\n failed ,\n pendingReview ,\n feedbackSent ,\n createdAtPretty ,\n timeDistance ,\n make ,\n makeStatus ,\n makeReviewerInfo ,\n makeFromJS ,\n replace ,\n statusEq ,\n}\n/* DateFns Not a pure module */\n","export default \"__VITE_ASSET__b52mWmIQ__\"","// 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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\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 submissionStatus(submission) {\n var classes = \"shrink-0 leading-normal font-semibold px-2 py-px rounded \";\n var match = CoursesReview__IndexSubmission.pendingReview(submission) ? [\n classes + \"bg-orange-100 text-orange-800\",\n CoursesReview__IndexSubmission.timeDistance(submission)\n ] : (\n CoursesReview__IndexSubmission.failed(submission) ? [\n classes + \"bg-red-100 text-red-800\",\n t(undefined, undefined, \"rejected\")\n ] : [\n classes + \"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 me-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-s-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 }, Js_array.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:pe-4\"\n }, React.createElement(\"span\", {\n className: \"font-semibold text-sm md:text-base\"\n }, Belt_Option.mapWithDefault(CoursesReview__IndexSubmission.milestoneNumber(submission), \"\", (function (number) {\n return ts(undefined, undefined, \"m\") + String(number) + \" - \";\n })) + CoursesReview__IndexSubmission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ms-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: \"ms-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: \"ms-1\"\n }, t(undefined, undefined, \"assigned_to\"), React.createElement(\"span\", {\n className: \"ms-1 font-semibold\"\n }, CoursesReview__IndexSubmission.reviewerName(reviewer)), React.createElement(\"span\", {\n className: \"text-xs text-gray-800 ms-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 }), submissions));\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 ts ,\n str ,\n submissionStatus ,\n feedbackSentNotice ,\n submissionCardClasses ,\n showSubmission ,\n make ,\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 Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.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 Js_promise from \"../../../../node_modules/rescript/lib/es6/js_promise.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 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 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 coachesLoaded: state.coachesLoaded\n };\n case /* BeginLoadingMore */1 :\n return {\n loading: /* LoadingMore */0,\n submissions: state.submissions,\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 coachesLoaded: state.coachesLoaded\n };\n case /* BeginReloading */2 :\n return {\n loading: LoadingV2.setReloading(state.loading),\n submissions: state.submissions,\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 coachesLoaded: state.coachesLoaded\n };\n case /* SetTargetLoading */3 :\n return {\n loading: state.loading,\n submissions: state.submissions,\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 coachesLoaded: state.coachesLoaded\n };\n case /* SetCoachLoading */4 :\n return {\n loading: state.loading,\n submissions: state.submissions,\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 coachesLoaded: /* Loading */1\n };\n case /* ClearLoader */5 :\n return {\n loading: state.loading,\n submissions: state.submissions,\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 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 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 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 coaches: ArrayUtils.isEmpty(state.coaches) ? action._5 : 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 coachesLoaded: state.coachesLoaded\n };\n case /* LoadCoaches */2 :\n return {\n loading: state.loading,\n submissions: state.submissions,\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 coachesLoaded: /* Loaded */2\n };\n case /* LoadTargets */3 :\n return {\n loading: state.loading,\n submissions: state.submissions,\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 coachesLoaded: state.coachesLoaded\n };\n case /* SetLoader */4 :\n var loader = action._0;\n return {\n loading: state.loading,\n submissions: state.submissions,\n coaches: state.coaches,\n targets: state.targets,\n filterInput: loader ? tc(undefined, undefined, \"filter_input.\" + coachFilterTranslationKey(loader._0) + \"\") : tc(undefined, undefined, \"filter_input.target\"),\n totalEntriesCount: state.totalEntriesCount,\n filterLoading: state.filterLoading,\n filterLoader: state.filterLoader,\n targetsLoaded: state.targetsLoaded,\n coachesLoaded: state.coachesLoaded\n };\n \n }\n }\n}\n\nfunction updateParams(filter) {\n 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!, $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, personalCoachId: $personalCoachId, assignedCoachId: $assignedCoachId, reviewingCoachId: $reviewingCoachId, includeInactive: $includeInactive, first: 20, after: $after) {\\nnodes {\\nid \\ntitle \\nmilestoneNumber \\nuserNames \\nevaluatedAt \\npassedAt \\nfeedbackSent \\ncreatedAt \\nteamName \\nreviewer {\\nname \\nassignedAt \\n}\\n\\n}\\n\\npageInfo {\\nendCursor \\nhasNextPage \\n}\\n\\ntotalCount \\n}\\n\\ncoaches(coachIds: $coachIds, courseId: $courseId) {\\n...UserProxyFragment \\n}\\n\\ntargetInfo(targetId: $targetId, courseId: $courseId) {\\nid \\ntitle \\nmilestoneNumber \\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.coaches;\n var value$6 = value.targetInfo;\n var tmp;\n if (value$6 == null) {\n tmp = undefined;\n } else {\n var value$7 = value$6.milestoneNumber;\n tmp = {\n id: value$6.id,\n title: value$6.title,\n milestoneNumber: !(value$7 == null) ? value$7 : undefined\n };\n }\n return {\n submissions: {\n nodes: Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n var value$2 = value.evaluatedAt;\n var value$3 = value.passedAt;\n var value$4 = value.teamName;\n var value$5 = value.reviewer;\n return {\n id: value.id,\n title: value.title,\n milestoneNumber: !(value$1 == null) ? value$1 : undefined,\n userNames: value.userNames,\n evaluatedAt: !(value$2 == null) ? Caml_option.some(value$2) : undefined,\n passedAt: !(value$3 == null) ? Caml_option.some(value$3) : undefined,\n feedbackSent: value.feedbackSent,\n createdAt: value.createdAt,\n teamName: !(value$4 == null) ? value$4 : undefined,\n reviewer: !(value$5 == null) ? ({\n name: value$5.name,\n assignedAt: value$5.assignedAt\n }) : undefined\n };\n }), value$2),\n pageInfo: {\n endCursor: !(value$4 == null) ? value$4 : undefined,\n hasNextPage: value$3.hasNextPage\n },\n totalCount: value$1.totalCount\n },\n coaches: Js_array.map((function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }), value$5),\n targetInfo: tmp\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.milestoneNumber;\n var milestoneNumber = value$2 !== undefined ? value$2 : null;\n var value$3 = value$1.title;\n var value$4 = value$1.id;\n targetInfo = {\n id: value$4,\n title: value$3,\n milestoneNumber: milestoneNumber\n };\n } else {\n targetInfo = null;\n }\n var value$5 = value.coaches;\n var coaches = Js_array.map((function (value) {\n return UserProxy.Fragment.serialize(value);\n }), value$5);\n var value$6 = value.submissions;\n var value$7 = value$6.totalCount;\n var value$8 = value$6.pageInfo;\n var value$9 = value$8.hasNextPage;\n var value$10 = value$8.endCursor;\n var endCursor = value$10 !== undefined ? value$10 : null;\n var pageInfo = {\n endCursor: endCursor,\n hasNextPage: value$9\n };\n var value$11 = value$6.nodes;\n var nodes = Js_array.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.teamName;\n var teamName = value$4 !== undefined ? value$4 : null;\n var value$5 = value.createdAt;\n var value$6 = value.feedbackSent;\n var value$7 = value.passedAt;\n var passedAt = value$7 !== undefined ? Caml_option.valFromOption(value$7) : null;\n var value$8 = value.evaluatedAt;\n var evaluatedAt = value$8 !== undefined ? Caml_option.valFromOption(value$8) : null;\n var value$9 = value.userNames;\n var value$10 = value.milestoneNumber;\n var milestoneNumber = value$10 !== undefined ? value$10 : null;\n var value$11 = value.title;\n var value$12 = value.id;\n return {\n id: value$12,\n title: value$11,\n milestoneNumber: milestoneNumber,\n userNames: value$9,\n evaluatedAt: evaluatedAt,\n passedAt: passedAt,\n feedbackSent: value$6,\n createdAt: value$5,\n teamName: teamName,\n reviewer: reviewer\n };\n }), value$11);\n var submissions = {\n nodes: nodes,\n pageInfo: pageInfo,\n totalCount: value$7\n };\n return {\n submissions: submissions,\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.personalCoachId;\n var a$6 = inp.assignedCoachId;\n var a$7 = inp.reviewingCoachId;\n var a$8 = inp.includeInactive;\n var a$9 = inp.coachIds;\n var a$10 = 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 personalCoachId: a$5 !== undefined ? a$5 : undefined,\n assignedCoachId: a$6 !== undefined ? a$6 : undefined,\n reviewingCoachId: a$7 !== undefined ? a$7 : undefined,\n includeInactive: a$8 !== undefined ? a$8 : undefined,\n coachIds: a$9 !== undefined ? Js_array.map((function (b) {\n return b;\n }), a$9) : undefined,\n after: a$10 !== undefined ? a$10 : undefined\n };\n}\n\nfunction makeVariables(courseId, search, targetId, status, sortDirection, sortCriterion, 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 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 CoachesQuery($courseId: ID!) {\\ncoaches(courseId: $courseId) {\\n...UserProxyFragment \\n}\\n\\n}\\n\" + UserProxy.Fragment.query;\n\nfunction parse$1(value) {\n var value$1 = value.coaches;\n return {\n coaches: Js_array.map((function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }), value$1)\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.coaches;\n var coaches = Js_array.map((function (value) {\n return UserProxy.Fragment.serialize(value);\n }), value$1);\n return {\n coaches: coaches\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 CoachesQuery_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 CoachesQuery_Graphql_error = include$1.Graphql_error;\n\nvar CoachesQuery_decodeNotification = include$1.decodeNotification;\n\nvar CoachesQuery_decodeObject = include$1.decodeObject;\n\nvar CoachesQuery_decodeNotifications = include$1.decodeNotifications;\n\nvar CoachesQuery_decodeErrors = include$1.decodeErrors;\n\nvar CoachesQuery_flashNotifications = include$1.flashNotifications;\n\nvar CoachesQuery_sendQuery = include$1.sendQuery;\n\nvar CoachesQuery_query = include$1.query;\n\nvar CoachesQuery_fetch = include$1.$$fetch;\n\nvar CoachesQuery = {\n CoachesQuery_inner: CoachesQuery_inner,\n Raw: Raw$1,\n parse: parse$1,\n serialize: serialize$1,\n serializeVariables: serializeVariables$1,\n makeVariables: makeVariables$1,\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$1\n};\n\nvar Raw$2 = {};\n\nvar query$2 = \"query ReviewedTargetsInfoQuery($courseId: ID!) {\\nreviewedTargetsInfo(courseId: $courseId) {\\nid \\ntitle \\nmilestoneNumber \\n}\\n\\n}\\n\";\n\nfunction parse$2(value) {\n var value$1 = value.reviewedTargetsInfo;\n return {\n reviewedTargetsInfo: Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n return {\n id: value.id,\n title: value.title,\n milestoneNumber: !(value$1 == null) ? value$1 : undefined\n };\n }), value$1)\n };\n}\n\nfunction serialize$2(value) {\n var value$1 = value.reviewedTargetsInfo;\n var reviewedTargetsInfo = Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n var milestoneNumber = value$1 !== undefined ? value$1 : null;\n var value$2 = value.title;\n var value$3 = value.id;\n return {\n id: value$3,\n title: value$2,\n milestoneNumber: milestoneNumber\n };\n }), value$1);\n return {\n reviewedTargetsInfo: reviewedTargetsInfo\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 ReviewedTargetsInfoQuery_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 ReviewedTargetsInfoQuery_Graphql_error = include$2.Graphql_error;\n\nvar ReviewedTargetsInfoQuery_decodeNotification = include$2.decodeNotification;\n\nvar ReviewedTargetsInfoQuery_decodeObject = include$2.decodeObject;\n\nvar ReviewedTargetsInfoQuery_decodeNotifications = include$2.decodeNotifications;\n\nvar ReviewedTargetsInfoQuery_decodeErrors = include$2.decodeErrors;\n\nvar ReviewedTargetsInfoQuery_flashNotifications = include$2.flashNotifications;\n\nvar ReviewedTargetsInfoQuery_sendQuery = include$2.sendQuery;\n\nvar ReviewedTargetsInfoQuery_query = include$2.query;\n\nvar ReviewedTargetsInfoQuery_fetch = include$2.$$fetch;\n\nvar ReviewedTargetsInfoQuery = {\n ReviewedTargetsInfoQuery_inner: ReviewedTargetsInfoQuery_inner,\n Raw: Raw$2,\n parse: parse$2,\n serialize: serialize$2,\n serializeVariables: serializeVariables$2,\n makeVariables: makeVariables$2,\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$2\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.personalCoachId(filter), CoursesReview__Filter.assignedCoachId(filter), CoursesReview__Filter.reviewingCoachId(filter), CoursesReview__Filter.includeInactive(filter), coachIds, cursor, undefined);\n Js_promise.then_((function (response) {\n var target = OptionUtils.map(CoursesReview__TargetInfo.makeFromJs, response.targetInfo);\n var coaches = response.coaches.map(UserProxy.makeFromJs);\n Curry._1(send, {\n TAG: /* LoadSubmissions */1,\n _0: response.submissions.pageInfo.endCursor,\n _1: response.submissions.pageInfo.hasNextPage,\n _2: Js_array.map(CoursesReview__IndexSubmission.makeFromJS, response.submissions.nodes),\n _3: response.submissions.totalCount,\n _4: target,\n _5: coaches\n });\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, variables));\n}\n\nfunction getCoaches(send, courseId, state) {\n if (state.coachesLoaded === /* Unloaded */0) {\n Curry._1(send, /* SetCoachLoading */4);\n Js_promise.then_((function (response) {\n Curry._1(send, {\n TAG: /* LoadCoaches */2,\n _0: Js_array.map(UserProxy.makeFromJs, response.coaches)\n });\n return Promise.resolve(undefined);\n }), Curry._3(make$1, undefined, undefined, {\n courseId: courseId\n }));\n return ;\n }\n \n}\n\nfunction getTargets(send, courseId, state) {\n if (state.targetsLoaded === /* Unloaded */0) {\n Curry._1(send, /* SetTargetLoading */3);\n Js_promise.then_((function (response) {\n Curry._1(send, {\n TAG: /* LoadTargets */3,\n _0: Js_array.map(CoursesReview__TargetInfo.makeFromJs, response.reviewedTargetsInfo)\n });\n return Promise.resolve(undefined);\n }), Curry._3(make$2, undefined, undefined, {\n courseId: courseId\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:ms-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 updateParams({\n nameOrEmail: filter.nameOrEmail,\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 updateParams({\n nameOrEmail: filter.nameOrEmail,\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 /* AssignedToCoach */0 :\n return tc(undefined, undefined, \"assigned_to\");\n case /* PersonalCoach */1 :\n return tc(undefined, undefined, \"personal_coach\");\n case /* ReviewedBy */2 :\n return tc(undefined, undefined, \"reviewed_by\");\n case /* Loader */3 :\n var l = t._0;\n if (l) {\n return tc(undefined, undefined, coachFilterTranslationKey(l._0));\n } else {\n return tc(undefined, undefined, \"target\");\n }\n case /* Target */4 :\n return tc(undefined, undefined, \"target\");\n case /* Status */5 :\n return tc(undefined, undefined, \"status\");\n case /* NameOrEmail */6 :\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 /* Loader */3 :\n var l = t._0;\n if (l) {\n return tc(undefined, undefined, \"coach_filter_by.\" + coachFilterTranslationKey(l._0) + \"\");\n } else {\n return tc(undefined, undefined, \"filter_by_target\");\n }\n case /* Target */4 :\n return CoursesReview__TargetInfo.title(t._0);\n case /* Status */5 :\n if (t._0 === \"Reviewed\") {\n return tc(undefined, undefined, \"reviewed\");\n } else {\n return tc(undefined, undefined, \"pending\");\n }\n case /* NameOrEmail */6 :\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 /* AssignedToCoach */0 :\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 */1 :\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 */2 :\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 */3 :\n var key = t._0;\n if (key) {\n return tc(undefined, undefined, \"search.\" + coachFilterTranslationKey(key._0) + \"\");\n } else {\n return tc(undefined, undefined, \"search.target\");\n }\n case /* Target */4 :\n return tc(undefined, undefined, \"search.target\") + \" \" + CoursesReview__TargetInfo.title(t._0);\n case /* Status */5 :\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 */6 :\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 /* AssignedToCoach */0 :\n return \"purple\";\n case /* PersonalCoach */1 :\n return \"green\";\n case /* ReviewedBy */2 :\n return \"orange\";\n case /* Loader */3 :\n var match = t._0;\n if (!match) {\n return \"red\";\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 */4 :\n return \"red\";\n case /* Status */5 :\n if (t._0 === \"Reviewed\") {\n return \"green\";\n } else {\n return \"yellow\";\n }\n case /* NameOrEmail */6 :\n return \"gray\";\n \n }\n}\n\nfunction assignedToCoach(coach, currentCoachId) {\n return {\n TAG: /* AssignedToCoach */0,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction personalCoach(coach, currentCoachId) {\n return {\n TAG: /* PersonalCoach */1,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction reviewedBy(coach, currentCoachId) {\n return {\n TAG: /* ReviewedBy */2,\n _0: coach,\n _1: currentCoachId\n };\n}\n\nfunction makeLoader(l) {\n return {\n TAG: /* Loader */3,\n _0: l\n };\n}\n\nfunction makecoachLoader(key) {\n return {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: key\n }\n };\n}\n\nfunction target(target$1) {\n return {\n TAG: /* Target */4,\n _0: target$1\n };\n}\n\nfunction status(status$1) {\n return {\n TAG: /* Status */5,\n _0: status$1\n };\n}\n\nfunction nameOrEmail(search) {\n return {\n TAG: /* NameOrEmail */6,\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 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 */5,\n _0: \"Pending\"\n }];\n } else {\n return [{\n TAG: /* Status */5,\n _0: \"Reviewed\"\n }];\n }\n } else {\n return [\n {\n TAG: /* Status */5,\n _0: \"Pending\"\n },\n {\n TAG: /* Status */5,\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.target\") || firstWord === tc(undefined, undefined, \"search.assigned_to\")) {\n return [];\n } else {\n return [{\n TAG: /* NameOrEmail */6,\n _0: input\n }];\n }\n}\n\nfunction unselected(state, currentCoachId, filter) {\n var unselectedTargets = state.targets.filter(function (target) {\n return OptionUtils.mapWithDefault((function (selectedTarget) {\n return CoursesReview__TargetInfo.id(target) !== selectedTarget;\n }), true, CoursesReview__Filter.targetId(filter));\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 unselectedAssignedCoaches,\n unselectedPersonalCoaches,\n unselectedReviewers,\n unselectedTargets,\n state.coachesLoaded === /* Loaded */2 ? [] : [\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* Assigned */0\n }\n },\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* Personal */1\n }\n },\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* ReviewedBy */2\n }\n }\n ],\n state.targetsLoaded === /* Loaded */2 ? [] : [{\n TAG: /* Loader */3,\n _0: /* ShowTargets */0\n }],\n nameOrEmailFilter(state),\n CoursesReview__Filter.includeInactive(filter) ? [] : [/* IncludeInactive */0]\n ]);\n}\n\nfunction selected(state, filter, currentCoachId) {\n var selectedTarget = Belt_Option.mapWithDefault(CoursesReview__Filter.targetId(filter), [], (function (targetId) {\n return Belt_Option.mapWithDefault(Js_array.find((function (t) {\n return CoursesReview__TargetInfo.id(t) === targetId;\n }), state.targets), [], (function (t) {\n return [{\n TAG: /* Target */4,\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(Js_array.find((function (c) {\n return UserProxy.id(c) === coachId;\n }), state.coaches), [], (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 */5,\n _0: t\n }];\n }), [], filter.tab);\n var selectedSearchString = OptionUtils.mapWithDefault((function (nameOrEmail) {\n return [{\n TAG: /* NameOrEmail */6,\n _0: nameOrEmail\n }];\n }), [], filter.nameOrEmail);\n return ArrayUtils.flattenV2([\n selectedStatus,\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 */3) {\n Curry._1(send, /* UnsetSearchString */0);\n }\n if (typeof selectable === \"number\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 /* AssignedToCoach */0 :\n var otherTab = CoursesReview__Filter.tab(filter);\n var tab = otherTab === \"Reviewed\" ? \"Pending\" : otherTab;\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */1 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */2 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */3 :\n var l = selectable._0;\n Curry._1(send, {\n TAG: /* SetLoader */4,\n _0: l\n });\n if (l) {\n return getCoaches(send, courseId, state);\n } else {\n return getTargets(send, courseId, state);\n }\n case /* Target */4 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */5 :\n if (selectable._0 === \"Reviewed\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 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 */6 :\n return updateParams({\n nameOrEmail: 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 \n }\n}\n\nfunction onDeselectFilter(send, filter, selectable) {\n if (typeof selectable === \"number\") {\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 /* AssignedToCoach */0 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */1 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */2 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */3 :\n return Curry._1(send, /* ClearLoader */5);\n case /* Target */4 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */5 :\n return updateParams({\n nameOrEmail: filter.nameOrEmail,\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 */6 :\n return updateParams({\n nameOrEmail: 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 \n }\n}\n\nfunction defaultOptions(state, filter) {\n return ArrayUtils.flattenV2([\n nameOrEmailFilter(state),\n [\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* Assigned */0\n }\n },\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* Personal */1\n }\n },\n {\n TAG: /* Loader */3,\n _0: /* ShowCoaches */{\n _0: /* ReviewedBy */2\n }\n },\n {\n TAG: /* Loader */3,\n _0: /* ShowTargets */0\n },\n /* IncludeInactive */0\n ],\n unSelectedStatus(filter)\n ]);\n}\n\nfunction reloadSubmissions(courseId, filter, send) {\n Curry._1(send, /* BeginReloading */2);\n 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 CoursesReview__Filter.assignedCoachId(filter);\n return tc(undefined, undefined, \"filter_by_submissions_assigned\");\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.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 coaches: [],\n targets: [],\n filterInput: \"\",\n totalEntriesCount: 0,\n filterLoading: false,\n filterLoader: undefined,\n targetsLoaded: /* 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 }), [url]);\n React.useEffect((function () {\n loadFilters(send, courseId, state);\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 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 md:pt-18 pb-20 md:pb-4\",\n role: \"main\"\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 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 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 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 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))));\n}\n\nvar UserProxyFragment;\n\nvar make$3 = CoursesReview__Root;\n\nexport {\n str ,\n tc ,\n Item ,\n PagedSubmission ,\n coachFilterTranslationKey ,\n reducer ,\n updateParams ,\n UserProxyFragment ,\n SubmissionsQuery ,\n CoachesQuery ,\n ReviewedTargetsInfoQuery ,\n getSubmissions ,\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$3 as make,\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/* 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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 Js_array.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 }), details);\n}\n\nexport {\n id ,\n createdAt ,\n passedAt ,\n evaluatedAt ,\n feedbackSent ,\n archivedAt ,\n make ,\n makeFromJs ,\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\";\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 decodeStatus(status) {\n if (status === \"queued\") {\n return /* Queued */0;\n } else if (status === \"error\") {\n return /* Error */4;\n } else if (status === \"failure\") {\n return /* Failure */3;\n } else if (status === \"success\") {\n return /* Success */2;\n } else {\n return /* InProgress */1;\n }\n}\n\nfunction makeFromJS(object) {\n return {\n id: object.id,\n status: decodeStatus(object.status),\n startedAt: Belt_Option.map(object.startedAt, DateFns.decodeISO),\n completedAt: Belt_Option.map(object.completedAt, DateFns.decodeISO),\n report: Caml_option.nullable_to_opt(object.report),\n queuedAt: DateFns.decodeISO(object.queuedAt),\n reporter: object.reporter,\n heading: Caml_option.nullable_to_opt(object.heading),\n targetUrl: object.targetUrl\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction status(t) {\n return t.status;\n}\n\nfunction report(t) {\n return t.report;\n}\n\nfunction startedAt(t) {\n return t.startedAt;\n}\n\nfunction queuedAt(t) {\n return t.queuedAt;\n}\n\nfunction completedAt(t) {\n return t.completedAt;\n}\n\nfunction reporter(t) {\n return t.reporter;\n}\n\nfunction heading(t) {\n return t.heading;\n}\n\nfunction targetUrl(t) {\n return t.targetUrl;\n}\n\nexport {\n InvalidSubmissionReportCompletionStatus ,\n decodeStatus ,\n makeFromJS ,\n id ,\n status ,\n report ,\n startedAt ,\n queuedAt ,\n completedAt ,\n reporter ,\n heading ,\n targetUrl ,\n}\n/* DateFns 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 Belt_List from \"../../../../../node_modules/rescript/lib/es6/belt_List.js\";\nimport * as Caml_array from \"../../../../../node_modules/rescript/lib/es6/caml_array.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(checklist, t, index) {\n return checklist.map(function (result, resultIndex) {\n if (resultIndex === index) {\n return t;\n } else {\n return result;\n }\n });\n}\n\nfunction updateTitle(checklist, title, t, index) {\n return replace(checklist, {\n title: title,\n feedback: t.feedback\n }, index);\n}\n\nfunction updateFeedback(resultItems, feedback, index) {\n var optionalFeedback = feedback.trim() === \"\" ? undefined : feedback;\n return replace(resultItems, {\n title: Caml_array.get(resultItems, index).title,\n feedback: optionalFeedback\n }, index);\n}\n\nfunction updateAdditionalFeedback(resultItems, feedback, index) {\n return replace(resultItems, {\n title: Caml_array.get(resultItems, index).title,\n feedback: feedback\n }, index);\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_(Belt_List.concat(title, feedback));\n}\n\nexport {\n title ,\n feedback ,\n make ,\n makeFromJs ,\n emptyTemplate ,\n empty ,\n replace ,\n updateTitle ,\n updateFeedback ,\n updateAdditionalFeedback ,\n trim ,\n encode ,\n}\n/* No side effect */\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_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 results(t) {\n return t.results;\n}\n\nfunction make(title, results) {\n return {\n title: title,\n results: results\n };\n}\n\nfunction makeFromJs(data) {\n return data.map(function (rc) {\n return {\n title: rc.title,\n results: CoursesReview__ReviewChecklistResult.makeFromJs(rc.result)\n };\n });\n}\n\nfunction empty(param) {\n return [{\n title: \"\",\n results: [CoursesReview__ReviewChecklistResult.empty(undefined)]\n }];\n}\n\nfunction emptyTemplate(param) {\n return [{\n title: \"Default checklist\",\n results: CoursesReview__ReviewChecklistResult.emptyTemplate(undefined)\n }];\n}\n\nfunction updateTitle(title, t) {\n return {\n title: title,\n results: t.results\n };\n}\n\nfunction updateChecklist(results, t) {\n return {\n title: t.title,\n results: results\n };\n}\n\nfunction replace(t, itemIndex, results) {\n return results.map(function (item, index) {\n if (index === itemIndex) {\n return t;\n } else {\n return item;\n }\n });\n}\n\nfunction appendEmptyChecklistItem(t) {\n return {\n title: t.title,\n results: t.results.concat([CoursesReview__ReviewChecklistResult.empty(undefined)])\n };\n}\n\nfunction moveResultItemUp(index, t) {\n return {\n title: t.title,\n results: ArrayUtils.swapUp(index, t.results)\n };\n}\n\nfunction moveResultItemDown(index, t) {\n return {\n title: t.title,\n results: ArrayUtils.swapDown(index, t.results)\n };\n}\n\nfunction deleteResultItem(index, t) {\n return {\n title: t.title,\n results: t.results.filter(function (_el, i) {\n return i !== index;\n })\n };\n}\n\nfunction trim(t) {\n return {\n title: $$String.trim(t.title),\n results: t.results.map(CoursesReview__ReviewChecklistResult.trim)\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.results)\n ],\n tl: /* [] */0\n }\n });\n}\n\nfunction encodeArray(checklist) {\n return Json_encode.array(encode, checklist);\n}\n\nexport {\n title ,\n results ,\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/* 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 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 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 reviewer(t) {\n return t.reviewer;\n}\n\nfunction submissionReports(t) {\n return t.submissionReports;\n}\n\nfunction submissionReportPollTime(t) {\n return t.submissionReportPollTime;\n}\n\nfunction reviewable(t) {\n return t.reviewable;\n}\n\nfunction warning(t) {\n return t.warning;\n}\n\nfunction make(submission, allSubmissions, targetId, targetTitle, students, evaluationCriteria, reviewChecklist, targetEvaluationCriteriaIds, submissionReports, coaches, teamName, courseId, createdAt, reviewer, submissionReportPollTime, reviewable, warning) {\n return {\n submission: submission,\n createdAt: createdAt,\n allSubmissions: allSubmissions,\n targetId: targetId,\n targetTitle: targetTitle,\n students: students,\n submissionReports: submissionReports,\n evaluationCriteria: evaluationCriteria,\n reviewChecklist: reviewChecklist,\n targetEvaluationCriteriaIds: targetEvaluationCriteriaIds,\n coaches: coaches,\n teamName: teamName,\n courseId: courseId,\n reviewer: reviewer,\n submissionReportPollTime: submissionReportPollTime,\n reviewable: reviewable,\n warning: warning\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.evaluationCriteria.map(function (ec) {\n return EvaluationCriterion.make(ec.id, ec.name, ec.maxGrade, ec.gradeLabels.map(GradeLabel.makeFromJs));\n }), CoursesReview__ReviewChecklistItem.makeFromJs(details.reviewChecklist), details.targetEvaluationCriteriaIds, details.submissionReports.map(CoursesReview__SubmissionReport.makeFromJS), Js_array.map(UserProxy.makeFromJs, details.coaches), details.teamName, details.courseId, DateFns.decodeISO(details.createdAt), Belt_Option.map(details.reviewerDetails, CoursesReview__Reviewer.makeFromJs), details.submissionReportPollTime, details.reviewable, details.warning);\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 return {\n submission: submission,\n createdAt: t.createdAt,\n allSubmissions: Js_array.map((function (s) {\n if (CoursesReview__SubmissionMeta.id(s) === CoursesReview__OverlaySubmission.id(submission)) {\n return updateMetaSubmission(submission);\n } else {\n return s;\n }\n }), t.allSubmissions),\n targetId: t.targetId,\n targetTitle: t.targetTitle,\n students: t.students,\n submissionReports: t.submissionReports,\n evaluationCriteria: t.evaluationCriteria,\n reviewChecklist: t.reviewChecklist,\n targetEvaluationCriteriaIds: t.targetEvaluationCriteriaIds,\n coaches: t.coaches,\n teamName: t.teamName,\n courseId: t.courseId,\n reviewer: t.reviewer,\n submissionReportPollTime: t.submissionReportPollTime,\n reviewable: t.reviewable,\n warning: t.warning\n };\n}\n\nfunction updateReviewChecklist(reviewChecklist, t) {\n return {\n submission: t.submission,\n createdAt: t.createdAt,\n allSubmissions: t.allSubmissions,\n targetId: t.targetId,\n targetTitle: t.targetTitle,\n students: t.students,\n submissionReports: t.submissionReports,\n evaluationCriteria: t.evaluationCriteria,\n reviewChecklist: reviewChecklist,\n targetEvaluationCriteriaIds: t.targetEvaluationCriteriaIds,\n coaches: t.coaches,\n teamName: t.teamName,\n courseId: t.courseId,\n reviewer: t.reviewer,\n submissionReportPollTime: t.submissionReportPollTime,\n reviewable: t.reviewable,\n warning: t.warning\n };\n}\n\nfunction updateReviewer(user, t) {\n return {\n submission: t.submission,\n createdAt: t.createdAt,\n allSubmissions: t.allSubmissions,\n targetId: t.targetId,\n targetTitle: t.targetTitle,\n students: t.students,\n submissionReports: t.submissionReports,\n evaluationCriteria: t.evaluationCriteria,\n reviewChecklist: t.reviewChecklist,\n targetEvaluationCriteriaIds: t.targetEvaluationCriteriaIds,\n coaches: t.coaches,\n teamName: t.teamName,\n courseId: t.courseId,\n reviewer: Belt_Option.map(user, CoursesReview__Reviewer.setReviewer),\n submissionReportPollTime: t.submissionReportPollTime,\n reviewable: t.reviewable,\n warning: t.warning\n };\n}\n\nfunction updateSubmissionReport(reports, t) {\n return {\n submission: t.submission,\n createdAt: t.createdAt,\n allSubmissions: t.allSubmissions,\n targetId: t.targetId,\n targetTitle: t.targetTitle,\n students: t.students,\n submissionReports: reports,\n evaluationCriteria: t.evaluationCriteria,\n reviewChecklist: t.reviewChecklist,\n targetEvaluationCriteriaIds: t.targetEvaluationCriteriaIds,\n coaches: t.coaches,\n teamName: t.teamName,\n courseId: t.courseId,\n reviewer: t.reviewer,\n submissionReportPollTime: t.submissionReportPollTime,\n reviewable: t.reviewable,\n warning: t.warning\n };\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 students ,\n evaluationCriteria ,\n reviewChecklist ,\n targetEvaluationCriteriaIds ,\n coaches ,\n teamName ,\n courseId ,\n createdAt ,\n reviewer ,\n submissionReports ,\n submissionReportPollTime ,\n reviewable ,\n warning ,\n make ,\n decodeJs ,\n updateMetaSubmission ,\n updateOverlaySubmission ,\n updateReviewChecklist ,\n updateReviewer ,\n updateSubmissionReport ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 ReactUtils from \"../../../shared/utils/ReactUtils.bs.js\";\nimport * as Belt_Option from \"../../../../../node_modules/rescript/lib/es6/belt_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 updateEmptyChecklistResult(itemIndex, resultIndex, feedback, reviewChecklistItem, setChecklist) {\n var partial_arg = CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateAdditionalFeedback(CoursesReview__ReviewChecklistItem.results(reviewChecklistItem), feedback, resultIndex), reviewChecklistItem);\n return Curry._1(setChecklist, (function (param) {\n return CoursesReview__ReviewChecklistItem.replace(partial_arg, itemIndex, param);\n }));\n}\n\nfunction unSelectChecklist(itemIndex, resultIndex, setSelecton) {\n return Curry._1(setSelecton, (function (selection) {\n return Js_array.filter((function (item) {\n return !(item.itemIndex === itemIndex && item.resultIndex === resultIndex);\n }), selection);\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.results(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-e-md \" + (\n ArrayUtils.isNotEmpty(Js_array.filter((function (s) {\n return s.itemIndex === itemIndex;\n }), selection)) ? \"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(Js_array.filter((function (s) {\n if (s.itemIndex === itemIndex) {\n return s.resultIndex === resultIndex;\n } else {\n return false;\n }\n }), selection));\n}\n\nfunction updateChecklistResultFeedback(itemIndex, resultIndex, feedback, reviewChecklistItem, setChecklist) {\n var partial_arg = CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateFeedback(CoursesReview__ReviewChecklistItem.results(reviewChecklistItem), feedback, resultIndex), reviewChecklistItem);\n return Curry._1(setChecklist, (function (param) {\n return CoursesReview__ReviewChecklistItem.replace(partial_arg, itemIndex, param);\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 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 var hasFeedbackTemplate = Js_array.map((function (item) {\n return Js_array.map((function (result) {\n return CoursesReview__ReviewChecklistResult.feedback(result) !== undefined;\n }), CoursesReview__ReviewChecklistItem.results(item));\n }), reviewChecklist);\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: \"ps-2 \"\n }, t(undefined, undefined, \"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 Curry._1(showEditorCB, undefined);\n })\n }, React.createElement(\"i\", {\n className: \"far fa-edit\"\n }), React.createElement(\"div\", {\n className: \"ms-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-4\"\n }, Js_array.mapi((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 }, Js_array.mapi((function (reviewChecklistResult, resultIndex) {\n var tmp;\n if (Belt_Option.isSome(CoursesReview__ReviewChecklistResult.feedback(reviewChecklistResult)) && Caml_array.get(Caml_array.get(hasFeedbackTemplate, itemIndex), resultIndex) === true) {\n var isSelected = Belt_Option.isSome(Js_array.find((function (s) {\n if (s.itemIndex === itemIndex) {\n return s.resultIndex === resultIndex;\n } else {\n return false;\n }\n }), selection));\n tmp = 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(reviewChecklistResult),\n disabled: !feedbackGeneratable(submissionDetails, overlaySubmission)\n }), ReactUtils.nullUnless(React.createElement(\"div\", {\n className: \"ps-7 pt-2\",\n id: \"result_item_\" + (String(resultIndex) + \"_feedback\")\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(reviewChecklistResult), \"\"),\n onChange: (function ($$event) {\n updateChecklistResultFeedback(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, setChecklist);\n })\n })), (isSelected || !feedbackGeneratable(submissionDetails, overlaySubmission)) && Belt_Option.isSome(CoursesReview__ReviewChecklistResult.feedback(reviewChecklistResult))));\n } else {\n var isSelected$1 = Belt_Option.isSome(Js_array.find((function (s) {\n if (s.itemIndex === itemIndex) {\n return s.resultIndex === resultIndex;\n } else {\n return false;\n }\n }), selection));\n var hasFeedback = Belt_Option.isSome(CoursesReview__ReviewChecklistResult.feedback(reviewChecklistResult));\n tmp = React.createElement(\"div\", {\n className: \"px-6\"\n }, React.createElement(\"div\", {\n className: \"flex flex-wrap\"\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(reviewChecklistResult),\n disabled: !feedbackGeneratable(submissionDetails, overlaySubmission)\n }), isSelected$1 ? (\n hasFeedback ? React.createElement(\"div\", {\n className: \"pl-7 pt-2 w-full\",\n id: \"result_item_\" + (String(resultIndex) + \"_feedback\")\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: \"checklist_\" + String(itemIndex) + \"_result_\" + (String(resultIndex) + \"_text_area\"),\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(reviewChecklistResult), \"\"),\n onChange: (function ($$event) {\n updateChecklistResultFeedback(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, setChecklist);\n })\n })) : React.createElement(\"button\", {\n className: \"w-auto ps-4 text-sm text-primary-500 text-left rtl:text-right hover:text-primary-600 transition\",\n id: \"add-additional-feedback-\" + String(itemIndex),\n onClick: (function ($$event) {\n updateEmptyChecklistResult(itemIndex, resultIndex, \"\", reviewChecklistItem, setChecklist);\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-plus\"\n }), React.createElement(\"span\", {\n className: \"ps-2 \"\n }, t(undefined, undefined, \"add_additional_feedback\")))\n ) : (\n hasFeedback ? (updateEmptyChecklistResult(itemIndex, resultIndex, undefined, reviewChecklistItem, setChecklist), null) : null\n )));\n }\n return React.createElement(Spread.make, {\n props: {\n \"data-result-item\": String(resultIndex)\n },\n children: tmp,\n key: String(itemIndex) + String(resultIndex)\n });\n }), CoursesReview__ReviewChecklistItem.results(reviewChecklistItem)))),\n key: String(itemIndex)\n });\n }), checklist))), 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 updateEmptyChecklistResult ,\n unSelectChecklist ,\n checkboxOnChange ,\n generateFeedback ,\n checklistItemCheckedClasses ,\n feedbackGeneratable ,\n checklistItemChecked ,\n updateChecklistResultFeedback ,\n generateFeedbackButton ,\n make ,\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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n targetId: targetId,\n reviewChecklist: CoursesReview__ReviewChecklistItem.encodeArray(trimmedChecklist)\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 return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateTitle(CoursesReview__ReviewChecklistItem.results(reviewChecklistItem), title, resultItem, resultIndex), reviewChecklistItem),\n _1: itemIndex\n });\n}\n\nfunction updateChecklistResultFeedback(itemIndex, resultIndex, feedback, reviewChecklistItem, send) {\n return Curry._1(send, {\n TAG: /* UpdateChecklistItem */2,\n _0: CoursesReview__ReviewChecklistItem.updateChecklist(CoursesReview__ReviewChecklistResult.updateFeedback(CoursesReview__ReviewChecklistItem.results(reviewChecklistItem), feedback, resultIndex), reviewChecklistItem),\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.results(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 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.results(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: \"ps-2 md:ps-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 me-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 pe-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 updateChecklistResultTitle(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, resultItem, send);\n })\n }), React.createElement(\"div\", {\n className: \"flex h-10 me-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 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.results(reviewChecklistItem).length - 1 | 0), (function (param) {\n 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 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 updateChecklistResultFeedback(itemIndex, resultIndex, $$event.target.value, reviewChecklistItem, 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 ms-2 md:ms-4 mt-3 flex items-center focus:outline-none\",\n onClick: (function (param) {\n 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 me-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 me-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 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 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 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 Curry._1(send, /* AddEmptyChecklistItem */0);\n })\n }, React.createElement(\"span\", {\n className: \"bg-gray-100 py-2 w-10 text-center\"\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 updateReviewChecklist(targetId, state.reviewChecklist, send, updateReviewChecklistCB);\n })\n }, t(undefined, undefined, \"save_checklist\")), React.createElement(\"button\", {\n className: \"btn btn-subtle me-4\",\n onClick: (function (param) {\n 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/* 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 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 ms-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/* 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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3(make, false, undefined, {\n submissionId: submissionId\n })));\n}\n\nfunction reassignReviewer(submissionId, setSaving, updateReviewerCB) {\n Curry._1(setSaving, (function (param) {\n return true;\n }));\n Js_promise.$$catch((function (param) {\n Curry._1(setSaving, (function (param) {\n return false;\n }));\n return Promise.resolve(undefined);\n }), Js_promise.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 }), Curry._3(make$1, undefined, undefined, {\n submissionId: submissionId\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: \"ms-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 pe-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 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 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/* 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 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:pe-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/* 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 FaIcon from \"../../../shared/components/FaIcon.bs.js\";\nimport * as DateFns from \"../../../shared/utils/DateFns.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 MarkdownBlock from \"../../../shared/components/MarkdownBlock.bs.js\";\nimport * as CoursesReview__SubmissionReport from \"../types/CoursesReview__SubmissionReport.bs.js\";\n\nvar partial_arg = \"components.CoursesReview__SubmissionReportShow\";\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 return {\n showReport: !state.showReport\n };\n}\n\nfunction reportStatusIconClasses(report) {\n var match = CoursesReview__SubmissionReport.status(report);\n switch (match) {\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 /* Success */2 :\n return \"if i-check-circle-solid text-2xl text-green-500 bg-white rounded-full\";\n case /* Failure */3 :\n return \"if i-times-circle-solid text-2xl text-red-500 bg-white rounded-full\";\n case /* Error */4 :\n return \"if i-exclamation-triangle-circle-solid text-2xl text-gray-600 bg-white rounded-full\";\n \n }\n}\n\nfunction reportStatusString(report) {\n var heading = CoursesReview__SubmissionReport.heading(report);\n if (heading !== undefined) {\n return heading;\n }\n var match = CoursesReview__SubmissionReport.status(report);\n switch (match) {\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 /* Success */2 :\n return t(undefined, undefined, \"report_status_string.success\");\n case /* Failure */3 :\n return t(undefined, undefined, \"report_status_string.failure\");\n case /* Error */4 :\n return t(undefined, undefined, \"report_status_string.error\");\n \n }\n}\n\nfunction reportConclusionTimeString(report) {\n var match = CoursesReview__SubmissionReport.status(report);\n if (match === 1) {\n return \"Started \" + Belt_Option.mapWithDefault(CoursesReview__SubmissionReport.startedAt(report), \"\", (function (t) {\n return DateFns.formatDistanceToNowStrict(t, true, undefined, undefined, undefined);\n }));\n }\n if (match === 0) {\n return \"Queued \" + DateFns.formatDistanceToNowStrict(CoursesReview__SubmissionReport.queuedAt(report), true, undefined, undefined, undefined);\n }\n var match$1 = CoursesReview__SubmissionReport.startedAt(report);\n var match$2 = CoursesReview__SubmissionReport.completedAt(report);\n return \"Finished \" + Belt_Option.mapWithDefault(CoursesReview__SubmissionReport.completedAt(report), \"\", (function (t) {\n return DateFns.formatDistanceToNowStrict(t, true, undefined, undefined, undefined);\n })) + (\n match$1 !== undefined && match$2 !== undefined ? \", and took \" + DateFns.formatDistance(Caml_option.valFromOption(match$2), Caml_option.valFromOption(match$1), true, undefined, undefined) : \"\"\n );\n}\n\nfunction CoursesReview__SubmissionReportShow(Props) {\n var report = Props.report;\n var match = React.useReducer(reducer, {\n showReport: false\n });\n var send = match[1];\n var state = match[0];\n var url = CoursesReview__SubmissionReport.targetUrl(report);\n var toggleTestReportIcon = state.showReport ? \"i-arrows-collapse-light\" : \"i-arrows-expand-light\";\n var match$1 = state.showReport;\n var match$2 = CoursesReview__SubmissionReport.report(report);\n return React.createElement(\"div\", {\n className: \"px-4 py-1 md:py-2\"\n }, React.createElement(\"div\", {\n className: \"bg-gray-100 p-2 md: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 gap-3\"\n }, React.createElement(\"div\", {\n className: \"pt-1\"\n }, React.createElement(Icon.make, {\n className: reportStatusIconClasses(report)\n })), React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"text-xs\"\n }, url !== undefined ? React.createElement(\"a\", {\n className: \"text-primary-500 underline font-medium hover:text-primary-600\",\n href: url,\n target: \"_blank\"\n }, CoursesReview__SubmissionReport.reporter(report), React.createElement(FaIcon.make, {\n classes: \"if i-external-link-regular ms-1\"\n })) : CoursesReview__SubmissionReport.reporter(report)), React.createElement(\"p\", {\n className: \"font-semibold\"\n }, reportStatusString(report)), React.createElement(\"p\", {\n className: \"text-gray-600 text-xs mt-1\"\n }, reportConclusionTimeString(report)))), ReactUtils.nullIf(React.createElement(\"button\", {\n className: \"inline-flex items-center text-xs text-gray-800 px-2 py-2 rounded font-semibold hover:bg-gray-300 focus:bg-gray-300 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500 transition\",\n onClick: (function (param) {\n Curry._1(send, /* ChangeReportVisibility */0);\n })\n }, React.createElement(\"span\", {\n className: \"hidden md:block pe-3 \"\n }, state.showReport ? t(undefined, undefined, \"hide_report_button\") : t(undefined, undefined, \"show_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.report(report)))), match$1 && match$2 !== 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-1\"\n }, React.createElement(MarkdownBlock.make, {\n markdown: match$2,\n profile: /* Permissive */0\n }))) : null));\n}\n\nvar make = CoursesReview__SubmissionReportShow;\n\nexport {\n t ,\n str ,\n reducer ,\n reportStatusIconClasses ,\n reportStatusString ,\n reportConclusionTimeString ,\n make ,\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 Link from \"../../../shared/components/Link.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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 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\";\nimport * as CoursesReview__SubmissionReportShow from \"./CoursesReview__SubmissionReportShow.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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 /* UnassignReviewer */6 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 */7 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 /* SetNextSubmissionDataEmpty */8 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 /* SetNextSubmissionDataLoading */9 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 \n }\n } else {\n switch (action.TAG | 0) {\n case /* UpdateFeedback */0 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 isAcceptable: state.isAcceptable,\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 /* UpdateIsAcceptable */3 :\n return {\n grades: state.grades,\n isAcceptable: 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 */4 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 */5 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 */6 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 */7 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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 case /* SetNextSubmissionDataLoaded */8 :\n return {\n grades: state.grades,\n isAcceptable: state.isAcceptable,\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: /* DataLoaded */{\n _0: action._0\n },\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 !== undefined ? Js_array.map(serializeInputObjectGradeInput, a$1) : undefined,\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!, $personalCoachId: ID, $assignedCoachId: ID) {\\nsubmissions(courseId: $courseId, search: $search, targetId: $targetId, status: $status, sortDirection: $sortDirection, sortCriterion: $sortCriterion, personalCoachId: $personalCoachId, assignedCoachId: $assignedCoachId) {\\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: Js_array.map((function (value) {\n return {\n id: value.id\n };\n }), value$2)\n }\n };\n}\n\nfunction serialize$3(value) {\n var value$1 = value.submissions;\n var value$2 = value$1.nodes;\n var nodes = Js_array.map((function (value) {\n var value$1 = value.id;\n return {\n id: value$1\n };\n }), value$2);\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.personalCoachId;\n var a$6 = inp.assignedCoachId;\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 personalCoachId: a$5 !== undefined ? a$5 : undefined,\n assignedCoachId: a$6 !== undefined ? a$6 : undefined\n };\n}\n\nfunction makeVariables$3(courseId, search, targetId, status, sortDirection, sortCriterion, personalCoachId, assignedCoachId, param) {\n return {\n courseId: courseId,\n search: search,\n targetId: targetId,\n status: status,\n sortDirection: sortDirection,\n sortCriterion: sortCriterion,\n personalCoachId: personalCoachId,\n assignedCoachId: assignedCoachId\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 $$fetch$2 = include$3.$$fetch;\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_make = include$3.make;\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: $$fetch$2,\n make: NextSubmissionQuery_make\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$3 = 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$3,\n make: UnassignReviewerMutation_make\n};\n\nvar Raw$5 = {};\n\nvar query$5 = \"query SubmissionReportQuery($submissionId: ID!) {\\nsubmissionDetails(submissionId: $submissionId) {\\nsubmissionReports {\\nid \\nreport \\nstatus \\nstartedAt \\ncompletedAt \\nqueuedAt \\nreporter \\nheading \\ntargetUrl \\n}\\n\\n}\\n\\n}\\n\";\n\nfunction parse$5(value) {\n var value$1 = value.submissionDetails;\n var value$2 = value$1.submissionReports;\n return {\n submissionDetails: {\n submissionReports: Js_array.map((function (value) {\n var value$1 = value.report;\n var value$2 = value.status;\n var tmp;\n switch (value$2) {\n case \"error\" :\n tmp = \"error\";\n break;\n case \"failure\" :\n tmp = \"failure\";\n break;\n case \"in_progress\" :\n tmp = \"in_progress\";\n break;\n case \"queued\" :\n tmp = \"queued\";\n break;\n case \"success\" :\n tmp = \"success\";\n break;\n default:\n tmp = {\n NAME: \"FutureAddedValue\",\n VAL: value$2\n };\n }\n var value$3 = value.startedAt;\n var value$4 = value.completedAt;\n var value$5 = value.heading;\n var value$6 = value.targetUrl;\n return {\n id: value.id,\n report: !(value$1 == null) ? value$1 : undefined,\n status: tmp,\n startedAt: !(value$3 == null) ? Caml_option.some(value$3) : undefined,\n completedAt: !(value$4 == null) ? Caml_option.some(value$4) : undefined,\n queuedAt: value.queuedAt,\n reporter: value.reporter,\n heading: !(value$5 == null) ? value$5 : undefined,\n targetUrl: !(value$6 == null) ? value$6 : undefined\n };\n }), value$2)\n }\n };\n}\n\nfunction serialize$5(value) {\n var value$1 = value.submissionDetails;\n var value$2 = value$1.submissionReports;\n var submissionReports = Js_array.map((function (value) {\n var value$1 = value.targetUrl;\n var targetUrl = value$1 !== undefined ? value$1 : null;\n var value$2 = value.heading;\n var heading = value$2 !== undefined ? value$2 : null;\n var value$3 = value.reporter;\n var value$4 = value.queuedAt;\n var value$5 = value.completedAt;\n var completedAt = value$5 !== undefined ? Caml_option.valFromOption(value$5) : null;\n var value$6 = value.startedAt;\n var startedAt = value$6 !== undefined ? Caml_option.valFromOption(value$6) : null;\n var value$7 = value.status;\n var status = typeof value$7 === \"object\" ? value$7.VAL : (\n value$7 === \"queued\" ? \"queued\" : (\n value$7 === \"error\" ? \"error\" : (\n value$7 === \"failure\" ? \"failure\" : (\n value$7 === \"success\" ? \"success\" : \"in_progress\"\n )\n )\n )\n );\n var value$8 = value.report;\n var report = value$8 !== undefined ? value$8 : null;\n var value$9 = value.id;\n return {\n id: value$9,\n report: report,\n status: status,\n startedAt: startedAt,\n completedAt: completedAt,\n queuedAt: value$4,\n reporter: value$3,\n heading: heading,\n targetUrl: targetUrl\n };\n }), value$2);\n var submissionDetails = {\n submissionReports: submissionReports\n };\n return {\n submissionDetails: submissionDetails\n };\n}\n\nfunction serializeVariables$5(inp) {\n return {\n submissionId: inp.submissionId\n };\n}\n\nfunction makeVariables$5(submissionId, param) {\n return {\n submissionId: submissionId\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$1 = 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$1\n};\n\nfunction booleanButtonClasses(bool) {\n return \"toggle-button__button\" + (\n bool ? \" toggle-button__button--active\" : \"\"\n );\n}\n\nfunction updateIsAcceptable(isAcceptable, send, $$event) {\n $$event.preventDefault();\n Curry._1(send, {\n TAG: /* UpdateIsAcceptable */3,\n _0: isAcceptable\n });\n if (!isAcceptable) {\n return Curry._1(send, {\n TAG: /* UpdateGrades */2,\n _0: []\n });\n }\n \n}\n\nfunction unassignReviewer(submissionId, send, updateReviewerCB) {\n Curry._1(send, /* BeginSaving */0);\n Js_promise.$$catch((function (param) {\n Curry._1(send, /* FinishSaving */1);\n return Promise.resolve(undefined);\n }), Js_promise.then_((function (response) {\n if (response.unassignReviewer.success) {\n Curry._1(updateReviewerCB, undefined);\n Curry._1(send, /* UnassignReviewer */6);\n }\n Curry._1(send, /* FinishSaving */1);\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$3, undefined, undefined, {\n submissionId: submissionId\n })));\n}\n\nfunction getNextSubmission(send, courseId, filter) {\n Curry._1(send, /* SetNextSubmissionDataLoading */9);\n Js_promise.then_((function (response) {\n if (ArrayUtils.isEmpty(response.submissions.nodes)) {\n Curry._1(send, /* SetNextSubmissionDataEmpty */8);\n } else {\n Curry._1(send, {\n TAG: /* SetNextSubmissionDataLoaded */8,\n _0: Caml_array.get(response.submissions.nodes, 0).id\n });\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch$2, undefined, undefined, makeVariables$3(courseId, CoursesReview__Filter.nameOrEmail(filter), CoursesReview__Filter.targetId(filter), CoursesReview__Filter.tab({\n nameOrEmail: filter.nameOrEmail,\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: \"Pending\",\n includeInactive: filter.includeInactive\n }), CoursesReview__Filter.defaultDirection({\n nameOrEmail: filter.nameOrEmail,\n personalCoachId: filter.personalCoachId,\n assignedCoachId: filter.assignedCoachId,\n reviewingCoachId: filter.reviewingCoachId,\n targetId: filter.targetId,\n sortCriterion: filter.sortCriterion,\n sortDirection: \"Ascending\",\n tab: filter.tab,\n includeInactive: filter.includeInactive\n }), CoursesReview__Filter.sortCriterion({\n nameOrEmail: filter.nameOrEmail,\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: filter.tab,\n includeInactive: filter.includeInactive\n }), CoursesReview__Filter.personalCoachId(filter), CoursesReview__Filter.assignedCoachId(filter), undefined)));\n}\n\nfunction isReviewDisabled(submissionDetails) {\n return CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false;\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 Js_promise.then_((function (response) {\n if (response.createFeedback.success) {\n Curry._1(updateSubmissionCB, CoursesReview__OverlaySubmission.updateFeedback(Js_array.concat([makeFeedback(user, feedback)], CoursesReview__OverlaySubmission.feedback(overlaySubmission)), overlaySubmission));\n Curry._1(send, /* FeedbackAfterSave */5);\n } else {\n Curry._1(send, /* FinishSaving */1);\n }\n return Promise.resolve(undefined);\n }), Curry._3(make, undefined, undefined, {\n submissionId: submissionId,\n feedback: feedback\n }));\n}\n\nfunction undoGrading(submissionId, send) {\n Curry._1(send, /* BeginSaving */0);\n Js_promise.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 }), Curry._3($$fetch$1, undefined, undefined, {\n submissionId: submissionId\n }));\n}\n\nvar passed = ArrayUtils.isNotEmpty;\n\nfunction trimToOption(s) {\n if (s.trim() === \"\") {\n return ;\n } else {\n return s;\n }\n}\n\nfunction trimArraytoOption(arr) {\n if (ArrayUtils.isEmpty(arr)) {\n return ;\n } else {\n return arr;\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, overlaySubmission, currentUser, updateSubmissionCB, courseId, filter) {\n Curry._1(send, /* BeginSaving */0);\n var feedback = trimToOption(state.newFeedback);\n var grades = trimArraytoOption(Js_array.map((function (g) {\n return {\n evaluationCriterionId: CoursesReview__Grade.evaluationCriterionId(g),\n grade: CoursesReview__Grade.value(g)\n };\n }), state.grades));\n var variables = makeVariables(submissionId, feedback, grades, Belt_Option.flatMap(state.note, trimToOption), SubmissionChecklistItem.encodeArray(state.checklist), undefined);\n Js_promise.then_((function (response) {\n if (response.createGrading.success) {\n Curry._1(updateSubmissionCB, CoursesReview__OverlaySubmission.update(ArrayUtils.isNotEmpty(state.grades) ? Caml_option.some(new Date()) : undefined, AppRouter__User.name(currentUser), Js_array.concat(Belt_Option.mapWithDefault(feedback, [], (function (f) {\n return [makeFeedback(currentUser, f)];\n })), CoursesReview__OverlaySubmission.feedback(overlaySubmission)), state.grades, Caml_option.some(new Date()), state.checklist, overlaySubmission));\n Curry._1(send, {\n TAG: /* FinishGrading */7,\n _0: state.grades\n });\n getNextSubmission(send, courseId, filter);\n } else {\n Curry._1(send, /* FinishSaving */1);\n }\n return Promise.resolve(undefined);\n }), Curry._3($$fetch, false, undefined, variables));\n}\n\nfunction warning(submissionDetails) {\n var warning$1 = CoursesReview__SubmissionDetails.warning(submissionDetails);\n if (warning$1 !== undefined) {\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: \"ms-2\"\n }, warning$1));\n } else {\n return null;\n }\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 RescriptReactRouter.push(path);\n }));\n } else {\n return RescriptReactRouter.push(path);\n }\n}\n\nfunction reviewNextButton(nextSubmission, filter) {\n var buttonStyle = \"next-submission-button flex w-full items-center justify-center text-sm font-semibold bg-white border-t border-gray-200 px-5 py-4 focus:ring-2 focus:ring-focusColor-500 ring-inset\";\n if (typeof nextSubmission !== \"number\") {\n return React.createElement(Link.make, {\n href: \"/submissions/\" + nextSubmission._0 + \"/review?\" + CoursesReview__Filter.toQueryString(filter),\n className: \"\" + buttonStyle + \" hover:bg-primary-50 hover:text-primary-500\",\n children: null\n }, React.createElement(\"p\", {\n className: \"pe-2\"\n }, t(undefined, undefined, \"review_next\")), React.createElement(Icon.make, {\n className: \"if i-arrow-right-short-light text-lg lg:text-2xl rtl:rotate-180\"\n }));\n }\n switch (nextSubmission) {\n case /* DataUnloaded */0 :\n return null;\n case /* DataLoading */1 :\n return React.createElement(\"button\", {\n className: buttonStyle,\n disabled: true\n }, React.createElement(FaIcon.make, {\n classes: \"fas fa-spinner fa-pulse me-2\"\n }));\n case /* DataEmpty */2 :\n return React.createElement(\"div\", {\n className: buttonStyle\n }, React.createElement(Icon.make, {\n className: \"if i-check-circle-alt-light text-lg lg:text-2xl\"\n }), React.createElement(\"p\", {\n className: \"ps-2 block md:hidden\"\n }, t(undefined, undefined, \"you_are_done\")), React.createElement(\"p\", {\n className: \"ps-2 hidden md:block\"\n }, t(undefined, undefined, \"no_more_pending_submissions\")));\n \n }\n}\n\nfunction headerSection(state, submissionDetails, filter) {\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-e 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 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\"\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 }))), React.createElement(\"div\", {\n className: \"px-4 py-3 flex flex-col justify-center\"\n }, React.createElement(\"div\", {\n className: \"block text-sm md:pe-2\"\n }, React.createElement(\"a\", {\n className: \"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: \"mt-1 text-xs text-gray-800\"\n }, teamName !== undefined ? React.createElement(\"span\", undefined, React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by_team\")), React.createElement(\"span\", {\n className: \"font-semibold\"\n }, teamName), React.createElement(\"span\", undefined, \" - \")) : React.createElement(\"span\", undefined, t(undefined, undefined, \"submitted_by\")), Js_array.mapi((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 }), CoursesReview__SubmissionDetails.students(submissionDetails))))), React.createElement(\"div\", {\n className: \"hidden md:flex shrink-0 gap-6\"\n }, React.createElement(CoursesStudents__PersonalCoaches.make, {\n tooltipPosition: \"Bottom\",\n defaultAvatarSize: \"8\",\n mdAvatarSize: \"8\",\n title: React.createElement(\"span\", {\n className: \"me-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 }))));\n}\n\nfunction updateGrading(grade, state, send) {\n var newGrades = Js_array.concat([grade], Js_array.filter((function (g) {\n return CoursesReview__Grade.evaluationCriterionId(g) !== CoursesReview__Grade.evaluationCriterionId(grade);\n }), state.grades));\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 = Js_array.find((function (ec) {\n return EvaluationCriterion.id(ec) === evaluationCriterionId;\n }), evaluationCriteria);\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, send) {\n var defaultClasses = \"course-review-editor__grade-pill shadow-sm border-gray-300 flex items-center justify-center 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 hover:bg-green-500 hover:text-white \" : \"\"\n );\n return defaultClasses + (\n Caml_obj.lessequal(currentGrade, selectedGrade) ? \"cursor-default bg-green-500 text-white shadow-lg\" : \"bg-white text-gray-900\"\n );\n}\n\nfunction showGradePill(key, submissionDetails, evaluationCriterion, gradeValue, 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, send),\n title: GradeLabel.label(gradeLabel),\n disabled: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\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), 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 return showGradePill(key, submissionDetails, ec, gradeValue, 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 var tmp;\n if (status !== 0) {\n switch (status) {\n case /* Grading */1 :\n tmp = \"course-review-editor__status-pulse\";\n break;\n case /* Unreviewed */2 :\n case /* Rejected */3 :\n tmp = \"\";\n break;\n \n }\n } else {\n tmp = \"\";\n }\n return (\n badge ? \"px-2 py-2 flex justify-center border rounded items-center space-x-2 \" : \"w-12 h-10 p-1 md:w-26 md:h-22 rounded md:rounded-lg border flex justify-center items-center \"\n ) + badgeColorClasses(statusColor) + tmp;\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;\n switch (status) {\n case /* Passed */0 :\n match = [\n t(undefined, undefined, \"status.completed\"),\n /* Green */2\n ];\n break;\n case /* Grading */1 :\n match = [\n t(undefined, undefined, \"status.reviewing\"),\n /* Orange */1\n ];\n break;\n case /* Unreviewed */2 :\n match = [\n t(undefined, undefined, \"status.pending_review\"),\n /* Gray */3\n ];\n break;\n case /* Rejected */3 :\n match = [\n t(undefined, undefined, \"status.rejected\"),\n /* Red */0\n ];\n break;\n \n }\n var color = match[1];\n var _date = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var tmp;\n if (_date !== undefined) {\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 var tmp$1;\n switch (status) {\n case /* Passed */0 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-badge-check-solid text-xl text-green-500\"\n });\n break;\n case /* Grading */1 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-writing-pad-solid text-xl text-orange-300\"\n });\n break;\n case /* Unreviewed */2 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-eye-solid text-xl text-gray-400\"\n });\n break;\n case /* Rejected */3 :\n tmp$1 = React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-xl text-red-500\"\n });\n break;\n \n }\n return React.createElement(\"div\", {\n \"aria-label\": \"submission-status\",\n className: \"hidden md:flex gap-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 ms-2 md:ms-4\"\n }, React.createElement(\"div\", {\n className: gradeBadgeClasses(color, status, true)\n }, tmp$1, React.createElement(\"p\", {\n className: \"text-xs font-semibold \" + textColor(color)\n }, match[0])))));\n}\n\nfunction submissionStatusIcon(status, overlaySubmission) {\n var match;\n switch (status) {\n case /* Passed */0 :\n match = [\n t(undefined, undefined, \"status.completed\"),\n /* Green */2\n ];\n break;\n case /* Grading */1 :\n match = [\n t(undefined, undefined, \"status.reviewing\"),\n /* Orange */1\n ];\n break;\n case /* Unreviewed */2 :\n match = [\n t(undefined, undefined, \"status.pending_review\"),\n /* Gray */3\n ];\n break;\n case /* Rejected */3 :\n match = [\n t(undefined, undefined, \"status.rejected\"),\n /* Red */0\n ];\n break;\n \n }\n var color = match[1];\n var date = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var tmp;\n if (date !== undefined) {\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 me-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(date), \"MMMM d, yyyy\")\n ]], undefined, \"evaluated_at\")));\n } else {\n tmp = null;\n }\n var tmp$1;\n switch (status) {\n case /* Passed */0 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-badge-check-solid text-xl md:text-5xl text-green-500\"\n });\n break;\n case /* Grading */1 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-writing-pad-solid text-xl md:text-5xl text-orange-300\"\n });\n break;\n case /* Unreviewed */2 :\n tmp$1 = React.createElement(Icon.make, {\n className: \"if i-eye-solid text-xl md:text-4xl text-gray-400\"\n });\n break;\n case /* Rejected */3 :\n tmp$1 = React.createElement(FaIcon.make, {\n classes: \"fas fa-exclamation-triangle text-xl md:text-4xl text-red-500\"\n });\n break;\n \n }\n return React.createElement(\"div\", {\n \"aria-label\": \"submission-status\",\n className: \"flex flex-1 flex-col items-center justify-center md:border-s 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:ps-6\"\n }, tmp, React.createElement(\"div\", {\n className: \"w-full md:w-26 flex gap-1 flex-row md:flex-col md:items-center justify-center\"\n }, React.createElement(\"div\", {\n className: gradeBadgeClasses(color, status, false)\n }, tmp$1), 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 \" + badgeColorClasses(color) + \" \" + textColor(color) + \"\"\n }, match[0]))));\n}\n\nfunction gradeSubmission(submissionId, state, send, updateSubmissionCB, status, currentUser, overlaySubmission, $$event, courseId, filter) {\n $$event.preventDefault();\n gradeSubmissionQuery(submissionId, state, send, overlaySubmission, currentUser, updateSubmissionCB, courseId, filter);\n}\n\nfunction reviewButtonDisabled(status) {\n if (status >= 3) {\n return false;\n }\n switch (status) {\n case /* Passed */0 :\n case /* Grading */1 :\n return false;\n case /* Unreviewed */2 :\n return true;\n \n }\n}\n\nfunction computeStatus(overlaySubmission, selectedGrades, isAcceptable, evaluationCriteria, targetEvaluationCriteriaIds) {\n var currentGradingCriteria = evaluationCriteria.filter(function (criterion) {\n return $$Array.mem(EvaluationCriterion.id(criterion), targetEvaluationCriteriaIds);\n });\n var match = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var match$1 = ArrayUtils.isNotEmpty(CoursesReview__OverlaySubmission.grades(overlaySubmission));\n if (match !== undefined) {\n if (match$1) {\n return /* Passed */0;\n } else {\n return /* Rejected */3;\n }\n } else if (isAcceptable) {\n if (Caml_obj.equal(selectedGrades, [])) {\n return /* Unreviewed */2;\n } else if (selectedGrades.length !== currentGradingCriteria.length) {\n return /* Grading */1;\n } else {\n return /* Passed */0;\n }\n } else {\n return /* Rejected */3;\n }\n}\n\nfunction submitButtonText(isAcceptable, feedback, grades) {\n var match = feedback !== \"\";\n var match$1 = ArrayUtils.isNotEmpty(grades);\n if (isAcceptable) {\n if (match) {\n return t(undefined, undefined, \"save_grades_and_send_feedback\");\n } else {\n return t(undefined, undefined, \"save_grades\");\n }\n } else if (match) {\n if (match$1) {\n return t(undefined, undefined, \"save_grades\");\n } else {\n return t(undefined, undefined, \"reject_submission_and_send_feedback\");\n }\n } else if (match$1) {\n return t(undefined, undefined, \"save_grades\");\n } else {\n return t(undefined, undefined, \"reject_submission\");\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: \"ms-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\", undefined, React.createElement(\"div\", {\n className: \"font-medium text-sm flex items-start md:items-center\"\n }, React.createElement(Icon.make, {\n className: \"if i-long-text-light text-gray-800 text-base mt-1 md:mt-0.5\"\n }), note !== undefined ? React.createElement(\"span\", {\n className: \"ms-2 md:ms-4 tracking-wide\"\n }, React.createElement(\"label\", {\n htmlFor: textareaId\n }, t(undefined, undefined, \"write_a_note\")), help) : React.createElement(\"div\", {\n className: \"ms-2 md:ms-4 tracking-wide w-full flex items-center\"\n }, React.createElement(\"div\", undefined, React.createElement(\"span\", undefined, t([[\n \"noteAbout\",\n noteAbout\n ]], undefined, \"note_help\")), help), React.createElement(\"button\", {\n className: \"btn btn-default btn-small ms-4\",\n disabled: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\n onClick: (function (param) {\n Curry._1(send, {\n TAG: /* UpdateNote */5,\n _0: \"\"\n });\n })\n }, React.createElement(\"i\", {\n className: \"far fa-edit\"\n }), React.createElement(\"span\", {\n className: \"ps-2\"\n }, t(undefined, undefined, \"write_a_note\"))))), note !== undefined ? React.createElement(\"div\", {\n className: \"ms-6 md:ms-7 mt-2\"\n }, React.createElement(MarkdownEditor.make, {\n value: note,\n onChange: (function (value) {\n Curry._1(send, {\n TAG: /* UpdateNote */5,\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: \"ms-2 md:ms-3 tracking-wide\"\n }, t(undefined, undefined, \"review_checklist\")))), React.createElement(\"div\", {\n className: \"mt-2 md:ms-8\"\n }, React.createElement(\"button\", {\n className: \"bg-primary-100 flex gap-3 items-center justify-between px-4 py-3 border border-dashed border-gray-600 rounded-md w-full 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: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\n onClick: (function (param) {\n 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 rtl:rotate-180\"\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: \"ms-2 md:ms-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:ms-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: \"ps-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:ms-8\"\n }, React.createElement(MarkdownEditor.make, {\n value: state.newFeedback,\n onChange: (function (feedback) {\n 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: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false\n }))) : null);\n}\n\nfunction showFeedback(feedback) {\n return React.createElement(\"div\", {\n className: \"divide-y space-y-6 md:ms-8\"\n }, Js_array.mapi((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 me-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:ms-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:ms-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 }), ArrayUtils.copyAndSort((function (x, y) {\n return DateFns.differenceInSeconds(CoursesReview__Feedback.createdAt(y), CoursesReview__Feedback.createdAt(x));\n }), feedback)));\n}\n\nfunction showSubmissionStatus(status) {\n var match = status !== 0 ? (\n status >= 3 ? [\n t(undefined, undefined, \"status.rejected\"),\n \"bg-red-100 text-red-700\"\n ] : [\n t(undefined, undefined, \"status.pending_review\"),\n \"bg-yellow-100 text-yellow-800 \"\n ]\n ) : [\n t(undefined, undefined, \"status.completed\"),\n \"bg-green-100 text-green-800\"\n ];\n return React.createElement(\"div\", {\n \"aria-label\": \"submission-leftpane-status\",\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([\n [\n \"submission_number\",\n String(number)\n ],\n [\n \"target_title\",\n CoursesReview__SubmissionDetails.targetTitle(submissionDetails)\n ],\n [\n \"name\",\n studentOrTeamName\n ]\n ], undefined, \"page_title\");\n}\n\nfunction loadSubmissionReport(submissionId, updateSubmissionReportCB) {\n Js_promise.then_((function (response) {\n var updatedReports = response.submissionDetails.submissionReports.map(CoursesReview__SubmissionReport.makeFromJS);\n Curry._1(updateSubmissionReportCB, updatedReports);\n return Promise.resolve(undefined);\n }), Curry._3(make$1, undefined, undefined, {\n submissionId: submissionId\n }));\n}\n\nfunction reloadSubmissionReport(submissionId, reports, updateSubmissionReportCB) {\n var shouldReload = ArrayUtils.isNotEmpty(reports.filter(function (report) {\n var match = CoursesReview__SubmissionReport.status(report);\n return match < 2;\n }));\n if (shouldReload) {\n return loadSubmissionReport(submissionId, updateSubmissionReportCB);\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 submissionReports = Props.submissionReports;\n var updateSubmissionReportCB = Props.updateSubmissionReportCB;\n var submissionReportPollTime = Props.submissionReportPollTime;\n var match = React.useReducer(reducer, {\n grades: [],\n isAcceptable: true,\n newFeedback: \"\",\n saving: false,\n showReport: false,\n checklist: CoursesReview__OverlaySubmission.checklist(overlaySubmission),\n note: undefined,\n editor: CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission) === undefined ? (\n Belt_Option.mapWithDefault(CoursesReview__SubmissionDetails.reviewer(submissionDetails), false, (function (r) {\n return UserProxy.userId(CoursesReview__Reviewer.user(r)) === AppRouter__User.id(currentUser);\n })) || CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false ? /* 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 newFeedbackRef = React.useRef(state.newFeedback);\n React.useEffect((function () {\n var handleBeforeUnload = function ($$event) {\n if (newFeedbackRef.current !== \"\") {\n $$event.preventDefault();\n $$event.returnValue = \"\";\n return ;\n }\n \n };\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return (function (param) {\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n });\n }), []);\n React.useEffect((function () {\n newFeedbackRef.current = state.newFeedback;\n }), [state.newFeedback]);\n var status = computeStatus(overlaySubmission, state.grades, state.isAcceptable, evaluationCriteria, targetEvaluationCriteriaIds);\n var match$1 = CoursesReview__OverlaySubmission.grades(overlaySubmission);\n var updateChecklistCB = match$1.length !== 0 ? undefined : (function (checklist) {\n Curry._1(send, {\n TAG: /* UpdateChecklist */4,\n _0: checklist\n });\n });\n var findEditor = function (evaluatedAt, overlaySubmission) {\n if (evaluatedAt !== undefined) {\n return /* ReviewedSubmissionEditor */{\n _0: CoursesReview__OverlaySubmission.grades(overlaySubmission)\n };\n } else if (Belt_Option.mapWithDefault(CoursesReview__SubmissionDetails.reviewer(submissionDetails), false, (function (r) {\n return UserProxy.userId(CoursesReview__Reviewer.user(r)) === AppRouter__User.id(currentUser);\n })) || CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false) {\n return /* GradesEditor */1;\n } else {\n return /* AssignReviewer */0;\n }\n };\n React.useEffect((function () {\n if (!ArrayUtils.isNotEmpty(submissionReports)) {\n return ;\n }\n var intervalId = setInterval((function (param) {\n reloadSubmissionReport(submissionId, submissionReports, updateSubmissionReportCB);\n }), Math.imul(submissionReportPollTime, 1000));\n return (function (param) {\n clearInterval(intervalId);\n });\n }), []);\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var filter = CoursesReview__Filter.makeFromQueryParams(url.search);\n var grades = state.editor;\n var tmp;\n if (typeof grades === \"number\") {\n switch (grades) {\n case /* AssignReviewer */0 :\n tmp = 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 border-t lg:border-t-0 sticky top-0 z-50 md:h-16\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"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 tmp = 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 border-t lg:border-t-0 sticky top-0 z-50 md:h-16\"\n }, React.createElement(\"p\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"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 ms-2 md:ms-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 unassignReviewer(submissionId, send, updateReviewerCB);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-times-regular\"\n }), React.createElement(\"span\", {\n className: \"ms-2\"\n }, t(undefined, undefined, \"remove_assignment\")))))), CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false), 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\", {\n className: \"flex items-start md:items-center\"\n }, React.createElement(\"label\", {\n className: \"tracking-wide text-sm font-semibold flex me-4\",\n htmlFor: \"is_acceptable\"\n }, React.createElement(Icon.make, {\n className: \"if i-long-text-light text-gray-800 text-base mt-1 md:mt-0.5 if-w-14 rtlFlip if-h-16\"\n }), React.createElement(\"span\", {\n className: \"ms-2 md:ms-4 tracking-wide w-full\"\n }, t(undefined, undefined, \"submission_acceptable\"))), React.createElement(\"div\", {\n className: \"flex toggle-button__group shrink-0 rounded-lg\",\n id: \"is_acceptable\"\n }, React.createElement(\"button\", {\n className: booleanButtonClasses(state.isAcceptable),\n onClick: (function (param) {\n return updateIsAcceptable(true, send, param);\n })\n }, I18n.ts(undefined, undefined, \"_yes\")), React.createElement(\"button\", {\n className: booleanButtonClasses(!state.isAcceptable),\n onClick: (function (param) {\n return updateIsAcceptable(false, send, param);\n })\n }, I18n.ts(undefined, undefined, \"_no\")))), state.isAcceptable ? 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: \"ms-2 md:ms-3 tracking-wide\"\n }, t(undefined, undefined, \"grade_card\"))), React.createElement(\"div\", {\n className: \"flex md:flex-row flex-col md:ms-8 rounded-lg mt-2\"\n }, React.createElement(\"div\", {\n className: \"w-full\"\n }, React.createElement(\"div\", {\n className: \"space-y-6 max-w-2xl\"\n }, renderGradePills(evaluationCriteria, targetEvaluationCriteriaIds, submissionDetails, state, send))))) : React.createElement(\"div\", {\n className: \"md:ps-8 text-sm w-full\"\n }, React.createElement(\"p\", {\n className: \"bg-gray-100 rounded-lg p-4\"\n }, React.createElement(\"span\", {\n className: \"font-semibold\"\n }, t(undefined, undefined, \"rejection_help_note_title\")), t(undefined, undefined, \"rejection_help_note\")))), React.createElement(\"div\", {\n className: \"flex gap-4 overflow-x-auto bg-white md:bg-gray-50 border-t px-4 md:px-6 py-2 md:py-4 mt-4 md:mt-8\"\n }, React.createElement(\"button\", {\n className: \"btn btn-primary btn-large w-full border border-green-600 md:ms-8\",\n disabled: reviewButtonDisabled(status),\n onClick: (function ($$event) {\n gradeSubmission(CoursesReview__OverlaySubmission.id(overlaySubmission), state, send, updateSubmissionCB, status, currentUser, overlaySubmission, $$event, CoursesReview__SubmissionDetails.courseId(submissionDetails), filter);\n })\n }, submitButtonText(state.isAcceptable, 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: \"ms-2 md:ms-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 = React.createElement(\"div\", undefined, React.createElement(CoursesReview__Checklist.make, {\n reviewChecklist: reviewChecklist,\n updateFeedbackCB: (function (feedback) {\n Curry._1(send, {\n TAG: /* GenerateFeeback */1,\n _0: feedback,\n _1: findEditor(CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission), 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 Curry._1(send, {\n TAG: /* UpdateEditor */6,\n _0: findEditor(CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission), overlaySubmission)\n });\n }),\n overlaySubmission: overlaySubmission,\n submissionDetails: submissionDetails\n }));\n break;\n \n }\n } else {\n var match$2 = CoursesReview__OverlaySubmission.evaluatedAt(overlaySubmission);\n var tmp$1;\n if (match$2 !== undefined) {\n if (status !== 0) {\n if (status >= 3) {\n var name = CoursesReview__OverlaySubmission.evaluatorName(overlaySubmission);\n tmp$1 = React.createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:items-center justify-between bg-red-50 rounded-lg p-4\"\n }, React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, t(undefined, undefined, \"undo_rejection_notice_title\")), React.createElement(\"div\", undefined, React.createElement(\"span\", {\n className: \"text-sm\"\n }, name !== undefined ? name : React.createElement(\"em\", undefined, t(undefined, undefined, \"deleted_coach\"))), React.createElement(\"span\", {\n className: \"text-sm\"\n }, t(undefined, undefined, \"undo_rejection_notice\")))), React.createElement(\"div\", undefined, React.createElement(\"button\", {\n className: \"btn btn-small mt-2 md:mt-0 bg-red-100 md:bg-red-50 text-red-800 hover:bg-red-200 focus:ring-2 focus:ring-offset-2 focus:ring-focusColor-500\",\n disabled: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\n onClick: (function (param) {\n WindowUtils.confirm(undefined, t(undefined, undefined, \"undo_rejection_warning\"), (function (param) {\n undoGrading(CoursesReview__OverlaySubmission.id(overlaySubmission), send);\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-undo\"\n }), React.createElement(\"span\", {\n className: \"ms-2\"\n }, t(undefined, undefined, \"undo_rejection\")))));\n } else {\n tmp$1 = null;\n }\n } else {\n tmp$1 = 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: \"ms-2 md:ms-3 tracking-wide\"\n }, t(undefined, undefined, \"grade_card\"))), React.createElement(\"div\", undefined, 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: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\n onClick: (function (param) {\n WindowUtils.confirm(undefined, t(undefined, undefined, \"undo_grade_warning\"), (function (param) {\n undoGrading(CoursesReview__OverlaySubmission.id(overlaySubmission), send);\n }));\n })\n }, React.createElement(\"i\", {\n className: \"fas fa-undo\"\n }), React.createElement(\"span\", {\n className: \"ms-2\"\n }, t(undefined, undefined, \"undo_grading\"))))));\n }\n } else {\n tmp$1 = null;\n }\n var match$3 = CoursesReview__OverlaySubmission.feedback(overlaySubmission);\n tmp = 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 border-t lg:border-t-0 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 }, tmp$1, React.createElement(\"div\", {\n className: \"flex md:flex-row flex-col md:ms-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 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 pb-18 md:pb-20\"\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: \"ms-2 md:ms-3 tracking-wide\"\n }, t(undefined, undefined, \"feedback\"))), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"py-4 md:ms-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: CoursesReview__SubmissionDetails.reviewable(submissionDetails) === false,\n onClick: (function (param) {\n Curry._1(send, /* ShowAdditionalFeedbackEditor */4);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-plus-regular\"\n }), React.createElement(\"p\", {\n className: \"ps-2\"\n }, match$3.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, warning(submissionDetails)), headerSection(state, submissionDetails, filter), ReactUtils.nullIf(React.createElement(\"div\", {\n className: \"flex gap-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 lg:flex-row flex-1 gap-6 md:gap-0 md:overflow-y-auto\",\n children: null,\n key: \"submission-editor\"\n }, React.createElement(\"div\", {\n className: \"lg:w-1/2 w-full bg-white md:border-e relative lg: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 }, t([[\n \"number\",\n String(number)\n ]], undefined, \"submission_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 md:pb-20\"\n }, React.createElement(SubmissionChecklistShow.make, {\n checklist: state.checklist,\n updateChecklistCB: updateChecklistCB\n })), submissionReports.map(function (report) {\n return React.createElement(CoursesReview__SubmissionReportShow.make, {\n report: report,\n key: report.id\n });\n })), React.createElement(\"div\", {\n className: \"lg:w-1/2 w-full lg:overflow-y-auto\"\n }, tmp, React.createElement(\"div\", {\n className: \"fixed bottom-0 inset-x-0 z-10\"\n }, React.createElement(\"div\", undefined, reviewNextButton(state.nextSubmission, filter)))))\n ];\n}\n\nvar ts = I18n.ts;\n\nvar make$2 = CoursesReview__Editor;\n\nexport {\n t ,\n ts ,\n str ,\n reducer ,\n CreateGradingMutation ,\n UndoGradingMutation ,\n CreateFeedbackMutation ,\n NextSubmissionQuery ,\n UnassignReviewerMutation ,\n SubmissionReportQuery ,\n booleanButtonClasses ,\n updateIsAcceptable ,\n unassignReviewer ,\n getNextSubmission ,\n isReviewDisabled ,\n makeFeedback ,\n createFeedback ,\n undoGrading ,\n passed ,\n trimToOption ,\n trimArraytoOption ,\n navigationDisabled ,\n gradeSubmissionQuery ,\n warning ,\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 loadSubmissionReport ,\n reloadSubmissionReport ,\n make$2 as make,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 \\ncreatedAt \\nsubmissionReportPollTime \\nstudents {\\nid \\nname \\n}\\n\\nsubmissionReports {\\nid \\nreport \\nstatus \\nstartedAt \\ncompletedAt \\nqueuedAt \\nreporter \\nheading \\ntargetUrl \\n}\\n\\nevaluationCriteria {\\nid \\nname \\nmaxGrade \\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 \\nreviewable \\nwarning \\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.submissionReports;\n var value$4 = value$1.evaluationCriteria;\n var value$5 = value$1.reviewChecklist;\n var value$6 = value$1.targetEvaluationCriteriaIds;\n var value$7 = value$1.submission;\n var value$8 = value$7.evaluatorName;\n var value$9 = value$7.passedAt;\n var value$10 = value$7.evaluatedAt;\n var value$11 = value$7.archivedAt;\n var value$12 = value$7.files;\n var value$13 = value$7.grades;\n var value$14 = value$7.feedback;\n var value$15 = value$1.allSubmissions;\n var value$16 = value$1.coaches;\n var value$17 = value$1.teamName;\n var value$18 = value$1.warning;\n var value$19 = value$1.reviewerDetails;\n var tmp;\n if (value$19 == null) {\n tmp = undefined;\n } else {\n var value$20 = value$19.user;\n tmp = {\n assignedAt: value$19.assignedAt,\n user: UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value$20)\n };\n }\n return {\n submissionDetails: {\n targetId: value$1.targetId,\n targetTitle: value$1.targetTitle,\n createdAt: value$1.createdAt,\n submissionReportPollTime: value$1.submissionReportPollTime,\n students: Js_array.map((function (value) {\n return {\n id: value.id,\n name: value.name\n };\n }), value$2),\n submissionReports: Js_array.map((function (value) {\n var value$1 = value.report;\n var value$2 = value.status;\n var tmp;\n switch (value$2) {\n case \"error\" :\n tmp = \"error\";\n break;\n case \"failure\" :\n tmp = \"failure\";\n break;\n case \"in_progress\" :\n tmp = \"in_progress\";\n break;\n case \"queued\" :\n tmp = \"queued\";\n break;\n case \"success\" :\n tmp = \"success\";\n break;\n default:\n tmp = {\n NAME: \"FutureAddedValue\",\n VAL: value$2\n };\n }\n var value$3 = value.startedAt;\n var value$4 = value.completedAt;\n var value$5 = value.heading;\n var value$6 = value.targetUrl;\n return {\n id: value.id,\n report: !(value$1 == null) ? value$1 : undefined,\n status: tmp,\n startedAt: !(value$3 == null) ? Caml_option.some(value$3) : undefined,\n completedAt: !(value$4 == null) ? Caml_option.some(value$4) : undefined,\n queuedAt: value.queuedAt,\n reporter: value.reporter,\n heading: !(value$5 == null) ? value$5 : undefined,\n targetUrl: !(value$6 == null) ? value$6 : undefined\n };\n }), value$3),\n evaluationCriteria: Js_array.map((function (value) {\n var value$1 = value.gradeLabels;\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade,\n gradeLabels: Js_array.map((function (value) {\n return {\n grade: value.grade,\n label: value.label\n };\n }), value$1)\n };\n }), value$4),\n reviewChecklist: Js_array.map((function (value) {\n var value$1 = value.result;\n return {\n title: value.title,\n result: Js_array.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 }), value$1)\n };\n }), value$5),\n targetEvaluationCriteriaIds: Js_array.map((function (value) {\n return value;\n }), value$6),\n submission: {\n id: value$7.id,\n evaluatorName: !(value$8 == null) ? value$8 : undefined,\n passedAt: !(value$9 == null) ? Caml_option.some(value$9) : undefined,\n createdAt: value$7.createdAt,\n evaluatedAt: !(value$10 == null) ? Caml_option.some(value$10) : undefined,\n archivedAt: !(value$11 == null) ? Caml_option.some(value$11) : undefined,\n files: Js_array.map((function (value) {\n return {\n url: value.url,\n title: value.title,\n id: value.id\n };\n }), value$12),\n grades: Js_array.map((function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n grade: value.grade\n };\n }), value$13),\n feedback: Js_array.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 }), value$14),\n checklist: value$7.checklist\n },\n allSubmissions: Js_array.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 }), value$15),\n coaches: Js_array.map((function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }), value$16),\n teamName: !(value$17 == null) ? value$17 : undefined,\n courseId: value$1.courseId,\n reviewable: value$1.reviewable,\n warning: !(value$18 == null) ? value$18 : undefined,\n reviewerDetails: tmp\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.warning;\n var warning = value$5 !== undefined ? value$5 : null;\n var value$6 = value$1.reviewable;\n var value$7 = value$1.courseId;\n var value$8 = value$1.teamName;\n var teamName = value$8 !== undefined ? value$8 : null;\n var value$9 = value$1.coaches;\n var coaches = Js_array.map((function (value) {\n return UserProxy.Fragment.serialize(value);\n }), value$9);\n var value$10 = value$1.allSubmissions;\n var allSubmissions = Js_array.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 }), value$10);\n var value$11 = value$1.submission;\n var value$12 = value$11.checklist;\n var value$13 = value$11.feedback;\n var feedback = Js_array.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 }), value$13);\n var value$14 = value$11.grades;\n var grades = Js_array.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 }), value$14);\n var value$15 = value$11.files;\n var files = Js_array.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 }), value$15);\n var value$16 = value$11.archivedAt;\n var archivedAt = value$16 !== undefined ? Caml_option.valFromOption(value$16) : null;\n var value$17 = value$11.evaluatedAt;\n var evaluatedAt = value$17 !== undefined ? Caml_option.valFromOption(value$17) : null;\n var value$18 = value$11.createdAt;\n var value$19 = value$11.passedAt;\n var passedAt = value$19 !== undefined ? Caml_option.valFromOption(value$19) : null;\n var value$20 = value$11.evaluatorName;\n var evaluatorName = value$20 !== undefined ? value$20 : null;\n var value$21 = value$11.id;\n var submission = {\n id: value$21,\n evaluatorName: evaluatorName,\n passedAt: passedAt,\n createdAt: value$18,\n evaluatedAt: evaluatedAt,\n archivedAt: archivedAt,\n files: files,\n grades: grades,\n feedback: feedback,\n checklist: value$12\n };\n var value$22 = value$1.targetEvaluationCriteriaIds;\n var targetEvaluationCriteriaIds = Js_array.map((function (value) {\n return value;\n }), value$22);\n var value$23 = value$1.reviewChecklist;\n var reviewChecklist = Js_array.map((function (value) {\n var value$1 = value.result;\n var result = Js_array.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 }), value$1);\n var value$2 = value.title;\n return {\n title: value$2,\n result: result\n };\n }), value$23);\n var value$24 = value$1.evaluationCriteria;\n var evaluationCriteria = Js_array.map((function (value) {\n var value$1 = value.gradeLabels;\n var gradeLabels = Js_array.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 }), value$1);\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 gradeLabels: gradeLabels\n };\n }), value$24);\n var value$25 = value$1.submissionReports;\n var submissionReports = Js_array.map((function (value) {\n var value$1 = value.targetUrl;\n var targetUrl = value$1 !== undefined ? value$1 : null;\n var value$2 = value.heading;\n var heading = value$2 !== undefined ? value$2 : null;\n var value$3 = value.reporter;\n var value$4 = value.queuedAt;\n var value$5 = value.completedAt;\n var completedAt = value$5 !== undefined ? Caml_option.valFromOption(value$5) : null;\n var value$6 = value.startedAt;\n var startedAt = value$6 !== undefined ? Caml_option.valFromOption(value$6) : null;\n var value$7 = value.status;\n var status = typeof value$7 === \"object\" ? value$7.VAL : (\n value$7 === \"queued\" ? \"queued\" : (\n value$7 === \"error\" ? \"error\" : (\n value$7 === \"failure\" ? \"failure\" : (\n value$7 === \"success\" ? \"success\" : \"in_progress\"\n )\n )\n )\n );\n var value$8 = value.report;\n var report = value$8 !== undefined ? value$8 : null;\n var value$9 = value.id;\n return {\n id: value$9,\n report: report,\n status: status,\n startedAt: startedAt,\n completedAt: completedAt,\n queuedAt: value$4,\n reporter: value$3,\n heading: heading,\n targetUrl: targetUrl\n };\n }), value$25);\n var value$26 = value$1.students;\n var students = Js_array.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 }), value$26);\n var value$27 = value$1.submissionReportPollTime;\n var value$28 = value$1.createdAt;\n var value$29 = value$1.targetTitle;\n var value$30 = value$1.targetId;\n var submissionDetails = {\n targetId: value$30,\n targetTitle: value$29,\n createdAt: value$28,\n submissionReportPollTime: value$27,\n students: students,\n submissionReports: submissionReports,\n evaluationCriteria: evaluationCriteria,\n reviewChecklist: reviewChecklist,\n targetEvaluationCriteriaIds: targetEvaluationCriteriaIds,\n submission: submission,\n allSubmissions: allSubmissions,\n coaches: coaches,\n teamName: teamName,\n courseId: value$7,\n reviewable: value$6,\n warning: warning,\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 Js_promise.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 }), Curry._3(make, undefined, undefined, {\n submissionId: submissionId\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 - Js_array.findIndex((function (s) {\n return CoursesReview__SubmissionMeta.id(s) === submissionId;\n }), allSubmissions) | 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, submissionReports) {\n return Curry._1(setState, (function (param) {\n return /* Loaded */{\n _0: CoursesReview__SubmissionDetails.updateSubmissionReport(submissionReports, 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 submissionReports: CoursesReview__SubmissionDetails.submissionReports(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-s\"\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 fixed z-[50] inset-0 overflow-y-auto bg-white\"\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/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../node_modules/rescript/lib/es6/js_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\";\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\nfunction currentStandingName(t) {\n return t.currentStandingName;\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 var value$5 = value.currentStandingName;\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: Js_array.map((function (value) {\n return value;\n }), value$3),\n lastSeenAt: !(value$4 == null) ? Caml_option.some(value$4) : undefined,\n currentStandingName: !(value$5 == null) ? value$5 : undefined\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.currentStandingName;\n var currentStandingName = value$1 !== undefined ? value$1 : null;\n var value$2 = value.lastSeenAt;\n var lastSeenAt = value$2 !== undefined ? Caml_option.valFromOption(value$2) : null;\n var value$3 = value.taggings;\n var taggings = Js_array.map((function (value) {\n return value;\n }), value$3);\n var value$4 = value.avatarUrl;\n var avatarUrl = value$4 !== undefined ? value$4 : null;\n var value$5 = value.fullTitle;\n var value$6 = value.affiliation;\n var affiliation = value$6 !== undefined ? value$6 : null;\n var value$7 = value.title;\n var value$8 = value.name;\n var value$9 = value.id;\n return {\n id: value$9,\n name: value$8,\n title: value$7,\n affiliation: affiliation,\n fullTitle: value$5,\n avatarUrl: avatarUrl,\n taggings: taggings,\n lastSeenAt: lastSeenAt,\n currentStandingName: currentStandingName\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 \\ncurrentStandingName \\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 currentStandingName: user.currentStandingName\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 currentStandingName: jsObject.currentStandingName\n };\n}\n\nexport {\n id ,\n name ,\n avatarUrl ,\n fullTitle ,\n lastSeenAt ,\n taggings ,\n affiliation ,\n title ,\n currentStandingName ,\n Fragment ,\n makeFromFragment ,\n makeFromJs ,\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 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/* 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 Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.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 }), Curry._3($$fetch, undefined, undefined, {\n id: id\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 me-2 md:me-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 me-2 md:me-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 me-2 md:e-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: \"ms-10md:ms-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/* 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 HelpIcon from \"../../../shared/components/HelpIcon.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 Js_promise.$$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 }), Js_promise.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 }), Curry._3(make, undefined, undefined, {\n studentId: studentId,\n note: state.newNote\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 + \" me-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 canModifyCoachNotes = Props.canModifyCoachNotes;\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 }, canModifyCoachNotes ? React.createElement(\"div\", undefined, React.createElement(\"span\", {\n className: \"flex\"\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(HelpIcon.make, {\n className: \"ms-1\",\n children: tr(undefined, undefined, \"help_text\")\n })), 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 saveNote(studentId, setState, state, addNoteCB);\n })\n }, state.saving ? saveNoteButtonText(tr(undefined, undefined, \"saving\"), \"fas fa-spinner\") : saveNoteButtonText(tr(undefined, undefined, \"save_note\"), \"\"))) : null, 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-100 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/* Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction id(t) {\n return t.id;\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, cohort, droppedOutAt, personalCoaches) {\n return {\n id: id,\n user: user,\n taggings: taggings,\n cohort: cohort,\n droppedOutAt: droppedOutAt,\n personalCoaches: personalCoaches\n };\n}\n\nexport {\n id ,\n taggings ,\n droppedOutAt ,\n personalCoaches ,\n cohort ,\n user ,\n make ,\n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\n\nfunction id(t) {\n return t.id;\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction make(id, name, maxGrade) {\n return {\n id: id,\n name: name,\n maxGrade: maxGrade\n };\n}\n\nfunction makeFromJs(ecData) {\n return Js_array.map((function (ec) {\n return {\n id: ec.id,\n name: ec.name,\n maxGrade: ec.maxGrade\n };\n }), ecData);\n}\n\nexport {\n id ,\n name ,\n make ,\n makeFromJs ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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 canModifyCoachNotes(t) {\n return t.canModifyCoachNotes;\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 totalPageReads(t) {\n return t.totalPageReads;\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 assignmentsCompleted(t) {\n return t.assignmentsCompleted;\n}\n\nfunction totalAssignments(t) {\n return t.totalAssignments;\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 gradeValue(averageGrade) {\n return averageGrade.grade;\n}\n\nfunction milestonesCompletionStatus(t) {\n return t.milestonesCompletionStatus;\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 canModifyCoachNotes: t.canModifyCoachNotes,\n evaluationCriteria: t.evaluationCriteria,\n totalPageReads: t.totalPageReads,\n totalTargets: t.totalTargets,\n assignmentsCompleted: t.assignmentsCompleted,\n totalAssignments: t.totalAssignments,\n quizScores: t.quizScores,\n averageGrades: t.averageGrades,\n student: t.student,\n team: t.team,\n milestonesCompletionStatus: t.milestonesCompletionStatus,\n courseId: t.courseId\n };\n}\n\nfunction removeNote(noteId, t) {\n var notes = Js_array.filter((function (note) {\n return CoursesStudents__CoachNote.id(note) !== noteId;\n }), t.coachNotes);\n return {\n id: t.id,\n coachNotes: notes,\n hasArchivedNotes: true,\n canModifyCoachNotes: t.canModifyCoachNotes,\n evaluationCriteria: t.evaluationCriteria,\n totalPageReads: t.totalPageReads,\n totalTargets: t.totalTargets,\n assignmentsCompleted: t.assignmentsCompleted,\n totalAssignments: t.totalAssignments,\n quizScores: t.quizScores,\n averageGrades: t.averageGrades,\n student: t.student,\n team: t.team,\n milestonesCompletionStatus: t.milestonesCompletionStatus,\n courseId: t.courseId\n };\n}\n\nfunction computeAverageQuizScore(quizScores) {\n var sumOfPercentageScores = Js_array.reduce((function (a, b) {\n return a + b;\n }), 0.0, $$Array.map((function (quizScore) {\n var fractionArray = $$Array.of_list($$String.split_on_char(/* '/' */47, quizScore));\n var numerator = Caml_format.float_of_string(Caml_array.get(fractionArray, 0));\n var denominator = Caml_format.float_of_string(Caml_array.get(fractionArray, 1));\n return numerator / denominator * 100.0;\n }), quizScores));\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, canModifyCoachNotes, evaluationCriteria, totalPageReads, totalTargets, assignmentsCompleted, totalAssignments, quizScores, averageGrades, student, team, courseId, milestonesCompletionStatus) {\n return {\n id: id,\n coachNotes: coachNotes,\n hasArchivedNotes: hasArchivedNotes,\n canModifyCoachNotes: canModifyCoachNotes,\n evaluationCriteria: evaluationCriteria,\n totalPageReads: totalPageReads,\n totalTargets: totalTargets,\n assignmentsCompleted: assignmentsCompleted,\n totalAssignments: totalAssignments,\n quizScores: quizScores,\n averageGrades: averageGrades,\n student: student,\n team: team,\n milestonesCompletionStatus: milestonesCompletionStatus,\n courseId: courseId\n };\n}\n\nexport {\n student ,\n team ,\n students ,\n coachNotes ,\n hasArchivedNotes ,\n canModifyCoachNotes ,\n courseId ,\n makeAverageGrade ,\n totalPageReads ,\n totalTargets ,\n gradeAsPercentage ,\n assignmentsCompleted ,\n totalAssignments ,\n quizzesAttempted ,\n evaluationCriteria ,\n averageGrades ,\n gradeValue ,\n milestonesCompletionStatus ,\n evaluationCriterionForGrade ,\n addNewNote ,\n removeNote ,\n computeAverageQuizScore ,\n averageQuizScore ,\n makeTeam ,\n make ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.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, evaluatedAt, milestoneNumber) {\n return {\n id: id,\n title: title,\n createdAt: createdAt,\n passedAt: passedAt,\n evaluatedAt: evaluatedAt,\n milestoneNumber: milestoneNumber\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction evaluatedAt(t) {\n return t.evaluatedAt;\n}\n\nfunction milestoneNumber(t) {\n return t.milestoneNumber;\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 Js_array.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, evaluatedAt, submission.milestoneNumber);\n }), submissions);\n}\n\nexport {\n make ,\n id ,\n title ,\n evaluatedAt ,\n milestoneNumber ,\n sort ,\n failed ,\n createdAtPretty ,\n timeDistance ,\n makeFromJs ,\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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 GraphqlQuery from \"../../../shared/utils/GraphqlQuery.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 \\npassedAt \\ntitle \\nevaluatedAt \\nmilestoneNumber \\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: Js_array.map((function (value) {\n var value$1 = value.passedAt;\n var value$2 = value.evaluatedAt;\n var value$3 = value.milestoneNumber;\n return {\n id: value.id,\n createdAt: value.createdAt,\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 milestoneNumber: !(value$3 == null) ? value$3 : undefined\n };\n }), value$2),\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 = Js_array.map((function (value) {\n var value$1 = value.milestoneNumber;\n var milestoneNumber = value$1 !== undefined ? value$1 : null;\n var value$2 = value.evaluatedAt;\n var evaluatedAt = value$2 !== undefined ? Caml_option.valFromOption(value$2) : null;\n var value$3 = value.title;\n var value$4 = value.passedAt;\n var passedAt = value$4 !== undefined ? Caml_option.valFromOption(value$4) : null;\n var value$5 = value.createdAt;\n var value$6 = value.id;\n return {\n id: value$6,\n createdAt: value$5,\n passedAt: passedAt,\n title: value$3,\n evaluatedAt: evaluatedAt,\n milestoneNumber: milestoneNumber\n };\n }), value$5);\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 = Js_array.concat(CoursesStudents__Submission.makeFromJs(nodes), submissions);\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 Js_promise.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 }), Curry._3(make, undefined, undefined, {\n studentId: studentId,\n after: cursor,\n sortDirection: \"Descending\"\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-s-3 p-3 md:py-6 md:px-5 mt-4 cursor-pointer rounded-e-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) {\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:pe-2\"\n }, React.createElement(\"span\", {\n className: \"ms-1 font-semibold text-base\"\n }, Belt_Option.mapWithDefault(CoursesStudents__Submission.milestoneNumber(submission), \"\", (function (number) {\n return ts(undefined, undefined, \"m\") + String(number) + \" - \";\n })) + CoursesStudents__Submission.title(submission))), React.createElement(\"div\", {\n className: \"mt-1 ms-px text-xs text-gray-900\"\n }, React.createElement(\"span\", {\n className: \"ms-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) {\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);\n }\n}\n\nfunction CoursesStudents__SubmissionsList(Props) {\n var studentId = Props.studentId;\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), 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 getStudentSubmissions(studentId, cursor, setState, submissions$1, updateSubmissionsCB);\n })\n }, ts(undefined, undefined, \"load_more\")));\n } else {\n tmp = showSubmissions(submissions._0);\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/* Not a pure module */\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 completed(t) {\n return t.completed;\n}\n\nfunction milestoneNumber(t) {\n return t.milestoneNumber;\n}\n\nfunction make(id, title, completed, milestoneNumber) {\n return {\n id: id,\n title: title,\n milestoneNumber: milestoneNumber,\n completed: completed\n };\n}\n\nfunction makeFromJs(data) {\n return data.map(function (data) {\n return make(data.id, data.title, data.completed, data.milestoneNumber);\n });\n}\n\nexport {\n id ,\n title ,\n completed ,\n milestoneNumber ,\n make ,\n makeFromJs ,\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 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 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 Js_array from \"../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as UserProxy from \"../../../shared/types/UserProxy.bs.js\";\nimport * as ArrayUtils from \"../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Js_promise from \"../../../../../node_modules/rescript/lib/es6/js_promise.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 SkeletonLoading from \"../../../shared/components/SkeletonLoading.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\";\nimport * as CoursesStudents__MilestonesCompletionStatus from \"../types/CoursesStudents__MilestonesCompletionStatus.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 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 = {\n selectedTab: /* Notes */0,\n studentData: /* Loading */0,\n submissions: /* Unloaded */0\n};\n\nfunction closeOverlayLink(student) {\n var search = window.location.search;\n var cohortId = Cohort.id(CoursesStudents__StudentInfo.cohort(student));\n return \"/cohorts/\" + (cohortId + \"/students\") + search;\n}\n\nvar Raw = {};\n\nvar query = \"query StudentDetailsQuery($studentId: ID!) {\\nstudentDetails(studentId: $studentId) {\\nemail \\nevaluationCriteria {\\nid \\nname \\nmaxGrade \\n}\\n\\nstudent {\\nid \\ntaggings \\nuser {\\n...UserDetailsFragment \\n}\\n\\ncohort {\\n...CohortFragment \\n}\\n\\npersonalCoaches {\\n...UserProxyFragment \\n}\\n\\ndroppedOutAt \\ncourse {\\nid \\n}\\n\\n}\\n\\ntotalTargets \\ntotalPageReads \\nassignmentsCompleted \\ntotalAssignments \\nquizScores \\naverageGrades {\\nevaluationCriterionId \\naverageGrade \\n}\\n\\nmilestonesCompletionStatus {\\nid \\ntitle \\nmilestoneNumber \\ncompleted \\n}\\n\\ncanModifyCoachNotes \\nteam {\\nid \\nname \\nstudents {\\nid \\ntaggings \\nuser {\\n...UserDetailsFragment \\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 + 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.cohort;\n var value$7 = value$3.personalCoaches;\n var value$8 = value$3.droppedOutAt;\n var value$9 = value$3.course;\n var value$10 = value$1.quizScores;\n var value$11 = value$1.averageGrades;\n var value$12 = value$1.milestonesCompletionStatus;\n var value$13 = value$1.team;\n var tmp;\n if (value$13 == null) {\n tmp = undefined;\n } else {\n var value$14 = value$13.students;\n tmp = {\n id: value$13.id,\n name: value$13.name,\n students: Js_array.map((function (value) {\n var value$1 = value.taggings;\n var value$2 = value.user;\n var value$3 = value.cohort;\n var value$4 = value.personalCoaches;\n var value$5 = value.droppedOutAt;\n return {\n id: value.id,\n taggings: Js_array.map((function (value) {\n return value;\n }), value$1),\n user: UserDetails.Fragment.verifyArgsAndParse(\"UserDetailsFragment\", value$2),\n cohort: Cohort.Fragment.verifyArgsAndParse(\"CohortFragment\", value$3),\n personalCoaches: Js_array.map((function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }), value$4),\n droppedOutAt: !(value$5 == null) ? Caml_option.some(value$5) : undefined\n };\n }), value$14)\n };\n }\n var value$15 = value.coachNotes;\n return {\n studentDetails: {\n email: value$1.email,\n evaluationCriteria: Js_array.map((function (value) {\n return {\n id: value.id,\n name: value.name,\n maxGrade: value.maxGrade\n };\n }), value$2),\n student: {\n id: value$3.id,\n taggings: Js_array.map((function (value) {\n return value;\n }), value$4),\n user: UserDetails.Fragment.verifyArgsAndParse(\"UserDetailsFragment\", value$5),\n cohort: Cohort.Fragment.verifyArgsAndParse(\"CohortFragment\", value$6),\n personalCoaches: Js_array.map((function (value) {\n return UserProxy.Fragment.verifyArgsAndParse(\"UserProxyFragment\", value);\n }), value$7),\n droppedOutAt: !(value$8 == null) ? Caml_option.some(value$8) : undefined,\n course: {\n id: value$9.id\n }\n },\n totalTargets: value$1.totalTargets,\n totalPageReads: value$1.totalPageReads,\n assignmentsCompleted: value$1.assignmentsCompleted,\n totalAssignments: value$1.totalAssignments,\n quizScores: Js_array.map((function (value) {\n return value;\n }), value$10),\n averageGrades: Js_array.map((function (value) {\n return {\n evaluationCriterionId: value.evaluationCriterionId,\n averageGrade: value.averageGrade\n };\n }), value$11),\n milestonesCompletionStatus: Js_array.map((function (value) {\n return {\n id: value.id,\n title: value.title,\n milestoneNumber: value.milestoneNumber,\n completed: value.completed\n };\n }), value$12),\n canModifyCoachNotes: value$1.canModifyCoachNotes,\n team: tmp\n },\n coachNotes: Js_array.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 }), value$15),\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 = Js_array.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 }), value$2);\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 = Js_array.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 = Js_array.map((function (value) {\n return UserProxy.Fragment.serialize(value);\n }), value$2);\n var value$3 = value.cohort;\n var cohort = Cohort.Fragment.serialize(value$3);\n var value$4 = value.user;\n var user = UserDetails.Fragment.serialize(value$4);\n var value$5 = value.taggings;\n var taggings = Js_array.map((function (value) {\n return value;\n }), value$5);\n var value$6 = value.id;\n return {\n id: value$6,\n taggings: taggings,\n user: user,\n cohort: cohort,\n personalCoaches: personalCoaches,\n droppedOutAt: droppedOutAt\n };\n }), value$5);\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.canModifyCoachNotes;\n var value$9 = value$3.milestonesCompletionStatus;\n var milestonesCompletionStatus = Js_array.map((function (value) {\n var value$1 = value.completed;\n var value$2 = value.milestoneNumber;\n var value$3 = value.title;\n var value$4 = value.id;\n return {\n id: value$4,\n title: value$3,\n milestoneNumber: value$2,\n completed: value$1\n };\n }), value$9);\n var value$10 = value$3.averageGrades;\n var averageGrades = Js_array.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 }), value$10);\n var value$11 = value$3.quizScores;\n var quizScores = Js_array.map((function (value) {\n return value;\n }), value$11);\n var value$12 = value$3.totalAssignments;\n var value$13 = value$3.assignmentsCompleted;\n var value$14 = value$3.totalPageReads;\n var value$15 = value$3.totalTargets;\n var value$16 = value$3.student;\n var value$17 = value$16.course;\n var value$18 = value$17.id;\n var course = {\n id: value$18\n };\n var value$19 = value$16.droppedOutAt;\n var droppedOutAt = value$19 !== undefined ? Caml_option.valFromOption(value$19) : null;\n var value$20 = value$16.personalCoaches;\n var personalCoaches = Js_array.map((function (value) {\n return UserProxy.Fragment.serialize(value);\n }), value$20);\n var value$21 = value$16.cohort;\n var cohort = Cohort.Fragment.serialize(value$21);\n var value$22 = value$16.user;\n var user = UserDetails.Fragment.serialize(value$22);\n var value$23 = value$16.taggings;\n var taggings = Js_array.map((function (value) {\n return value;\n }), value$23);\n var value$24 = value$16.id;\n var student = {\n id: value$24,\n taggings: taggings,\n user: user,\n cohort: cohort,\n personalCoaches: personalCoaches,\n droppedOutAt: droppedOutAt,\n course: course\n };\n var value$25 = value$3.evaluationCriteria;\n var evaluationCriteria = Js_array.map((function (value) {\n var value$1 = value.maxGrade;\n var value$2 = value.name;\n var value$3 = value.id;\n return {\n id: value$3,\n name: value$2,\n maxGrade: value$1\n };\n }), value$25);\n var value$26 = value$3.email;\n var studentDetails = {\n email: value$26,\n evaluationCriteria: evaluationCriteria,\n student: student,\n totalTargets: value$15,\n totalPageReads: value$14,\n assignmentsCompleted: value$13,\n totalAssignments: value$12,\n quizScores: quizScores,\n averageGrades: averageGrades,\n milestonesCompletionStatus: milestonesCompletionStatus,\n canModifyCoachNotes: value$8,\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 Js_promise.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);\n });\n var averageGrades = response.studentDetails.averageGrades.map(function (gradeData) {\n return CoursesStudents__StudentDetails.makeAverageGrade(gradeData.evaluationCriterionId, gradeData.averageGrade);\n });\n var milestonesCompletionStatus = response.studentDetails.milestonesCompletionStatus.map(function (milestone) {\n return CoursesStudents__MilestonesCompletionStatus.make(milestone.id, milestone.title, milestone.completed, milestone.milestoneNumber);\n });\n var studentDetails = CoursesStudents__StudentDetails.make(studentId, coachNotes, response.hasArchivedCoachNotes, response.studentDetails.canModifyCoachNotes, evaluationCriteria, response.studentDetails.totalPageReads, response.studentDetails.totalTargets, response.studentDetails.assignmentsCompleted, response.studentDetails.totalAssignments, response.studentDetails.quizScores, averageGrades, CoursesStudents__StudentInfo.make(s.id, UserDetails.makeFromFragment(s.user), s.taggings, 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, Cohort.makeFromFragment(s.cohort), Belt_Option.map(s.droppedOutAt, DateFns.decodeISO), s.personalCoaches.map(UserProxy.makeFromFragment));\n }));\n })), response.studentDetails.student.course.id, milestonesCompletionStatus);\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 }), Curry._3($$fetch, undefined, undefined, {\n studentId: studentId\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 assignmentsCompletionStatus(assignmentsCompleted, totalAssignments) {\n var assignmentsCompletionPercent = String(assignmentsCompleted / totalAssignments * 100.0 | 0);\n return React.createElement(\"div\", {\n \"aria-label\": \"assignments-completion-status\",\n className: \"w-full lg:w-1/2 px-2\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__doughnut-chart-container bg-gray-50\"\n }, doughnutChart(\"purple\", assignmentsCompletionPercent), React.createElement(\"p\", {\n className: \"text-sm font-semibold text-center mt-3\"\n }, ts(undefined, undefined, \"total_assignments_completed\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold text-center mt-1\"\n }, ts([\n [\n \"completed\",\n String(assignmentsCompleted | 0)\n ],\n [\n \"total\",\n String(totalAssignments | 0)\n ]\n ], undefined, \"assignments_completed\"))));\n}\n\nfunction pagesReadStatus(totalPageReads, totalTargets) {\n var totalPagesReadPercent = String(totalPageReads / totalTargets * 100.0 | 0);\n return React.createElement(\"div\", {\n \"aria-label\": \"targets-read-status\",\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 bg-gray-50\"\n }, doughnutChart(\"purple\", totalPagesReadPercent), React.createElement(\"p\", {\n className: \"text-sm font-semibold text-center mt-3\"\n }, ts(undefined, undefined, \"total_pages_read\")), React.createElement(\"p\", {\n className: \"text-sm text-gray-600 font-semibold text-center mt-1\"\n }, ts([\n [\n \"read\",\n String(totalPageReads | 0)\n ],\n [\n \"total\",\n String(totalTargets | 0)\n ]\n ], undefined, \"pages_read\"))));\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\"\n }, React.createElement(\"div\", {\n className: \"student-overlay__doughnut-chart-container bg-gray-50\"\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 milestonesCompletionStats(studentDetails) {\n var milestones = CoursesStudents__StudentDetails.milestonesCompletionStatus(studentDetails);\n var totalMilestones = milestones.length;\n var completedMilestones = milestones.filter(function (target) {\n return target.completed === true;\n }).length;\n var milestonesCompletionPercentage = String(completedMilestones / totalMilestones * 100.0 | 0);\n return React.createElement(\"div\", {\n className: \"flex items-center gap-2 flex-shrink-0\"\n }, React.createElement(\"p\", {\n className: \"text-xs font-medium text-gray-500\"\n }, String(completedMilestones) + \" / \" + String(totalMilestones), React.createElement(\"span\", {\n className: \"px-2 text-gray-300\"\n }, \"|\"), ts([[\n \"percentage\",\n milestonesCompletionPercentage\n ]], undefined, \"percentage_completed\")), React.createElement(\"div\", undefined, React.createElement(\"svg\", {\n className: \"courses-milestone-complete__doughnut-chart \",\n viewBox: \"0 0 36 36\"\n }, React.createElement(\"path\", {\n className: \"courses-milestone-complete__doughnut-chart-bg \",\n d: \"M18 2.0845\\n a 15.9155 15.9155 0 0 1 0 31.831\\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n }), React.createElement(\"path\", {\n className: \"courses-milestone-complete__doughnut-chart-stroke\",\n d: \"M18 2.0845\\n a 15.9155 15.9155 0 0 1 0 31.831\\n a 15.9155 15.9155 0 0 1 0 -31.831\",\n strokeDasharray: milestonesCompletionPercentage + \", 100\"\n }))));\n}\n\nfunction averageGradeCharts(evaluationCriteria, averageGrades) {\n return $$Array.map((function (grade) {\n var criterion = CoursesStudents__StudentDetails.evaluationCriterionForGrade(grade, evaluationCriteria, \"CoursesStudents__StudentOverlay\");\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 student-overlay__pie-chart--pass\",\n viewBox: \"0 0 32 32\"\n }, React.createElement(\"circle\", {\n className: \"student-overlay__pie-chart-circle student-overlay__pie-chart-circle--pass\",\n cx: \"16\",\n cy: \"16\",\n r: \"16\",\n strokeDasharray: CoursesStudents__StudentDetails.gradeAsPercentage(grade, criterion) + \", 100\"\n })), React.createElement(\"span\", {\n className: \"ms-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 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: \"ms-2 md:ms-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 mt-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 mt-2 rounded-lg border border-transparent hover:bg-primary-50 hover:border-primary-500 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500 transition\",\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: \"ms-2\"\n }, warning));\n }), null, warning);\n}\n\nfunction onAddCoachNotesCB(studentId, setState, param) {\n getStudentDetails(studentId, setState);\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 ScrollLock.deactivate(undefined);\n });\n }), []);\n React.useEffect((function () {\n getStudentDetails(studentId, setState);\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 name = UserDetails.currentStandingName(CoursesStudents__StudentInfo.user(student));\n var name$1 = UserDetails.affiliation(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 pb-4\"\n }, React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"flex items-center justify-start gap-2 flex-wrap\"\n }, React.createElement(\"div\", undefined, React.createElement(\"a\", {\n \"aria-label\": t(undefined, undefined, \"close_student_report\"),\n className: \"z-50 start-0 cursor-pointer top-0 inline-flex p-1 rounded-full bg-gray-50 h-11 w-11 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 href: closeOverlayLink(student)\n }, React.createElement(Icon.make, {\n className: \"if i-arrow-left-light if-fw text-xl lg:text-2xl\"\n }))), React.createElement(\"div\", undefined, React.createElement(\"div\", {\n className: \"student-overlay__student-avatar mx-auto w-14 h-14 md:w-16 md:h-16 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(\"div\", {\n className: \"ps-1\"\n }, React.createElement(\"div\", undefined, React.createElement(\"h2\", {\n className: \"text-lg text-left font-semibold\"\n }, UserDetails.name(CoursesStudents__StudentInfo.user(student)))), React.createElement(\"div\", {\n className: \"text-sm font-semibold\"\n }, UserDetails.title(CoursesStudents__StudentInfo.user(student))))), React.createElement(\"div\", {\n className: \"mt-4 space-y-1 flex flex-col\"\n }, React.createElement(\"div\", {\n className: \"flex flex-wrap items-center justify-normal gap-2\"\n }, React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-user-regular if-fw text-xl\"\n }), React.createElement(\"span\", {\n className: \"text-gray-500 font-normal\"\n }, t(undefined, undefined, \"user_id\")), React.createElement(ClickToCopy.make, {\n copy: UserDetails.id(CoursesStudents__StudentInfo.user(student)),\n className: \"inline-block hover:text-primary-500\",\n children: React.createElement(\"span\", {\n className: \"ms-2 text-base font-semibold\"\n }, \"#\" + UserDetails.id(CoursesStudents__StudentInfo.user(student)) + \"\")\n })), React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-academic-cap-light if-fw text-xl\"\n }), React.createElement(\"span\", {\n className: \"text-gray-500 font-normal\"\n }, t(undefined, undefined, \"student_id\")), React.createElement(ClickToCopy.make, {\n copy: CoursesStudents__StudentInfo.id(student),\n className: \"inline-block hover:text-primary-500\",\n children: React.createElement(\"span\", {\n className: \"ms-2 text-base font-semibold\"\n }, \"#\" + CoursesStudents__StudentInfo.id(student) + \"\")\n }))), React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-users-light if-fw text-xl \"\n }), React.createElement(\"span\", {\n className: \"text-gray-500 font-normal\"\n }, ts(undefined, undefined, \"cohort\")), React.createElement(\"span\", {\n className: \"ms-2 text-base font-semibold break-normal\"\n }, Cohort.name(CoursesStudents__StudentInfo.cohort(student)))), name !== undefined ? React.createElement(\"div\", {\n className: \"flex\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-shield-light if-fw text-xl\"\n }), React.createElement(\"span\", {\n className: \"text-gray-500 font-normal\"\n }, ts(undefined, undefined, \"user_standing.standing\")), React.createElement(\"span\", {\n className: \"ms-2 text-base font-semibold\"\n }, name)) : null, name$1 !== undefined ? React.createElement(\"div\", {\n className: \"space-x-1\"\n }, React.createElement(PfIcon.make, {\n className: \"if i-school-light if-fw text-xl\"\n }), React.createElement(\"span\", {\n className: \"text-gray-500 font-normal\"\n }, t(undefined, undefined, \"affiliation\")), React.createElement(\"span\", {\n className: \"ms-2 text-base font-semibold\"\n }, name$1)) : null)), inactiveWarning(student)), React.createElement(\"div\", {\n className: \"mt-8\"\n }, React.createElement(\"h6\", {\n className: \"font-semibold\"\n }, ts(undefined, undefined, \"targets_overview\")), React.createElement(\"div\", {\n className: \"flex -mx-2 flex-wrap mt-2\"\n }, assignmentsCompletionStatus(CoursesStudents__StudentDetails.assignmentsCompleted(studentDetails$1), CoursesStudents__StudentDetails.totalAssignments(studentDetails$1)), pagesReadStatus(CoursesStudents__StudentDetails.totalPageReads(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: \"mt-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: \"mt-4\"\n }, React.createElement(\"div\", {\n className: \"justify-between mt-8 flex space-x-2\"\n }, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, ts(undefined, undefined, \"milestones\")), milestonesCompletionStats(studentDetails$1)), React.createElement(\"div\", {\n className: \"space-y-2\"\n }, ArrayUtils.copyAndSort((function (a, b) {\n return CoursesStudents__MilestonesCompletionStatus.milestoneNumber(a) - CoursesStudents__MilestonesCompletionStatus.milestoneNumber(b) | 0;\n }), CoursesStudents__StudentDetails.milestonesCompletionStatus(studentDetails$1)).map(function (data) {\n return React.createElement(Spread.make, {\n props: {\n \"data-milestone-id\": CoursesStudents__MilestonesCompletionStatus.id(data)\n },\n children: React.createElement(\"div\", {\n className: \"flex gap-2 mt-2 items-center p-2 rounded-md border bg-gray-100 transition\"\n }, React.createElement(\"div\", undefined, React.createElement(\"span\", {\n className: \"text-xs font-medium inline-flex items-center \" + (\n CoursesStudents__MilestonesCompletionStatus.completed(data) ? \"text-green-700 bg-green-100 px-1 py-0.5 rounded\" : \"text-orange-700 bg-orange-100 px-1 py-0.5 rounded\"\n )\n }, React.createElement(Icon.make, {\n className: CoursesStudents__MilestonesCompletionStatus.completed(data) ? \"if i-check-circle-solid text-green-600\" : \"if i-dashed-circle-light text-orange-600\"\n }))), React.createElement(\"div\", undefined, React.createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, ts(undefined, undefined, \"m\") + String(CoursesStudents__MilestonesCompletionStatus.milestoneNumber(data)))), React.createElement(\"div\", {\n className: \"flex-1 text-sm truncate\"\n }, CoursesStudents__MilestonesCompletionStatus.title(data)))\n });\n })))), React.createElement(\"div\", {\n className: \"w-full relative md:w-3/5 bg-gray-50 md:border-s pb-20 md:pb-10 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: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 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: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 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 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 canModifyCoachNotes: CoursesStudents__StudentDetails.canModifyCoachNotes(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-s 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 start-0 w-full h-full overflow-y-scroll md:overflow-hidden bg-white\"\n }, tmp);\n}\n\nvar UserDetailsFragment;\n\nvar CohortFragment;\n\nvar UserProxyFragment;\n\nvar UserFragment;\n\nvar make = CoursesStudents__StudentOverlay;\n\nexport {\n str ,\n t ,\n ts ,\n initialState ,\n closeOverlayLink ,\n UserDetailsFragment ,\n CohortFragment ,\n UserProxyFragment ,\n UserFragment ,\n StudentDetailsQuery ,\n getStudentDetails ,\n updateSubmissions ,\n doughnutChart ,\n assignmentsCompletionStatus ,\n pagesReadStatus ,\n quizPerformanceChart ,\n milestonesCompletionStats ,\n averageGradeCharts ,\n test ,\n socialLinkIconClass ,\n showSocialLinks ,\n setSelectedTab ,\n addNote ,\n removeNote ,\n userInfo ,\n coachInfo ,\n navigateToStudent ,\n otherTeamMembers ,\n inactiveWarning ,\n onAddCoachNotesCB ,\n make ,\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 Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.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 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\nimport \"./components/AppRouter__Nav.css\"\n;\n\nfunction AppRouter(Props) {\n var courses = Props.courses;\n var currentUser = Props.currentUser;\n var url = RescriptReactRouter.useUrl(undefined, undefined);\n var match = url.path;\n var component;\n var exit = 0;\n if (match) {\n switch (match.hd) {\n case \"courses\" :\n var match$1 = match.tl;\n if (match$1) {\n var match$2 = match$1.tl;\n if (match$2 && match$2.hd === \"review\" && !match$2.tl) {\n component = React.createElement(CoursesReview__Root.make, {\n courseId: match$1.hd,\n currentCoachId: Belt_Option.getWithDefault(AppRouter__User.coachId(AppRouter__User.defaultUser(currentUser)), \"\"),\n courses: courses\n });\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n break;\n case \"students\" :\n var match$3 = match.tl;\n if (match$3) {\n var match$4 = match$3.tl;\n if (match$4 && match$4.hd === \"report\" && !match$4.tl) {\n component = React.createElement(CoursesStudents__StudentOverlay.make, {\n studentId: match$3.hd,\n userId: AppRouter__User.id(AppRouter__User.defaultUser(currentUser))\n });\n } else {\n exit = 1;\n }\n } else {\n exit = 1;\n }\n break;\n case \"submissions\" :\n var match$5 = match.tl;\n if (match$5) {\n var match$6 = match$5.tl;\n if (match$6 && match$6.hd === \"review\" && !match$6.tl) {\n component = React.createElement(CoursesReview__SubmissionsRoot.make, {\n submissionId: match$5.hd,\n currentUser: AppRouter__User.defaultUser(currentUser)\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: \" + Js_array.joinWith(\"/\", $$Array.of_list(url.path)));\n throw {\n RE_EXN_ID: UnknownPathEncountered,\n _1: url.path,\n Error: new Error()\n };\n }\n return React.createElement(\"div\", {\n className: \"md:h-screen md:flex bg-gray-50\"\n }, component);\n}\n\nvar make = AppRouter;\n\nexport {\n UnknownPathEncountered ,\n make ,\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 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\";\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 ];\n}\n\nPsj.matchPaths(undefined, [\n \"courses/:id/review\",\n \"submissions/:id/review\",\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 courses: match[0],\n currentUser: match[1]\n }), root);\n return ;\n }\n \n }));\n\nexport {\n decodeProps ,\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","Js_array.mapi","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","editProfileLink","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","Js_array.concat","match$7","StudentTopNav__UserControls.make","ReactUtils.nullUnless","StudentTopNav__DropDown.make","l","renderLogo","logoUrl","schoolName","additionalClasses","StudentTopNav","logoOnLightBgUrl","logoOnDarkBgUrl","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","color","path","StringUtils.parameterize","serialNumber","createdAt","courseName","DateFns.decodeISO","headerSection","userName","preferredName","userTitle","avatarUrl","showUserEdit","standing","Belt_Option.getWithDefault","UsersDashboard__Standing.color","UsersDashboard__Standing.name","I18n.ts","StandingShield.make","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","Js_array.map","community","Js_array.find","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","PfIcon.make","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","UsersDashboard__Standing.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","Js_promise.$$catch","Js_promise.then_","result","DomUtils.redirect","Curry._3","UsersDeleteAccount","root","UsersDeleteAccount.make","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","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","Js_array.filter","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","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","partial_arg$1","ts","newrecord","Caml_obj.obj_dup","newrecord$1","newrecord$2","newrecord$3","newrecord$4","newrecord$5","newrecord$6","newrecord$7","newrecord$8","newrecord$9","newrecord$10","newrecord$11","newrecord$12","newrecord$13","newrecord$14","newrecord$15","newrecord$16","newrecord$17","themePreference","ThemeSwitch.setThemeBasedOnPreference","newrecord$18","newrecord$19","newrecord$20","newrecord$21","newrecord$22","newrecord$23","newrecord$24","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","Raw$3","query$3","parse$3","serialize$3","initiatePasswordReset","serializeVariables$3","include$3","$$fetch$3","uploadAvatar","formData","Api.sendFormData","$$Notification.success","updateEmail","email","newEmail","password","submitAvatarForm","formId","handleAvatarInputChange","files","file","Caml_array.get","isInvalidImageFile","error","hasCurrentPassword","hasInvalidPassword","saveDisabled","confirmEmailChangeWindow","currentEmail","ConfirmWindow.make","confirmDeletionWindow","themeChip","theme","UserEdit","availableLocales","isSchoolAdmin","hasValidDeleteAccountToken","initialState_dailyDigest","d","initialState_themePreference","initialState","zxcvbn","Zxcvbn.make","zxcvbn$1","suggestion","ArrayUtils.getOpt","Zxcvbn.suggestions","Zxcvbn.label","score","Zxcvbn.colorClass","School__InputGroupError.make","StringUtils.isPresent","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","Js_array.reduce","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","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","e","$$Notification.warn","suggestions","CommunitiesNewTopic__TopicSuggestion.makeFromJs","updateTitleAndSearch","timeoutId","createTopic","redirectToNewTopic","redirectPath","handleCreateTopic","OptionUtils.flatMap","suggestions$1","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","certificateSerialNumber","progressionLimit","limit","progressionBehavior","CannotParseUnknownRole","unknownRole","role","sortIndex","targetGroupId","prerequisiteTargetIds","resubmittable","reviewed","milestone","hasAssignment","status","fileName","fileUrl","makeFile","makeFiles","data","findAudioFile","findFiles","ids","Js_array.includes","makeResult","kind","makeStatus","decodeFile","updateStatus","checklist","$$Array.mapi","i","makeNoAnswer","makeFailed","encodeKind","encodeResult","t$1","encodeStatus","encode","Json_encode.object_","encodeArray","Json_encode.array","UnexpectedStatusValue","hiddenAt","createdAtPretty","hiddenAtPretty","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.equal","criteria","grades","g1","g2","ec1","ec","EvaluationCriterion.id","ec2","$$String.compare","EvaluationCriterion.name","grade","submissionId","evaluationCriterionId","coachId","feedback","reactionableId","reactionValue","decodeQuestion","topicTitle","comment","reactions","moderationReports","CoursesCurriculum__User.decode","CoursesCurriculum__Reaction.decode","CoursesCurriculum__ModerationReport.decode","submissions","pendingUserIds","navigation","discussion","allowAnonymous","comments","decodeNavigation","CoursesCurriculum__Submission.decode","CoursesCurriculum__Feedback.decode","CoursesCurriculum__QuizQuestion.decode","ContentBlock.decode","CoursesCurriculum__Community.decode","CoursesCurriculum__SubmissionComment.decode","CoursesCurriculum__Grade.decode","TargetChecklistItem.decode","computeCompletionType","targetDetails","evaluated","hasQuiz","hasChecklist","contentBlocks","quizQuestions","completionInstructions","CoursesCurriculum__Grade.submissionId","addSubmission","submission","clearPendingUserIds","createQuizSubmission","b","selectedAnswersIds","addSubmissionCB","submission$1","CoursesCurriculum__Submission.make","CoursesCurriculum__Target.id","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.answerValue","CoursesCurriculum__QuizQuestion.answerOptions","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","isModerator","isParticipant","DateFns.parseISO","levelId","endsAt","completedAt","targetGroups","hasPassed","hasBeenEvaluated","pending","makePending","targets","lockTargets","allTargetsAttempted","targetCache","targetIds","Belt_Array.every","ct","compute","student","targetsRead","CoursesCurriculum__Course.ended","CoursesCurriculum__Student.endsAt","targetGroup","tg","CoursesCurriculum__TargetGroup.id","CoursesCurriculum__Target.targetGroupId","CoursesCurriculum__Level.number","CoursesCurriculum__Level.id","CoursesCurriculum__TargetGroup.levelId","CoursesCurriculum__Student.levelId","s","CoursesCurriculum__LatestSubmission.targetId","submissionStatus","CoursesCurriculum__LatestSubmission.hasPassed","CoursesCurriculum__LatestSubmission.hasBeenEvaluated","CoursesCurriculum__Target.reviewed","CoursesCurriculum__Target.milestone","CoursesCurriculum__Target.hasAssignment","CoursesCurriculum__Target.prerequisiteTargetIds","submissionsPendingReviewCount","CoursesCurriculum__Course.progressionLimit","isPending","isAccessEnded","lockReasonToString","lockReason","statusToString","statusClassesSufix","canSubmit","readable","NoPeerSubmissionsSvg","kindIconClasses","showFiles","SubmissionChecklistItem.fileUrl","SubmissionChecklistItem.fileName","showlink","statusIcon","updateChecklistCB","showChoices","choices","choice","statusButtonSelectedClasses","currentStatus","statusButtonOnClick","bool","callback","_event","SubmissionChecklistItem.makeNoAnswer","SubmissionChecklistItem.makeFailed","statusButton","SubmissionChecklistItemShow","checklistItem","showTitleOpt","showTitle","SubmissionChecklistItem.status","SubmissionChecklistItem.result","SubmissionChecklistItem.title","SubmissionChecklistShow","forDiscussionOpt","forDiscussion","SubmissionChecklistItemShow.make","treeHeight","create","hl","hr","singleton","updateValue","newValue","bal","ll","lr","rl","rr","lengthNode","sizeL","sizeR","fillArray","_n","_i","arr","v","rnext","get","set","newK","newD","Belt_internalAVLtree.singleton","k","Belt_internalAVLtree.updateValue","Belt_internalAVLtree.bal","Belt_internalAVLtree.toArray","Belt_internalMapString.get","CoursesCurriculum__ReactionButton","reactionDetails","addReactionCB","removeReactionCB","setIsHovered","currentUserReacted","CoursesCurriculum__CurrentUser.id","onMouseEnter","onMouseLeave","reaction","createReaction","removeReaction","groupByReaction","Belt_Array.reduce","accumulator","currentItem","CoursesCurriculum__Reaction.reactionValue","CoursesCurriculum__Reaction.userName","CoursesCurriculum__Reaction.userId","Belt_MapString.get","Belt_MapString.set","reactionDetails$1","newCount","CoursesCurriculum__Reactions","reactionableType","setReactions","reactions$1","handleCreateReaction","existingReaction","CoursesCurriculum__Reaction.id","reactionId","acc","Js_promise2.then","handleAddNewEmoji","aggregatedReactions","Belt_Array.map","Belt_MapString.toArray","CoursesCurriculum__ReactionButton.make","EmojiPicker.make","reportableId","moderationReport","createModerationReport","reportableType","setModerationReports","setShowReport","setReportReason","moderationReport$1","updateReportReason","updateShowReport","showReport","CoursesCurriculum__ModerationReportButton","reportReason","reported","report","CoursesCurriculum__ModerationReport.userId","Icon.make","hideSubmissionComment","archiveSubmissionComment","hideComment","submissionCommentId","hide","setCommentHidden","archiveComment","setShowConfirmDelete","archiveCommentCB","updateShowConfirmDelete","showConfirmDelete","CoursesCurriculum__SubmissionCommentShow","CoursesCurriculum__SubmissionComment.hiddenAt","commentHidden","CoursesCurriculum__CurrentUser.isModerator","CoursesCurriculum__User.name","CoursesCurriculum__SubmissionComment.user","CoursesCurriculum__SubmissionComment.id","commentDisplay","CoursesCurriculum__User.avatar","CoursesCurriculum__SubmissionComment.createdAtPretty","CoursesCurriculum__SubmissionComment.userId","CoursesCurriculum__ModerationReportButton.make","CoursesCurriculum__SubmissionComment.moderationReports","CoursesCurriculum__SubmissionComment.comment","CoursesCurriculum__Reactions.make","CoursesCurriculum__SubmissionComment.reactions","partial_arg$2","make$2","value$14","createSubmissionComment","toggleComments","setShowComments","prevState","setSubmissionComments","submissionComments","commentId","newComments","CoursesCurriculum__SubmissionComments","commentsInitiallyVisible","showComments","setNewComment","newComment","commentsCount","handleInputChange","handleCreateSubmissionComment","createdComment","createdComment$1","existingComments","Spread.make","CoursesCurriculum__CurrentUser.avatar","CoursesCurriculum__SubmissionCommentShow.make","userNames","teamName","anonymous","pinned","firstUser","pinSubmission","hideSubmission","pin","CoursesCurriculum__DiscussionSubmission.pinned","CoursesCurriculum__DiscussionSubmission.id","CoursesCurriculum__DiscussionSubmission.targetId","setSubmissionHidden","CoursesCurriculum__DiscussSubmission","callBack","CoursesCurriculum__DiscussionSubmission.hiddenAt","submissionHidden","teamStrength","CoursesCurriculum__DiscussionSubmission.users","CoursesCurriculum__DiscussionSubmission.anonymous","CoursesCurriculum__DiscussionSubmission.teamName","CoursesCurriculum__DiscussionSubmission.userNames","CoursesCurriculum__DiscussionSubmission.firstUser","CoursesCurriculum__DiscussionSubmission.createdAtPretty","CoursesCurriculum__DiscussionSubmission.moderationReports","SubmissionChecklistShow.make","CoursesCurriculum__DiscussionSubmission.checklist","CoursesCurriculum__DiscussionSubmission.reactions","CoursesCurriculum__SubmissionComments.make","CoursesCurriculum__DiscussionSubmission.comments","optional","fromTargetChecklistItem","targetChecklist","TargetChecklistItem.title","TargetChecklistItem.optional","TargetChecklistItem.kind","updateResultAtIndex","filename","fileId","fileIds","ArrayUtils.flattenV2","kindAsString","resultAsJson","validString","maxLength","length","validShortText","validFiles","Caml_obj.notequal","validMultiChoice","validResponse","allowBlank","UrlUtils.isValid","validChecklist","validResponses","responses","f","SubmissionChecklistItem.makeFile","item","bits","curval","newval","newval30","Caml_array.set","$$int","bound","$$default","$$int$1","FormNotFound","UnexpectedResponse","defaultTitle","handleResponseJSON","attachFileCB","apiErrorTitle","uploadFile","Fetch.$$Response","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","string","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","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","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","computeId","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","allowMultiple","radioOnChange","showMultiChoice","Checkbox.make","CoursesCurriculum__ChecklistItem.makeFile","attachRecordingFile","removeFile","CoursesCurriculum__ChecklistItem.fileId","CoursesCurriculum__ChecklistItem.filename","CoursesCurriculum__FileForm.make","showAudioRecorder","CoursesCurriculum__AudioRecorder.make","CoursesCurriculum__SubmissionItem","buttonContents","formState","CoursesCurriculum__ChecklistItem.fromTargetChecklistItem","createSubmission","isButtonDisabled","CoursesCurriculum__ChecklistItem.validChecklist","submit","CoursesCurriculum__ChecklistItem.fileIds","CoursesCurriculum__ChecklistItem.encodeArray","_error","CoursesCurriculum__ChecklistItem.makeFiles","submissionChecklist","completionType","CoursesCurriculum__TargetDetails.computeCompletionType","updateResult","CoursesCurriculum__ChecklistItem.updateResultAtIndex","buttonClasses","setAttaching","statusText","tooltipText","CoursesCurriculum__SubmissionBuilder","CoursesCurriculum__SubmissionItem.make","CoursesCurriculum__TargetDetails.discussion","CoursesCurriculum__TargetDetails.allowAnonymous","AssignmentDiscussionIconSvg","CoursesCurriculum__CompletionInstructions","CoursesCurriculum__TargetDetails.completionInstructions","criterionName","updateGrade","newGrade","criterionId","gradeDescription","gradeLabels","grading","CoursesCurriculum__Grading.grade","CoursesCurriculum__Grading.criterionName","GradeLabel.labelFor","gradePillClasses","gradeReceived","pillGrade","resultModifier","Caml_obj.greaterthan","selectableModifier","gradeBarHeader","GradeLabel.maxGrade","handleClick","gradeSelectCB","CoursesCurriculum__Grading.updateGrade","gradeBarPill","gradeLabel","myGrade","GradeLabel.grade","GradeLabel.label","gradeBarPanel","CoursesCurriculum__GradeBar","EvaluationCriterion.gradesAndLabels","undoSubmission","setStatus","undoSubmissionCB","CoursesCurriculum__UndoButton","gradeBar","evaluationCriteria","CoursesCurriculum__Grade.evaluationCriterionId","gradeNumber","CoursesCurriculum__Grade.grade","CoursesCurriculum__Grading.make","CoursesCurriculum__GradeBar.make","statusBar","textColor","bgColor","submissionStatusIcon","passed","gradingSection","Curry.__1","CoursesCurriculum__Grade.sort","handleAddAnotherSubmission","setShowSubmissionForm","showSubmissionForm","targetStatus","coaches","curriedGradeBar","submissions$1","CoursesCurriculum__TargetDetails.submissions","totalSubmissions","CoursesCurriculum__Submission.sort","CoursesCurriculum__TargetDetails.grades","CoursesCurriculum__Submission.id","CoursesCurriculum__Submission.status","CoursesCurriculum__TargetStatus.status","CoursesCurriculum__UndoButton.make","CoursesCurriculum__TargetDetails.comments","CoursesCurriculum__SubmissionComment.submissionId","CoursesCurriculum__TargetDetails.reactions","CoursesCurriculum__Reaction.reactionableId","DomUtils.hasUrlParam","DomUtils.getUrlParam","CoursesCurriculum__Submission.hiddenAt","CoursesCurriculum__Submission.hiddenAtPretty","CoursesCurriculum__Submission.createdAtPretty","CoursesCurriculum__Submission.checklist","coach","CoursesCurriculum__Feedback.coachId","CoursesCurriculum__Coach.id","up","CoursesCurriculum__User.id","CoursesCurriculum__Coach.userId","CoursesCurriculum__User.title","coachTitle","CoursesCurriculum__Feedback.id","CoursesCurriculum__Feedback.feedback","CoursesCurriculum__Feedback.submissionId","CoursesCurriculum__TargetDetails.feedback","CoursesCurriculum__SubmissionsAndFeedback","CoursesCurriculum__TargetStatus.canSubmit","CoursesCurriculum__Target.resubmittable","CoursesCurriculum__SubmissionBuilder.make","UnexpectedSubmissionStatus","noPeerSubmissionIcon","assignmentDiscussionIcon","PagedSubmission","Pagination.Make","initialState_loading","LoadingV2.empty","LoadingV2.setReloading","CoursesCurriculum__TargetDetails.clearPendingUserIds","newSubmissions","updatedSubmissions","LoadingV2.setNotLoading","closeOverlay","CoursesCurriculum__Course.id","hiddenById","discussionSubmissions","getDiscussionSubmissions","CoursesCurriculum__DiscussionSubmission.decode","reloadSubmissions","handleUrlParam","prefix","paramValue","loadTargetDetails","CoursesCurriculum__TargetDetails.decode","CoursesCurriculum__CurrentUser.isParticipant","hasCommentParam","hasSubmissionParam","submissionsLoadedData","totalSubmissionsCount","loadedSubmissionsCount","submissionsList","CoursesCurriculum__DiscussSubmission.make","completionTypeToString","exit","tabToString","tab","selectableTabs","CoursesCurriculum__TargetDetails.communities","tabClasses","selection","tabButton","tabOptions","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","addPageRead","markReadCB","learnSection","targetRead","suffixLinkInfo","linkToTab","CoursesCurriculum__Learn.make","CoursesCurriculum__TargetStatus.readable","discussSection","CoursesCurriculum__Discuss.make","completeSectionClasses","completeSection","addVerifiedSubmissionCB","exit$1","CoursesCurriculum__CompletionInstructions.make","CoursesCurriculum__TargetDetails.checklist","CoursesCurriculum__Quiz.make","CoursesCurriculum__SubmissionsAndFeedback.make","times","times$1","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","setSelectedLevelId","CoursesCurriculum__Level.isUnlocked","untabbedLevelSelector","selectedLevel","tabbedLevelSelector","showLevelZero","setShowLevelZero","levelZero","hideCaret","numberedLevelSelector","CoursesCurriculum__LevelSelector","CoursesCurriculum__Level.sort","AccessEndedSvg","CourseEndedSvg","PreviewModeSvg","CourseCompleteSvg","courseEndedImage","courseCompleteImage","accessEndedImage","previewModeImage","showNotice","notice","classesOpt","classes","CoursesCurriculum__Notice.icon","courseCompleteMessage","courseEndedMessage","showPreviewMessage","CoursesCurriculum__Notice.previewModeImage","accessEndedMessage","CoursesCurriculum__NoticeManager","levelLockedImage","levelEmptyImage","targetStatusClasses","statusClasses","rendertarget","CoursesCurriculum__TargetStatus.isAccessEnded","renderTargetGroup","targets$1","CoursesCurriculum__TargetGroup.name","CoursesCurriculum__TargetGroup.description","CoursesCurriculum__Target.sortIndex","latestSubmission","withoutSubmissionForThisTarget","addMarkRead","markedReadTargetId","handleLockedLevel","CoursesCurriculum__Level.unlockAt","dateString","csn","CoursesCurriculum__Course.certificateSerialNumber","computeNotice","CoursesCurriculum__Student.accessEnded","CoursesCurriculum__Student.completedAt","CoursesCurriculum__Level.previous","CoursesCurriculum__Level.next","CoursesCurriculum","accessLockedLevels","selectedTarget","StringUtils.paramToId","studentLevelId","targetLevelId","computeTargetStatus","CoursesCurriculum__TargetStatus.compute","initialRender","React.useRef","CoursesCurriculum__Level.first","currentLevelId","currentLevel","newStatusOfTargets","targetGroupsInLevel","CoursesCurriculum__Overlay.make","CoursesCurriculum__NoticeManager.make","CoursesCurriculum__LevelSelector.make","selectedLevelId","CoursesCurriculum__Level.isLocked","CoursesCurriculum__Level.unlockDateString","CoursesCurriculum__TargetGroup.sort","CoursesCurriculum__CurrentUser.decode","CoursesCurriculum__Course.decode","CoursesCurriculum__Level.decode","CoursesCurriculum__TargetGroup.decode","CoursesCurriculum__Target.decode","CoursesCurriculum__LatestSubmission.decode","CoursesCurriculum__Student.decode","CoursesCurriculum__Coach.decode","EvaluationCriterion.decode","Psj.matchPaths","CoursesCurriculum.make","maxGrade","cohortName","totalPageReads","totalTargets","assignmentsPendingReview","assignmentsCompleted","totalAssignments","quizzesAttempted","averageGrades","makeAverageGrade","milestonesCompletionStatus","evaluationCriterionForGrade","CoursesReport__EvaluationCriterion.id","gradeAsPercentage","averageGrade","evaluationCriterion","computeAverageQuizScore","quizScores","sumOfPercentageScores","quizScore","fractionArray","$$String.split_on_char","numerator","Caml_format.float_of_string","denominator","averageQuizScore","CoursesStudents__PersonalCoaches","listedCoaches","Js_array.slice","otherCoaches","names","UserProxy.userId","UserProxy.name","Js_array.sliceFrom","count","UserProxy.avatarUrl","completed","milestoneNumber","userInfo","CoursesStudents__PersonalCoaches.avatar","coachInfo","CoursesReport__Coach.avatarUrl","CoursesReport__Coach.name","CoursesReport__Coach.title","doughnutChart","percentage","assignmentsCompletionStatus","overview","CoursesReport__StudentOverview.assignmentsCompleted","CoursesReport__StudentOverview.totalAssignments","CoursesReport__StudentOverview.assignmentsPendingReview","incompleteAssignments","assignmentsCompletionPercent","pagesReadStatus","CoursesReport__StudentOverview.totalPageReads","CoursesReport__StudentOverview.totalTargets","pagesReadPercent","pendingTargets","quizPerformanceChart","milestones","CoursesReport__StudentOverview.milestonesCompletionStatus","totalMilestones","completedMilestones","milestonesCompletionPercentage","averageGradeCharts","CoursesReport__StudentOverview.evaluationCriterionForGrade","CoursesReport__StudentOverview.gradeAsPercentage","CoursesReport__EvaluationCriterion.name","CoursesReport__Overview","overviewData","CoursesReport__StudentOverview.cohortName","CoursesReport__StudentOverview.averageQuizScore","CoursesReport__StudentOverview.quizzesAttempted","CoursesReport__StudentOverview.averageGrades","CoursesReport__StudentOverview.evaluationCriteria","HelpIcon.make","CoursesReport__MilestoneCompletionStatus.milestoneNumber","CoursesReport__MilestoneCompletionStatus.id","CoursesReport__MilestoneCompletionStatus.title","CoursesReport__MilestoneCompletionStatus.completed","SkeletonLoading.heading","SkeletonLoading.paragraph","SkeletonLoading.userDetails","targetRole","_passedAt","_time","makeFilter","needsReloading","selectedStatus","sortBy_criterion","sortBy","statusString","studentIds","evaluatedAt","passedAt","studentSubmissions","targetStatus$1","updateSelectedStatusCB","SubmissionsSorter","submissionsSorter","updateSortDirectionCB","updateStudentSubmissions","updateSubmissionsCB","hasNextPage","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__Submission.milestoneNumber","CoursesReport__Submission.title","CoursesReport__Submission.createdAtPretty","showSubmissions","CoursesReport__SubmissionsList","CoursesReport__Submissions.needsReloading","cohort","studentDetails","getOverviewData","CoursesReport__EvaluationCriterion.make","gradeData","CoursesReport__StudentOverview.makeAverageGrade","CoursesReport__MilestoneCompletionStatus.make","CoursesReport__StudentOverview.make","CoursesReport__Root","CoursesReport__Overview.make","CoursesReport__SubmissionsList.make","CoursesReport__Coach.decode","CoursesReport__Root.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","nameOrEmail","includeInactive","assignedCoachId","personalCoachId","reviewingCoachId","defaultDirection","makeFromQueryParams","toQueryString","PendingEmptySvg","coachName","coachAvatarUrl","evaluatorName","archivedAt","SubmissionChecklistItem.makeFiles","CoursesReview__Feedback.make","CoursesReview__Grade.make","updateFeedback","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.milestoneNumber","CoursesReview__IndexSubmission.title","CoursesReview__IndexSubmission.createdAt","CoursesReview__IndexSubmission.createdAtPretty","CoursesReview__IndexSubmission.reviewerName","CoursesReview__IndexSubmission.reviewerAssignedAt","DateFns.formatDistanceToNow","CoursesReview__IndexSubmission.feedbackSent","CoursesReview__SubmissionCard","selectedTab","imageSrc","coachFilterTranslationKey","coachFilter","loader","CoursesReview__Filter.toQueryString","UserProxy.Fragment","targetInfo","a$7","a$8","a$9","a$10","coachIds","reviewedTargetsInfo","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.includeInactive","CoursesReview__TargetInfo.makeFromJs","UserProxy.makeFromJs","CoursesReview__IndexSubmission.makeFromJS","getCoaches","getTargets","CoursesReview__TargetInfo.title","UserProxy.id","coach$1","coach$2","assignedToCoach","currentCoachId","personalCoach","reviewedBy","makeLoader","makecoachLoader","target$1","unSelectedStatus","nameOrEmailFilter","firstWord","unselectedTargets","CoursesReview__TargetInfo.id","unselectedCoaches","getCoachId","getSelectable","selectedCoach","unselectedAssignedCoaches","unselectedPersonalCoaches","unselectedReviewers","selectedCoaches","selectedAssiginedCoach","selectedPersonalCoach","selectedReviewer","otherTab","defaultOptions","CoursesReview__SubmissionCard.make","loadFilters","$$String.lowercase_ascii","StringUtils.test","shortCutClasses","pageTitle","currentCourse","AppRouter__Course.id","AppRouter__Course.name","CoursesReview__Root","CoursesReview__Filter.makeFromQueryParams","ReactHelmet.Helmet","CoursesReview__Filter.sortDirection","make$3","assignedAt","reviewerInfo","setReviewer","details","decodeStatus","object","startedAt","queuedAt","reporter","targetUrl","emptyTemplate","empty","replace","resultIndex","resultItems","optionalFeedback","updateAdditionalFeedback","trim","title_0","Belt_List.concat","results","rc","CoursesReview__ReviewChecklistResult.makeFromJs","CoursesReview__ReviewChecklistResult.empty","CoursesReview__ReviewChecklistResult.emptyTemplate","updateChecklist","itemIndex","appendEmptyChecklistItem","moveResultItemUp","ArrayUtils.swapUp","moveResultItemDown","ArrayUtils.swapDown","deleteResultItem","_el","CoursesReview__ReviewChecklistResult.trim","CoursesReview__ReviewChecklistResult.encode","allSubmissions","targetTitle","students","reviewChecklist","targetEvaluationCriteriaIds","submissionReports","submissionReportPollTime","reviewable","warning","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","CoursesReview__SubmissionMeta.id","updateReviewChecklist","updateReviewer","CoursesReview__Reviewer.setReviewer","updateSubmissionReport","reports","selectChecklist","setSelecton","updateEmptyChecklistResult","reviewChecklistItem","setChecklist","CoursesReview__ReviewChecklistItem.updateChecklist","CoursesReview__ReviewChecklistResult.updateAdditionalFeedback","CoursesReview__ReviewChecklistItem.results","CoursesReview__ReviewChecklistItem.replace","unSelectChecklist","generateFeedback","updateFeedbackCB","newFeedback","resultIndexList","selectionItem","resultItem","CoursesReview__ReviewChecklistResult.feedback","checklistItemCheckedClasses","feedbackGeneratable","submissionDetails","overlaySubmission","CoursesReview__SubmissionDetails.reviewer","checklistItemChecked","updateChecklistResultFeedback","CoursesReview__ReviewChecklistResult.updateFeedback","generateFeedbackButton","CoursesReview__ChecklistShow","showEditorCB","cancelCB","DateTime.randomId","hasFeedbackTemplate","CoursesReview__ReviewChecklistItem.title","reviewChecklistResult","CoursesReview__ReviewChecklistResult.title","isSelected$1","hasFeedback","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","reportStatusIconClasses","CoursesReview__SubmissionReport.status","reportStatusString","CoursesReview__SubmissionReport.heading","reportConclusionTimeString","CoursesReview__SubmissionReport.startedAt","CoursesReview__SubmissionReport.queuedAt","CoursesReview__SubmissionReport.completedAt","DateFns.formatDistance","CoursesReview__SubmissionReportShow","CoursesReview__SubmissionReport.targetUrl","toggleTestReportIcon","CoursesReview__SubmissionReport.report","CoursesReview__SubmissionReport.reporter","createGrading","serializeInputObjectGradeInput","note","undoGrading","createFeedback","makeVariables$3","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","booleanButtonClasses","updateIsAcceptable","isAcceptable","getNextSubmission","makeFeedback","AppRouter__User.name","AppRouter__User.avatarUrl","AppRouter__User.title","updateSubmissionCB","CoursesReview__OverlaySubmission.updateFeedback","DomUtils.reload","trimToOption","trimArraytoOption","navigationDisabled","gradeSubmissionQuery","CoursesReview__Grade.evaluationCriterionId","CoursesReview__Grade.value","SubmissionChecklistItem.encodeArray","CoursesReview__OverlaySubmission.update","warning$1","CoursesReview__SubmissionDetails.warning","reviewNextButton","nextSubmission","buttonStyle","CoursesReview__SubmissionDetails.teamName","studentCount","CoursesReview__SubmissionDetails.students","CoursesReview__SubmissionDetails.courseId","CoursesStudents__PersonalCoaches.make","CoursesReview__SubmissionDetails.coaches","CoursesReview__SubmissionDetails.targetId","CoursesReview__SubmissionDetails.targetTitle","commaRequired","CoursesReview__Student.id","CoursesReview__Student.name","updateGrading","newGrades","handleGradePillClick","gradePillHeader","evaluationCriteriaName","selectedGrade","currentGrade","Caml_obj.lessequal","showGradePill","gradeValue","gradeLabelGrade","CoursesReview__SubmissionDetails.reviewable","showGrades","CoursesReview__Grade.sort","gradeEcId","renderGradePills","badgeColorClasses","statusColor","gradeBadgeClasses","badge","submissionReviewStatus","_date","CoursesReview__OverlaySubmission.evaluatorName","gradeSubmission","reviewButtonDisabled","computeStatus","selectedGrades","currentGradingCriteria","CoursesReview__OverlaySubmission.grades","submitButtonText","noteForm","teamSubmission","_someGrades","noteAbout","help","textareaId","feedbackGenerator","showAddFeedbackEditorOpt","showAddFeedbackEditor","showFeedback","CoursesReview__Feedback.coachAvatarUrl","CoursesReview__Feedback.coachName","CoursesReview__Feedback.coachTitle","CoursesReview__Feedback.createdAtPretty","CoursesReview__Feedback.value","CoursesReview__Feedback.createdAt","studentOrTeamName","loadSubmissionReport","updateSubmissionReportCB","updatedReports","reloadSubmissionReport","shouldReload","CoursesReview__Editor","CoursesReview__OverlaySubmission.checklist","AppRouter__User.id","newFeedbackRef","handleBeforeUnload","findEditor","intervalId","CoursesReview__ReviewerManager.make","CoursesReview__Checklist.make","CoursesReview__SubmissionDetails.allSubmissions","CoursesReview__SubmissionInfoCard.make","CoursesReview__SubmissionReportShow.make","value$15","value$16","value$17","value$18","value$19","value$20","reviewerDetails","value$21","value$22","value$23","value$24","value$25","value$26","value$27","value$28","value$29","value$30","getSubmissionDetails","CoursesReview__SubmissionDetails.decodeJs","updateSubmission","newSubmissionDetails","CoursesReview__SubmissionDetails.updateOverlaySubmission","currentSubmissionIndex","Js_array.findIndex","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.submissionReports","CoursesReview__SubmissionDetails.submissionReportPollTime","currentStandingName","lastSeenAt","taggings","verifyArgsAndParse","_UserDetailsFragment","verifyName","Fragment","makeFromFragment","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","canModifyCoachNotes","CoursesStudents__CoachNoteShow.make","CoursesStudents__CoachNote.sort","droppedOutAt","personalCoaches","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","CoursesStudents__Submission.milestoneNumber","CoursesStudents__Submission.title","CoursesStudents__Submission.createdAtPretty","CoursesStudents__Submission.sort","CoursesStudents__SubmissionsList","closeOverlayLink","cohortId","Cohort.id","CoursesStudents__StudentInfo.cohort","Cohort.Fragment","UserDetails.Fragment","User.Fragment","getStudentDetails","CoursesStudents__CoachNote.make","User.makeFromFragment","CoursesStudents__EvaluationCriterion.make","CoursesStudents__StudentDetails.makeAverageGrade","CoursesStudents__MilestonesCompletionStatus.make","CoursesStudents__StudentDetails.make","CoursesStudents__StudentInfo.make","UserDetails.makeFromFragment","Cohort.makeFromFragment","UserProxy.makeFromFragment","CoursesStudents__StudentDetails.makeTeam","updateSubmissions","totalPagesReadPercent","milestonesCompletionStats","CoursesStudents__StudentDetails.milestonesCompletionStatus","CoursesStudents__StudentDetails.evaluationCriterionForGrade","CoursesStudents__StudentDetails.gradeAsPercentage","CoursesStudents__EvaluationCriterion.name","setSelectedTab","addNote","onAddCoachNotesCB","CoursesStudents__StudentDetails.addNewNote","CoursesStudents__StudentDetails.removeNote","fulltitle","CoursesStudents__StudentInfo.personalCoaches","CoursesStudents__StudentDetails.student","UserProxy.fullTitle","otherTeamMembers","CoursesStudents__StudentDetails.team","CoursesStudents__StudentDetails.students","CoursesStudents__StudentInfo.id","UserDetails.avatarUrl","CoursesStudents__StudentInfo.user","UserDetails.name","UserDetails.fullTitle","inactiveWarning","CoursesStudents__StudentInfo.droppedOutAt","Cohort.endsAt","CoursesStudents__StudentOverlay","studentDetails$1","UserDetails.currentStandingName","name$1","UserDetails.affiliation","UserDetails.title","ClickToCopy.make","UserDetails.id","Cohort.name","CoursesStudents__StudentDetails.assignmentsCompleted","CoursesStudents__StudentDetails.totalAssignments","CoursesStudents__StudentDetails.totalPageReads","CoursesStudents__StudentDetails.totalTargets","CoursesStudents__StudentDetails.averageQuizScore","CoursesStudents__StudentDetails.quizzesAttempted","CoursesStudents__StudentDetails.averageGrades","CoursesStudents__StudentDetails.evaluationCriteria","CoursesStudents__MilestonesCompletionStatus.milestoneNumber","CoursesStudents__MilestonesCompletionStatus.id","CoursesStudents__MilestonesCompletionStatus.completed","CoursesStudents__MilestonesCompletionStatus.title","CoursesStudents__SubmissionsList.make","CoursesStudents__CoachNotes.make","CoursesStudents__StudentDetails.coachNotes","CoursesStudents__StudentDetails.hasArchivedNotes","CoursesStudents__StudentDetails.canModifyCoachNotes","SkeletonLoading.image","SkeletonLoading.contents","UnknownPathEncountered","AppRouter","component","CoursesReview__Root.make","AppRouter__User.coachId","AppRouter__User.defaultUser","CoursesStudents__StudentOverlay.make","CoursesReview__SubmissionsRoot.make","Js_array.joinWith","AppRouter__Course.decode","AppRouter__User.decode","AppRouter.make"],"mappings":"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","x_google_ignoreList":[71,72,73,82,84,85]}