{"version":3,"sources":["hooks/useSnackbar.tsx","components/Modal/CloneAssignmentSpecsModal.tsx","components/Modal/SolutionGalleryModal.tsx","components/Modal/GenericModal.tsx","components/Modal/SpecCommentsModal.tsx","hooks/useSpecComments.tsx","components/Headers/TitleHeader.tsx","context/StudentPerspective.tsx","themes/defaultTheme.ts","views/home/CheckerDemo.tsx","components/Navbars/PublicNavbar.tsx","views/home/index.tsx","views/privacy-policy/index.tsx","views/admin/login/index.tsx","components/Snackbar/Snackbar.tsx","views/admin/courses/index.tsx","components/AssignmentSpecSummary/index.tsx","hooks/useUrlQuery.tsx","hooks/useRouteScrollMemory.tsx","views/admin/courses/course_id/assignments/index.tsx","views/admin/investigate/index.tsx","components/ExpansionPanel/TestCasePanel.tsx","components/Form/TestCaseForm.tsx","components/Paper/SpecPaper/Simple.tsx","components/Paper/SpecPaper/Advanced.tsx","components/Paper/SpecPaper/Comments.tsx","components/Paper/SpecPaper/Settings.tsx","components/Paper/SpecPaper/index.tsx","views/admin/specs/assignmentspecs/index.tsx","views/admin/specs/specview/index.tsx","views/admin/courses/course_id/assignments/assignment_id/specs/index.tsx","components/Loader/LoaderBox.tsx","components/Loader/SkeletonData.ts","models/Report.ts","views/admin/reports/index.tsx","views/admin/specs/index.tsx","models/SpecCommentStatus.ts","views/admin/spec-comments/index.tsx","views/admin/specs/create/index.tsx","models/Announcement.ts","views/admin/announcements/index.tsx","views/admin/files/index.tsx","views/admin/files/browser.tsx","views/admin/students/index.tsx","views/admin/students/student_id/courses/index.tsx","models/StudentSubmission.ts","views/admin/students/student_id/courses/course_id/assignments/index.tsx","views/student/courses/index.tsx","views/student/courses/course_id/assignments/index.tsx","views/student/login/index.tsx","views/admin/document-parser/DocsNav.jsx","views/admin/document-parser/DocProblems.jsx","views/admin/document-parser/index.jsx","views/errors/page-not-found.tsx","App.tsx","serviceWorker.ts","index.tsx","models/Submission.ts","hooks/useLoadingStatus.tsx","libs/api.ts","models/APITools.ts","libs/AxiosCache.ts","libs/utils.ts","components/Buttons/GoogleSignInButton.tsx","components/Buttons/MenuIconButton.tsx","components/Buttons/BackArrowButton.tsx","components/Links/ClassroomResourceLink.tsx","models/SpecComment.ts","libs/auth.ts","assets/svg-icons/slack.svg","components/Icons/utils.tsx","assets/svg-icons/google-classroom.svg","components/Icons/index.ts","components/Spec/SpecTest/index.tsx","components/Spec/SpecComments/CommentInput.tsx","components/Spec/SpecComments/CommentItem.tsx","components/Spec/SpecComments/index.tsx","models/Student.ts","libs/cleaner.ts","hooks/useSolutionGallery.tsx","layouts/StudentLayout.tsx","models/Assignment.ts","models/Spec.ts","components/TestOutputs/index.tsx","models/Solution.ts","components/Spec/index.ts","models/SpecCommentReport.ts","hooks/useZipFileExplorerPopUp.tsx","models/SpecFeedback.ts","components/ZipFileExplorer/CodeViewer.tsx","components/ZipFileExplorer/index.tsx","components/Backdrop/InvestigateBackdrop.tsx","libs/specParser.ts","libs/SpecDocument.tsx","components/Backdrop/ParseDocumentBackdrop.tsx","components/SpeedDial/AdminToolsSpeedDial.tsx","layouts/AdminLayout.tsx","context/Dialog/DialogTitle.tsx","context/Dialog/AlertDialog.tsx","context/Dialog/ConfirmDialog.tsx","context/Dialog/PromptDialog.tsx","context/Dialog/index.tsx","models/Material.ts","models/CourseWork.ts","models/Course.ts","views/admin/courses/course_id/assignments/assignment_id/students/student_id/index.tsx","views/student/courses/course_id/assignments/assignment_id/index.tsx","hooks/useLoadingStatusMap.tsx","components/ExamCountdown/index.tsx","components/Inputs/GradeInput.tsx"],"names":["useSnackbar","_useState","useState","_useState2","_slicedToArray","isSnackbarVisible","setIsSnackbarVisible","_useState3","undefined","_useState4","snackbarType","setSnackbarType","_useState5","_useState6","snackbarMessage","setSnackbarMessage","renderSnackbar","_jsx","Snackbar","anchorOrigin","vertical","horizontal","open","autoHideDuration","message","onClose","action","IconButton","size","aria-label","color","onClick","children","Close","fontSize","Alert","severity","showMessage","setTimeout","useStyles","makeStyles","theme","root","maxWidth","borderRadius","backgroundColor","paddingTop","paddingBottom","width","paper","marginTop","overflow","paperArrow","button","margin","spacing","position","top","left","transform","flexCenter","height","display","alignItems","middleArrows","justifyContent","middlePaper","CloneAssignmentSpecsModal","_ref","sourceCourseID","targetCourseID","visibility","onDone","classes","sourceAssignments","setSourceAssignments","targetAssignments","setTargetAssignments","isCloning","setIsCloning","_useState7","_useState8","isLoading","setIsLoading","_useState9","_useState10","errorMessage","setErrorMessage","snackbar","fetchAllAssignments","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_yield$Promise$all","_yield$Promise$all2","sourceAssignmentsRes","targetAssignmentsRes","wrap","_context","prev","next","Promise","all","CourseWork","find","courseId","sent","map","item","checked","filter","a","associatedWithDeveloper","t0","utils","getRequestErrorMessage","finish","stop","apply","arguments","executeClone","_ref3","_callee3","src","checkItems","_context3","length","_item","i","_ref4","_callee2","_context2","cloneSpecs","id","abrupt","_x","_x2","concat","checkAllValue","items","some","renderArrows","_jsxs","Paper","className","elevation","style","DoneAll","ArrowRightAlt","customList","index","type","DragDropContext","onDragEnd","result","destination","list","moveArrayItem","source","Droppable","droppableId","provided","RootRef","rootRef","innerRef","List","dense","component","role","ListItem","ListItemIcon","_Fragment","Checkbox","edge","disabled","tabIndex","onChange","e","checkAll","target","disableRipple","ListItemText","primary","_ref5","title","Draggable","draggableId","isDragDisabled","snapshot","_createElement","_objectSpread","ref","draggableProps","dragHandleProps","isDragging","draggableStyle","background","key","handleCheckChange","inputProps","closeModal","_ref6","_callee4","_context4","useEffect","_callee5","_context5","Dialog","fullWidth","scroll","aria-labelledby","aria-describedby","DialogTitle","DialogContent","dividers","Box","p","Grid","container","justify","CircularProgress","direction","Typography","variant","Button","padding","gutterBottom","xs","DialogActions","startIcon","modal","wrapper","flexDirection","maxHeight","header","borderBottom","palette","divider","body","flex","footer","borderTop","textAlign","accordionDetails","code","whiteSpace","shape","border","SolutionGalleryModal","props","specId","isOpen","_useSnackbar","showSnackbarMessage","solutions","setSolutions","isLoadingSolutions","setIsLoadingSolutions","deletingSolutions","setDeletingSolutions","loadSolutions","_solutions","Solution","specID","deleteSolution","solution","_toConsumableArray","window","confirm","name","destroy","Modal","ExpansionPanel","ExpansionPanelSummary","expandIcon","ExpandMore","ExpansionPanelDetails","dangerouslySetInnerHTML","__html","prism","highlight","languages","javascript","navigator","clipboard","writeText","copySolutionToClipboard","indexOf","GenericModal","_props$size","_props$fixExpand","fixExpand","restProps","_objectWithoutProperties","_excluded","finalProps","join","wrapperStyle","bodyStyle","SpecCommentsModal","onCommentRead","px","SpecComments","useSpecComments","setSpecId","options","renderModal","renderOpenButton","MessageIcon","TitleHeader","breadcrumb","_props$backButton","backButton","ml","pr","BackArrowButton","StudentPerspectiveContext","React","createContext","loadData","_loadData","getStudentCourses","getCourseById","getStudentById","hasNewSubmission","isLoaded","students","courses","StudentPerspectiveProvider","setIsLoaded","setCourses","setStudents","_useState11","_useState12","submissionLogs","setSubmissionLogs","force","_yield$axios$get","registeredCourses","studentCourses","_courses","_courseStudents","_submissionLogs","studentMap","_iterator","_step","_studentList","_iterator2","_step2","_studentMap$get","_student","_studentCourses","_args2","axios","get","data","Course","getCourses","CourseStudent","Submission","getSubmissionLogs","Map","_createForOfIteratorHelper","s","n","done","value","userId","set","studentID","firstName","profile","givenName","lastName","familyName","fullName","err","f","Array","from","Provider","studentId","course","_step3","_iterator3","student","_step4","_iterator4","_step5","_iterator5","_step6","_iterator6","courseID","assignmentID","log","personID","useStudentPerspective","useContext","defaultTheme","createMuiTheme","main","contrastText","success","error","warning","useStyle","boxShadow","titleBar","marginLeft","content","viewPort","transition","fontWeight","paddingRight","borderBottomLeftRadius","borderBottomRightRadius","marginBottom","coloredBox","minHeight","CheckerDemo","useTheme","active","setActive","timeout","clearTimeout","text","secondary","navbar","flexWrap","nav","PublicNavbar","history","useDialog","alert","auth","getSession","useHistory","Container","Link","href","alt","RouterLink","to","push","_bannerContainer","titleText","sectionWrapper","bannerSection","zIndex","_defineProperty","breakpoints","up","contentSection","borderTopLeftRadius","borderTopRightRadius","footerSection","sectionItem","opacity","right","Home","demoMinHeight","setDemoMinHeight","recalculateDemoMinHeight","document","querySelector","vh","Math","max","documentElement","clientHeight","innerHeight","vw","clientWidth","innerWidth","isStudent","isAdmin","docSizeObserver","ResizeObserver","observe","addEventListener","disconnect","removeEventListener","pt","Prism","py","align","overrides","MuiTypography","PrivacyPolicy","MuiThemeProvider","pb","form","gap","withRouter","email","setEmail","password","setPassword","login","replace","_Auth$getSession","Auth","user","admin","TextField","required","label","_props$duration","duration","location","SnackbarNative","MuiAlert","initialized","setInitialized","selectedCourseIDs","setSelectedCourseIDs","setRegisteredCourses","_useState13","_useState14","showSnackbar","setSnackbarVisibility","_useState15","_useState16","_useState17","_useState18","_useState19","_useState20","cloneSourceCourse","setCloneSourceCourse","_useState21","_useState22","cloneTargetCourse","setCloneTargetCourse","tableRef","useRef","dialog","light","doneCloneModalHandler","retryHandler","registerHandler","_tableRef$current","Axios","post","showSuccessAlert","showErrorAlert","current","onAllSelected","loadRegisteredCourses","unregisterHandler","_tableRef$current2","delete","loadCourses","tableProps","columns","field","render","rowData","fullname","hidden","defaultSort","preventDefault","stopPropagation","MenuIconButton","icon","MoreIcon","_ref8","setAnchorEl","MenuItem","localization","emptyDataSourceMessage","headerStyle","pageSize","pageSizeOptions","emptyRowsWhenPaging","search","selection","Boolean","sorting","draggable","showEmptyDataSourceMessage","thirdSortClick","components","Toolbar","MTableToolbar","Tooltip","event","selectedRows","_callee6","_context6","_ref7","_callee7","_context7","_x3","Header","pop","MTableHeader","Body","TableBody","TableRow","TableCell","colSpan","MTableBody","onSelectionChange","_ref9","onRowClick","_ref10","_callee8","session","fetchedCourses","_args8","_context8","getMoodleCourses","token","accessToken","_ref11","_callee9","_context9","initializeData","_ref12","_callee10","_context10","reduce","acc","status","includes","AdminLayout","MaterialTable","AssignmentSpecSummary","_props$courseId","specLists","setSpecLists","courseWorks","setCourseWorks","getSpecs","t1","t2","courseWork","specs","spec","useUrlQuery","getQuery","querystring","parse","query","setQuery","newQuery","shouldPush","Object","keys","stringify","scrollMemoryMap","useRouteScrollMemory","pathRef","pathname","scrollYRef","scrollY","scrollXRef","scrollX","handleScrollEvent","saveScroll","restoreScroll","scrollTo","column","flexBasis","tableContainer","toolbar","paddingLeft","stateText","textTransform","disabledAccordion","cursor","pointerEvents","AssignmentStudentTable","submissions","setSubmissions","_useUrlQuery","submission","grade","String","submittedData","files","link","enablePagination","pagination","loadStudentSubmissions","moodleCourseAssignmentSubmissions","getSubmissions","assignmentId","Switch","row","customSort","b","Number","split","float","paging","initialPage","page","onChangePage","Assignments","match","params","course_id","setCourse","_useState23","_useState24","isSummaryOpen","setIsSummaryOpen","_useState25","_useState26","_useDialog2","_useUrlQuery2","_useRouteScrollMemory","loadCourse","resp","findById","loadCourseWorks","sortedByName","getMoodleCourseAssignments","sort","localeCompare","activeCourseWorkId","Breadcrumbs","getListUrlPath","Accordion","expanded","courseWorkId","AccordionSummary","ExpandMoreIcon","state","AccordionDetails","Investigate","activity","setActivity","setSpec","reference","setReference","_useSolutionGallery","useSolutionGallery","renderSaveButton","_useSpecComments","renderSpecCommentsModal","renderSpecCommentsOpenButton","_reference$split","_reference$split2","_reference$split2$","_reference$split2$2","answer","trim","activityID","Spec","cleanCode","Card","CardContent","onSubmit","FormControl","InputLabel","Input","SpecTest","onAnswerChange","setter","JSON","editorFooter","ButtonGroup","TestCasePanel","summary","defaultExpanded","chip","TestCaseForm","handleRemoveInputVal","handleTestCaseChange","md","ChipInput","allowDuplicates","chipRenderer","handleDelete","Chip","onDelete","handleCopyToClipboard","chips","newData","onAdd","multiline","rows","rowsMax","mainInvoker","output","Simple","_props$onSpecChange","onSpecChange","expandedTestCases","setExpandedTestCases","setTestCaseField","_spec","getTestCaseMainInvoker","removeTestCaseInput","testCaseIndex","inputIndex","splice","isAllExpanded","every","ViewList","ViewStream","testCases","testCase","setTestCase","Delete","removeTestCase","Add","addItem","addTestCase","Advanced","setText","lastValidValue","_text","Editor","onValueChange","v","_value","_unused","fontFamily","textareaClassName","preClassName","autoFocus","Comments","Settings","_spec$data","FormControlLabel","control","_spec$data2","then","confirmed","setFileMode","autoGradeOff","showTestCase","headerActions","marginRight","backdrop","drawer","titleField","typography","h6","SpecPaper","_props$existingSpecLi","existingSpecList","onDeleteSpec","onSpecChanged","onBeforeSpecSave","onSpecSaved","onMoveUp","onMoveDown","_props$hideFileSwitch","hideFileSwitch","_props$hideSaveButton","hideSaveButton","_props$hideDeleteButt","hideDeleteButton","_props$isLoading","_isLoading","activeTab","setActiveTab","specDraft","setSpecDraft","editTitle","setEditTitle","useParams","assignment_id","saveSpec","specExists","idChanged","_yield$specDraft$save","_yield$specDraft$upda","_yield$specDraft$save2","_yield$CourseWork$add","save","update","addSpec","deleteSpec","_yield$CourseWork$rem","_message","_yield$Spec$delete","removeSpec","goBack","Edit","ArrowUpward","ArrowDownward","Save","Tabs","indicatorColor","textColor","centered","Tab","Divider","Backdrop","createStyles","input","_props$match$params","useLocation","specList","setSpecList","setExistingSpecList","specChangeList","setSpecChangeList","setLoading","isSaveAllChanges","setIsSaveAllChanges","setCourseWork","courseWorkName","addBlankSpec","newSpec","newSpecIndex","assignmentOrderIndex","saveAllSpecChanges","newSpecList","change","exists","currentSpec","original","setAssignmentSpecIndex","targetIndex","newSpecOrder","currentIndex","Error","swapArrayItems","setSpecs","renderSpecs","handleDeleteSpec","updatedSpec","origSpec","_origSpec","_updatedSpec","newSpecChangeList","handleSpecChange","savedSpec","handleSpecSaved","loadCourseWorkSpecs","console","Prompt","when","ClassroomResourceLink","resource","SpecView","spec_name","isLoadingSpec","setIsLoadingSpec","retrieveSpec","fetchList","courseWorkSpecs","setCourseWorkSpecs","specIdsOnProcess","setSpecIdsOnProcess","unAssignedSpecTableOptions","cellStyle","endIcon","ArrowForward","assignSpec","handleDragEnd","newCourseWorkSpecs","_newCourseWorkSpecs$s","removed","setSpecOrder","unAssignSpec","cancelText","confirmText","newAssignedSpecs","loadSpecs","loadAllData","sm","droppableProps","placeholder","backgroundAttachment","LoaderBox","show","SkeletonData","Reports","Report","_classCallCheck","grades","this","_createClass","_getAll","queryString","_yield$Axios$get","APITools","parseQueryParams","nameColumn","minWidth","headers","stickyColumn","formControl","course_name","setColumns","setRows","setSort","loading","response","setResponse","getReport","c","r","_loop","getAll","forEach","g","today","Date","updatedTime","updateTime","startWeekDate","endWeekDate","setDate","getDate","getDay","TableContainer","Table","stickyHeader","TableHead","scope","k","substr","replaceAll","blob","Blob","saveAs","toLocaleDateString","exportCSV","Select","labelId","_a","_b","objSorted","j","moment","createdAt","format","tableData","SpecCommentStatus","authorId","author","specName","total","unseenTotal","_find","_activeReport$comment","_activeFeedback$autho","activeReport","setActiveReport","activeFeedback","setActiveFeedback","_useLoadingStatus","useLoadingStatus","isResolving","resolveWithStatus","executeWithStatus","_useLoadingStatus2","isDeleting","deleteWithStatus","_useLoadingStatus3","isResolvingFeedback","resolveFeedbackWithStatus","_useDialog","openSpecCommentsModal","loadComments","_yield$SpecCommentSta","$page","$limit","currentPage","totalCount","loadCommentReports","_yield$SpecCommentRep","SpecCommentReport","loadFeedbacks","_query$orderBy","_query$orderBy2","_yield$SpecFeedback$f","SpecFeedback","$orderBy","orderBy","$orderDirection","orderDirection","deleteComment","comment","resolve","_x4","resolveReport","report","_x5","resolveFeedback","feedback","setStatus","_x6","_activeReport$comment2","CommentItem","showMenu","description","Check","OpenInNew","lineHeight","verticalAlign","disableGutters","AppBar","tab","fromNow","textOverflow","removeMarkdown","gfm","Badge","badgeContent","lookup","_r$comment","_r$comment2","_report$comment","existingSpecs","setExistingSpecs","loadExistingSpecs","handleOnBeforeSpecSave","handleOnSpecSaved","Announcement","announcement","announcementID","expiration","createAnnouncement","bind","_createAnnouncement","res","_updateAnnouncement","put","_deleteAnnouncement","_getAnnouncments","_yield$Axios$get$data","announcements","AnnouncementView","_courses$find","openModal","setOpenModal","setCourseID","setMessage","setAnnouncementID","setExpiration","setAnnouncements","editing","setEditing","submitted","setSubmitted","table","spaceTop","bold","shadows","loadAnnouncements","arr","getAnnouncments","toggleModal","deleteAnnouncement","popupState","instance","close","submitAnnouncement","_announcement","updateAnnouncement","date","getTimezoneOffset","Utils","offsetDateToUS","toString","PopupState","popupId","Fragment","bindTrigger","MoreVertIcon","Menu","bindMenu","keepMounted","edit","noValidate","autoComplete","Autocomplete","freeSolo","option","onInputChange","val","renderInput","helperText","InputLabelProps","shrink","Files","file_id","fileUrl","setFileUrl","fileName","setFileName","loadFile","_yield$axios$post","url","fileID","responseType","exec","URL","createObjectURL","downloadFile","createElement","setAttribute","appendChild","click","download","ZipFileExplorer","fileId","_useStudentPerspectiv","student_id","StudentSubmission","studentSubmission","draftGrade","assignedGrade","alternateLink","assignmentSubmission","courseWorkType","creationTime","_studentSubmission$dr","_studentSubmission$as","_setAssignedGrade","courseWorkSubmissionId","driveFiles","attachments","driveFile","getDriveFiles","extension","path","extname","basename","_yield$axios$get$data","_findByStudentId","_submit","file","workItemName","driveFileId","courseWorkTitle","formData","FormData","append","_x7","_x8","_x9","_x10","_x11","loadStudentPerspective","studentCourseWork","moodleCourses","_yield$Promise$all2$","registeredCoursedIds","StudentLayout","_course","obj","_auth$getSession","_auth$getSession$user","moodleCourseAssignments","excludeEmptyCoursework","filteredAssignments","assignment","userid","cmid","textDecoration","navBody","btnContainer","uploaderBtn","removeBtn","itemName","closeIn","animationName","animationDuration","animationTimingFunction","closeOut","animationFillMode","DocsNav","_ref$files","_ref$onFilesChange","onFilesChange","_ref$activeFile","activeFile","_ref$onActiveFileChan","onActiveFileChange","showRemove","setShowRemove","justUploaded","setJustUploaded","removeFile","newFiles","activeKey","Nav","onSelect","appearance","Item","Icon","Uploader","fileList","autoUpload","multiple","accept","eventKey","DocProblems","_React$Component","_inherits","_super","_createSuper","_this","call","documentData","selectedProblem","selectedSpec","selectedCode","savedProblems","modals","showCodeModal","specsModal","reading","docDataCache","getDocDataCache","_assertThisInitialized","setDocDataCache","readFileInputEventAsArrayBuffer","readFile","handleProblemNameChange","handleSelectedCodeChange","saveSelectedCode","handleSelectedSpecChange","addProblemTable","removeProblemTable","uploadSpec","handleBodyContentEditableFocus","handleBodyContentEditableKeypressBlur","convertTableToSpec","reformatTable","htmlToText","runCode","filterExerciseName","$","on","off","prevProps","cache","callback","reader","FileReader","onload","loadEvent","arrayBuffer","readAsArrayBuffer","blobFile","_this2","cacheData","setState","html","exercises","matched","otherFormat","relast","otherFormatEnd","re","cleanTable","tables","mammoth","convertToHtml","convertToMarkdown","raw","RegExp","filtered","problemIndex","_this$state","tableIndex","_uploadSpec","_this$state2","problemName","newSpecifications","entry","env","Notification","evt","$this","currentTarget","el","closest","keyCode","shiftKey","hasClass","cells","d","newTables","tableHtml","headerCount","indexOfOutput","tr","ifValidTable","newVal","td","thead","u","l","inputText","funcName","codeToRun","eval","nextSib","exerciseNameFiltered","exerciseNameFilteredRaw","excerciseName","ex","toUpperCase","_this3","_this$state3","PanelGroup","Panel","inverse","shaded","onHide","Title","componentClass","Footer","Component","defaultProps","withStyles","borderCollapse","DocumentParser","mainContainerRef","createRef","handleWindowResize","handleFilesChange","handleActiveFileChange","forceUpdate","mainContainer","windowHeight","offsetTop","mainContainerStyle","PageNotFound","defaults","baseURL","interceptors","request","use","config","Authorization","_session$user","loginLoc","logout","reject","App","DialogProvider","Router","Route","exact","AdminCourseAssignmentStudent","AdminCourseAssignments","AdminCourses","AdminAssignmentSpecs","AdminCourseAssignmentSpecs","AdminSpecs","AdminSpecComments","AdminsSpecsCreate","AdminSpecView","AdminReports","AdminLogin","AdminInvestigate","AdminAnnouncements","AdminStudents","AdminStudentCourses","AdminStudentCourseWorks","Redirect","AdminFiles","AdminFilesBrowser","StudentCourseAssignment","StudentCourseAssignments","StudentCourses","StudentLogin","hostname","ReactDOM","getElementById","serviceWorker","ready","registration","unregister","test","submit","_yield$Axios$post$dat","submitterID","uuid","_getAllIDs","_get","submissionID","outputs","isBusy","_getSubmissionLogs","_yield$Axios$get$data2","logs","execute","onError","api","AxiosCache","_caches","method","hash","crypto","createHash","digest","_cache","age","adapter","promise","timestamp","_getRequestId","getTime","maxAge","_removeCache","acceptCache","_config","_createAdapter","formatScore","score","toFixed","subHours","generateSubmissionUID","prefix","uid","substring","round","random","getActivityIdFromFileName","keyArr","getSanitizedActivityId","rawActivityId","getFormattedFileContent","rawContent","index1","index2","temp","sourceIndex","destinationIndex","_arr$splice","_error$response","_error$response$data","_error$response2","defaultMessage","getExamDueDateTime","dueDate","utc","year","month","day","dueTime","hours","minutes","getFormattedExamDue","_this$getExamDueDateT","getExamDueUnix","unix","hasExamEnded","now","outline","borderWidth","userDrag","_props$iconButtonProp","iconButtonProps","_props$menuProps","menuProps","anchorEl","ArrowBack","rel","SpecComment","specComment","updatedAt","_read","read","commentId","_destroy","_yield$axios$delete","_create","_read2","_yield$axios$post2","jsCookie","atob","localStorage","setItem","syncCookie","getItem","_Auth$getSession2","setSession","remove","_loginWithGoogle","login_page_role","_login","_res$data","_res$data$authenticat","_res$data$authenticat2","_res$data$authenticat3","strategy","authentication","payload","moodle_user","_path","_path2","_path3","_path4","extractSvg","_i","_Array$from","child","tagName","_svg","parseBoxData","svg","x","y","viewBox","getAttribute","_viewBox$split","_viewBox$split2","_y","_width","_height","fixPathData","pathData","boxData","scale","translate","createSvgIcon","SvgComponent","element","innerHTML","renderToStaticMarkup","ns","removeAttribute","setAttributeNS","fixPaths","_i2","_Array$from2","SVGPathData","encode","svgProps","_props","getAttributeNames","properName","parts","toLowerCase","extractElementProps","extraProps","assign","createMuiSvgIcon","displayName","paths","scanDom","_i3","_Array$from3","MuiUtils","_extends","prototype","hasOwnProperty","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgSlack","svgRef","titleId","xmlns","fill","_path5","_path6","_path7","_path8","_path9","_path10","_path11","ForwardRef","SvgGoogleClassroom","xmlnsXlink","enableBackground","xmlSpace","gradientUnits","x1","y1","x2","y2","gradientTransform","offset","stopColor","stopOpacity","cx","cy","CSlack","SlackSvg","GoogleClassroomSvg","contentBox","editor","splitPane","backgroundClip","borderLeft","borderRight","backgroundImage","backgroundSize","backgroundPosition","graded","onTestResultChange","onBeforeTest","_props$showReference","showReference","resultFooter","activityIndex","onMarkAllAsCorrect","onMarkAsCorrect","testResult","setTestResult","runTest","accountID","shareRefToSlack","showOutputColumn","editorColumn","flexGrow","onBlur","PlayArrowIcon","outputColumn","AlertTitle","TestOutputs","SplitPane","paneStyle","minSize","defaultSize","pl","CommentInput","onNewComment","onFocus","setInput","create","ReactMde","toolbarCommands","readOnly","selectedTab","minEditorHeight","maxEditorHeight","initialEditorHeight","onTabChange","generateMarkdownPreview","markdown","ReactMarkdown","plugins","childProps","textArea","resize","authorName","_comment$author","_comment$author2","_props$onDeleted","onDeleted","_props$showMenu","prompt","isOwner","accountType","actions","fieldProps","Avatar","picture","feedsWrapper","comments","setComments","setPaging","feedsRef","hint","scrollToEnd","scrollHeight","reverse","loadMoreComments","existingIds","newComments","_feedsRef$current","_comment","onScroll","nextPage","scrollTop","Skeleton","data-comment-id","Student","_findOne","getConfig","_yield$axios$get2","_yield$axios$get2$dat","removeAndParseInvalidLineBreak","removeZeroWidthSpace","rg","validLineBreak","toBeTested","rawData","Function","lastIndex","isGalleryOpen","setIsGalleryOpen","gallerySpecId","setGallerySpecId","isSavingCode","setIsSavingCode","saveStatusMap","saveCode","toLocaleString","LibraryBooksIcon","FavoriteIcon","containerProps","Assignment","points","letterGrade","_addComment","internal","_getComments","instanceID","assignments","studentInfo","_getSpecList","_cloneSpecs","sourceAssignmentID","targetAssignmentID","_addSpec","_removeSpec","_setSpecs","specIDs","_yield$axios$put","specIds","_x12","_saveMoodleAssignmentGrade","_args9","_saveMoodleAssignment","_args10","formatDate","dateStr","dateTime","deletedAt","_save","_update","curr","sortedData","_findById","_fetchList","_yield$axios$get3","_delete2","arg","outputTable","outputTextBox","showOutputDifference","setShowOutputDifference","hasFailedTest","setHasFailedTest","failed","passed","DoneAllIcon","out","expected","actual","actualOutput","expectedOutput","CheckCircleOutlineIcon","ErrorOutlineIcon","CheckIcon","inputs","data-tip","diffChars","diffOutput","added","lightGreen","red","solutionID","reporterId","reporter","resolved","_resolve","_resolve2","useZipFileExplorerPopUp","isModalOpen","setIsModalOpen","setFileId","openFileExplorer","_query","renderOpenLink","_setStatus","viewer","CodeViewer","setContent","CancelToken","cancelToken","setCancelToken","ext","language","loadSrc","_cancelToken","cancel","withCredentials","isCancel","highlightElement","nestedDirectory","directoryItem","dark","panel","iframe","FileExplorer","directory","isNested","rootUrl","activeSrc","getItemClass","isItemActive","_props$getDirectoryLi","getDirectoryListUrl","_props$directoryRootU","directoryRootUrl","_props$query","setDirectory","setActiveSrc","showTextOnly","setShowTextOnly","iframeRef","getIndexDirectory","loadDirectory","rootList","insertToList","_arr","parentDirectory","indexDirectory","handleSelect","refreshActiveSrc","contentWindow","handleIframeLoad","onunload","initLength","pushState","purpose","go","maxSize","onLoad","MozBoxShadow","WebkitBoxShadow","listbox","InvestigateBackdrop","isSelectActive","setSelectActive","setOptions","isFetchingSubmissions","setIsFetchingSubmissions","isFetchingSubmission","setIsFetchingSubmission","hasInitialized","setHasInitialized","setSubmission","selectedSubmissionID","setSelectedSubmissionID","handleChange","updateSubmission","fetchSubmissions","getAllIDs","disablePageScroll","enablePageScroll","TestResult","clearOnEscape","onOpen","InputProps","endAdornment","showSideInfo","filterExcerciseName","excerciseNameFiltered","excerciseNameFilteredRaw","getTablesFromDocument","excercises","convertTablesToSpec","SpecDocument","specParser","closeBtn","loader","problemsContainer","problemsBody","problemsContainerTitle","ParseDocumentBackdrop","setShowCodeModal","showSpecsModal","setShowSpecsModal","parsedSpecDocument","setParsedSpecDocument","setSelectedSpec","selectedSpecIndex","setSelectedSpecIndex","setSelectedCode","setSpecIDs","isFetching","setIsFetching","isUploading","setIsUploading","hideHandler","hideSpecsModalHandler","hideCodeModalHandler","problemNameChangeHandler","prevValue","fetchSpecList","_specIDs","showCodeModalHandler","dataIndex","convertTables","showSpecsModalHandler","speedDial","bottom","AdminToolsSpeedDial","toolsVisibility","setToolsVisibility","investigateVisibility","setInvestigateVisibility","parseDocumentVisibility","setParseDocumentVisibility","isParsingSpecDocument","setIsParsingSpecDocument","handeHideTools","InsertDriveFileIcon","clickHandler","SearchIcon","getTables","SpeedDial","ariaLabel","SpeedDialIcon","BuildIcon","SpeedDialAction","tooltipTitle","menuButton","flexShrink","drawerPaper","transitions","easing","sharp","leavingScreen","contentShift","easeOut","enteringScreen","_clsx","_React$useState","sessionStorage","_React$useState2","mobileOpen","setMobileOpen","handleDrawerToggle","navItems","MenuBookIcon","ListIcon","CommentIcon","AnnouncementIcon","PeopleIcon","ChevronLeftIcon","navItem","selected","Drawer","anchor","clsx","MenuIcon","closeButton","grey","other","MuiDialogTitle","disableTypography","CloseIcon","AlertDialog","DialogContentText","okText","ConfirmDialog","PromptDialog","setValue","submitText","DialogContext","_alert","_confirm","_prompt","alertItems","setAlertItems","confirmItems","setConfirmItems","promptItems","setPromptItems","Material","material","youtubeVideo","materials","maxPoints","workType","topicId","_this$materials","_associate","reset","_getSpecs","_getMoodleCourseAssignments","_yield$axios$post2$da","_args6","_addSpec2","_yield$axios$post3","_removeSpec2","sourceCourseWorkId","targetCourseWorkId","_yield$axios$post4","_yield$Promise$all2$2","topics","_data","topic","t","topicName","isSupported","_getSubmissions","_callee11","_yield$axios$post5","_args11","_context11","_getSubmission","_callee12","_context12","_x13","_callee13","_context13","_x14","_x15","ownerId","descriptionHeading","room","section","enrollmentCode","teacherFolder","courseState","shortname","timemodified","_args","_getCourses","_getMoodleCourses","_args3","accordion","accordionSummary","AssignmentProfile","workItems","setWorkItems","studentName","overridden","rawSubmittedFiles","loadLogs","loadWorkItems","_workItems","submissionResponse","manual","getSubmission","assignmentIds","parseInt","matchingSubmission","sub","endsWith","binaryString","uint8Array","Uint8Array","charCodeAt","zipBlob","zipFile","File","rawFileAnswer","loadCourseWork","_courseWork","_useZipFileExplorerPo","renderFileExplorerModal","renderFileExplorerOpenLink","renderFileExplorerOpenButton","markAllAsCorrectHandler","workItemIndex","workItem","markAsCorrectHandler","outputIndex","testScore","getTotalTestScore","GradeInput","perfectScore","logID","GetApp","fileDropArea","userSelect","fileDropZone","fileDropZoneDrag","buttonsContainer","examEndedInterval","setExamEnded","isFileRejected","setIsFileRejected","_useLoadingStatusMap","useLoadingStatusMap","isFeedbackLoading","executeFeedbackWithStatus","submitWorkItem","rawFile","uploadStatus","successMessage","zip","zipBase64","_auth$getSession2","_auth$getSession2$use","JSZip","rawFileZip","zipUrl","_zipBlob","_zipFile","_zipUrl","_rawFileAnswer","_submission","jsBlob","rawItem","fileBlob","generateAsync","_item$submission$file","_item$submission","saveMoodleAssignment","fileContent","saveMoodleAssignmentGrade","attemptNumber","addAttempt","workFlowState","applyToAll","commentFormat","fileManager","zipAnswer","lastModified","base64Content","_auth$getSession3","_auth$getSession3$use","btoa","readAsBinaryString","validateWorkItemAnswer","hasMainFunction","hasClassImplementation","str","openFeedbackForm","_ref15","_callee16","_context16","_callee15","_context15","_callee17","_context17","setInterval","_examEnded","clearInterval","ExamCountdown","CheckCircle","_workItem$uploadStatu","Dropzone","onDrop","acceptedFiles","rejectedFiles","_callee18","_context18","onDropRejected","noClick","validator","getRootProps","isDragActive","getInputProps","AttachmentIcon","OpenInBrowser","_callee19","_context19","_workItem$submission","SaveIcon","FeedbackIcon","referenceMap","_setIsLoading","_setErrorMessage","_setReferenceStatus","currentStatus","_status$isLoading","_status$errorMessage","newLoadingMap","newErrorMessageMap","entries","_Array$from$_i","_syncReferenceMap","countdownInterval","currentTime","setCurrentTime","_currentTime","timeRemainingTillDue","useMemo","countdown","isSaving","setIsSaving","isEnterMode","setIsEnterMode","setGrade","currentGrade","getGrade","isEmptyGrade","saveGrade","setAssignedGrade","min","step"],"mappings":"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M9E,SAAC,iBAtB3B8E,EAAKyB,SA8BxB4B,EAASwyB,qBA7ChB17B,cAAA,OAAKiI,UAAU,kBAAiBlH,SAC9Bf,cAAA,KAAAe,SAAG,6BAoDbf,cAAA,KAAGiI,UAAU,iBAAgBlH,SAAC,qD,mDC7U1CO,GAAYC,aAAW,iBAAO,CAClCoL,UAAW,CACT,yDAA0D,CACxD9L,MAAO,yBACPe,gBAAiB,UACjByJ,WAAY,oGACZswB,qBAAsB,QAEtB,0BAA2B,cAC3B,0BAA2B,cAC3B,iBAAkB,kBAClB,qBAAsB,KACtB,4BAA6B,WAC7B,sBAAuB,WACvB,4BAA6B,eAYpBC,GAPG,SAACltB,GACjB,IAAQ3N,EAAmB2N,EAAnB3N,SAAU86B,EAASntB,EAATmtB,KACZr4B,EAAUlC,KAEhB,OAAOtB,cAAA,OAAKiI,UAAW4zB,EAAKr4B,EAAQmJ,UAAU,GAAG5L,SAAEA,KCwatC+6B,GAvcM,CACjBC,QAAS,CACLra,QAAS,CACL,oCACA,uBACA,oBACA,eACA,qBACA,gBACA,qBACA,gBACA,oCACA,+BACA,sCACA,2CACA,+CACA,2CACA,kCACA,uCACA,2CACA,gDACA,8BACA,qBACA,0BACA,gCACA,uBACA,4BACA,iCACA,6BACA,wBACA,gCACA,UACA,2BAEJsO,KAAM,CACF,oBAAqB,CACjB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,YAEJ,eAAgB,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,SACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,SAEJ,uBAAwB,CACpB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QAEJ,eAAgB,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QAEJ,qBAAsB,CAClB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJ,qBAAsB,CAClB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,YAEJ,gBAAiB,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,SACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,SAEJ,wBAAyB,CACrB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QAEJ,gBAAiB,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QAEJ,sBAAuB,CACnB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJ,qBAAsB,CAClB,MACA,MACA,MACA,MACA,MACA,MACA,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","file":"static/js/main.f10337a1.chunk.js","sourcesContent":["import React, { useState } from 'react';\nimport { Snackbar, IconButton } from '@material-ui/core';\nimport { Alert, AlertProps } from '@material-ui/lab';\nimport { Close } from '@material-ui/icons';\n\nconst useSnackbar = () => {\n const [isSnackbarVisible, setIsSnackbarVisible] = useState(false);\n const [snackbarType, setSnackbarType] = useState(undefined);\n const [snackbarMessage, setSnackbarMessage] = useState('');\n\n const showMessage = (message: string, severity?: AlertProps['severity']) => {\n setSnackbarMessage(message);\n setSnackbarType(severity);\n if (isSnackbarVisible)\n setIsSnackbarVisible(false);\n setTimeout(() => setIsSnackbarVisible(true));\n };\n\n return {\n renderSnackbar() {\n return (\n setIsSnackbarVisible(false)}\n action={\n setIsSnackbarVisible(false)}>\n \n \n }>\n {snackbarType ? ({snackbarMessage}) : undefined}\n \n );\n },\n showMessage\n };\n};\n\nexport default useSnackbar;","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n CircularProgress,\n Button,\n Paper,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Checkbox,\n ListItemText,\n RootRef,\n} from '@material-ui/core';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ArrowRightAlt, DoneAll } from '@material-ui/icons';\n\nimport useSnackbar from '../../hooks/useSnackbar';\nimport CourseWork from '../../models/CourseWork';\nimport utils from '../../libs/utils';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n maxWidth: '95%',\n borderRadius: 5,\n backgroundColor: 'white',\n paddingTop: 20,\n paddingBottom: 20,\n width: '95%',\n },\n paper: {\n marginTop: '2%',\n overflow: 'auto',\n backgroundColor: '#fafafa',\n },\n paperArrow: {\n marginTop: '2%',\n overflow: 'auto',\n },\n button: {\n margin: theme.spacing(0.5, 0),\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n flexCenter: {\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n },\n middleArrows: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '60px',\n },\n middlePaper: {\n marginTop: '8%',\n paddingTop: 8,\n },\n}));\n\ninterface CloneAssignmentSpecsModalProps {\n sourceCourseID: string;\n targetCourseID: string;\n visibility: boolean;\n onDone(): void;\n onClose(): void;\n}\n\nexport const CloneAssignmentSpecsModal = ({\n sourceCourseID,\n targetCourseID,\n visibility,\n onDone,\n onClose,\n }: CloneAssignmentSpecsModalProps) => {\n const classes = useStyles();\n const [sourceAssignments, setSourceAssignments] = useState([]);\n const [targetAssignments, setTargetAssignments] = useState([]);\n const [isCloning, setIsCloning] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const snackbar = useSnackbar();\n\n // gets all assignments\n const fetchAllAssignments = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setSourceAssignments([]);\n setTargetAssignments([]);\n\n const [sourceAssignmentsRes, targetAssignmentsRes] = await Promise.all([\n CourseWork.find({courseId: sourceCourseID}),\n CourseWork.find({courseId: targetCourseID})\n ]);\n setSourceAssignments(sourceAssignmentsRes.map(item => {\n item.checked = true;\n return item;\n }).filter(a => a.associatedWithDeveloper));\n setTargetAssignments(targetAssignmentsRes.map(item => {\n item.checked = true;\n return item;\n }).filter(a => a.associatedWithDeveloper));\n } catch (e) {\n utils.getRequestErrorMessage(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n // starts cloning\n const executeClone = async () => {\n try {\n setIsCloning(true);\n\n const src =\n sourceAssignments.length > targetAssignments.length\n ? targetAssignments\n : sourceAssignments;\n const checkItems = src.filter(\n (_item, i) =>\n sourceAssignments[i].checked && targetAssignments[i].checked\n );\n\n await Promise.all(checkItems.map(async (_item, i) => {\n if (sourceAssignments[i].checked && targetAssignments[i].checked) {\n return await CourseWork.cloneSpecs(\n sourceAssignments[i].id,\n targetAssignments[i].id\n );\n }\n return;\n }));\n\n snackbar.showMessage('Cloned successfully!', 'success');\n onDone();\n } catch (e) {\n snackbar.showMessage(`Clone Error: ${e.message}`, 'error');\n } finally {\n setIsCloning(false);\n }\n };\n\n // handles drag end\n const onDragEnd = (result: any, items: CourseWork[], type: string) => {\n if (!result.destination) {\n return;\n }\n\n const list = utils.moveArrayItem(items, result.source.index, result.destination.index);\n\n if (type === 'source') {\n setSourceAssignments(list);\n } else {\n setTargetAssignments(list);\n }\n };\n\n // computes item style\n const getItemStyle = (isDragging: any, draggableStyle: any) => ({\n ...draggableStyle,\n\n ...(isDragging && {\n background: 'rgb(235,235,235)',\n }),\n });\n\n // handles checked change of assignment items\n const handleCheckChange = (checked: boolean, index: number, items: CourseWork[], type: string) => {\n (type === 'source' ? setSourceAssignments : setTargetAssignments)(items.map((item, i) => {\n if (index === i) item.checked = checked;\n return item;\n }));\n };\n\n // checks/unchecks all assignment items\n const checkAll = (checked: boolean, items: CourseWork[], type: string) => {\n (type === 'source' ? setSourceAssignments : setTargetAssignments)(items.map(item => {\n item.checked = checked;\n return item;\n }));\n };\n\n // checks if all items in a list is checked\n const checkAllValue = (items: CourseWork[]) => {\n return !items.some((item) => item.checked === false);\n };\n\n // render arrows\n const renderArrows = () => {\n const src =\n sourceAssignments.length > targetAssignments.length\n ? targetAssignments\n : sourceAssignments;\n return (\n \n
\n {\n \n }\n
\n {src.map((_item, i) => {\n const checked =\n sourceAssignments[i].checked && targetAssignments[i].checked;\n return (\n
\n \n
\n );\n })}\n \n );\n };\n\n // render list\n const customList = (index: number, items: CourseWork[], type: 'source' | 'target') => (\n \n {!!items.length && (\n onDragEnd(result, items, type)}>\n \n {(provided) => (\n \n {!!items.length && (\n \n \n \n <>\n {\n \n checkAll(e.target.checked, items, type)\n }\n disableRipple\n color=\"primary\"\n />\n }\n \n \n \n \n {items.map(\n ({ checked, id, title }: CourseWork, index) => (\n \n {(provided, snapshot) => (\n \n \n <>\n {\n handleCheckChange(\n !checked,\n index,\n items,\n type\n )}\n disableRipple\n inputProps={{ 'aria-labelledby': id }}\n color=\"primary\"\n />\n }\n \n \n \n \n )}\n \n )\n )}\n \n \n )}\n \n )}\n \n \n )}\n \n );\n\n // close modal\n const closeModal = async () => {\n if (!isCloning) await onClose();\n };\n\n useEffect(() => {\n if (!!sourceCourseID && !!targetCourseID) {\n (async () => await fetchAllAssignments())();\n }\n }, [sourceCourseID, targetCourseID]);\n\n return (\n <>\n {snackbar.renderSnackbar()}\n \n \n Cloning assignment from Course ID ({sourceCourseID}) to Course ID (\n {targetCourseID})\n \n \n {(() => {\n if (isLoading)\n return (\n \n \n \n \n \n );\n\n if (errorMessage)\n return (\n \n Something went wrong\n {errorMessage}\n \n Retry\n \n \n );\n\n return (\n <>\n
\n \n Drag and Drop the list to match and clone from the source to the\n target assignment. unchecked assignment will not be included to\n the cloning process.\n \n
\n \n \n \n {customList(0, sourceAssignments, 'source')}\n \n \n {renderArrows()}\n \n \n {customList(1, targetAssignments, 'target')}\n \n \n \n \n );\n })()}\n
\n \n : undefined}\n disabled={isCloning || isLoading || !!errorMessage}\n className=\"float-right\"\n variant=\"contained\"\n color=\"primary\"\n onClick={executeClone}>\n Clone\n \n \n Close\n \n \n \n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Modal,\n Paper,\n Typography,\n Button,\n CircularProgress,\n ExpansionPanel,\n ExpansionPanelSummary,\n ExpansionPanelDetails\n} from '@material-ui/core';\nimport {\n ExpandMore,\n} from '@material-ui/icons';\nimport { makeStyles } from '@material-ui/core/styles';\nimport prism from 'prismjs';\n\nimport useSnackbar from '../../hooks/useSnackbar';\nimport Solution from '../../models/Solution';\nimport utils from '../../libs/utils';\n\ninterface SolutionGalleryModalProps {\n specId?: string\n isOpen: boolean\n onClose?(): void\n}\n\nconst useStyles = makeStyles((theme) => {\n return {\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n width: '95%',\n maxWidth: '650px',\n maxHeight: '95vh'\n },\n header: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing()\n },\n body: {\n flex: 1,\n overflow: 'auto',\n padding: theme.spacing()\n },\n footer: {\n borderTop: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing(),\n textAlign: 'right'\n },\n accordionDetails: {\n flexDirection: 'column',\n padding: `0 ${theme.spacing(2)}px ${theme.spacing(2)}px`\n },\n code: {\n width: '100%',\n whiteSpace: 'pre-wrap',\n padding: theme.spacing(),\n backgroundColor: 'rgba(250, 250, 250, 1)',\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`\n }\n };\n});\n\nexport const SolutionGalleryModal = (props: SolutionGalleryModalProps) => {\n const {\n specId,\n isOpen,\n onClose\n } = props;\n\n const { renderSnackbar, showMessage: showSnackbarMessage } = useSnackbar();\n const classes = useStyles();\n\n // solutions\n const [solutions, setSolutions] = useState([]);\n const [isLoadingSolutions, setIsLoadingSolutions] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [deletingSolutions, setDeletingSolutions] = useState([]);\n\n const loadSolutions = async () => {\n try {\n setIsLoadingSolutions(true);\n setErrorMessage('');\n setSolutions([]);\n\n if (specId) {\n const solutions = await Solution.find({ specID: specId });\n setSolutions(solutions);\n }\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoadingSolutions(false);\n }\n };\n\n const deleteSolution = async (solution: Solution) => {\n try {\n setDeletingSolutions([...deletingSolutions, solution]);\n\n if (window.confirm(`Are you sure to delete ${solution.name}?`)) {\n await solution.destroy();\n setSolutions(solutions.filter(a => a !== solution));\n }\n }\n catch (e) {\n showSnackbarMessage(`Delete unsuccessful: ${e.message}`, 'error');\n }\n finally {\n setDeletingSolutions(deletingSolutions.filter(a => a !== solution));\n }\n };\n\n const copySolutionToClipboard = (solution: Solution) => {\n navigator.clipboard.writeText(solution.code);\n showSnackbarMessage('Solution copied to clipboard.');\n };\n\n useEffect(() => {\n (async() => await loadSolutions())();\n }, [specId]);\n\n return (\n <>\n { renderSnackbar() }\n\n \n \n
\n
\n {specId}\n

\n

Solution Gallery

\n
\n
\n\n
\n {(() => {\n if (isLoadingSolutions)\n return (\n
\n \n
\n );\n\n if (errorMessage)\n return (\n
\n

\n Error Loading Items
\n {errorMessage}\n

\n \n Try Again\n \n\n
\n );\n\n if (!solutions.length)\n return (\n

There are no saved solutions yet.

\n );\n\n return solutions.map(solution => (\n \n }>\n {solution.name}\n \n\n \n
\n \n
\n\n
\n copySolutionToClipboard(solution)}\n variant=\"outlined\"\n color=\"primary\"\n >\n Copy\n \n\n deleteSolution(solution)}\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={deletingSolutions.indexOf(solution) >= 0 ? () : undefined}\n disabled={deletingSolutions.indexOf(solution) >= 0}\n >\n Delete\n \n
\n
\n
\n ));\n })()}\n
\n\n
\n \n Close\n \n
\n
\n
\n \n );\n};\n","import React, { ComponentProps } from 'react';\nimport {\n Modal,\n ModalProps,\n Paper\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => {\n return {\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n width: '95%',\n maxHeight: '95vh'\n },\n header: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing()\n },\n body: {\n flex: 1,\n overflow: 'auto',\n padding: theme.spacing()\n },\n footer: {\n borderTop: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing()\n }\n };\n});\n\nexport interface GenericModalProps extends Omit {\n children?: ComponentProps['children']\n header?: ComponentProps['children']\n footer?: ComponentProps['children']\n size?: number,\n fixExpand?: boolean\n}\n\nexport const GenericModal = (props: GenericModalProps) => {\n const classes = useStyles();\n const {\n size = 650,\n fixExpand = false,\n ...restProps\n } = props;\n\n const finalProps = {\n ...restProps,\n className: [props.className, classes.modal].filter(a => a).join(' ')\n };\n\n const wrapperStyle = {\n maxWidth: `${size}px`,\n height: fixExpand ? '100%' : undefined,\n width: fixExpand ? '100%' : undefined\n };\n\n const bodyStyle = {\n height: fixExpand ? '100%' : undefined,\n width: fixExpand ? '100%' : undefined\n };\n\n\n return (\n \n \n {!!props.header && (
{props.header}
)}\n
{props.children}
\n {!!props.footer && (
{props.footer}
)}\n
\n
\n );\n};\n","import React from 'react';\nimport {\n Box,\n Grid,\n IconButton,\n Typography\n} from '@material-ui/core';\nimport { Close } from '@material-ui/icons';\n\nimport { GenericModal } from './GenericModal';\nimport { SpecComments } from '../Spec';\nimport { SpecCommentsProps } from '../Spec/SpecComments';\n\ninterface SpecCommentsModalProps extends SpecCommentsProps {\n open: boolean\n onClose?(): void\n}\n\nexport const SpecCommentsModal = (props: SpecCommentsModalProps) => {\n const { specId, onCommentRead, open, onClose } = props;\n return (\n \n \n \n \n \n {specId}\n \n \n Notes\n \n \n \n \n \n \n \n \n \n \n )\n }\n >\n {!!specId && (\n \n \n \n )}\n \n );\n};\n","import React, { useState } from 'react';\nimport { Button } from '@material-ui/core';\nimport {Message as MessageIcon} from '@material-ui/icons';\n\nimport { SpecCommentsModal } from '../components/Modal';\nimport { SpecCommentsProps } from '../components/Spec/SpecComments';\n\nconst useSpecComments = () => {\n const [specId, setSpecId] = useState('');\n\n const open = (options: Pick) => {\n setSpecId(options.specId);\n };\n\n const renderModal = (options?: Pick) => {\n return (\n setSpecId('')}\n />\n );\n };\n\n const renderOpenButton = (options: Pick) => {\n return (\n open(options)}\n startIcon={}\n variant=\"outlined\"\n color=\"primary\"\n >\n Notes\n \n );\n };\n\n return {\n open,\n renderModal,\n renderOpenButton\n };\n};\n\nexport default useSpecComments;\n","import React, { ComponentProps } from 'react';\nimport { Box, Grid } from '@material-ui/core';\n\nimport { BackArrowButton } from '../Buttons';\n\ninterface TitleHeaderProps {\n children: ComponentProps['children']\n breadcrumb?: ComponentProps['children']\n backButton?: boolean\n}\n\nexport const TitleHeader = (props: TitleHeaderProps) => {\n const {\n children,\n breadcrumb,\n backButton = true\n } = props;\n\n return (\n \n \n \n {backButton && (\n \n \n \n )}\n {children}\n \n \n {!!breadcrumb && (\n {breadcrumb}\n )}\n \n );\n};\n\nexport default TitleHeader;\n","import React, { useState, useContext } from 'react';\nimport axios from 'axios';\n\nimport Course from '../models/Course';\nimport CourseStudent, { StudentType } from '../models/Student';\nimport Submission, {Log} from '../models/Submission';\nimport utils from '../libs/utils';\n\nexport interface Student {\n studentID: StudentType['userId']\n firstName: StudentType['profile']['name']['givenName']\n lastName: StudentType['profile']['name']['familyName']\n fullName: StudentType['profile']['name']['fullName'],\n courses: Course['id'][]\n}\n\nexport interface StudentPerspectiveContextState {\n loadData: () => Promise\n getStudentCourses: (id: string) => Course[]\n getCourseById: (id: string) => Course|null\n getStudentById: (id: string) => Student|null\n hasNewSubmission: (courseID: string, studentID: string, assignmentID: string) => boolean\n isLoaded: boolean\n isLoading: boolean\n errorMessage: string\n setErrorMessage: (a: string) => any\n students: Student[]\n courses: Course[]\n}\n\nexport const StudentPerspectiveContext = React.createContext({\n loadData: async () => {},\n getStudentCourses: () => [],\n getCourseById: () => null,\n getStudentById: () => null,\n hasNewSubmission: () => false,\n isLoaded: false,\n isLoading: false,\n errorMessage: '',\n setErrorMessage: () => null,\n students: [],\n courses: []\n});\n\nexport const StudentPerspectiveProvider = (props: React.ComponentProps) => {\n const [ isLoaded, setIsLoaded ] = useState(false);\n const [ isLoading, setIsLoading ] = useState(false);\n const [ errorMessage, setErrorMessage ] = useState('');\n const [ courses, setCourses ] = useState([]);\n const [ students, setStudents ] = useState([]);\n const [ submissionLogs, setSubmissionLogs ] = useState([] as Log[]);\n\n const loadData = async (force = false) => {\n if (isLoaded && !force)\n return;\n\n try {\n setIsLoading(true);\n setErrorMessage('');\n const { data: registeredCourses } = await axios.get('/admin/course-instances');\n const studentCourses = await Course.getCourses();\n const _courses = studentCourses.filter(a => (registeredCourses || []).indexOf(a.id) >= 0);\n const _courseStudents = await Promise.all(_courses.map(a => CourseStudent.find({courseId: a.id})));\n const _submissionLogs = await Submission.getSubmissionLogs();\n\n // extract students\n const studentMap = new Map();\n for (const _studentList of _courseStudents) {\n for (const _student of _studentList) {\n const _studentCourses = studentMap.get(_student.userId)?.courses || [];\n studentMap.set(_student.userId, {\n studentID: _student.userId,\n firstName: _student.profile.name.givenName,\n lastName: _student.profile.name.familyName,\n fullName: _student.profile.name.fullName,\n courses: [..._studentCourses, _student.courseId]\n });\n }\n }\n\n setCourses(_courses);\n setStudents(Array.from(studentMap, a => a[1]));\n setSubmissionLogs(_submissionLogs);\n setIsLoaded(true);\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n const getStudentCourses = (studentId: string): Course[] => {\n return courses.filter(course => {\n for (const student of students) {\n if (student.studentID === studentId) {\n for (const courseId of student.courses) {\n if (courseId === course.id) {\n return true;\n }\n }\n }\n }\n return false;\n });\n };\n\n const getCourseById = (courseId: string): Course|null => {\n for (let course of courses) {\n if (course.id === courseId)\n return course;\n }\n return null;\n };\n\n const getStudentById = (studentId: string): Student|null => {\n for (let student of students) {\n if (student.studentID === studentId)\n return student;\n }\n return null;\n };\n\n const hasNewSubmission = (courseID: string, studentID: string, assignmentID: string): boolean => {\n return submissionLogs.some(\n (log: Log): Boolean =>\n log.courseID === courseID &&\n log.personID === studentID &&\n log.assignmentID === assignmentID\n );\n };\n\n return (\n \n {props.children}\n \n );\n};\n\nexport const useStudentPerspective = (): StudentPerspectiveContextState => useContext(StudentPerspectiveContext);\n","import { createMuiTheme } from '@material-ui/core/styles';\n\nconst defaultTheme = createMuiTheme({\n palette: {\n primary: {\n main: '#006CFF',\n contrastText: '#FFFFFF'\n },\n success: {\n main: '#6ABC6D',\n contrastText: '#FFFFFF'\n },\n error: {\n main: '#F55B50',\n contrastText: '#FFFFFF'\n },\n warning: {\n main: '#FFC107',\n contrastText: '#FFFFFF'\n }\n }\n});\n\nexport default defaultTheme;\n","import React, { useState, useEffect } from 'react';\nimport {\n makeStyles,\n useTheme\n} from '@material-ui/core';\n\nconst useStyle = makeStyles((theme) => ({\n root: {\n width: '100%',\n position: 'relative',\n paddingTop: '70%'\n },\n window: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n backgroundColor: '#ffffff',\n borderRadius: '4% / 5%',\n boxShadow: '0 3px 20px rgba(0,0,0,0.3)',\n overflow: 'hidden'\n },\n titleBar: {\n display: 'flex',\n width: '100%',\n height: '10%',\n backgroundColor: theme.palette.primary.main,\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: '0 4.75%',\n\n '& .button-circle': {\n display: 'block',\n width: '3.25%',\n position: 'relative',\n marginLeft: '2.25%',\n backgroundColor: 'white',\n borderRadius: '100% / 100%',\n\n '&:before': {\n content: '\"\"',\n display: 'block',\n paddingTop: '100%'\n }\n }\n },\n viewPort: {\n width: '100%',\n height: '90%',\n padding: '4.75% 0 2.38% 0',\n whiteSpace: 'nowrap',\n\n '& > div': {\n display: 'inline-block',\n height: '100%',\n\n '& > div:nth-child(1)': {\n width: '100%',\n height: '83.2%',\n },\n\n '& > div:nth-child(2)': {\n width: '100%',\n height: '4.25%',\n },\n\n '& > div:nth-child(3)': {\n width: '100%',\n height: '12.55%',\n display: 'flex',\n justifyContent: 'flex-end'\n }\n },\n\n '& .editor-column': {\n width: '100%',\n padding: '0 3.9%',\n transition: 'width 150ms ease-in-out',\n\n '& .editor-box': {\n borderRadius: '3% / 4%',\n backgroundColor: '#F2F2F2',\n width: '100%',\n border: '2px solid rgba(0, 108, 255, 0.43)',\n padding: '3% 5%',\n fontSize: 'calc(0.5em + 1vmin)',\n fontWeight: 'bold',\n overflow: 'hidden'\n }\n },\n '&.active .editor-column': {\n width: '65%',\n },\n\n '& .output-column': {\n width: '35%',\n paddingRight: '3.9%',\n\n '& .output-items-container': {\n display: 'flex',\n flexDirection: 'column',\n\n '& > div': {\n flex: '1 0 0',\n margin: '1.25% 0',\n '&:first-child': {\n marginTop: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n },\n '&:last-child': {\n marginBottom: 0\n }\n }\n }\n }\n },\n coloredBox: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 'calc(1vmin + 1.2%)',\n fontSize: 'calc(1vmin + 0.4em)',\n fontWeight: 'bold',\n height: '100%',\n minHeight: 0,\n padding: '0 7%',\n color: theme.palette.primary.contrastText,\n }\n}));\n\nconst CheckerDemo = () => {\n const classes = useStyle();\n const theme = useTheme();\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n const timeout = setTimeout(() => setActive(true), 1500);\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n
\n
\n
\n \n \n \n
\n
\n
\n
\n function \n main\n (\n x, y\n ) {'{'}\n
    
\n console.\n log\n (\n \"Total: \"\n + (\n x\n +\n y\n ))\n
\n {'}'}\n
\n
{/*spacer*/}
\n
\n
\n RUN TEST\n
\n
\n
\n
\n
\n
\n TEST OUTPUT\n
\n
\n
\n
\n
\n
\n
\n
{/*spacer*/}
\n
\n
\n SUBMIT\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default CheckerDemo;\n","import React from 'react';\nimport {\n Link as RouterLink, useHistory\n} from 'react-router-dom';\nimport {\n Link,\n Container,\n makeStyles,\n Button,\n} from '@material-ui/core';\n\nimport auth from '../../libs/auth';\nimport { useDialog } from '../../context/Dialog';\nimport { GoogleSignInButton } from '../Buttons';\nimport { AuthError } from '../Errors';\n\nconst useStyle = makeStyles((theme) => ({\n navbar: {\n paddingTop: '15px',\n paddingBottom: '15px',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n nav: {\n display: 'flex',\n fontSize: '1rem',\n alignItems: 'center',\n flexWrap: 'wrap',\n\n '& > *': {\n fontWeight: 'bold',\n margin: '10px 0 10px 30px',\n\n '&, &:hover': {\n color: theme.palette.text.secondary,\n },\n '&:first-child': {\n marginLeft: 0\n }\n }\n }\n}));\n\nconst PublicNavbar = () => {\n const classes = useStyle();\n const { alert } = useDialog();\n const session = auth.getSession();\n const history = useHistory();\n\n const googleSignIn = async () => {\n try {\n await auth.loginWithGoogle({role: 'student'});\n }\n catch (e) {\n await alert(, {\n title: 'Sign In Error'\n });\n }\n };\n\n return (\n
\n \n
\n \n \"Banner\n \n \n
\n
\n
\n );\n};\n\nexport default PublicNavbar;\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Grid,\n Container,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport Prism from 'prismjs';\nimport { useHistory } from 'react-router-dom';\nimport { ResizeObserver } from 'resize-observer';\n\nimport CheckerDemo from './CheckerDemo';\nimport { PublicNavbar } from '../../components/Navbars';\nimport auth from '../../libs/auth';\n\n\nconst functionInstructions = `function test1() {\n // Do something...\n}\n\n/* \n * A function named \"main\" will only be recognized\n * and executed by the system.\n */\nfunction main(input1, input2) {\n test1()\n // Other operations\n}\n`;\n\nconst outputInstructionsGood = `function main() {\n console.log('Final Output') // Single output only\n}\n`;\n\nconst outputInstructionsBad = `function main() {\n // Bad multiple outputs\n console.log('Some other things')\n console.log('Some other things again')\n\n console.log('Final Output')\n}\n`;\n\nconst useStyle = makeStyles((theme) => ({\n titleText: {\n display: 'inline',\n backgroundColor: theme.palette.primary.contrastText\n },\n sectionWrapper: {\n width: '100%',\n overflow: 'hidden'\n },\n bannerSection: {\n position: 'relative',\n overflow: 'hidden',\n\n '& .banner-container': {\n display: 'flex',\n position: 'relative',\n flexDirection: 'column-reverse',\n zIndex: 1,\n\n [theme.breakpoints.up('md')]: {\n flexDirection: 'row'\n },\n\n '& > *': {\n width: '100%',\n flex: '1 0 0',\n\n [theme.breakpoints.up('md')]: {\n '&:nth-child(1)': {\n display: 'flex',\n alignItems: 'center',\n paddingBottom: '15vh !important'\n },\n '&:nth-child(2)': {\n paddingTop: '20vh !important'\n }\n },\n }\n }\n },\n contentSection: {\n color: theme.palette.primary.contrastText,\n width: '100%',\n position: 'relative',\n paddingBottom: '200px',\n\n '& > *': {\n position: 'relative',\n zIndex: 2\n },\n\n '&:before': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n width: '170vw',\n height: '120vw',\n left: '-20vw',\n top: '-150px',\n backgroundColor: theme.palette.primary.main,\n borderTopLeftRadius: '25% 25%',\n borderTopRightRadius: '75% 100%',\n zIndex: 0,\n\n [theme.breakpoints.up('md')]: {\n top: '-40vh',\n }\n },\n\n '&:after': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n width: '100%',\n height: '100%',\n left: 0,\n top: '15vw',\n backgroundColor: theme.palette.primary.main,\n zIndex: 0\n },\n\n '& p': {\n fontSize: '1.3rem',\n textAlign: 'center',\n },\n\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n fontWeight: 'bold',\n textAlign: 'center',\n },\n\n '& .pre-code': {\n color: 'black',\n borderRadius: '20px'\n },\n },\n footerSection: {\n padding: '100px 0',\n '& img': {\n width: '40vw',\n maxWidth: '300px'\n }\n },\n sectionItem: {\n paddingTop: '100px',\n position: 'relative',\n\n '&:first-child': {\n paddingTop: 0,\n },\n\n '& .background-icon': {\n maxHeight: '300px',\n maxWidth: '300px',\n position: 'absolute',\n left: 0,\n top: '30px',\n opacity: '0.1',\n\n '&.right': {\n left: 'auto',\n right: 0\n }\n }\n }\n}));\n\nconst Home = () => {\n const [demoMinHeight, setDemoMinHeight] = useState('80vh');\n const classes = useStyle();\n const history = useHistory();\n\n const getNavbar = () => window.document.querySelector('.app-navbar');\n\n const recalculateDemoMinHeight = () => {\n const navbar = getNavbar();\n if (navbar) {\n const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n setDemoMinHeight(vw < 960 ? '' : `${vh - navbar.clientHeight - 80}px`);\n }\n };\n\n useEffect(() => {\n if (auth.isStudent()) history.push('/student/courses');\n else if (auth.isAdmin()) history.push('/admin/courses');\n }, []);\n\n // observe document size the resize banner demo height;\n useEffect(() => {\n const docSizeObserver = new ResizeObserver(recalculateDemoMinHeight);\n docSizeObserver.observe(window.document.body);\n window.addEventListener('resize', recalculateDemoMinHeight);\n return () => {\n docSizeObserver.disconnect();\n window.removeEventListener('resize', recalculateDemoMinHeight);\n };\n }, []);\n\n return (\n \n \n \n \n \n
\n \n
\n\n
\n \n WELCOME, KINGSLAND STUDENT!\n \n \n This is the automated exam checker platform of Kingsland University.\n \n
\n
\n
\n\n \n \n\n \n ABOUT THE PLATFORM\n\n \n \n This is where you’ll submit your programming exercises, homeworks, and exams as directed by your instructor.\n \n \n\n \n \n The platform will provide automated feedback if your code properly covers expected scenarios as well as edge cases - making you feel confident that your submission is correct and ready for grading.\n \n \n \n\n\n \n \"Background\n\n INPUTS\n\n \n \n Your inputs are specified in the exercise document and are automatically supplied in the parameters of your main function.\n \n \n \n\n\n \n \"Background\n\n FUNCTIONS\n\n \n \n There can be as many functions as you want, but be sure to declare your main function.\n \n \n\n \n \n
\n                  \n                
\n
\n
\n\n \n \n It is important that you have a main() function which will serve as the starting point of your app.\n \n \n
\n\n\n \n \"Background\n OUTPUTS\n\n \n \n There can be as many functions as you want, but be sure to declare your main function.\n \n \n \n\n\n \n \"Background\n GOOD SUBMISSION\n\n \n \n
\n                    \n                  
\n
\n
\n
\n\n\n \n \"Background\n BAD SUBMISSION\n\n \n \n
\n                    \n                  
\n
\n
\n
\n
\n
\n
\n\n \n \n \n \n \"Kingsland\n \n \n \n \n \"Kingsland\n \n \n \n\n \n \n © Kingsland University\n \n \n \n
\n );\n};\n\nexport default Home;\n","import React from 'react';\nimport {\n Box,\n Container,\n Typography,\n Link\n} from '@material-ui/core';\nimport {\n createMuiTheme,\n MuiThemeProvider\n} from '@material-ui/core/styles';\n\nimport { PublicNavbar } from '../../components/Navbars';\n\nconst theme = createMuiTheme({\n overrides: {\n MuiTypography: {\n root: {\n margin: '2rem 0'\n }\n }\n }\n});\n\nconst PrivacyPolicy = () => {\n return (\n <>\n \n\n \n \n \n \n Privacy Policy\n \n\n \n When you provide your personal information to Kingsland University, it will be used for the administrative or educational purposes of the University, in accordance with specific consent given by you, or as otherwise allowed under the Privacy Act 1988. The University will not make available to a third party any personal information supplied by you unless you have consented or the disclosure is otherwise permitted or required by law.\n \n\n \n The University may distribute aggregated statistical information for statutory reporting purposes but only in a form that will not identify any person individually.\n \n\n \n Digital Logs And Analytics\n \n\n \n As with most websites or other digital properties, when accessing the University’s channels, log files are generated by the servers that show visitor details such as IP address, date, time and pages visited or documents downloaded. Information in these logs may used to generate statistical reports about access to University sites.\n \n\n \n Cookie Use\n \n\n \n Kingsland uses digital cookies to deliver you a personalised experience on its websites. Cookies are text files saved on your computer’s hard drive and used to store small pieces of data.\n \n\n \n Analytics services, including Google Analytics, use cookies which transmit information on your use of the website to a cloud service that may not be within your area of use. Google may also transfer this information to third parties where required by law, or where such third parties process the information on Google’s behalf. Kingsland uses Google Analytics and other analytics services for the purpose of evaluating online activity and improving your personalised experience online.\n \n\n \n By using this website or other University digital channels, you consent to the processing of data about you by Google in the manner and for the purposes set out above. You may refuse the use of cookies by selecting the appropriate settings on your browser; however, please note if you do this you may not be able to use the full functionality of this website or receive a personalised experience.\n \n\n \n Secure Socket Layer (SSL) Encryption\n \n\n \n Certain University websites may use SSL encryption to provide a more secure method of transferring personal information such as passwords or contact details.\n \n\n \n Opting Out Of Communications\n \n\n \n Kingsland University ensures when sending out direct marketing communication that you are able to opt out of future communications. There are links provided in such communication enabling you to unsubscribe or to email the sender to request your details be removed. On social media channels, each platform provides guidelines on how to opt out of future communications, in accordance with their relevant privacy statements.\n \n\n \n Social Media\n \n\n \n The University website may also employ Facebook Insights. This provides aggregated, non-personally identifiable information to page owners and platform developers. For more information about privacy on Facebook, refer to the Facebook privacy page.\n \n\n \n Re-targeting Advertising\n \n\n \n Kingsland may use re-targeting advertising to deliver more appropriate content or advertisements to individuals or audiences who have previously visited one of its websites. Google, Facebook and other advertising companies may use digital cookies from your browser and serve you advertisements from the University.\n \n\n \n Public Forums\n \n\n \n The University may employ chat rooms or message boards that form a component of a University website or online learning system. Some systems may enable other users to share your posted information and you should exercise caution when disclosing personal information.\n \n\n \n Copyright Notice\n \n\n \n Kingsland University claims copyright ownership of all information stored on its websites, unless expressly stated otherwise.\n \n\n \n Moral rights reside with the author, unless expressly stated otherwise. Contact the author in the first instance if you wish to copy, use or link to a particular page or article.\n \n\n \n Disclaimer\n \n\n \n Kingsland strives to keep information stored on its website, social channels and other digital services up to date, but cannot guarantee the information provided is accurate, current or reliable. The information is provided ‘as is’ with no express or implied warranty. Any mistakes in the information that are brought to our attention will be corrected as soon as possible.\n \n\n \n The University reserves the right to make changes to any material on its digital channels at any time including, but not limited to, details relating to courses, admissions, fees and services.\n \n\n \n Web links from this site to external, non-University websites should not be construed as implying any commercial or other relationship with and/or endorsement of the external site or its content by Kingsland University, and you are advised to inform yourself as to the privacy statement of those external websites.\n \n\n \n Google User Data\n \n\n \n The Google Privacy Policy and Terms of Service apply.\n \n\n \n Access
\n Kingsland University accesses your profile including Google ID, name, email, Google Classrooms related to Kingsland University \n and all content therein such as homeworks and grades, and Google Drive Files created by the platform to facilitate an integrated and seamless\n education experience between Google Classroom and the exam checker platform. Most of your profile information is for\n display purposes only and is not stored in our servers.\n
\n\n \n Uses
\n Kingsland University uses Google Classroom to store your homework submissions, automatically submit grades for homeworks, \n manually evaluate your work and submit grades for exams, retrieve your grades for display, and retrieve the lessons \n in any Kingsland University-related Google Classrooms for display within the platform.\n
\n\n \n Storage
\n Kingsland University merely acts as a middleman to pre-check your homeworks and exams before submitting \n your file to Google Classroom for instructor review.\n \n The platform does not store any information from your Google account except for the following circumstances:
\n
    \n
  • Storage of your homework submission file to be ran against the exam checker tool.
  • \n
  • Storage of your homework submission file to be rendered on the platform if it is an HTML file.
  • \n
  • Temporary storage of your homework submission file for caching purposes.
  • \n
\n
\n\n \n Sharing
\n Kingsland University will never share any information that can be retrieved from your Google Account to third-party providers.\n
\n
\n
\n
\n \n );\n};\n\nexport default PrivacyPolicy;\n","import React, { useEffect, useState } from 'react';\nimport { useHistory, withRouter } from 'react-router-dom';\nimport {\n CircularProgress,\n Container,\n Paper,\n Button,\n Typography,\n makeStyles,\n TextField,\n Box\n} from '@material-ui/core';\nimport {Alert} from '@material-ui/lab';\n\nimport auth from '../../../libs/auth';\nimport utils from '../../../libs/utils';\nimport Auth from '../../../libs/auth';\n\nconst useStyles = makeStyles(() => ({\n container: {\n height: '100vh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n paper: {\n width: '95%',\n maxWidth: '500px',\n padding: '15px',\n textAlign: 'center'\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n gap: '15px',\n paddingTop: '20px',\n paddingBottom: '20px',\n marginBottom: '10px'\n }\n}));\n\n\nconst Login = () => {\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const history = useHistory();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n const classes = useStyles();\n\n const login = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await auth.login({email, password, role: 'admin'});\n history.replace('/admin/courses');\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (Auth.getSession()?.user.admin === true) {\n history.replace('/admin/courses');\n }\n }, []);\n\n return (\n \n \n
\n \"Banner\n
\n\n Admin Login\n\n \n setEmail(e.target.value)} \n />\n setPassword(e.target.value)}\n />\n \n\n \n\n {!!errorMessage && (\n
\n setErrorMessage('')}\n severity=\"error\">\n {errorMessage}\n \n
\n )}\n
\n
\n );\n};\n\nexport default withRouter(Login);\n","import React from 'react';\nimport {\n Snackbar as SnackbarNative,\n SnackbarProps as SnackbarPropsNative\n} from '@material-ui/core';\nimport MuiAlert, { AlertProps } from '@material-ui/lab/Alert';\n\nexport interface SnackbarProps {\n duration?: number;\n message: string;\n location: SnackbarPropsNative['anchorOrigin'];\n type: AlertProps['severity'];\n visibility: boolean;\n onClose(): void;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const {\n duration = 8000,\n message,\n location,\n visibility,\n type,\n onClose\n } = props;\n\n return (\n \n \n {message}\n \n \n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { withRouter, Link, RouteComponentProps } from 'react-router-dom';\nimport MaterialTable, {\n MaterialTableProps,\n MTableBody,\n MTableHeader,\n MTableToolbar,\n} from 'material-table';\nimport {\n Button,\n Grid,\n TableBody,\n TableRow,\n TableCell,\n MuiThemeProvider,\n Tooltip,\n createMuiTheme,\n MenuItem,\n Typography,\n Box\n} from '@material-ui/core';\nimport Axios from 'axios';\nimport { MoreVert as MoreIcon } from '@material-ui/icons';\n\nimport { Snackbar } from '../../../components/Snackbar';\nimport { SnackbarProps } from '../../../components/Snackbar/Snackbar';\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport Course from '../../../models/Course';\nimport { CloneAssignmentSpecsModal } from '../../../components/Modal';\nimport auth from '../../../libs/auth';\nimport { useDialog } from '../../../context/Dialog';\nimport { MenuIconButton } from '../../../components/Buttons';\nimport utils from '../../../libs/utils';\n\nconst Courses = (props: RouteComponentProps) => {\n const [initialized, setInitialized] = useState(false);\n const [courses, setCourses] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [selectedCourseIDs, setSelectedCourseIDs] = useState([]);\n const [registeredCourses, setRegisteredCourses] = useState([]);\n const [showSnackbar, setSnackbarVisibility] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState('');\n const [snackbarType, setSnackbarType] = useState();\n const [cloneSourceCourse, setCloneSourceCourse] = useState(null);\n const [cloneTargetCourse, setCloneTargetCourse] = useState(null);\n const tableRef = useRef(null as any);\n\n const dialog = useDialog();\n\n const theme = createMuiTheme({\n palette: {\n secondary: {\n light: '#ffffff',\n main: '#000000',\n },\n },\n });\n\n const doneCloneModalHandler = async () => {\n setCloneSourceCourse(null);\n setCloneTargetCourse(null);\n await retryHandler();\n };\n\n const registerHandler = async () => {\n setIsLoading(true);\n\n try {\n const result = await Promise.all(\n selectedCourseIDs.map((id) => {\n return Axios.post('/admin/course-instance', {\n \tid: id+''\n \t});\n })\n );\n\n showSuccessAlert(`${result.length} Course Registered!`);\n } catch (e) {\n showErrorAlert(utils.getRequestErrorMessage(e));\n } finally {\n tableRef?.current?.onAllSelected(false);\n setIsLoading(false);\n await loadRegisteredCourses();\n }\n };\n\n const unregisterHandler = async () => {\n setIsLoading(true);\n\n try {\n const result = await Promise.all(\n selectedCourseIDs.map((id) =>\n Axios.delete('/admin/course-instance', {\n data: { id: id+''},\n })\n )\n );\n\n showSuccessAlert(`${result.length} Course Unregistered!`);\n } catch (e) {\n showErrorAlert(utils.getRequestErrorMessage(e));\n } finally {\n tableRef?.current?.onAllSelected(false);\n setIsLoading(false);\n await loadRegisteredCourses();\n }\n };\n\n const showSuccessAlert = (message: string) => {\n setSnackbarType('success');\n setSnackbarMessage(message);\n setSnackbarVisibility(true);\n };\n\n const showErrorAlert = (message: string) => {\n setSnackbarType('error');\n setSnackbarMessage(message);\n setSnackbarVisibility(true);\n };\n\n const retryHandler = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await loadCourses();\n\n // if (auth.isAdmin()) {\n // await loadRegisteredCourses();\n // }\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n const renderToolbar = (props: any) => (\n
\n \n \n \n \n \n {(() => {\n if (cloneSourceCourse)\n return (\n <>\n \n \n Select course for cloning specs of {cloneSourceCourse.name}(\n {cloneSourceCourse.id})\n \n \n\n \n \n {\n event.stopPropagation();\n setCloneSourceCourse(null);\n }}>\n Cancel\n \n \n \n \n );\n\n if (auth.isAdmin())\n return (\n <>\n \n {\n event.stopPropagation();\n if (await dialog.confirm('Confirm Registration', {\n title: 'Confirm'\n })) await registerHandler();\n }}\n >\n Register\n \n \n\n \n {\n event.stopPropagation();\n if (await dialog.confirm('Confirm Unregistration', {\n title: 'Confirm'\n })) await unregisterHandler();\n }}\n >\n Unregister\n \n \n \n );\n })()}\n \n \n
\n );\n\n const renderHeader = (props: any) => {\n\n if (!auth.isAdmin() && !!props.columns && props.columns.length >= 3) {\n props.columns.pop();\n }\n\n return (\n \n \n \n );\n };\n\n const renderBody = (props: any) => (\n \n {!!errorMessage ? (\n \n \n \n
\n

Error Loading Courses

\n

{errorMessage}

\n \n Try Again\n \n
\n
\n
\n
\n ) : (\n \n )}\n
\n );\n\n const tableProps: MaterialTableProps = {\n title: 'Courses',\n data: courses,\n isLoading,\n columns: [\n {\n title: 'ID',\n field: 'id',\n width: '10%',\n },\n {\n title: 'Name',\n field: 'fullname',\n render(rowData) {\n if (cloneSourceCourse)\n return rowData.fullname;\n return (\n \n {rowData.fullname}\n \n );\n }\n },\n {\n title: 'Status',\n field: 'status',\n hidden: !auth.isAdmin(),\n defaultSort: auth.isAdmin() ? 'asc' : undefined,\n },\n {\n title: 'Actions',\n render: (course) => {\n if (cloneSourceCourse) {\n if (course !== cloneSourceCourse)\n return (\n {\n e.preventDefault();\n e.stopPropagation();\n setCloneTargetCourse(course);\n }}>\n Select\n \n );\n\n return '';\n }\n\n return (\n }>\n {({setAnchorEl}) => [\n {\n setAnchorEl(null);\n setCloneSourceCourse(course);\n }}>\n Clone Course Specs\n ,\n \n View Reports\n \n ]}\n \n );\n }\n }\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Course/s Found.',\n },\n },\n options: {\n headerStyle: {\n fontWeight: 'bold',\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n selection: (() => {\n // don't show selection if there's a selected clone source\n if (cloneSourceCourse)\n return false;\n\n // show selection if user is admin only\n return Boolean(auth.isAdmin());\n })(),\n sorting: true,\n draggable: false,\n showEmptyDataSourceMessage: initialized && !isLoading,\n thirdSortClick: false,\n },\n components: {\n Toolbar: renderToolbar,\n Header: renderHeader,\n Body: renderBody,\n },\n onSelectionChange: (selectedRows) => {\n const selectedCourseIDs: any = selectedRows.map(({ id }) => id);\n\n setSelectedCourseIDs(selectedCourseIDs);\n },\n onRowClick: cloneSourceCourse ? undefined : (event, rowData) =>\n props.history.push(`/admin/courses/${rowData?.id}/assignments`),\n };\n\n const loadCourses = async (params = {}) => {\n const session = auth.getSession();\n\n const fetchedCourses = await Course.getMoodleCourses({\n token: session?.accessToken,\n });\n \n setCourses(fetchedCourses);\n };\n\n const loadRegisteredCourses = async () => {\n const data = (await Axios.get('/admin/course-instances')).data || [];\n\n setRegisteredCourses(data);\n };\n\n const initializeData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n\n await loadCourses();\n\n if (auth.isAdmin()) {\n await loadRegisteredCourses();\n }\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n setInitialized(true);\n }\n };\n\n useEffect(() => {\n if (!initialized) {\n initializeData();\n }\n }, [initialized]);\n\n useEffect(() => {\n if (courses && !!courses.length) {\n const result = courses.reduce(\n (acc: any, course) => [\n ...acc,\n {\n ...course,\n status:\n registeredCourses && registeredCourses.includes(course.id)\n ? 'Registered'\n : 'Unregistered',\n },\n ],\n []\n );\n\n setCourses(result);\n }\n }, [registeredCourses]);\n\n const hideSnackbarHandler = () => setSnackbarVisibility(false);\n\n return (\n \n \n {\n setCloneSourceCourse(null);\n setCloneTargetCourse(null);\n }}\n />\n
\n \n
\n
\n );\n};\n\nexport default withRouter(Courses);\n","import React, { useState, useEffect } from 'react';\nimport {\n CircularProgress,\n Typography,\n Button\n} from '@material-ui/core';\n\nimport CourseWork from '../../models/CourseWork';\nimport Spec from '../../models/Spec';\nimport utils from '../../libs/utils';\n\nexport interface AssignmentSpecSummaryProps {\n courseId?: string,\n courseWorks?: CourseWork[]\n}\n\nexport const AssignmentSpecSummary = (props: AssignmentSpecSummaryProps) => {\n const {courseId = ''} = props;\n const [specLists, setSpecLists] = useState([]);\n const [courseWorks, setCourseWorks] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setCourseWorks([]);\n setSpecLists([]);\n\n if (courseId) {\n const data = await (() => {\n if (props.courseWorks)\n return props.courseWorks;\n return CourseWork.find({\n courseId: courseId\n });\n })();\n\n setCourseWorks(data);\n setSpecLists(await Promise.all(data.map(a => a.getSpecs())));\n }\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n (async() => await loadData())();\n }, [courseId]);\n\n\n if (isLoading)\n return (\n
\n \n
\n );\n\n if (errorMessage)\n return (\n
\n \n Something went wrong.\n \n \n {errorMessage}\n \n\n \n
\n );\n\n if (!courseWorks.length)\n return (\n
\n

No assignment/s found.

\n
\n );\n\n return (\n
\n
    \n {courseWorks.map((courseWork, index) => {\n const specs = specLists[index] || [];\n\n return (\n
  • \n {courseWork.name} ({courseWork.id})\n {!!specs.length && (\n
      \n {specs.map(spec => (\n
    • {spec.id}
    • \n ))}\n
    \n )}\n
  • \n );\n })}\n
\n
\n );\n};\n","import { useHistory } from 'react-router-dom';\nimport querystring from 'querystring';\n\n// sometimes some parameters like page number should be tracked\n// in order to preserve the state when refreshing the page\n// url query is the most common way to track these parameters\n// since react does not parse the search query from url, useUrlQuery will do the job\nconst useUrlQuery = () => {\n const history = useHistory();\n const { location } = history;\n\n // gets the url query in object form\n const getQuery = () => querystring.parse(location.search.replace(/^\\?/, ''));\n\n // sets the url query\n // if url has an existing query, it will replace the location, otherwise it pushes\n const setQuery = (newQuery: {[key: string]: any}) => {\n const shouldPush = !Object.keys(getQuery()).length;\n const search = `?${querystring.stringify(newQuery)}`;\n if (shouldPush) history.push({ search });\n else history.replace({ search });\n };\n\n // the query object to be provided\n const query = getQuery();\n\n return {\n query,\n getQuery,\n setQuery\n };\n};\n\nexport default useUrlQuery;\n","import { useEffect, useRef } from 'react';\nimport { useHistory } from 'react-router-dom';\n\ninterface ScrollPosition {\n scrollY?: number\n scrollX?: number\n}\n\nconst scrollMemoryMap = new Map();\n\n// by default react does not track the scroll position of the page when the back button was executed\n// useRouteScrollMemory will provide save and restore function to preserve the scroll position\nconst useRouteScrollMemory = () => {\n const history = useHistory();\n\n // tracker variables/refs\n const pathRef = useRef(history.location.pathname);\n const scrollYRef = useRef(window.scrollY);\n const scrollXRef = useRef(window.scrollX);\n\n // saves the current position and associates it to the location pathname(url)\n const saveScroll = () => {\n scrollMemoryMap.set(pathRef.current, {\n scrollY: scrollYRef.current,\n scrollX: scrollXRef.current\n });\n };\n\n // restores the saved position of current location\n const restoreScroll = () => {\n const position = scrollMemoryMap.get(pathRef.current);\n window.scrollTo(position?.scrollX || 0, position?.scrollY || 0);\n };\n\n // handles/tracks the position of scroll\n const handleScrollEvent = () => {\n pathRef.current = history.location.pathname;\n scrollYRef.current = window.scrollY;\n scrollXRef.current = window.scrollX;\n };\n\n // add listener on mount and remove on unmount\n useEffect(() => {\n window.addEventListener('scroll', handleScrollEvent);\n return () => {\n window.removeEventListener('scroll', handleScrollEvent);\n };\n }, []);\n\n return {\n saveScroll,\n restoreScroll\n };\n};\n\nexport default useRouteScrollMemory;\n","import React, { useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { RouteComponentProps, Link, useHistory } from 'react-router-dom';\nimport {\n CircularProgress,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Button,\n Grid,\n Typography,\n Switch,\n List,\n ListItem,\n ListItemText,\n Divider,\n Breadcrumbs\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport MaterialTable, {\n MTableToolbar\n} from 'material-table';\n\nimport AdminLayout from '../../../../../layouts/AdminLayout';\nimport Submission, { Log } from '../../../../../models/Submission';\nimport { GenericModal } from '../../../../../components/Modal';\nimport { AssignmentSpecSummary } from '../../../../../components/AssignmentSpecSummary';\nimport Course from '../../../../../models/Course';\nimport CourseWork from '../../../../../models/CourseWork';\nimport Student from '../../../../../models/Student';\nimport StudentSubmission from '../../../../../models/StudentSubmission';\nimport { useDialog } from '../../../../../context/Dialog';\nimport useUrlQuery from '../../../../../hooks/useUrlQuery';\nimport useRouteScrollMemory from '../../../../../hooks/useRouteScrollMemory';\nimport { TitleHeader } from '../../../../../components/Headers';\nimport utils from '../../../../../libs/utils';\n\nconst useStyles = makeStyles((theme) => ({\n column: {\n flexBasis: '70%',\n },\n tableContainer: {\n width: '100%'\n },\n toolbar: {\n '& .MuiToolbar-root': {\n paddingLeft: '4px'\n }\n },\n stateText: {\n color: 'grey',\n textTransform: 'capitalize'\n },\n disabledAccordion: {\n '& .MuiAccordionSummary-root': {\n cursor: 'default',\n pointerEvents: 'none',\n\n '& > *:nth-child(2), & > *:first-child > *:first-child': {\n opacity: 0.38\n }\n },\n '& a': {\n pointerEvents: 'all'\n }\n }\n}));\n\nconst AssociateCourseWork = (props: {courseWork: CourseWork, onAssociated: (cw: CourseWork) => any}) => {\n const { courseWork, onAssociated } = props;\n const [isLoading, setIsLoading] = useState(false);\n const { alert, confirm } = useDialog();\n\n const associate = async () => {\n try {\n setIsLoading(true);\n\n const confirmMessage = 'You are about to associate the assignment to the platform, you need to manually delete the existing one after. Do you wish to continue?';\n const confirmed = await confirm(confirmMessage,{\n title: 'Confirm Association',\n confirmText: 'Continue',\n cancelText: 'Cancel'\n });\n\n if (confirmed) {\n onAssociated(await courseWork.associate());\n }\n }\n catch (e) {\n await alert(utils.getRequestErrorMessage(e), {\n title: 'Associate Error'\n });\n }\n finally {\n setIsLoading(false);\n }\n };\n\n return (\n ) : ''}\n disabled={isLoading}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n (async () => await associate())();\n }}>\n {isLoading ? 'Associating' : 'Associate'}\n \n );\n};\n\nconst AssignmentStudentTable = (props: {active: boolean, courseWork: CourseWork, students: Student[], submissionLogs: Log[]}) => {\n const { active, courseWork, students, submissionLogs } = props;\n const [initialized, setInitialized] = useState(false);\n const [submissions, setSubmissions] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n\n const classes = useStyles();\n const { query, setQuery } = useUrlQuery();\n\n const data = submissions ? submissions.map((submission) => {\n return {\n id: submission.id,\n name: submission.fullname,\n grade: String(submission.grade || ''),\n submittedData: submission?.files || [] ,\n link: `/admin/courses/${courseWork.courseId}/assignments/${courseWork.id}/students/${submission.id}`\n };\n }):[];\n\n const enablePagination = query.pagination !== 'no';\n\n const hasNewSubmission = (courseID: string, studentID: string, assignmentID: string): boolean => {\n return submissionLogs.some(\n (log: Log): Boolean =>\n log.courseID === courseID &&\n log.personID === studentID &&\n log.assignmentID === assignmentID\n );\n };\n\n const loadStudentSubmissions = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n \n const moodleCourseAssignmentSubmissions = await CourseWork.getSubmissions({\n assignmentId: courseWork.id\n });\n setSubmissions(moodleCourseAssignmentSubmissions);\n // setSubmissions(await StudentSubmission.find({\n // courseId: courseWork.courseId,\n // courseWorkId: courseWork.id\n // }));\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n if (!active)\n return (<>);\n\n if (!initialized) {\n setInitialized(true);\n (async () => await loadStudentSubmissions())();\n }\n\n if (errorMessage)\n return (\n
\n Something went wrong.\n

{ errorMessage }

\n\n \n Try Again\n \n
\n );\n\n return (\n \n setQuery({...query, pagination: e.target.checked ? '' : 'no'})}\n color=\"primary\"\n name=\"Paginate\"\n />\n Pagination\n \n )}\n isLoading={isLoading}\n data={data}\n columns={[\n {\n title: 'ID',\n field: 'id'\n },\n {\n title: 'Name',\n field: 'name',\n render: (row) => (\n {row.name}\n )\n },\n {\n title: 'Grade',\n field: 'grade',\n customSort: (a, b) => {\n const _a = Number((a.grade || '').split(' ')[0] || 0);\n const _b = Number((b.grade || '').split(' ')[0] || 0);\n return _a - _b;\n }\n },\n {\n title: 'Submitted',\n field: 'submittedData',\n sorting: false,\n render: (student) => {\n if (student.submittedData.length) {\n if (hasNewSubmission(courseWork.courseId, student.id, courseWork.id))\n return (\n \n );\n return '✓';\n }\n return '';\n }\n },\n ]}\n options={{\n thirdSortClick: false,\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n paging: enablePagination,\n initialPage: Number(query.page || 1) - 1\n }}\n onChangePage={page => setQuery({...query, page: page + 1})}\n components={{\n Toolbar: props => (\n
\n \n
\n )\n }}\n />\n );\n};\n\nconst Assignments = (props: RouteComponentProps<{ course_id: string }>) => {\n const {course_id: courseId} = props.match.params;\n \n const history = useHistory();\n \n const [course, setCourse] = useState(null);\n const [courseWorks, setCourseWorks] = useState([]);\n const [students, setStudents] = useState([]);\n const [submissionLogs, setSubmissionLogs] = useState([] as Log[]);\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [isSummaryOpen, setIsSummaryOpen] = useState(false as boolean);\n const [isAssociatingAll, setIsAssociatingAll] = useState(false);\n\n const classes = useStyles();\n const { alert, confirm } = useDialog();\n const { query, setQuery } = useUrlQuery();\n const { saveScroll, restoreScroll } = useRouteScrollMemory();\n\n const associatedCourseWorks = courseWorks.filter(a => a.associatedWithDeveloper);\n\n\n const loadCourse = async () => {\n const resp = await Course.findById({\n courseId\n });\n setCourse(resp);\n };\n\n const loadCourseWorks = async () => {\n const resp = await CourseWork.getMoodleCourseAssignments({\n courseId\n });\n const sortedByName = resp.sort((a, b) => a.name.localeCompare(b.name));\n setCourseWorks(sortedByName);\n\n };\n\n const loadCourseStudents = async () => {\n setStudents(await Student.find({courseId: courseId}, {acceptCache: true}));\n };\n\n const loadSubmissionLogs = async () => {\n setSubmissionLogs(await Submission.getSubmissionLogs());\n };\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n\n setCourse(null);\n setCourseWorks([]);\n setStudents([]);\n setSubmissionLogs([]);\n\n await Promise.all([\n loadCourse(),\n loadCourseWorks(),\n // loadCourseStudents(),\n // loadSubmissionLogs()\n ]);\n\n\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n restoreScroll();\n }\n };\n\n const setActiveCourseWorkId = (courseWorkId: string) => {\n setQuery({...query, courseWork: courseWorkId, page: 1});\n };\n\n const activeCourseWorkId = query.courseWork || '';\n\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n useEffect(() => saveScroll, []);\n\n return (\n \n setIsSummaryOpen(false)}\n header={\n Course Spec Summary | {courseId}\n }>\n \n \n\n
\n {(() => {\n if (isLoading)\n return (\n
\n \n

Loading Assignments

\n
\n );\n\n if (errorMessage)\n return (\n
\n

Error

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n return (\n <>\n \n \n \n Courses\n {course?.fullname || courseId}\n Assignments\n \n }\n >\n Assignments\n \n \n \n setIsSummaryOpen(true)}>\n View Spec Summary\n \n \n \n\n
\n {courseWorks.map((courseWork) => (\n \n setActiveCourseWorkId(courseWork.id === activeCourseWorkId ? '' : courseWork.id)\n }\n >\n }>\n
\n {courseWork.name}   \n ({courseWork.id})\n {/* publish status should be here I suppose. */}\n {/* {courseWork.state !== 'PUBLISHED' && (\n - {courseWork.state.toLowerCase()}\n )} */}\n
\n
e.stopPropagation()}>\n \n Assign Specs\n \n {\n history.push({\n pathname: `/admin/courses/${courseId}/specs/${courseWork.id}`,\n state: {courseWork: {name: courseWork.name}},\n });\n }}\n >\n View Specs\n \n
\n
\n {(\n \n
\n \n
\n
\n )}\n \n ))}\n
\n \n );\n })()}\n
\n
\n );\n};\n\nexport default Assignments;\n","import React, { useState } from 'react';\nimport Axios from 'axios';\nimport {\n Box,\n FormControl,\n InputLabel,\n Input,\n Button,\n ButtonGroup,\n Typography,\n Card,\n CardContent,\n} from '@material-ui/core';\n\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport { cleanCode } from '../../../libs/cleaner';\nimport useSolutionGallery from '../../../hooks/useSolutionGallery';\nimport useSpecComments from '../../../hooks/useSpecComments';\nimport Spec from '../../../models/Spec';\nimport { SpecTest } from '../../../components/Spec';\nimport utils from '../../../libs/utils';\n\ninterface Activity {\n id: string\n name: string\n answer: string\n}\n\nconst Investigate = () => {\n const [activity, setActivity] = useState(null as Activity | null);\n const [spec, setSpec] = useState(null);\n const [reference, setReference] = useState('' as string);\n const [isLoading, setIsLoading] = useState(false as boolean);\n const [errorMessage, setErrorMessage] = useState('' as string);\n\n const {\n renderModal,\n renderSaveButton,\n renderOpenButton,\n renderSnackbar\n } = useSolutionGallery();\n\n const {\n renderModal: renderSpecCommentsModal,\n renderOpenButton: renderSpecCommentsOpenButton\n } = useSpecComments();\n\n const updateActivity = (setter: (activity: Activity) => Activity) => {\n setActivity(setter(JSON.parse(JSON.stringify(activity))));\n };\n\n const search = async (\n event:\n | React.FormEvent\n | React.MouseEvent\n ) => {\n event.preventDefault();\n try {\n setIsLoading(true);\n setActivity(null);\n setSpec(null);\n setErrorMessage('');\n\n const [ course_id = '', assignment_id = '' ] = reference.split('-');\n const data = (\n await Axios.get('/admin/retrieve-submission', {\n params: { id: reference.trim() },\n })\n ).data;\n const id = (data.activityID || '') as string;\n const answer = (data.code.replace(/((\\\\n)+((?!\\S+)|(?=})))/g, '\\n') ||\n '') as string;\n setSpec(await Spec.findById(id));\n setActivity({\n id: id,\n name: id,\n answer: cleanCode(answer),\n });\n\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n { renderModal() }\n { renderSnackbar() }\n { renderSpecCommentsModal() }\n\n
\n
\n \n \n Investigate Submission\n This tool enables administrators to access a student's submission for\n closer investigation using the reference code shown to the students after code execution.\n \n A sample reference code looks like this: c73746c1-0773-43ff-b3ca-310006d08ce0-PI3-SPRING-E1-FRUIT\n \n \n
\n
\n
\n
\n
\n \n Enter Reference Code\n setReference(e.target.value)}\n required={true}\n />\n \n
\n
\n \n
\n
\n
\n
\n\n {(() => {\n if (errorMessage)\n return (\n
\n

Error Loading Activity

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n if (activity && spec)\n return (\n \n\n updateActivity((activity) => {\n activity.answer = answer;\n return activity;\n })}\n editorFooter={(\n \n { renderSaveButton({specId: activity.id, code: activity.answer}) }\n { renderOpenButton({specId: activity.id}) }\n { !!spec && renderSpecCommentsOpenButton({specId: activity.id}) }\n \n )}\n />\n \n );\n })()}\n
\n
\n );\n};\n\nexport default Investigate;\n","import React, { FunctionComponent } from 'react';\nimport {\n Typography,\n ExpansionPanel,\n ExpansionPanelSummary,\n ExpansionPanelDetails,\n ExpansionPanelProps\n} from '@material-ui/core';\nimport { ExpandMore } from '@material-ui/icons';\nimport { makeStyles } from '@material-ui/core/styles';\n\ninterface Props extends ExpansionPanelProps {\n summary: string;\n defaultExpanded?: boolean;\n}\n\nconst useStyles = makeStyles({\n root: {\n backgroundColor: '#546c78',\n },\n});\n\nconst TestCasePanel: FunctionComponent = ({\n children,\n summary,\n defaultExpanded,\n expanded,\n onChange\n}) => {\n const classes = useStyles();\n\n return (\n \n }\n >\n {summary}\n \n {children}\n \n );\n};\n\nexport default TestCasePanel;\n","import React, { FunctionComponent } from 'react';\nimport {\n Chip,\n TextField,\n Grid,\n} from '@material-ui/core';\nimport ChipInput from 'material-ui-chip-input';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Spec from '../../models/Spec';\nimport { TestCaseInputChange } from '../../types/HTMLPropsTypes';\n\ninterface Props {\n data: Spec['data'][0];\n index: number;\n onChange?: (data: Spec['data'][0]) => void;\n handleRemoveInputVal: (testCaseIndex: number, inputIndex: number) => void;\n handleTestCaseChange: TestCaseInputChange;\n}\n\nconst useStyles = makeStyles((theme) => ({\n chip: {\n maxWidth: '40vw !important',\n },\n}));\n\nconst TestCaseForm: FunctionComponent = ({\n data,\n handleRemoveInputVal,\n index,\n handleTestCaseChange,\n onChange\n}: Props) => {\n const classes = useStyles();\n // To be implemented later\n // const [enableAutofill, setEnableAutofill] = useState(true);\n\n // const handleAutofillChange = (event: React.ChangeEvent) => {\n // setEnableAutofill(event.target.checked);\n // };\n\n const handleOnChipsChange = (chips: string[]) => {\n if (onChange) {\n const newData = {...data};\n newData.arguments = chips;\n onChange(newData);\n }\n };\n\n const handleCopyToClipboard = (value: string) => {\n navigator.clipboard.writeText(value);\n };\n return (\n
\n \n \n \n (\n handleCopyToClipboard(value)}\n />\n )}\n onChange={handleOnChipsChange}\n onAdd={(chip) => handleTestCaseChange(index, 'arguments', chip)}\n onDelete={(chip, i) => handleRemoveInputVal(index, i)}\n />\n \n\n \n {/* */}\n \n handleTestCaseChange(index, 'mainInvoker', e.target.value)\n }\n />\n {/* \n \n \n }\n label=\"Autofill\"\n />\n */}\n \n \n \n \n \n handleTestCaseChange(index, 'output', e.target.value)\n }\n fullWidth\n rows={3}\n rowsMax={5}\n value={data.output}\n />\n \n \n \n
\n );\n};\n\nexport default TestCaseForm;\n","import React, { useState } from 'react';\nimport { Box, Button, Grid, Typography } from '@material-ui/core';\nimport { Delete, ViewList, ViewStream, Add } from '@material-ui/icons';\n\nimport Spec, { SpecData } from '../../../models/Spec';\nimport { TestCasePanel } from '../../ExpansionPanel';\nimport { TestCaseForm } from '../../Form';\nimport { TestCaseInputChange } from '../../../types/HTMLPropsTypes';\n\ninterface Props {\n spec: Spec\n onSpecChange?: (spec: Spec) => void\n}\n\nconst Simple = (props: Props) => {\n const { spec, onSpecChange = () => {} } = props;\n const [expandedTestCases, setExpandedTestCases] = useState([true] as boolean[]);\n\n // sets test case value\n const setTestCase = (index: number, data: SpecData) => {\n const _spec = new Spec(spec);\n _spec.data[index] = data;\n onSpecChange(_spec);\n };\n\n // sets value to the given field of test case\n const setTestCaseField: TestCaseInputChange = (index, field, value) => {\n const _spec = new Spec(spec);\n if (field === 'arguments') {\n _spec.data[index]!.arguments.push(value);\n _spec.data[index]!.mainInvoker = Spec.getTestCaseMainInvoker(_spec.data[index]);\n } else {\n _spec.data[index]![field] = value;\n }\n onSpecChange(_spec);\n };\n\n // adds new test case\n const addTestCase = () => {\n const _spec = new Spec(spec);\n _spec.addItem();\n onSpecChange(_spec);\n };\n\n // removes test case\n const removeTestCase = (index: number) => {\n const _spec = new Spec(spec);\n _spec.data.splice(index, 1);\n onSpecChange(_spec);\n };\n\n // removes test case input/argument\n const removeTestCaseInput = (testCaseIndex: number, inputIndex: number) => {\n const _spec = new Spec(spec);\n _spec.data[testCaseIndex].arguments.splice(inputIndex, 1);\n _spec.data[testCaseIndex]!.mainInvoker = Spec.getTestCaseMainInvoker(_spec.data[testCaseIndex]);\n onSpecChange(_spec);\n };\n\n // flag if all test cases are expanded\n const isAllExpanded = spec.data.every((a, i) => expandedTestCases[i]);\n\n return (\n \n {spec.data.length > 1 && (\n \n \n {isAllExpanded && (\n setExpandedTestCases(spec.data.map(() => false))}>\n Collapse All\n \n )}\n\n {!isAllExpanded && (\n setExpandedTestCases(spec.data.map(() => true))}>\n Expand All\n \n )}\n \n \n )}\n\n \n {(() => {\n const testCases = [ ...spec.data ];\n testCases.sort((a, b) => {\n if (a.id !== undefined && b.id !== undefined) {\n if (a.id > b.id) return 1;\n if (a.id < b.id) return -1;\n }\n return 0;\n });\n\n if (!testCases.length) return (\n Empty spec defaults to a file submission\n );\n\n return testCases.map((testCase, index) => (\n 0 ? 1.5 : 0} key={index}>\n {\n setExpandedTestCases((state) => {\n state[index] = expanded;\n return [ ...state ];\n });\n }}\n >\n \n \n setTestCase(index, data)}\n handleTestCaseChange={setTestCaseField}\n handleRemoveInputVal={removeTestCaseInput}\n index={index}\n />\n \n\n \n }\n onClick={() => removeTestCase(index)}\n >\n Remove Test Case\n \n \n \n \n \n ));\n })()}\n \n\n \n \n }\n onClick={() => addTestCase()}>\n Add a Test Case\n \n \n \n \n );\n};\n\nexport default Simple;","import React, { useEffect, useState, useRef } from 'react';\nimport Editor from 'react-simple-code-editor';\nimport prism from 'prismjs';\n\nimport Spec from '../../../models/Spec';\n\ninterface Props {\n spec: Spec\n onSpecChange?: (spec: Spec) => void\n}\n\nconst Advanced = (props: Props) => {\n const { spec, onSpecChange = () => {} } = props;\n const [text, setText] = useState('');\n const lastValidValue = useRef('');\n\n const _setValue = (v: string) => {\n try {\n setText(v);\n const _value = JSON.parse(v);\n lastValidValue.current = JSON.stringify(_value, null, 2);\n if (typeof _value !== 'object') return;\n onSpecChange(new Spec(_value));\n } catch {\n // ignore error\n }\n };\n\n useEffect(() => {\n const _text = JSON.stringify(spec, null, 4);\n if (_text !== lastValidValue.current) {\n lastValidValue.current = _text;\n setText(_text);\n }\n }, [spec]);\n\n return (\n
\n \n prism.highlight(code, prism.languages.javascript, 'json')\n }\n padding={10}\n style={{\n fontFamily: '\"Fira code\", \"Fira Mono\", monospace',\n backgroundColor: 'rgba(250,250,250, 1)',\n fontSize: 12,\n }}\n textareaClassName=\"box-border\"\n preClassName=\"box-border\"\n autoFocus\n />\n
\n );\n};\n\nexport default Advanced;","import React from 'react';\nimport { Typography } from '@material-ui/core';\n\nimport Spec from '../../../models/Spec';\nimport { SpecComments } from '../../Spec/SpecComments';\n\ninterface Props {\n spec: Spec\n onSpecChange?: (spec: Spec) => void\n}\n\nconst Comments = (props: Props) => {\n const { spec } = props;\n return spec.id ? () : (Not Available);\n};\n\nexport default Comments;","import React from 'react';\nimport { Container, Grid, Switch, FormControlLabel } from '@material-ui/core';\n\nimport Spec from '../../../models/Spec';\nimport { useDialog } from '../../../context/Dialog';\n\ninterface Props {\n spec: Spec\n onSpecChange?: (spec: Spec) => void\n}\n\nconst Settings = (props: Props) => {\n const { spec, onSpecChange = () => {} } = props;\n\n const { confirm } = useDialog();\n\n const setSpec = (setter: (_spec: Spec) => Spec) => {\n return onSpecChange(setter(spec));\n };\n\n const setFileMode = (value: boolean) => {\n const _spec = new Spec(spec);\n if (value) {\n confirm('File submission mode will remove all the test cases. Do you want to continue?').then(confirmed => {\n if (!confirmed) return;\n _spec.data = [];\n onSpecChange(_spec);\n });\n }\n else {\n _spec.addItem();\n onSpecChange(_spec);\n }\n };\n\n return (\n \n \n \n {\n setFileMode(!!spec.data?.length);\n }}\n />\n }\n />\n \n\n \n {\n setSpec((state) => {\n const _spec = new Spec(state);\n _spec.autoGradeOff = !_spec.autoGradeOff;\n return _spec;\n });\n }}\n />\n }\n />\n \n\n \n {\n setSpec((state) => {\n const _spec = new Spec(state);\n _spec.showTestCase = !_spec.showTestCase;\n return _spec;\n });\n }}\n />\n }\n />\n \n \n \n );\n};\n\nexport default Settings;","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Typography,\n Backdrop,\n CircularProgress,\n Grid,\n Tab,\n Tabs,\n IconButton,\n Divider,\n FormControlLabel,\n Switch,\n Paper, TextField\n} from '@material-ui/core';\nimport {Delete, Save, ArrowUpward, ArrowDownward, Edit} from '@material-ui/icons';\nimport { useParams, useHistory } from 'react-router';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Spec from '../../../models/Spec';\nimport CourseWork from '../../../models/CourseWork';\nimport { useDialog } from '../../../context/Dialog';\nimport useSnackbar from '../../../hooks/useSnackbar';\nimport utils from '../../../libs/utils';\nimport Simple from './Simple';\nimport Advanced from './Advanced';\nimport Comments from './Comments';\nimport Settings from './Settings';\n\ninterface SpecPaperProps {\n // original spec reference object\n spec: Spec\n\n // existing spec list\n existingSpecList?: Spec[]\n\n // spec delete callback\n onDeleteSpec?(): void\n\n // spec update callback\n onSpecChanged?(spec: Spec): void\n\n // spec before save callback\n onBeforeSpecSave?(spec: Spec): void\n\n // space after save callback\n onSpecSaved?(spec: Spec): void\n\n // move up spec callback\n onMoveUp?(): void\n\n // move down spec callback\n onMoveDown?(): void\n\n // hide file switch flag\n hideFileSwitch?: boolean\n\n // hide save button flag\n hideSaveButton?: boolean\n\n // hide delete button flag\n hideDeleteButton?: boolean\n\n // loading flag\n isLoading?: boolean\n}\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n overflow: 'hidden'\n },\n headerActions: {\n '& > *:not(:last-child)': {\n marginRight: theme.spacing(1.5)\n }\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n titleField: {\n '& .MuiInputBase-root': {\n ...theme.typography.h6,\n color: 'inherit'\n }\n }\n}));\n\nconst SpecPaper = (props: SpecPaperProps) => {\n const {\n spec,\n existingSpecList = [],\n onDeleteSpec,\n onSpecChanged,\n onBeforeSpecSave,\n onSpecSaved,\n onMoveUp,\n onMoveDown,\n hideFileSwitch = false,\n hideSaveButton = false,\n hideDeleteButton = false,\n isLoading: _isLoading = false\n } = props;\n\n const classes = useStyles();\n const [activeTab, setActiveTab] = useState(0);\n const [specDraft, setSpecDraft] = useState(new Spec());\n const [isLoading, setIsLoading] = useState(false);\n const [initialized, setInitialized] = useState(false);\n const [editTitle, setEditTitle] = useState(false);\n\n const history = useHistory();\n const { assignment_id: assignmentID } = useParams();\n const { showMessage, renderSnackbar } = useSnackbar();\n\n useEffect(() => {\n const _spec = new Spec(JSON.parse(JSON.stringify(spec)));\n if (assignmentID) _spec.assignmentID = assignmentID;\n setSpecDraft(_spec);\n setInitialized(true);\n }, [spec]);\n\n useEffect(() => {\n if (initialized && onSpecChanged) onSpecChanged(specDraft);\n }, [specDraft]);\n\n const dialog = useDialog();\n\n // save spec\n const saveSpec = async () => {\n try {\n const confirmed = await dialog.confirm(`Do you want to save your changes to ${spec.id || spec.name}?`);\n if (!confirmed) return;\n\n setIsLoading(true);\n\n if (onBeforeSpecSave) onBeforeSpecSave(specDraft);\n\n const specExists = existingSpecList.some(a => a.id === spec.id);\n const idChanged = spec.id !== specDraft.id;\n\n const message = await (async (): Promise => {\n let message: string = '';\n\n // spec does not exist yet\n if (!specExists) {\n ({ message } = await specDraft.save());\n }\n\n // spec exists but id didn't changed\n else if (specExists && !idChanged) {\n ({ message } = await specDraft.update());\n }\n\n // spec exists but id changed\n else if (specExists && idChanged) {\n ({ message } = await specDraft.save());\n await Spec.delete(spec.id);\n }\n\n // add spec to assignment id\n if (assignmentID) {\n ({ message } = await CourseWork.addSpec(assignmentID, specDraft.id));\n }\n\n return message;\n })();\n\n showMessage(message, 'success');\n if (onSpecSaved) onSpecSaved(new Spec(specDraft));\n } catch (e) {\n showMessage(utils.getRequestErrorMessage(e), 'error');\n } finally {\n setIsLoading(false);\n }\n };\n\n // delete spec\n const deleteSpec = async () => {\n try {\n const confirmed = await dialog.confirm((() => {\n if (assignmentID) return `Do you want to remove ${spec.id || spec.name} from assignment ${assignmentID}?`;\n return `Do you want to delete ${spec.id || spec.name}?`;\n })());\n if (!confirmed) return;\n\n setIsLoading(true);\n\n const message = await ((async (): Promise => {\n if (assignmentID) {\n const { message } = await CourseWork.removeSpec(assignmentID, spec.id);\n return message;\n }\n\n const { message } = await Spec.delete(spec.id);\n return message;\n })());\n\n if (onDeleteSpec) onDeleteSpec();\n showMessage(message, 'success');\n if (!assignmentID) setTimeout(() => history.goBack());\n } catch (e) {\n showMessage(utils.getRequestErrorMessage(e), 'error');\n } finally {\n setIsLoading(false);\n }\n };\n\n // set file mode\n const setFileMode = (value: boolean) => {\n const _spec = new Spec(specDraft);\n if (value) {\n dialog.confirm('File submission mode will remove all the test cases. Do you want to continue?').then(confirmed => {\n if (!confirmed) return;\n _spec.data = [];\n setSpecDraft(_spec);\n });\n }\n else {\n _spec.addItem();\n setSpecDraft(_spec);\n }\n };\n\n return (\n <>\n \n \n \n \n \n {editTitle ? (\n {\n setSpecDraft((state) => {\n const _spec = new Spec(state);\n _spec.id = e.target.value;\n return _spec;\n });\n }}\n className={classes.titleField}\n autoFocus\n />\n ) : ({specDraft.id})}\n \n\n setEditTitle(!editTitle)}>\n \n \n \n\n \n {!!onMoveUp && (\n \n \n \n )}\n\n {!!onMoveDown && (\n \n \n \n )}\n\n {!hideFileSwitch && (\n setFileMode(!!specDraft.data.length)}\n />\n }\n />\n )}\n\n {!hideSaveButton && (\n \n \n \n )}\n\n {!hideDeleteButton && (\n \n \n \n )}\n \n \n \n\n \n setActiveTab(value)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n centered>\n \n \n \n \n \n \n \n\n \n {[\n ,\n ,\n ,\n \n ][activeTab]}\n \n \n\n \n \n \n\n { renderSnackbar() }\n \n );\n};\n\nexport default SpecPaper;","import React, { useEffect, useState } from 'react';\nimport { RouteComponentProps, Prompt, Link, useLocation } from 'react-router-dom';\nimport {Button, CircularProgress, Backdrop, Typography, Breadcrumbs} from '@material-ui/core';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport { withRouter } from 'react-router';\n\nimport AdminLayout from '../../../../layouts/AdminLayout';\nimport { SpecPaper } from '../../../../components/Paper';\nimport Spec from '../../../../models/Spec';\nimport CourseWork from '../../../../models/CourseWork';\nimport utils from '../../../../libs/utils';\nimport { useDialog } from '../../../../context/Dialog';\nimport useSnackbar from '../../../../hooks/useSnackbar';\nimport Course from '../../../../models/Course';\nimport { ClassroomResourceLink } from '../../../../components/Links';\nimport { TitleHeader } from '../../../../components/Headers';\n\ninterface Props extends RouteComponentProps<{ assignment_id: string; course_id: string }> {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n root: {\n '& > *': {\n margin: theme.spacing(1),\n },\n },\n input: {\n display: 'none',\n },\n })\n);\n\nconst AssignmentSpecs = (props: Props) => {\n const {\n assignment_id: courseWorkId,\n course_id: courseId\n } = props.match.params;\n\n const {state} = useLocation();\n\n const [specList, setSpecList] = useState([]);\n const [existingSpecList, setExistingSpecList] = useState([]);\n const [specChangeList, setSpecChangeList] = useState<{original: Spec, update: Spec}[]>([]);\n const [isLoading, setLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [isSaveAllChanges, setIsSaveAllChanges] = useState(false);\n const [courseWork, setCourseWork] = useState(null);\n const [course, setCourse] = useState(null);\n const [courseWorkName, setCourseWorkName] = useState(\n (state as any).courseWork.name\n );\n\n\n const classes = useStyles();\n const { confirm } = useDialog();\n const { renderSnackbar, showMessage } = useSnackbar();\n\n const addBlankSpec = () => {\n const newSpec = new Spec();\n const newSpecIndex = specList.length + 1;\n newSpec.assignmentOrderIndex = newSpecIndex - 1;\n newSpec.id = `UNTITLED-QUESTION-${newSpecIndex}`;\n newSpec.addItem();\n setSpecList([...specList, newSpec]);\n };\n\n const handleDeleteSpec = (index: number) => {\n setSpecChangeList(specChangeList.filter(a => a.original !== specList[index]));\n specList.splice(index, 1);\n setSpecList([...specList]);\n };\n\n const handleSpecChange = (origSpec: Spec, updatedSpec: Spec) => {\n const _origSpec = new Spec({...JSON.parse(JSON.stringify(origSpec)), assignmentID: undefined});\n const _updatedSpec = new Spec({...JSON.parse(JSON.stringify(updatedSpec)), assignmentID: undefined});\n const newSpecChangeList = specChangeList.filter(a => a.original !== origSpec);\n const exists = existingSpecList.some(a => a === origSpec);\n if (!exists || (JSON.stringify(_origSpec) !== JSON.stringify(_updatedSpec))) {\n newSpecChangeList.push({\n original: origSpec,\n update: updatedSpec\n });\n }\n setSpecChangeList(newSpecChangeList);\n };\n\n const handleSpecSaved = (origSpec: Spec, savedSpec: Spec) => {\n setExistingSpecList(existingSpecList.map(spec => {\n if (spec === origSpec) return savedSpec;\n return spec;\n }));\n\n setSpecChangeList(specChangeList.filter(change => {\n return change.original !== origSpec;\n }));\n\n setSpecList(specList.map(spec => {\n if (spec === origSpec) return savedSpec;\n return spec;\n }));\n };\n\n const saveAllSpecChanges = async () => {\n if (await confirm('Do you want to save all the changes made?')) {\n try {\n setIsSaveAllChanges(true);\n await Promise.all(specChangeList.map(change => {\n return (async () => {\n const exists = existingSpecList.some(a => a === change.original);\n const currentSpec = change.update;\n\n if (exists) {\n if (change.original.id === currentSpec.id) {\n await currentSpec.update();\n return;\n }\n\n // delete original if it exists and save to register new id\n await Spec.delete(change.original.id);\n }\n\n await currentSpec.save();\n if (courseWork) {\n await courseWork.addSpec(currentSpec.id);\n }\n })();\n }));\n\n const newSpecList = specList.map((spec: Spec): Spec => {\n for (let change of specChangeList) {\n if (change.original === spec) {\n return change.update;\n }\n }\n return spec;\n });\n setSpecChangeList([]);\n setExistingSpecList(newSpecList);\n setSpecList(newSpecList);\n showMessage('Changes has been successfully saved.', 'success');\n }\n catch (e) {\n showMessage(utils.getRequestErrorMessage(e), 'error');\n }\n finally {\n setIsSaveAllChanges(false);\n }\n }\n };\n\n const setAssignmentSpecIndex = async (spec: Spec, targetIndex: number) => {\n try {\n const newSpecList = [...specList];\n const newSpecOrder: string[] = newSpecList.map(a => a.id);\n const currentIndex = newSpecOrder.indexOf(spec.id);\n\n if (currentIndex < 0)\n throw new Error('Spec is not in the spec list of assignment.');\n\n utils.swapArrayItems(newSpecOrder, targetIndex, currentIndex);\n utils.swapArrayItems(newSpecList, targetIndex, currentIndex);\n setSpecList(newSpecList);\n\n if (courseWork) await courseWork.setSpecs(newSpecOrder.filter(a => existingSpecList.some(b => b.id === a)));\n showMessage('Spec order has been saved.', 'success');\n }\n catch (e) {\n showMessage(`Error updating spec order: ${e.message}`, 'error');\n }\n };\n\n const renderSpecs = () => {\n return specList.map((spec, index) => (\n
\n handleDeleteSpec(index)}\n onSpecChanged={(updatedSpec) => handleSpecChange(spec, updatedSpec)}\n onSpecSaved={(savedSpec) => handleSpecSaved(spec, savedSpec)}\n onMoveUp={(index ? () => setAssignmentSpecIndex(spec, index - 1) : undefined)}\n onMoveDown={(index + 1) < specList.length ? () => setAssignmentSpecIndex(spec, index + 1) : undefined}\n />\n
\n ));\n };\n\n const loadData = async () => {\n try {\n setLoading(true);\n setErrorMessage('');\n setCourseWork(null);\n setSpecList([]);\n\n // const [_course, _courseWork] = await Promise.all([\n // Course.findById({courseId}),\n // CourseWork.findOne({\n // courseId: courseId,\n // id: courseWorkId\n // })\n // ]);\n const loadCourseWorkSpecs = async () => {\n const data = await Spec.find({\n assignmentID: courseWorkId\n }); console.log(data, 'data');\n // setCourseWorkSpecs(data);\n return data;\n };\n const specs = await loadCourseWorkSpecs();\n // const _specs = await _courseWork.getSpecs();\n // setCourse(_course);\n // setCourseWork(_courseWork);\n setExistingSpecList(specs);\n setSpecList(specs);\n // if (!_specs.length) addBlankSpec();\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n { renderSnackbar() }\n\n 'You have unsaved changes, do you want to leave this page?'}\n />\n\n
\n
\n \n Courses\n {course?.fullname || courseId}\n Assignments\n {courseWork?.name || courseWorkId}\n Specs\n \n }\n >\n \n {courseWorkName || courseWorkId} Specs \n {!!courseWork && }\n \n \n
\n\n {!!specChangeList.length && (\n \n Save All Changes\n \n )}\n
\n\n {(() => {\n if (isLoading)\n return (\n
\n \n

Loading Specs

\n
\n );\n\n if (errorMessage)\n return (\n
\n Something went wrong\n

{ errorMessage }

\n \n Try Again\n \n
\n );\n\n return (\n <>\n
{renderSpecs()}
\n\n
\n \n
\n \n );\n })()}\n\n \n \n \n
\n );\n};\n\nexport default withRouter(AssignmentSpecs);\n","import React, { useEffect, useState } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\n\nimport Spec from '../../../../models/Spec';\nimport { SpecPaper } from '../../../../components/Paper';\nimport AdminLayout from '../../../../layouts/AdminLayout';\n\ninterface Props extends RouteComponentProps<{ spec_name: string }> { }\n\nconst SpecView = (props: Props) => {\n const { spec_name } = props.match.params;\n const [spec, setSpec] = useState(new Spec());\n const [existingSpecList, setExistingSpecList] = useState([]);\n const [isLoadingSpec, setIsLoadingSpec] = useState(true);\n\n const retrieveSpec = async () => {\n try {\n setIsLoadingSpec(true);\n const specs = await Spec.fetchList();\n setExistingSpecList(specs);\n\n const data = (() => {\n for (let item of specs) {\n if (item.id === spec_name) {\n return item;\n }\n }\n return new Spec();\n })();\n data.assignmentOrderIndex = undefined;\n setSpec(data);\n } catch (error) {\n console.error(error);\n } finally {\n setIsLoadingSpec(false);\n }\n };\n\n const handleSpecDelete = () => {\n setSpec(new Spec());\n };\n\n const handleSpecSaved = (savedSpec: Spec) => {\n setExistingSpecList(existingSpecList.map(item => {\n if (item === spec) return savedSpec;\n return item;\n }));\n setSpec(savedSpec);\n };\n\n useEffect(() => {\n (async () => {\n await retrieveSpec();\n })();\n }, []);\n\n return (\n \n
\n \n
\n
\n );\n};\n\nexport default SpecView;\n","import React, { useState, useEffect } from 'react';\nimport { Link , withRouter, RouteComponentProps } from 'react-router-dom';\nimport MaterialTable, { MaterialTableProps } from 'material-table';\nimport {\n Button,\n Grid,\n CircularProgress,\n Typography,\n Paper,\n List,\n ListItem,\n ListItemText,\n Breadcrumbs\n} from '@material-ui/core';\nimport { ArrowForward } from '@material-ui/icons';\nimport { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd';\n\nimport AdminLayout from '../../../../../../../layouts/AdminLayout';\nimport Spec from '../../../../../../../models/Spec';\nimport CourseWork from '../../../../../../../models/CourseWork';\nimport useSnackbar from '../../../../../../../hooks/useSnackbar';\nimport { useDialog } from '../../../../../../../context/Dialog';\nimport Course from '../../../../../../../models/Course';\nimport { ClassroomResourceLink } from '../../../../../../../components/Links';\nimport { TitleHeader } from '../../../../../../../components/Headers';\nimport utils from '../../../../../../../libs/utils';\n\nconst Specs = (\n props: RouteComponentProps<{\n course_id: string;\n assignment_id: string;\n }>\n) => {\n const {\n assignment_id: courseWorkId,\n course_id: courseId\n } = props.match.params;\n const [specs, setSpecs] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [course, setCourse] = useState(null);\n const [courseWork, setCourseWork] = useState(null);\n const [courseWorkSpecs, setCourseWorkSpecs] = useState([]);\n const [specIdsOnProcess, setSpecIdsOnProcess] = useState([]);\n\n const dialog = useDialog();\n\n const {renderSnackbar, showMessage} = useSnackbar();\n\n const unAssignedSpecTableOptions: MaterialTableProps = {\n title: (Unassigned),\n data: specs.filter(spec => courseWorkSpecs.map(spec => spec.id).indexOf(spec.id) < 0),\n isLoading,\n columns: [\n {\n title: 'Name',\n field: 'name',\n cellStyle: {\n width: '75%'\n }\n },\n {\n title: '',\n sorting: false,\n headerStyle: { textAlign: 'center' },\n cellStyle: { textAlign: 'center' },\n render: (spec) => (\n
\n = 0}\n endIcon={specIdsOnProcess.indexOf(spec.id) >= 0 ? () : ()}\n onClick={() => assignSpec(spec)}>\n Assign\n \n
\n ),\n },\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Spec/s Found.',\n }\n },\n options: {\n headerStyle: {\n fontWeight: 'bold',\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n sorting: true,\n draggable: false,\n showEmptyDataSourceMessage: !isLoading,\n thirdSortClick: false\n },\n style: {\n height: '100%'\n }\n };\n\n const handleDragEnd = (result: DropResult) => {\n if (result.destination !== undefined && result.destination !== null) {\n const newCourseWorkSpecs: Spec[] = [...courseWorkSpecs];\n const [removed] = newCourseWorkSpecs.splice(result.source.index, 1);\n newCourseWorkSpecs.splice(result.destination.index, 0, removed);\n\n (async () => await setSpecOrder(newCourseWorkSpecs.map((spec, index) => {\n spec.assignmentOrderIndex = index;\n return spec;\n })))();\n }\n };\n\n const assignSpec = async (spec: Spec) => {\n try {\n if (true || courseWork) {\n setSpecIdsOnProcess([...specIdsOnProcess, spec.id]);\n await CourseWork.addSpec(courseWorkId, spec.id);\n await loadCourseWorkSpecs();\n showMessage(`${spec.name} Assigned!`, 'success');\n }\n }\n catch (e) {\n showMessage(`Assign Error: ${e.message}`, 'error');\n }\n finally {\n setSpecIdsOnProcess(specIdsOnProcess.filter(a => a !== spec.id));\n }\n };\n\n const unAssignSpec = async (spec: Spec) => {\n try {\n const confirm = await dialog.confirm(`Are you sure to remove ${spec.name} from assigned specs?`,{\n cancelText: 'No',\n confirmText: 'Yes'\n });\n if (!confirm)\n return;\n\n setSpecIdsOnProcess([...specIdsOnProcess, spec.id]);\n await CourseWork.removeSpec(courseWorkId,spec.id);\n await loadCourseWorkSpecs();\n showMessage(`${spec.name} Removed.`, 'success');\n }\n catch (e) {\n showMessage(`Remove Error: ${e.message}`, 'error');\n }\n finally {\n setSpecIdsOnProcess(specIdsOnProcess.filter(a => a !== spec.id));\n }\n };\n\n const setSpecOrder = async (newAssignedSpecs: Spec[]) => {\n try {\n if (!courseWork) return;\n\n setCourseWorkSpecs(newAssignedSpecs);\n await courseWork.setSpecs(newAssignedSpecs.map(spec => spec.id));\n showMessage('Spec order has been saved.', 'success');\n }\n catch (e) {\n showMessage(`Error updating spec order: ${e.message}`, 'error');\n }\n };\n\n const loadSpecs = async () => {\n const result = await Spec.fetchList();\n result.sort((a: Spec, b: Spec) => {\n if (a.name > b.name)\n return 1;\n if (a.name < b.name)\n return -1;\n return 0;\n });\n setSpecs(result);\n };\n\n const loadCourseWorkSpecs = async () => {\n const data = await Spec.find({\n assignmentID: courseWorkId\n });\n setCourseWorkSpecs(data);\n };\n\n // const loadCourseWork = async () => {\n // setCourseWork(null);\n // setCourseWork(await CourseWork.findOne({\n // id: courseWorkId,\n // courseId: courseId\n // }));\n // };\n\n const loadCourse = async () => {\n const data = await Course.findById({\n courseId\n }); console.log(data, 'data');\n setCourse(await Course.findById({\n courseId\n }));\n \n };\n\n const loadAllData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await Promise.all([\n loadSpecs(),\n loadCourse(),\n // loadCourseWork(),\n loadCourseWorkSpecs()\n ]);\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n (async () => await loadAllData())();\n }, []);\n\n return (\n \n\n { renderSnackbar() }\n\n
\n
\n \n Courses\n {course?.fullname || courseId}\n Assignments\n {courseWork?.name || courseWorkId}\n Assign Specs\n \n }\n >\n \n { courseWork?.title || courseWorkId } Specs \n {!!courseWork && ()}\n \n \n
\n\n {(() => {\n\n if (errorMessage)\n return (\n
\n Something went wrong.\n

{ errorMessage }

\n loadAllData()}>\n Try Again\n \n
\n );\n\n return (\n \n \n \n \n \n \n
\n
\n
\n Assigned\n
\n
\n\n {(() => {\n if (!courseWorkSpecs.length)\n return (\n
\n

No assigned spec/s.

\n
\n );\n\n return (\n \n \n {(provided, snapshot) => (\n \n \n {courseWorkSpecs.map((item, index) => (\n \n {(provided, snapshot) => (\n \n\n \n \n {item.name}\n \n \n\n = 0}\n endIcon={specIdsOnProcess.indexOf(item.id) >= 0 ? () : undefined}\n onClick={() => unAssignSpec(item)}>\n Remove\n \n \n )}\n \n ))}\n \n {provided.placeholder}\n
\n )}\n \n \n );\n })()}\n
\n

Drag to reorder assigned items.

\n \n \n \n );\n })()}\n
\n \n );\n};\n\nexport default withRouter(Specs);\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\ninterface Props {\n children: React.ReactElement[] | React.ReactElement | string\n show: boolean\n}\n\nconst useStyles = makeStyles(() => ({\n container: {\n '& span, p, h1, h2, h3, h4, h5, h6, td, a, label, input': {\n color: 'transparent !important' as any,\n backgroundColor: '#CCCCCC',\n background: 'linear-gradient(90deg, rgba(236,236,236,1) 20%, rgba(161,161,161,1) 50%, rgba(236,236,236,1) 80%)',\n backgroundAttachment: 'fixed',\n\n '-webkit-text-fill-color': 'transparent',\n '-webkit-background-clip': 'content-box',\n 'animation-name': 'moving-gradient',\n 'animation-duration': '2s',\n 'animation-iteration-count': 'infinite',\n 'animation-fill-mode': 'forwards',\n 'animation-timing-function': 'linear'\n }\n }\n}));\n\nconst LoaderBox = (props: Props) => {\n const { children, show } = props;\n const classes = useStyles();\n\n return
{children}
;\n};\n\nexport default LoaderBox;\n","const SkeletonData = {\n Reports: {\n columns: [\n '0-Attendance - September 23, 2021',\n '1-September 15, 2021',\n '2-HTML - Exercise',\n '3-HTML - Lab',\n '4-CSS 1 - Exercise',\n '5-CSS 1 - Lab',\n '6-CSS 2 - Exercise',\n '7-CSS 2 - Lab',\n '8-Intro to Programming - Exercise',\n '9-Intro to Programming - Lab',\n '10-Expressions and Statements - Lab',\n '11-Expressions and Statements - Exercise',\n '12-Expressions and Statements - Extra credit',\n '13-Conditional Statements - Extra credit',\n '14-Conditional Statements - Lab',\n '15-Conditional Statements - Exercise',\n '16-Conditional Statements Advanced - Lab',\n '17-Conditional Statements Advanced - Exercise',\n '18-For Loops - Extra credit',\n '19-For Loops - Lab',\n '20-For Loops - Exercise',\n '21-While Loops - Extra credit',\n '22-While Loops - Lab',\n '23-While Loops - Exercise',\n '24-Nested Loops - Extra credit',\n '25-Nested Loops - Exercise',\n '26-Nested Loops - Lab',\n '27-Exam Preparation Questions',\n '28-Exam',\n '29-MI6 React.js Project'\n ],\n rows: {\n 'Quality Assurance': [\n '0-0',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-92',\n '9-52',\n '10-50',\n '11-0',\n '12-0',\n '13-0',\n '14-100',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-50',\n '29-75.91'\n ],\n 'Kim Benedict': [\n '0-1',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-0',\n '9-100',\n '10-100',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-17',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-90'\n ],\n 'Neimark Junsay Braga': [\n '0-1',\n '1-0',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-50',\n '9-100',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-0'\n ],\n 'Rave Arevalo': [\n '0-1',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-25',\n '9-100',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-80',\n '29-0'\n ],\n 'Jechris Soldevilla': [\n '0-0',\n '1-0',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-0',\n '9-0',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-0',\n '29-0'\n ],\n 'Quality Assurance1': [\n '0-0',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-92',\n '9-52',\n '10-50',\n '11-0',\n '12-0',\n '13-0',\n '14-100',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-50',\n '29-75.91'\n ],\n 'Kim Benedict2': [\n '0-1',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-0',\n '9-100',\n '10-100',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-17',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-90'\n ],\n 'Neimark Junsay Braga3': [\n '0-1',\n '1-0',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-50',\n '9-100',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-0'\n ],\n 'Rave Arevalo4': [\n '0-1',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-25',\n '9-100',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-80',\n '29-0'\n ],\n 'Jechris Soldevilla5': [\n '0-0',\n '1-0',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-0',\n '9-0',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-0',\n '29-0'\n ],\n 'Quality Assurance2': [\n '0-0',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-92',\n '9-52',\n '10-50',\n '11-0',\n '12-0',\n '13-0',\n '14-100',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-50',\n '29-75.91'\n ],\n 'Kim Benedict3': [\n '0-1',\n '1-1',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-0',\n '9-100',\n '10-100',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-17',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-90'\n ],\n 'Neimark Junsay Braga2': [\n '0-1',\n '1-0',\n '2-0',\n '3-0',\n '4-0',\n '5-0',\n '6-0',\n '7-0',\n '8-50',\n '9-100',\n '10-0',\n '11-0',\n '12-0',\n '13-0',\n '14-0',\n '15-0',\n '16-0',\n '17-0',\n '18-0',\n '19-0',\n '20-0',\n '21-0',\n '22-0',\n '23-0',\n '24-0',\n '25-0',\n '26-0',\n '27-0',\n '28-10',\n '29-0'\n ],\n },\n }\n};\n\nexport default SkeletonData;","import Axios from 'axios';\n\nimport APITools from './APITools';\n\nexport interface grade {\n userId: string\n name: string\n grade: any\n updateTime: string\n state: string\n}\n\nexport interface grades {\n [title: string]: grade[]\n}\n\nclass Report {\n grades: grades;\n\n constructor(props = {} as Report) {\n this.grades = props.grades;\n }\n\n static async getAll(params: {\n courseID: string;\n }): Promise {\n const queryString = APITools.parseQueryParams(params);\n const { data } = await Axios.get(`/classroom/courses/course-work/student-submission/grades${queryString}`);\n return data;\n }\n}\n\nexport default Report;\n","import React, { useEffect, useState } from 'react';\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\nimport {\n Button,\n TableBody,\n TableRow,\n TableCell,\n TableContainer,\n Table,\n TableHead,\n Paper,\n MenuItem,\n FormControl,\n InputLabel,\n Select,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { saveAs } from 'file-saver';\n\nimport { LoaderBox, SkeletonData } from '../../../components/Loader';\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport Report, {grade} from '../../../models/Report';\n\n\nconst useStyles = makeStyles((theme) => ({\n nameColumn: {\n minWidth: '200px',\n left: 0,\n zIndex: '99 !important' as any,\n },\n headers: {\n fontWeight: 'bold',\n },\n container: {\n marginTop: 20,\n height: '78vh',\n width: 'auto',\n overflow: 'hidden !important' as any,\n position: 'relative',\n backgroundColor: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n stickyColumn: {\n position: 'sticky',\n background: '#fafafa',\n left: 0,\n zIndex: 1,\n },\n formControl: {\n margin: theme.spacing(1),\n marginTop: 10,\n minWidth: 120,\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n display: 'flex',\n flexDirection: 'column',\n },\n}));\n\nconst AdminReports = (props: RouteComponentProps<{ course_id: string, course_name: string }>) => {\n const classes = useStyles();\n const { course_id: courseID, course_name } = props.match.params;\n const [columns, setColumns] = useState(SkeletonData.Reports.columns as string[]);\n const [rows, setRows] = useState(SkeletonData.Reports.rows as any);\n const [sort, setSort] = useState('' as string);\n const [loading, setLoading] = useState(true as boolean);\n const [response, setResponse] = useState('' as string);\n\n\n const getReport = async () => {\n let data = {} as any;\n const c = [] as string[];\n const r = {} as any;\n\n try {\n data = await Report.getAll({courseID});\n } catch(e) {\n setResponse('error');\n return;\n }\n\n for(let i = 0; i < Object.keys(data).length; i++) {\n let keys = Object.keys(data);\n let key = keys[i];\n let grades = data[key];\n c.push(key);\n\n grades.forEach((grade: grade) => {\n let g = r[`${grade.name}-${grade.userId}`] as any[] || [] as any[];\n const today = new Date();\n const updatedTime = new Date(grade.updateTime);\n const startWeekDate = new Date();\n const endWeekDate = new Date();\n startWeekDate.setDate(today.getDate() - today.getDay());\n endWeekDate.setDate(startWeekDate.getDate() + 7);\n\n if(updatedTime >= startWeekDate && updatedTime <= endWeekDate && (grade.state === 'TURNED_IN' || grade.state === 'RETURNED')) {\n grade.grade = grade.grade + ' ✅';\n }\n\n g.push(`${key.split('-')[0]}-${grade.grade}`);\n\n if(g.length === keys.length) {\n g.sort((a, b) => Number(a.split('-')[0]) - Number(b.split('-')[0]));\n }\n r[`${grade.name}-${grade.userId}`] = g;\n });\n }\n\n c.sort((a: string, b: string) => Number(a.split('-')[0]) - Number(b.split('-')[0]));\n\n setColumns(c);\n setRows(r);\n \n setLoading(false);\n\n if(c.length === 0 || Object.keys(r).length === 0) {\n setResponse('empty');\n }\n };\n\n const handleSortChange = (event: any) => {\n const sort = event.target.value;\n const r = Object.keys(rows);\n r.sort((_a: string, _b: string) => {\n let a = _a.split(' ');\n let b = _b.split(' ');\n if(sort === 'lastname') {\n return a[a.length - 1].localeCompare(b[b.length - 1]);\n }\n return a[0].localeCompare(b[0]);\n });\n\n var objSorted = {} as any;\n r.forEach((key: string) => {\n objSorted[key]=rows[key];\n });\n\n setRows(objSorted);\n setSort(event.target.value);\n };\n\n const exportCSV = () => {\n const keys = Object.keys(rows);\n const r = keys.map(k => [k.split('-')[0], ...rows[k].map((r: string) => r.split('-')[1])].join(','));\n const data = [['Students', ...columns.map(c => c.substr(c.indexOf('-')+ 1, c.length).replaceAll(',', ''))].join(','), ...r].join('\\n');\n var blob = new Blob([data], {type: 'text/plain;charset=utf-8'});\n saveAs(blob, `${new Date().toLocaleDateString().replaceAll('/', '-')}-${course_name.replace(/[^A-Za-z0-9]/g, '-').replaceAll('--', '-')}-Grade-Report.csv`);\n };\n\n useEffect(() => {\n getReport();\n }, []);\n\n return (\n \n \n {response === 'error'?\n

Something went wrong.

\n :response === 'empty'?\n

No data available.

\n :\n \n \n \n \n \n \n
\n \n Sort by\n \n Lastname\n Firstname\n \n \n
\n {\n columns.map((title: string, i) => {\n title = title.substr(title.indexOf('-')+1, title.length);\n return {title};\n })\n }\n
\n
\n \n {\n Object.keys(rows).map((key: string, i) => {\n return (\n \n \n {key.split('-')[0]}\n \n {rows[key].map((grade: any, j: any) => \n \n {grade.split('-')[1]}\n \n )}\n \n );\n })\n }\n \n
\n
\n
\n }\n
\n
\n );\n};\n\nexport default withRouter(AdminReports);\n","import React, { useState, useEffect, useRef } from 'react';\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\nimport MaterialTable, {\n MaterialTableProps,\n MTableHeader,\n MTableBody,\n MTableToolbar,\n} from 'material-table';\nimport {\n Button,\n Grid,\n TableBody,\n TableRow,\n TableCell,\n MuiThemeProvider,\n createMuiTheme,\n Card,\n CardContent,\n Typography,\n} from '@material-ui/core';\nimport moment from 'moment';\n\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport Spec from '../../../models/Spec';\nimport utils from '../../../libs/utils';\n\nconst theme = createMuiTheme({\n palette: {\n secondary: {\n light: '#ffffff',\n main: '#000000',\n },\n },\n});\n\nconst Specs = (props: RouteComponentProps) => {\n const { history } = props;\n const [specs, setSpecs] = useState([] as Spec[]);\n const [isLoading, setIsLoading] = useState(false as boolean);\n const [errorMessage, setErrorMessage] = useState('' as string);\n\n const tableRef = useRef(null as any);\n\n const renderHeader = (props: any) => {\n props.columns[0].tableData.width = 'auto';\n\n return (\n \n \n \n );\n };\n const renderToolbar = (props: any) => {\n return (\n
\n \n \n \n \n \n {\n history.push('/admin/specs/create');\n }}\n >\n Create New Spec\n \n \n \n
\n );\n };\n const renderBody = (props: any) => {\n return (\n \n {!!errorMessage ? (\n \n \n \n
\n

Error Loading Specs

\n

{errorMessage}

\n loadSpecs()}\n color=\"primary\"\n className=\"mt-3\"\n variant=\"contained\"\n >\n Try Again\n \n
\n
\n
\n
\n ) : (\n \n )}\n
\n );\n };\n const loadSpecs = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n const result = await Spec.fetchList();\n setSpecs(result);\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n const tableProps: MaterialTableProps = {\n title: 'Specs',\n data: specs,\n isLoading,\n columns: [\n {\n title: 'Name',\n field: 'name',\n },\n {\n title: 'Created',\n field: 'createdAt',\n render: (data) => moment(data.createdAt).format('MMMM DD, YYYY')\n }\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Spec/s Found.',\n },\n },\n options: {\n headerStyle: {\n fontWeight: 'bold',\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n sorting: true,\n draggable: false,\n showEmptyDataSourceMessage: !isLoading,\n },\n components: {\n Header: renderHeader,\n Toolbar: renderToolbar,\n Body: renderBody,\n },\n onRowClick: (event, rowData) => {\n props.history.push(`/admin/specs/${rowData?.id}`);\n }\n };\n\n useEffect(() => {\n loadSpecs();\n }, []);\n return (\n \n
\n
\n \n \n \n Specifications Repository\n \n \n A central hub for exam checker specifications.\n \n \n \n
\n\n \n
\n
\n );\n};\n\nexport default withRouter(Specs);\n","import axios from 'axios';\n\nimport { BasicUserInfo } from '../interfaces/BasicUserInfo';\nimport { PagingResult } from '../interfaces/pagination';\n\nexport interface SpecCommentStatusType {\n id: number\n specId: string\n authorId: string\n author?: BasicUserInfo\n specName: string\n content: string\n total: number\n unseenTotal: number\n createdAt: string\n}\n\nclass SpecCommentStatus implements SpecCommentStatusType {\n id: number\n specId: string\n authorId: string\n author?: BasicUserInfo\n specName: string\n content: string\n total: number\n unseenTotal: number\n createdAt: string\n\n constructor(status: SpecCommentStatusType) {\n this.id = status.id;\n this.specId = status.specId;\n this.authorId = status.authorId;\n this.author = status.author;\n this.specName = status.specName;\n this.content = status.content;\n this.total = status.total;\n this.unseenTotal = status.unseenTotal;\n this.createdAt = status.createdAt;\n }\n\n // returns spec comment list\n static async find(query?: { specId?: string, [key: string]: any }): Promise> {\n const { data } = await axios.get>('/spec/comment-status/list', {\n params: query\n });\n return { ...data, items: data.items.map(s => new SpecCommentStatus(s)) };\n }\n}\n\nexport default SpecCommentStatus;\n","import React, { useState } from 'react';\nimport {\n Box,\n Tab,\n Tabs,\n Badge,\n Button,\n AppBar,\n Grid,\n Tooltip,\n Typography,\n IconButton,\n CircularProgress,\n Table,\n TableBody,\n TableRow,\n TableCell\n} from '@material-ui/core';\nimport moment from 'moment';\nimport MaterialTable, { Query, QueryResult } from 'material-table';\nimport { Link } from 'react-router-dom';\nimport removeMarkdown from 'remove-markdown';\nimport { Close, OpenInNew, Check } from '@material-ui/icons';\n\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport SpecComment from '../../../models/SpecComment';\nimport SpecCommentStatus from '../../../models/SpecCommentStatus';\nimport SpecCommentReport from '../../../models/SpecCommentReport';\nimport SpecFeedback from '../../../models/SpecFeedback';\nimport { CommentItem } from '../../../components/Spec/SpecComments';\nimport { GenericModal } from '../../../components/Modal';\nimport { useDialog } from '../../../context/Dialog';\nimport useSpecComments from '../../../hooks/useSpecComments';\nimport useLoadingStatus from '../../../hooks/useLoadingStatus';\nimport utils from '../../../libs/utils';\n\nconst SpecComments = () => {\n const [activeTab, setActiveTab] = useState('comments');\n const [activeReport, setActiveReport] = useState(null);\n const [activeFeedback, setActiveFeedback] = useState(null);\n const { isLoading: isResolving, executeWithStatus: resolveWithStatus } = useLoadingStatus();\n const { isLoading: isDeleting, executeWithStatus: deleteWithStatus } = useLoadingStatus();\n const { isLoading: isResolvingFeedback, executeWithStatus: resolveFeedbackWithStatus } = useLoadingStatus();\n const { alert, confirm } = useDialog();\n\n const {\n open: openSpecCommentsModal,\n renderModal: renderSpecCommentsModal,\n } = useSpecComments();\n\n const loadComments = async (query: Query): Promise> => {\n const { items, paging } = await SpecCommentStatus.find({\n $page: query.page + 1,\n $limit: query.pageSize\n });\n return {\n data: items,\n page: paging.currentPage - 1,\n totalCount: paging.totalCount\n };\n };\n\n const loadCommentReports = async (query: Query): Promise> => {\n const { items, paging } = await SpecCommentReport.find({\n $page: query.page + 1,\n $limit: query.pageSize\n });\n\n return {\n data: items,\n page: paging.currentPage - 1,\n totalCount: paging.totalCount\n };\n };\n\n const loadFeedbacks = async (query: Query): Promise> => {\n const { items, paging } = await SpecFeedback.find({\n $page: query.page + 1,\n $limit: query.pageSize,\n $orderBy: query.orderBy?.field,\n $orderDirection: query.orderBy?.field ? query.orderDirection || 'asc' : undefined\n });\n\n return {\n data: items,\n page: paging.currentPage - 1,\n totalCount: paging.totalCount\n };\n };\n\n const deleteComment = async (comment: SpecComment) => {\n await deleteWithStatus(async () => {\n const confirmed = await confirm('Are you sure to resolve the report by deleting the comment?', {\n title: 'Delete Confirmation'\n });\n if (!confirmed) return;\n await comment.destroy();\n await activeReport?.resolve();\n setActiveReport(null);\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Delete Comment Error'\n }));\n };\n\n const resolveReport = async (report: SpecCommentReport) => {\n await resolveWithStatus(async () => {\n const confirmed = await confirm('Are you sure to resolve the report?', {\n title: 'Resolve Confirmation'\n });\n if (!confirmed) return;\n await report.resolve();\n setActiveReport(null);\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Resolve Report Error'\n }));\n };\n\n const resolveFeedback = async (feedback: SpecFeedback) => {\n await resolveFeedbackWithStatus(async () => {\n const confirmed = await confirm('Are you sure to resolve the feedback?', {\n title: 'Resolve Confirmation'\n });\n if (!confirmed) return;\n await feedback.setStatus('resolved');\n setActiveFeedback(null);\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Resolve Feedback Error'\n }));\n };\n\n return (\n <>\n {renderSpecCommentsModal({\n onCommentRead: () => {\n setActiveTab('');\n setTimeout(() => setActiveTab(activeTab));\n }\n })}\n\n setActiveReport(null)}\n header={\n \n \n \n Reported Note\n \n \n setActiveReport(null)}>\n \n \n \n \n \n }\n footer={\n \n \n {!!activeReport && (\n \n \n resolveReport(activeReport)}\n startIcon={isResolving && }\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n disabled={isResolving}\n >\n Resolve Report\n \n \n \n )}\n\n {!!activeReport?.comment && (\n \n \n activeReport?.comment ? deleteComment(activeReport.comment) : undefined}\n startIcon={isDeleting && }\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n disabled={isDeleting}\n >\n Delete Note\n \n \n \n )}\n\n {!!activeReport?.comment?.specId && (\n \n \n openSpecCommentsModal({specId: activeReport?.comment?.specId || ''})}\n variant=\"contained\"\n size=\"small\"\n color=\"primary\">\n Open Thread\n \n \n \n )}\n \n \n }\n >\n {!!activeReport?.comment && (\n <>\n \n \n {activeReport.description}\n \n \n )}\n \n\n setActiveFeedback(null)}\n header={\n \n \n \n Spec Feedback\n \n \n setActiveFeedback(null)}>\n \n \n \n \n \n }\n footer={\n \n {!!activeFeedback && (\n \n \n {(() => {\n if (activeFeedback?.status === 'resolved')\n return (\n \n );\n\n return (\n \n }\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n disabled={isResolvingFeedback}\n onClick={() => resolveFeedback(activeFeedback)}\n >\n Resolve Feedback\n \n \n );\n })()}\n \n \n )}\n \n }\n >\n \n \n \n \n Spec\n \n \n \n {activeFeedback?.specId} \n \n \n \n \n \n Reported By\n \n \n \n {activeFeedback?.author?.fullName}\n \n \n \n {!!activeFeedback?.createdAt && (\n \n \n Reported At\n \n \n \n {moment(activeFeedback?.createdAt).format('MMM DD, YYYY hh:mm a')}\n \n \n \n )}\n \n \n Description\n \n \n {activeFeedback?.description}\n \n \n \n
\n \n\n \n \n setActiveTab(tab)} indicatorColor=\"primary\">\n \n \n \n \n \n\n \n {(() => {\n if (activeTab === 'comments')\n return (\n ({s.specId})\n },\n {\n title: 'Latest Author',\n field: 'author.fullName'\n },\n {\n title: 'Latest Update',\n field: 'createdAt',\n render: s => moment(s.createdAt).fromNow()\n },\n {\n title: 'Latest Note',\n field: 'content',\n render: (s) => (\n \n {removeMarkdown(s.content, {\n gfm: true\n })}\n
\n )\n },\n {\n width: '0',\n render: (s) => (\n \n openSpecCommentsModal({specId: s.specId})}>\n Open Thread\n \n \n )\n }\n ]}\n localization={{\n body: {\n emptyDataSourceMessage: 'No spec notes yet.'\n }\n }}\n options={{\n headerStyle: {\n fontWeight: 'bold',\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: false,\n sorting: false,\n draggable: false\n }}\n />\n );\n\n if (activeTab === 'reports' && !isResolving && !isDeleting)\n return (\n ({r.comment?.specId})\n },\n {\n title: 'Reporter',\n field: 'reporter.fullName'\n },\n {\n title: 'Reported',\n field: 'createdAt',\n render: c => moment(c.createdAt).fromNow()\n },\n {\n title: 'Note',\n field: 'comment.content',\n render: (report) => (\n \n {removeMarkdown(report.comment?.content || '', {\n gfm: true\n })}\n
\n )\n },\n {\n title: 'Description',\n field: 'description',\n render: (report) => (\n \n {report.description}\n
\n )\n },\n {\n width: '0',\n render: (report) => (\n setActiveReport(report)}>\n Open Report\n \n )\n }\n ]}\n localization={{\n body: {\n emptyDataSourceMessage: 'No note reports yet.'\n }\n }}\n options={{\n headerStyle: {\n fontWeight: 'bold',\n },\n initialPage: 0,\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: false,\n sorting: false,\n draggable: false\n }}\n />\n );\n\n if (activeTab === 'feedbacks' && !isResolvingFeedback)\n return (\n ({f.specId})\n },\n {\n title: 'Author',\n field: 'author.fullName',\n sorting: false\n },\n {\n title: 'Reported',\n field: 'created_at',\n render: f => moment(f.createdAt).fromNow()\n },\n {\n title: 'Description',\n field: 'description',\n render: (feedback) => (\n \n {feedback.description}\n
\n )\n },\n {\n title: 'Status',\n field: 'status',\n lookup: { 'pending': 'Pending', 'resolved': 'Resolved' }\n },\n {\n width: '0',\n render: (feedback) => (\n setActiveFeedback(feedback)}\n >\n Open Feedback\n \n )\n }\n ]}\n localization={{\n body: {\n emptyDataSourceMessage: 'No feedbacks for now.'\n }\n }}\n options={{\n headerStyle: {\n fontWeight: 'bold',\n },\n initialPage: 0,\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: false,\n sorting: true,\n thirdSortClick: false,\n draggable: false\n }}\n />\n );\n\n })()}\n \n \n \n );\n};\n\nexport default SpecComments;\n","import React, { useEffect, useState } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { Typography, CircularProgress, Button } from '@material-ui/core';\n\nimport Spec from '../../../../models/Spec';\nimport { SpecPaper } from '../../../../components/Paper';\nimport AdminLayout from '../../../../layouts/AdminLayout';\nimport utils from '../../../../libs/utils';\n\nconst SpecView = (props: RouteComponentProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [existingSpecs, setExistingSpecs] = useState([]);\n const [spec, setSpec] = useState(\n new Spec({\n id: 'UNTITLED-QUESTION',\n data: [\n {\n arguments: [],\n mainInvoker: 'main()',\n output: '',\n },\n ],\n }),\n );\n\n const loadExistingSpecs = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setExistingSpecs(await Spec.fetchList());\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleOnBeforeSpecSave = (spec: Spec) => {\n for (let existingSpec of existingSpecs) {\n if (existingSpec.id === spec.id) {\n throw new Error(`\"${spec.id}\" already exists.`);\n }\n }\n };\n\n const handleOnSpecSaved = (spec: Spec) => {\n setSpec(spec);\n props.history.push('/admin/specs');\n };\n\n useEffect(() => {\n setTimeout(loadExistingSpecs);\n }, []);\n\n return (\n \n
\n Create New Spec\n\n {(() => {\n if (isLoading)\n return (\n
\n \n
\n );\n\n if (errorMessage)\n return (\n
\n Something went wrong\n {errorMessage}\n \n Try Again\n \n
\n );\n\n return (\n \n );\n })()}\n
\n
\n );\n};\n\nexport default SpecView;\n","import Axios from 'axios';\n\nclass Announcement {\n announcementID?: string;\n courseID: string;\n expiration: string;\n message: string;\n\n constructor(announcement: Announcement) {\n this.announcementID = announcement.announcementID;\n this.courseID = announcement.courseID;\n this.expiration = announcement.expiration;\n this.message = announcement.message;\n this.createAnnouncement = this.createAnnouncement.bind(this);\n }\n\n public static async getAnnouncments(): Promise {\n const { announcements = [] } = (await Axios.get('/admin/announcements')).data;\n return announcements;\n }\n\n public async createAnnouncement(): Promise{\n const res = await Axios.post('/admin/announcement', {\n courseID: this.courseID,\n expiration: this.expiration,\n message: this.message\n });\n return res;\n }\n\n public async updateAnnouncement(): Promise{\n const res = await Axios.put('/admin/announcement', {\n announcementID: Number(this.announcementID),\n courseID: this.courseID,\n expiration: this.expiration,\n message: this.message\n });\n return res;\n }\n\n public async deleteAnnouncement(): Promise{\n const res = await Axios.delete('/admin/announcement', {\n data: {announcementID: this.announcementID}\n });\n return res;\n }\n}\n\nexport default Announcement;\n","import React, { useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport Button from '@material-ui/core/Button';\nimport Modal from '@material-ui/core/Modal';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport Grid from '@material-ui/core/Grid';\nimport { IconButton, Menu, MenuItem } from '@material-ui/core';\nimport PopupState, { bindTrigger, bindMenu } from 'material-ui-popup-state';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\n\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport Announcement from '../../../models/Announcement';\nimport Course from '../../../models/Course';\nimport Utils from '../../../libs/utils';\n\ninterface AllCourses {\n id: string;\n name: string;\n}\n\nconst AnnouncementView = () => {\n const [openModal, setOpenModal] = useState(false);\n const [courses, setCourses] = useState([]);\n const [courseID, setCourseID] = useState('');\n const [message, setMessage] = useState('');\n const [announcementID, setAnnouncementID] = useState('');\n const [expiration, setExpiration] = useState('');\n const [announcements, setAnnouncements] = useState([]);\n const [editing, setEditing] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n\n const useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n spaceTop: {\n margin: '25px 0px 25px 25px',\n float: 'right',\n },\n bold: {\n fontWeight: 'bold',\n },\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n width: '600px',\n },\n root: {\n '& .MuiTextField-root': {\n margin: theme.spacing(1),\n width: '25ch',\n },\n },\n }));\n\n const classes = useStyles();\n\n useEffect(() => {\n getCourses();\n loadAnnouncements();\n }, []);\n\n const loadAnnouncements = async () => {\n let arr = await Announcement.getAnnouncments();\n setAnnouncements(arr);\n };\n\n const getCourses = async () => {\n const course = await Course.getCourses();\n setCourses([{id: '*', name: 'All'}, ...course]);\n };\n\n const toggleModal = () => {\n setCourseID('');\n setExpiration('');\n setMessage('');\n setAnnouncementID('');\n setOpenModal(!openModal);\n setSubmitted(false);\n if (editing) setEditing(false);\n };\n\n const isActive = (date: string) => {\n if (new Date().getTimezoneOffset() === -480) {\n return new Date(date) > Utils.offsetDateToUS(new Date().toString());\n }\n return new Date(date) > new Date(); // For US TA's\n };\n\n const edit = (announcement: Announcement, popupState: any) => {\n setEditing(true);\n toggleModal();\n setAnnouncementID(announcement.announcementID);\n setCourseID(announcement.courseID);\n setExpiration(announcement.expiration);\n setMessage(announcement.message);\n popupState.close();\n };\n\n const deleteAnnouncement = async (\n announcement: Announcement,\n popupState: any\n ) => {\n const instance = new Announcement(announcement);\n const res = await instance.deleteAnnouncement();\n if (res) {\n loadAnnouncements();\n }\n popupState.close();\n };\n\n const submitAnnouncement = async (event: React.FormEvent) => {\n event.preventDefault();\n\n setSubmitted(true);\n\n if (!editing && courseID.trim() !== '' && expiration.trim() !== '' && message.trim() !== '' && courses.some(c => c.id === courseID)) {\n const announcement = new Announcement({\n courseID,\n expiration,\n message,\n } as Announcement);\n const res = await announcement.createAnnouncement();\n if (res) {\n loadAnnouncements();\n toggleModal();\n }\n } else if(editing && courseID.trim() !== '' && expiration.trim() !== '' && message.trim() !== '' && courses.some(c => c.id === courseID)) {\n const announcement = new Announcement({\n announcementID,\n courseID,\n expiration,\n message,\n } as Announcement);\n const res = await announcement.updateAnnouncement();\n if (res) {\n loadAnnouncements();\n toggleModal();\n }\n }\n };\n\n return (\n \n \n Create Announcement\n \n \n \n \n \n Course ID\n \n Message\n \n \n Status\n \n \n Action\n \n \n \n \n {announcements.map((row, i) => (\n \n \n {row.courseID !== '*'?row.courseID:'All'}\n \n {row.message}\n \n {isActive(row.expiration) ? (\n Active\n ) : (\n Expired\n )}\n \n \n \n {(popupState) => (\n \n \n \n \n \n edit(row, popupState)}>\n Edit\n \n deleteAnnouncement(row, popupState)}\n >\n Delete\n \n \n \n )}\n \n \n \n ))}\n \n
\n
\n \n
\n

Create Announcement

\n

\n \n \n e.id === courseID)?.name}\n options={courses.map((option) => option.name)}\n onInputChange={(e, value) => {\n const val = courses.find((e) => e.name === value);\n setCourseID(val ? val.id : '');\n }}\n renderInput={(params) => (\n \n )}\n />\n setExpiration(e.target.value)}\n InputLabelProps={{\n shrink: true,\n }}\n error={submitted && expiration.trim() ===''}\n helperText={submitted && expiration.trim() ===''?'Date should not be empty':''}\n />\n setMessage(e.target.value)}\n style={{\n width: '100%',\n }}\n error={submitted && message.trim() ===''}\n helperText={submitted && message.trim() ===''?'Message should not be empty':''}\n />\n \n \n {editing ? 'Edit' : 'Create'}\n \n \n \n \n

\n
\n \n
\n );\n};\n\nexport default AnnouncementView;\n","import React, { useState, useEffect } from 'react';\nimport {RouteComponentProps} from 'react-router-dom';\nimport {\n Button,\n CircularProgress\n} from '@material-ui/core';\nimport axios from 'axios';\nimport querystring from 'querystring';\n\nimport utils from '../../../libs/utils';\n\n\nconst Files = (props: RouteComponentProps<{file_id: string}>) => {\n const { file_id } = props.match.params;\n const query = querystring.parse(props.location.search.replace(/^\\?/, '')) as {[key: string]: string};\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [fileUrl, setFileUrl] = useState('');\n const [fileName, setFileName] = useState('');\n\n const loadFile = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setFileUrl('');\n setFileName('');\n\n const { data, headers } = await axios.post('/populi/get-raw-file', { fileID: file_id }, {\n responseType: 'blob'\n });\n\n const match = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/.exec(headers['content-disposition'] || '');\n setFileName(match ? match[1].replace(/['\"]/g, '') : '');\n\n const url = window.URL.createObjectURL(new Blob([data]));\n setFileUrl(url);\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n const downloadFile = () => {\n const link = document.createElement('a');\n link.href = fileUrl;\n link.setAttribute('download', fileName);\n document.body.appendChild(link);\n link.click();\n };\n\n useEffect(() => {\n (async () => await loadFile())();\n }, []);\n\n useEffect(() => {\n if (fileUrl && query.download)\n downloadFile();\n }, [fileUrl]);\n\n if (isLoading)\n return (\n
\n
\n \n

Loading File

\n
\n
\n );\n\n if (errorMessage)\n return (\n
\n
\n

Unable to load the file

\n

{errorMessage}

\n loadFile()}>\n Try Again\n \n
\n
\n );\n\n return (\n
\n
\n
{fileName || 'File was successfully loaded'}
\n {fileUrl}\n\n
\n\n \n Open File\n \n\n |\n\n downloadFile()}>\n Download File\n \n
\n
\n );\n};\n\nexport default Files;\n","import React from 'react';\nimport {RouteComponentProps} from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport AdminLayout from '../../../layouts/AdminLayout';\nimport { ZipFileExplorer } from '../../../components/ZipFileExplorer';\n\nconst useStyles = makeStyles(() => ({\n body: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n minHeight: '50vh',\n left: 0,\n top: 0\n }\n}));\n\nconst Files = (props: RouteComponentProps<{file_id: string}>) => {\n const { file_id } = props.match.params;\n const classes = useStyles();\n\n return (\n \n
\n \n
\n
\n );\n};\n\nexport default Files;\n","import React, { useEffect } from 'react';\nimport MaterialTable, { MaterialTableProps } from 'material-table';\nimport { Button, Typography } from '@material-ui/core';\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\n\nimport { useStudentPerspective, Student} from '../../../context/StudentPerspective';\nimport AdminLayout from '../../../layouts/AdminLayout';\n\nconst Students = (props: RouteComponentProps) => {\n const {\n loadData,\n isLoading,\n errorMessage,\n students\n } = useStudentPerspective();\n\n const tableProps: MaterialTableProps = {\n title: Students,\n data: students,\n isLoading,\n columns: [\n {\n title: 'Student ID',\n field: 'studentID'\n },\n {\n title: 'Name',\n field: 'fullName',\n defaultSort: 'asc'\n }\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Student/s Found.'\n }\n },\n options: {\n headerStyle: {\n fontWeight: 'bold'\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n sorting: true,\n draggable: false,\n thirdSortClick: false\n },\n onRowClick: (event, student) => {\n if (student)\n props.history.push(`/admin/students/${student.studentID}/courses`);\n }\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n
\n {(() => {\n if (errorMessage)\n return (\n
\n

Error Loading Students

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n return ();\n })()}\n
\n
\n );\n};\n\nexport default withRouter(Students);\n","import React, { useEffect } from 'react';\nimport MaterialTable, { MaterialTableProps } from 'material-table';\nimport {Box, Breadcrumbs, Button, Typography} from '@material-ui/core';\nimport {withRouter, RouteComponentProps, Link} from 'react-router-dom';\n\nimport { useStudentPerspective } from '../../../../../context/StudentPerspective';\nimport AdminLayout from '../../../../../layouts/AdminLayout';\nimport Course from '../../../../../models/Course';\n\nconst Courses = (props: RouteComponentProps<{student_id: string}>) => {\n const {student_id: studentId} = props.match.params;\n const {\n loadData,\n getStudentCourses,\n getStudentById,\n isLoading,\n errorMessage\n } = useStudentPerspective();\n\n const student = getStudentById(studentId);\n\n const studentCourses = getStudentCourses(studentId);\n\n const tableProps: MaterialTableProps = {\n title: (\n \n Courses\n \n Students\n {student?.fullName || studentId}\n Courses\n \n \n ),\n data: studentCourses,\n isLoading,\n columns: [\n {\n title: 'Course ID',\n field: 'id'\n },\n {\n title: 'Name',\n field: 'name',\n defaultSort: 'asc'\n }\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Course/s Found.'\n }\n },\n options: {\n headerStyle: {\n fontWeight: 'bold'\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n sorting: true,\n draggable: false,\n thirdSortClick: false\n },\n onRowClick: (event, course) => {\n if (course)\n props.history.push(`/admin/students/${studentId}/courses/${course.id}/assignments`);\n }\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n
\n {(() => {\n if (errorMessage)\n return (\n
\n

Error Loading Courses

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n return ();\n })()}\n
\n
\n );\n};\n\nexport default withRouter(Courses);\n","import axios from 'axios';\nimport path from 'path';\n\nimport Spec from './Spec';\n\nexport interface StudentSubmissionType {\n id: string\n userId: string\n courseId: string\n courseWorkId: string\n draftGrade: number | null\n assignedGrade: number | null\n alternateLink: string\n assignmentSubmission: AssignmentSubmission\n state: string\n courseWorkType: string\n associatedWithDeveloper: boolean\n creationTime: string\n updateTime: string\n}\n\nexport interface AssignmentSubmission {\n attachments: DriveFile[]\n}\n\nexport interface DriveFile {\n alternateLink: string\n id: string\n thumbnailUrl: string\n title: string\n}\n\nexport interface MoodleFile {\n alternateLink: string;\n id: string;\n title: string;\n}\n\nclass StudentSubmission implements StudentSubmissionType {\n id: string\n userId: string\n courseId: string\n courseWorkId: string\n draftGrade: number | null\n assignedGrade: number | null\n alternateLink: string\n assignmentSubmission: AssignmentSubmission\n state: string\n courseWorkType: string\n associatedWithDeveloper: boolean\n creationTime: string\n updateTime: string\n\n constructor(studentSubmission: StudentSubmissionType) {\n const { draftGrade = null, assignedGrade = null } = studentSubmission;\n this.id = studentSubmission.id;\n this.userId = studentSubmission.userId;\n this.courseId = studentSubmission.courseId;\n this.courseWorkId = studentSubmission.courseWorkId;\n this.draftGrade = draftGrade;\n this.assignedGrade = assignedGrade;\n this.alternateLink = studentSubmission.alternateLink;\n this.assignmentSubmission = studentSubmission.assignmentSubmission;\n this.state = studentSubmission.state;\n this.courseWorkType = studentSubmission.courseWorkType;\n this.associatedWithDeveloper = studentSubmission.associatedWithDeveloper;\n this.creationTime = studentSubmission.creationTime;\n this.updateTime = studentSubmission.updateTime;\n }\n\n static async find(query?: {courseId: string, courseWorkId: string}): Promise {\n const { data = [] } = await axios.get('/classroom/courses/course-work/student-submissions/list', {\n params: query\n });\n return (data as StudentSubmissionType[]).map(a => new StudentSubmission(a));\n }\n\n static async findByStudentId(studentId: string, query?: {courseId: string, courseWorkId: string}): Promise {\n const data = await this.find(query);\n return (data as StudentSubmissionType[]).filter(a => a.userId === studentId).map(a => new StudentSubmission(a));\n }\n\n static async submit(courseId: string, courseWorkId: string, file: File, workItemName: string, driveFileId: string, specId: string, courseWorkTitle: string) {\n const formData = new FormData();\n\n formData.append('courseId', courseId);\n formData.append('courseWorkId', courseWorkId);\n formData.append('file', file);\n formData.append('specId', specId);\n formData.append('workItemName', workItemName);\n formData.append('driveFileId', driveFileId);\n\n return await axios.post('/classroom/courses/course-work/submit', formData);\n }\n\n async setAssignedGrade(grade: number | null): Promise {\n await axios.post('/classroom/courses/course-work/student-submission/set-assigned-grade', {\n studentId: this.userId,\n courseId: this.courseId,\n courseWorkId: this.courseWorkId,\n courseWorkSubmissionId: this.id,\n grade: grade\n });\n this.assignedGrade = grade;\n this.draftGrade = grade;\n return this;\n }\n\n getDriveFiles(): DriveFile[] {\n const driveFiles: DriveFile[] = [];\n if (this.assignmentSubmission && this.assignmentSubmission.attachments) {\n for (let attachment of this.assignmentSubmission.attachments) {\n const driveFile = (attachment as any).driveFile as DriveFile | null;\n if (driveFile) {\n driveFiles.push(driveFile);\n }\n }\n }\n return driveFiles;\n }\n\n getDriveFileBySpec(spec: Spec): DriveFile|null {\n const driveFiles = this.getDriveFiles();\n for (let driveFile of driveFiles) {\n const extension = path.extname(driveFile.title);\n const name = path.basename(driveFile.title, extension);\n if (name === spec.name) {\n return driveFile;\n }\n }\n return null;\n }\n\n getGrade(): number | null {\n if (typeof this.assignedGrade === 'number')\n return this.assignedGrade;\n if (typeof this.draftGrade === 'number')\n return this.draftGrade;\n return null;\n }\n}\n\nexport default StudentSubmission;\n","import React, { useState, useEffect } from 'react';\nimport { Link , RouteComponentProps } from 'react-router-dom';\nimport {\n Box,\n Breadcrumbs,\n Button,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport MaterialTable from 'material-table';\nimport Alert from '@material-ui/lab/Alert';\n\nimport AdminLayout from '../../../../../../../layouts/AdminLayout';\nimport Announcement from '../../../../../../../models/Announcement';\nimport CourseWork from '../../../../../../../models/CourseWork';\nimport StudentSubmission from '../../../../../../../models/StudentSubmission';\nimport { useStudentPerspective } from '../../../../../../../context/StudentPerspective';\nimport utils from '../../../../../../../libs/utils';\n\ninterface StudentCourseWork extends CourseWork {\n submission?: StudentSubmission\n}\n\nconst Assignments = (props: RouteComponentProps<{ student_id: string, course_id: string }>) => {\n const { student_id: studentId, course_id: courseId } = props.match.params;\n const [courseWorks, setCourseWorks] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [announcements, setAnnouncements] = useState([]);\n\n const {\n getCourseById,\n getStudentById,\n hasNewSubmission,\n loadData: loadStudentPerspective\n } = useStudentPerspective();\n\n const course = getCourseById(courseId);\n\n const student = getStudentById(studentId);\n\n const loadCourseWorks = async () => {\n setCourseWorks([]);\n\n const data = await CourseWork.find({courseId: courseId});\n const submissions = await Promise.all(data.map(a => StudentSubmission.find({\n courseId: a.courseId,\n courseWorkId: a.id\n })));\n\n setCourseWorks(data.map((courseWork, index) => {\n const studentCourseWork = courseWork as StudentCourseWork;\n studentCourseWork.submission = (() => {\n for (let submission of submissions[index]) {\n if (submission.userId === studentId)\n return submission;\n }\n })();\n return studentCourseWork;\n }).filter(a => a.associatedWithDeveloper));\n };\n\n const loadAnnouncements = async () => {\n let list = await Announcement.getAnnouncments();\n setAnnouncements(list);\n };\n\n const isActive = (date: string) => {\n if(new Date().getTimezoneOffset() === -480) {\n return new Date(date) > utils.offsetDateToUS(new Date().toString());\n }\n return new Date(date) > new Date(); // For US TA's\n };\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await Promise.all([\n loadStudentPerspective(),\n loadCourseWorks(),\n loadAnnouncements()\n ]);\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n
\n {(() => {\n if (isLoading)\n return (\n
\n
\n \n

Loading Assignments

\n
\n
\n );\n\n if (errorMessage)\n return (\n
\n

Error Loading Assignments

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n return (\n <>\n {announcements.map(a =>\n (a.courseID === courseId || a.courseID === '*') && isActive(a.expiration)?\n \n {a.message}\n :null\n )}\n\n \n Assignments\n \n Students\n {student?.fullName || studentId}\n Courses\n {course?.fullname || courseId}\n Assignments\n \n \n )}\n data={courseWorks}\n options={{\n search:false,\n paging: false,\n headerStyle: {\n fontWeight: 'bold'\n },\n thirdSortClick: false\n }}\n columns={[\n {\n title: 'Name',\n field: 'title',\n render(courseWork) {\n return (\n \n {courseWork.title}\n \n );\n }\n },\n {\n title: 'Grade',\n field: 'submission.assignedGrade',\n render(courseWork) {\n if (courseWork.submission && courseWork.submission.assignedGrade)\n return courseWork.submission.assignedGrade;\n return 'n/a';\n }\n },\n {\n title: 'Submitted',\n sorting: false,\n render: (courseWork) => {\n if (courseWork.submission) {\n if (hasNewSubmission(courseId, studentId, courseWork.id)) {\n return (\n \n );\n }\n\n if (Object.keys(courseWork.submission.assignmentSubmission).length) {\n return '✓';\n }\n }\n return '';\n }\n }\n ]}\n />\n \n );\n })()}\n
\n
\n );\n};\n\nexport default Assignments;\n","import React, { useState, useEffect } from 'react';\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\nimport MaterialTable, {\n MaterialTableProps,\n MTableBody,\n MTableHeader\n} from 'material-table';\nimport { Button, TableBody, TableRow, TableCell, Link } from '@material-ui/core';\nimport axios from 'axios';\n\nimport StudentLayout from '../../../layouts/StudentLayout';\nimport Course from '../../../models/Course';\nimport utils from '../../../libs/utils';\nimport Auth from '../../../libs/auth';\n\nconst Courses = (props: RouteComponentProps) => {\n const [courses, setCourses] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const tableProps: MaterialTableProps = {\n title:

Courses

,\n data: courses,\n isLoading,\n columns: [\n {\n title: 'ID',\n field: 'id',\n width: '10%',\n },\n {\n title: 'Name',\n field: 'fullname',\n // defaultSort: 'asc',\n // render(rowData) {\n // return (\n // \n // {rowData.name}\n // \n // );\n // }\n }\n ],\n localization: {\n body: {\n emptyDataSourceMessage: 'No Course/s Found.'\n }\n },\n options: {\n headerStyle: {\n fontWeight: 'bold'\n },\n pageSize: 10,\n pageSizeOptions: [5, 10, 20, 50],\n emptyRowsWhenPaging: false,\n search: true,\n sorting: true,\n draggable: false\n },\n components: {\n Header: (props: any) => {\n\n return ;\n },\n Body: (props: any) =>\n !!errorMessage ? (\n \n \n \n
\n

Error Loading Courses

\n

{errorMessage}

\n \n Try Again\n \n
\n
\n
\n
\n ) : (\n \n )\n },\n onRowClick: (event, rowData) =>\n props.history.push(`/student/courses/${rowData?.id}/assignments`)\n };\n\n const loadCourses = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setCourses([]);\n\n const session = Auth.getSession();\n\n const moodleCourses = await Course.getMoodleCourses({\n token: session?.accessToken,\n });\n\n setCourses(moodleCourses);\n\n const [\n { data: registeredCoursedIds = []},\n // _courses\n ] = await Promise.all([\n axios.get('/admin/course-instances'),\n // await Course.getCourses()\n ]);\n \n setCourses(\n registeredCoursedIds\n ? moodleCourses.filter((c) => registeredCoursedIds.includes(c.id+''))\n : []\n );\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n (async () => await(loadCourses()))();\n }, []);\n\n return (\n \n
\n \n
\n
\n );\n};\n\nexport default withRouter(Courses);\n","import React, { useState, useEffect } from 'react';\nimport { RouteComponentProps, Link } from 'react-router-dom';\nimport {\n Box,\n Button,\n CircularProgress,\n Breadcrumbs,\n MenuItem,\n Typography\n} from '@material-ui/core';\nimport MaterialTable from 'material-table';\nimport { MoreVert as MoreIcon } from '@material-ui/icons';\nimport Alert from '@material-ui/lab/Alert';\n\nimport StudentLayout from '../../../../../layouts/StudentLayout';\nimport Announcement from '../../../../../models/Announcement';\nimport CourseWork from '../../../../../models/CourseWork';\nimport StudentSubmission from '../../../../../models/StudentSubmission';\nimport Course from '../../../../../models/Course';\nimport utils from '../../../../../libs/utils';\nimport auth from '../../../../../libs/auth';\nimport Spec from '../../../../../models/Spec';\nimport { MenuIconButton } from '../../../../../components/Buttons';\n\ninterface StudentCourseWork extends CourseWork {\n submission?: StudentSubmission\n}\n\nconst Assignments = (props: RouteComponentProps<{ course_id: string }>) => {\n const { course_id: courseId } = props.match.params;\n const [course, setCourse] = useState(null);\n const [courseWorks, setCourseWorks] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [announcements, setAnnouncements] = useState([]);\n\n const loadCourse = async () => {\n const session = auth.getSession();\n\n const moodleCourses = await Course.getMoodleCourses({\n token: session?.accessToken,\n });\n\n console.log(moodleCourses);\n\n const _course = moodleCourses.find((obj) => obj.id === courseId);\n\n setCourse(_course?.fullname);\n };\n\n const loadCourseWorks = async () => {\n setCourseWorks([]);\n const session = auth.getSession();\n\n // Get all courseworks that the student has access to.\n const moodleCourseAssignments = await CourseWork.getMoodleCourseAssignments(\n {\n token: session?.accessToken,\n courseId,\n userId: auth.getSession()?.user?.userid.toString(),\n }\n );\n\n // Function used to make sure all courseworks shown are not empty.\n const excludeEmptyCoursework = async (courseWork: StudentCourseWork) => {\n const specs = await Spec.find({\n assignmentID: courseWork.id,\n });\n\n return specs.length > 0;\n };\n\n const filteredAssignments = [];\n\n // Filter through all courseworks\n for (const assignment of moodleCourseAssignments) {\n const shouldInclude = await excludeEmptyCoursework(assignment);\n if (shouldInclude) {\n filteredAssignments.push(assignment);\n }\n }\n const sortedByName = filteredAssignments.sort((a, b) =>\n a.name.localeCompare(b.name)\n );\n\n setCourseWorks(sortedByName);\n\n // setCourseWorks(\n // data\n // .map((courseWork, index) => {\n // const studentCourseWork = courseWork as StudentCourseWork;\n // studentCourseWork.submission = (() => {\n // for (let submission of submissions[index]) {\n // if (session && submission.userId === session.accountID)\n // return submission;\n // }\n // })();\n // return studentCourseWork;\n // })\n // .filter((a) => a.associatedWithDeveloper)\n // );\n };\n\n const loadAnnouncements = async () => {\n let list = await Announcement.getAnnouncments();\n setAnnouncements(list);\n };\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n // await Promise.all([loadCourse(), loadCourseWorks(), loadAnnouncements()]);\n await Promise.all([loadCourse(), loadCourseWorks()]);\n\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n }\n };\n\n const isActive = (date: string) => {\n if (new Date().getTimezoneOffset() === -480) {\n return new Date(date) > utils.offsetDateToUS(new Date().toString());\n }\n return new Date(date) > new Date(); // For US TA's\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n
\n {(() => {\n if (isLoading)\n return (\n
\n
\n \n

Loading Assignments

\n
\n
\n );\n\n if (errorMessage)\n return (\n
\n

Error Loading Assignments

\n

{errorMessage}

\n \n Try Again\n \n
\n );\n\n return (\n <>\n {announcements.map((a) =>\n (a.courseID === courseId || a.courseID === '*') &&\n isActive(a.expiration) ? (\n \n {a.message}\n \n ) : null\n )}\n\n \n Assignments\n \n Courses\n {course || courseId}\n Assignments\n \n \n }\n data={courseWorks}\n options={{\n search: false,\n paging: false,\n headerStyle: {\n fontWeight: 'bold',\n },\n thirdSortClick: false,\n }}\n columns={[\n {\n title: 'Name',\n field: 'name',\n render(courseWork) {\n return (\n \n {courseWork.name}\n \n );\n },\n },\n {\n title: 'Max Grade',\n field: 'grade',\n render(courseWork) {\n // use to show grade: courseWork.grade;\n return '100';\n },\n },\n {\n title: 'Actions',\n width: '10%',\n render(courseWork) {\n return (\n }>\n {() => [\n \n View Exercise in Moodle\n ,\n ]}\n \n );\n },\n },\n ]}\n />\n \n );\n })()}\n
\n
\n );\n};\n\nexport default Assignments;\n","import React, { useEffect, useState } from 'react';\nimport { useHistory, withRouter } from 'react-router-dom';\nimport {\n CircularProgress,\n Container,\n Paper,\n Button,\n Typography,\n makeStyles,\n Box,\n TextField\n} from '@material-ui/core';\nimport {Alert} from '@material-ui/lab';\n\nimport utils from '../../../libs/utils';\nimport Auth from '../../../libs/auth';\n\nconst useStyles = makeStyles(() => ({\n container: {\n height: '100vh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n paper: {\n width: '95%',\n maxWidth: '500px',\n padding: '25px',\n textAlign: 'center'\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n gap: '15px',\n paddingTop: '20px',\n paddingBottom: '20px',\n marginBottom: '10px'\n }\n}));\n\n\nconst Login = () => {\n const history = useHistory();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const classes = useStyles();\n\n const login = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n const res = await Auth.login({email, password, role: 'student'});\n console.log('res', res);\n history.replace('/student/courses');\n }\n catch (e) { \n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (Auth.getSession()?.user.admin === false) {\n history.replace('/student/courses');\n }\n }, []);\n\n return (\n \n \n
\n \"Banner\n
\n\n Student Login\n\n \n setEmail(e.target.value)} \n />\n setPassword(e.target.value)}\n />\n \n\n \n\n {!!errorMessage && (\n
\n setErrorMessage('')}\n severity=\"error\">\n {errorMessage}\n \n
\n )}\n
\n
\n );\n};\n\nexport default withRouter(Login);\n","import React, { useState } from 'react';\nimport 'rsuite/dist/styles/rsuite-default.css';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n Button,\n Nav,\n Icon,\n Uploader\n} from 'rsuite';\n\nconst useStyles = makeStyles((theme) => ({\n wrapper: {\n direction: 'rtl',\n overflow: 'auto',\n height: '100%'\n },\n navBody: {\n width: 400,\n minHeight: '100%',\n direction: 'ltr',\n paddingLeft: 20,\n paddingBottom: 20\n },\n icon: {\n fontSize: '24px',\n color: '#1675e0'\n },\n title: {\n fontSize: '24px',\n fontWeight: 'bold',\n color: '#1675e0'\n },\n btnContainer: {\n display: 'flex',\n padding: '15px 10px',\n justifyContent: 'flex-start'\n },\n uploaderBtn: {\n display: 'flex',\n marginRight: '10px',\n\n '& .rs-uploader-trigger button': {\n backgroundColor: '#3498ff !important',\n color: 'white !important',\n paddingLeft: '15px',\n paddingRight: '15px',\n\n '&:hover': {\n color: 'white !important'\n }\n },\n\n '& .rs-uploader-file-items': {\n display: 'none'\n }\n },\n removeBtn: {\n display: 'flex',\n height: '24px',\n width: '24px',\n borderRadius: '12px',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: '5px',\n\n '&:hover': {\n backgroundColor: '#A6A6A6',\n color: 'white'\n }\n },\n item: {\n '& a': {\n display: 'flex !important',\n alignItems: 'center',\n width: '100%'\n }\n },\n itemName: {\n margin: 0,\n width: '325px !important',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n closeIn: {\n animationName: '$closeIn',\n animationDuration: '0.5s',\n animationTimingFunction: 'ease'\n },\n closeOut: {\n animationName: '$closeOut',\n animationDuration: '0.5s',\n animationTimingFunction: 'ease',\n animationFillMode: 'forwards'\n },\n '@keyframes closeIn': {\n from: {\n marginLeft: '-20px',\n opacity: 0\n }\n },\n '@keyframes closeOut': {\n to: {\n marginLeft: '-20px',\n opacity: 0,\n pointerEvents: 'none'\n }\n }\n}));\n\nconst DocsNav = ({\n files = [],\n onFilesChange = (files) => {},\n activeFile = null,\n onActiveFileChange = (file) => {}\n}) => {\n const classes = useStyles();\n\n const [showRemove, setShowRemove] = useState(false);\n const [justUploaded, setJustUploaded] = useState(true);\n\n const handleChange = (files) => {\n onFilesChange(files);\n setJustUploaded(true);\n };\n const handleSelect = (index) => {\n onActiveFileChange(files[index] || null);\n };\n const toggleShowRemove = () => {\n setShowRemove(!showRemove);\n setJustUploaded(!showRemove);\n };\n const removeFile = (e, index) => {\n e.stopPropagation();\n const file = files[index];\n const newFiles = [...files];\n newFiles.splice(index, 1);\n onFilesChange(newFiles);\n if (file === activeFile) {\n onActiveFileChange(null);\n }\n };\n\n const activeKey = (() => {\n for (let i = 0; i < files.length; i++) {\n if (files[i] === activeFile) {\n return i;\n }\n }\n return null;\n })();\n\n return (\n
\n \n }\n >\n Document Files\n \n\n
  • \n {!showRemove && (\n \n )}\n\n {(!!(files || []).length || showRemove) && (\n \n )}\n
  • \n\n {files.map((f, i) => (\n \n\n {showRemove && (\n removeFile(e, i)}\n className={`${classes.removeBtn} ${classes.closeIn}`}>\n \n
    \n )}\n\n {!showRemove && !justUploaded && (\n removeFile(e, i)}\n className={`${classes.removeBtn} ${classes.closeOut}`}\n >\n \n \n )}\n

    {f.name}

    \n \n ))}\n \n \n );\n};\n\nexport default DocsNav;","import React from 'react';\nimport mammoth from 'mammoth';\nimport './style.css';\nimport 'rsuite/dist/styles/rsuite-default.css';\nimport $ from 'jquery';\nimport {\n Button,\n Icon,\n PanelGroup,\n Panel,\n Modal,\n Input,\n Notification,\n} from 'rsuite';\nimport Axios from 'axios';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = {\n container: {\n '& table': {\n borderCollapse: 'collapse',\n width: '100%',\n\n '& th, td': {\n textAlign: 'left',\n borderBottom: '1px solid rgb(233, 233, 233)',\n padding: '10px !important'\n },\n\n '& td p + p': {\n padding: 0,\n margin: 0\n }\n }\n }\n};\n\nclass DocProblems extends React.Component {\n static defaultProps = {\n file: null\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n title: '',\n documentData: [],\n selectedProblem: null,\n selectedSpec: '',\n selectedCode: '',\n savedProblems: {},\n modals: {\n showCodeModal: false,\n specsModal: false\n },\n status: {\n reading: false,\n errorMessage: ''\n }\n };\n\n this.docDataCache = [];\n this.getDocDataCache = this.getDocDataCache.bind(this);\n this.setDocDataCache = this.setDocDataCache.bind(this);\n this.readFileInputEventAsArrayBuffer = this.readFileInputEventAsArrayBuffer.bind(this);\n this.readFile = this.readFile.bind(this);\n this.handleProblemNameChange = this.handleProblemNameChange.bind(this);\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this.handleSelectedCodeChange = this.handleSelectedCodeChange.bind(this);\n this.saveSelectedCode = this.saveSelectedCode.bind(this);\n this.handleSelectedSpecChange = this.handleSelectedSpecChange.bind(this);\n this.addProblemTable = this.addProblemTable.bind(this);\n this.removeProblemTable = this.removeProblemTable.bind(this);\n this.uploadSpec = this.uploadSpec.bind(this);\n this.handleBodyContentEditableFocus = this.handleBodyContentEditableFocus.bind(this);\n this.handleBodyContentEditableKeypressBlur = this.handleBodyContentEditableKeypressBlur.bind(this);\n\n this.convertTableToSpec = this.convertTableToSpec.bind(this);\n this.reformatTable = this.reformatTable.bind(this);\n this.htmlToText = this.htmlToText.bind(this);\n this.runCode = this.runCode.bind(this);\n this.filterExerciseName = this.filterExerciseName.bind(this);\n }\n\n componentDidMount() {\n $('body')\n .on('focus', '[contenteditable]', this.handleBodyContentEditableFocus)\n .on('keypress blur', '[contenteditable]', this.handleBodyContentEditableKeypressBlur);\n }\n\n componentWillUnmount() {\n $('body')\n .off('focus', '[contenteditable]', this.handleBodyContentEditableFocus)\n .off('keypress blur', '[contenteditable]', this.handleBodyContentEditableKeypressBlur);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.file !== this.props.file) {\n this.readFile();\n }\n }\n\n // gets cached doc data of file\n getDocDataCache(file) {\n for (let cache of this.docDataCache) {\n if (cache.file === file) {\n return cache.data;\n }\n }\n return null;\n }\n\n // sets the cached doc data of file\n setDocDataCache(file, data) {\n for (let cache of this.docDataCache) {\n if (cache.file === file) {\n cache.data = data;\n return;\n }\n }\n this.docDataCache.push({file, data});\n }\n\n // reads buffer data of a file\n readFileInputEventAsArrayBuffer(file, callback) {\n const reader = new FileReader();\n\n reader.onload = function (loadEvent) {\n const arrayBuffer = loadEvent.target.result;\n callback(arrayBuffer);\n };\n\n reader.readAsArrayBuffer(file.blobFile);\n }\n\n // reads file and extracts the doc data\n readFile() {\n const file = this.props.file;\n if (file) {\n this.readFileInputEventAsArrayBuffer(file, async (arrayBuffer) => {\n try {\n this.setState({\n status: {\n reading: true,\n errorMessage: ''\n }\n });\n const cacheData = this.getDocDataCache(file);\n const data = await (async () => {\n if (cacheData) {\n return cacheData;\n }\n\n const data = [];\n const html = await mammoth.convertToHtml({ arrayBuffer: arrayBuffer });\n const md = await mammoth.convertToMarkdown({ arrayBuffer: arrayBuffer });\n\n const exercises = this.filterExerciseName(md);\n for (let i = 1; i <= exercises.raw.length; i++) {\n let matched;\n let otherFormat = `${exercises.raw[i - 1].replace(\n / /g,\n ' '\n )}`;\n if (i === exercises.raw.length) {\n let relast = new RegExp(\n `(${exercises.raw[i - 1]}|${otherFormat})([^]*?)$`,\n 'g'\n );\n matched = html.value.match(relast);\n } else {\n let otherFormatEnd = `${exercises.raw[i].replace(\n / /g,\n ' '\n )}`;\n let re = new RegExp(\n `(${exercises.raw[i - 1]}|${otherFormat})([^]*?)(${\n exercises.raw[i]\n }|${otherFormatEnd})`,\n 'g'\n );\n matched = html.value.match(re);\n }\n if (matched) {\n let cleanTable = matched[0]\n .replace(\n /<\\/td>|<\\/td>|<\\/td>|<\\/tr>/g,\n ''\n )\n .replace(//g, '');\n let tables = cleanTable.match(//g);\n tables = this.reformatTable(tables, i - 1);\n data[i - 1] = {\n name: exercises.filtered[i - 1].replace(/\\\\/g, ''),\n tables,\n code: '',\n spec: '',\n };\n } else {\n data[i - 1] = {\n name: exercises.filtered[i - 1].replace(/\\\\/g, ''),\n tables: [],\n code: '',\n spec: '',\n };\n }\n }\n return data;\n })();\n this.setDocDataCache(file, data);\n this.setState({\n title: file.name.replace(/.docx|.doc/gi, ''),\n documentData: data,\n status: {\n reading: false,\n errorMessage: ''\n }\n });\n }\n catch (e) {\n this.setState({\n status: {\n reading: false,\n errorMessage: e.message\n }\n });\n }\n });\n }\n else {\n this.setState({\n title: '',\n documentData: []\n });\n }\n }\n\n // handles problem name change\n handleProblemNameChange(e, problemIndex) {\n const documentData = this.state.documentData;\n documentData[problemIndex].name = e.target.value;\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n }\n\n // opens modal by modal id\n open(id, problemIndex) {\n const {\n modals,\n documentData\n } = this.state;\n\n modals[id] = true;\n if (id === 'showCodeModal') {\n const code = documentData[problemIndex].code;\n this.setState({\n modals,\n selectedProblem: problemIndex,\n selectedCode: code\n });\n }\n else if (id === 'specsModal') {\n const tables = documentData[problemIndex].tables;\n const spec = JSON.stringify(this.convertTableToSpec(tables), null, 2);\n this.setState({\n modals,\n selectedProblem: problemIndex,\n selectedSpec: spec\n });\n }\n }\n\n // closes modal by modal id\n close(id) {\n const modals = this.state.modals;\n modals[id] = false;\n this.setState({ modals: modals });\n }\n\n // handles code change\n handleSelectedCodeChange(value) {\n this.setState({ selectedCode: value });\n }\n\n // saves code to the doc data\n saveSelectedCode(problemIndex) {\n const { documentData } = this.state;\n documentData[problemIndex].code = this.state.selectedCode;\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n this.close('showCodeModal');\n }\n\n // handles spec change\n handleSelectedSpecChange(value) {\n const { documentData } = this.state;\n documentData[this.state.selectedProblem].spec = value;\n this.setDocDataCache(this.props.file, documentData);\n this.setState({\n selectedSpec: value,\n documentData\n });\n }\n\n // adds new table to the problem\n addProblemTable(problemIndex) {\n const { documentData } = this.state;\n const emptyTable = '

    Input

    Output

    ';\n const { tables } = documentData[problemIndex];\n\n tables.push(emptyTable);\n documentData[problemIndex].tables = this.reformatTable(tables, problemIndex);\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n }\n\n // removes a table from problem\n removeProblemTable(problemIndex, tableIndex) {\n const { documentData } = this.state;\n documentData[problemIndex].tables.splice(tableIndex, 1);\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n }\n\n // saves / uploads selected spec\n async uploadSpec() {\n const {\n documentData,\n selectedProblem,\n savedProblems\n } = this.state;\n const problemName = documentData[selectedProblem].name;\n const spec = JSON.parse(this.state.selectedSpec);\n const newSpecifications = {\n id: problemName,\n name: problemName.replace(/-/g, ' '),\n description: problemName,\n data: [...spec.data],\n entry: spec.entry,\n env: spec.env\n };\n\n try {\n await Axios.post('/admin/spec', newSpecifications);\n Notification['success']({\n title: 'Success',\n description:
    {problemName} specification created.
    ,\n });\n this.setState({\n savedProblems: { ...savedProblems, [problemName]: true },\n });\n this.close('specsModal');\n } catch (e) {\n Notification['error']({\n title: 'Error',\n description:
    Failed to create spec: {e.message}
    ,\n });\n }\n }\n\n // handles focus event of content editable elements inside body\n handleBodyContentEditableFocus(evt) {\n const $this = $(evt.currentTarget);\n $this.data('before', $this.html());\n }\n\n // handles keypress and blur event of content editable elements inside body\n handleBodyContentEditableKeypressBlur(evt) {\n const el = $(evt.currentTarget);\n const data = $(el).data();\n const isProblemTableField = data.problemIndex !== undefined && data.tableIndex !== undefined;\n\n if (!isProblemTableField)\n return;\n\n if (evt.type === 'focusout') {\n const { documentData } = this.state;\n const tableContainer = $(el).closest('.problem-table-container');\n if (tableContainer) {\n documentData[data.problemIndex].tables[data.tableIndex] = $(tableContainer).html();\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n }\n }\n\n if (evt.keyCode === 13 && evt.shiftKey && el.hasClass('input-td')) {\n const { documentData } = this.state;\n const tableContainer = $(el).closest('.problem-table-container');\n const input = $(el).html();\n const code = documentData[data.problemIndex].code;\n\n this.runCode(code, input, el);\n evt.preventDefault();\n\n if (tableContainer) {\n documentData[data.problemIndex].tables[data.tableIndex] = $(tableContainer).html();\n this.setDocDataCache(this.props.file, documentData);\n this.setState({ documentData });\n }\n }\n }\n\n // util: converts table to spec\n convertTableToSpec(tables) {\n const data = [];\n\n for (let i = 0; i < tables.length; i++) {\n let table = tables[i];\n let rows = table.match(//g);\n let validRow = true;\n for (let r = 0; r < rows.length; r++) {\n if (\n rows[r].match(/Input|Output|Comments|Comment|Explanation/g) ===\n null &&\n validRow\n ) {\n let cells = rows[r].match(//g);\n let d = {};\n for (let c = 0; cells && c < cells.length; c++) {\n let value = cells[c]\n .replace(/
    |<\\/br>|<\\/p>|<\\/div>/g, '\\n')\n .replace(/<([^]*?)>/g, '')\n .trim()\n .replace(/\\n$/g, '');\n if (cells.length % 2 !== 0) {\n if (c === cells.length - 1) break;\n }\n if (c % 2 === 0) {\n value = value.replace(/\\n/g, '');\n d.arguments = [value];\n d.mainInvoker = `main(${value})`;\n }\n if (c % 2 === 1) {\n d.output = value;\n data.push(d);\n d = {};\n }\n }\n }\n }\n }\n\n const spec = {\n env: 'node',\n entry: 'argv',\n data,\n };\n return spec;\n }\n\n // util: formats tables\n reformatTable(tables, i) {\n let newTables = [];\n if (!tables) {\n return [];\n }\n tables.forEach((tableHtml, j) => {\n let tr = tableHtml.match(//g);\n let ifValidTable = tableHtml.match(/Input|Output|Comment|Explanation/g);\n if (tr) {\n let headerCount;\n let indexOfOutput;\n tr.forEach((val, k) => {\n if (val.match(/Input|Output|Comment|Explanation/g)) {\n let newVal = val.replace(\n //g,\n ''\n );\n tableHtml = tableHtml.replace(val, newVal);\n }\n let td = val.match(//g);\n if (td) {\n td.forEach((thead, i) => {\n if (thead.match(/Output/g)) {\n indexOfOutput = i;\n }\n });\n }\n // making sure td length are equal\n if (td && k === 0) {\n headerCount = td.length;\n }\n if (td && headerCount && td.length !== headerCount && indexOfOutput) {\n for (let u = td.length; u < headerCount; u++) {\n td.splice(indexOfOutput, 1, '');\n }\n let newVal = val.replace(val, td.join('')); // adding empty td if td length is not equal\n tableHtml = tableHtml.replace(val, newVal);\n indexOfOutput = null;\n }\n if (td && headerCount && td.length !== headerCount) {\n for (let u = td.length; u < headerCount; u++) {\n td.splice(indexOfOutput, 1, '');\n }\n let newVal = val.replace(/ {\n if (l % 2 === 0) {\n if (td.length % 2 !== 0) {\n if (l === td.length - 1) return;\n }\n let newVal = val.replace(\n //g,\n ``\n );\n tableHtml = tableHtml.replace(val, newVal);\n } else {\n let newVal = val.replace(\n //g,\n ``\n );\n tableHtml = tableHtml.replace(val, newVal);\n }\n });\n }\n });\n }\n newTables.push(tableHtml);\n });\n return newTables;\n }\n\n // util: removes html tags\n htmlToText(html) {\n return html.replace(/
    |<\\/br>/g, '\\n').replace(/<[^]*?>/g, '');\n }\n\n // util: runs / evaluates code\n runCode(code, input, el) {\n if (!code) {\n alert('Add code first.');\n return;\n }\n let inputText = this.htmlToText(input);\n let funcName = (code.match(/(function)*([^]*?)\\(/)\n ? code.match(/(function)*([^]*?)\\(/)[0].replace(/[( =)>{]|function/g, '')\n : ''\n ).trim();\n let result;\n let codeToRun = `(function(){\n let oldLog = console.log;\n let logs = [];\n console.log = function() {\n logs.push(Array.from(arguments).join(' '));\n };\n ${code};\n let value = ${funcName}(${inputText});\n if(!value){\n value = logs.join('\\\\n')\n };\n console.log = oldLog;\n return value;\n }())`;\n try {\n result = window.eval(codeToRun);\n } catch (e) {\n result = e;\n }\n let nextSib = el.next();\n result = result ? result.toString().replace(/\\n/g, '
    ') : '';\n nextSib.html(result);\n }\n\n // util: filters exercise name\n filterExerciseName(md) {\n const exerciseNameFiltered = [];\n const exerciseNameFilteredRaw = [];\n // let cleanMD = md.value.replace(\n // /\\n#+ Output\\n|\\n#+ Input\\n|#+ Examples*|_*Examples*_*\\n|\\n#+ Constraints\\n|#* *What to submit\\? +\\n|_+What to submit\\?_+|#* *Hints *\\n|_*Hints_*/g,\n // \"\"\n // );\n let excerciseName = md.value.match(\n /\\n\\n## ([^<>]*?)\\n\\n|\\n\\n\\d\\. *__([^<>]*?)__\\n\\n/g\n );\n if (excerciseName == null) {\n let top = md.value.match(/\\b([^]*?)\\n\\n/);\n excerciseName = [top[0]];\n }\n excerciseName.forEach((ex, i) => {\n exerciseNameFilteredRaw.push(ex.replace(/\\d\\.|#|_*/g, '').trim());\n ex = ex.replace(/__|#|[.]|\\\\|\\*|\"|\\//g, '').trim();\n ex = ex\n .replace(/ /g, '-')\n .replace(/-+/g, '-')\n .toUpperCase()\n .replace(/^\\d+-/g, '');\n exerciseNameFiltered.push(ex);\n });\n return { filtered: exerciseNameFiltered, raw: exerciseNameFilteredRaw };\n }\n\n render() {\n const {\n title,\n documentData,\n savedProblems,\n modals,\n selectedProblem,\n status\n } = this.state;\n const { classes } = this.props;\n\n if (status.reading)\n return (\n
    \n

    Reading Document...

    \n
    \n );\n\n if (status.errorMessage)\n return (\n
    \n

    Unable to read document.

    \n

    {status.errorMessage}

    \n
    \n this.readFile()}\n appearance=\"primary\"\n >\n Try Again\n \n
    \n
    \n );\n\n return (\n <>\n
    \n
    {title}
    \n
    \n \n {documentData.map((val, i) => (\n \n
    \n {`${i + 1}. `}\n this.handleProblemNameChange(e, i)}\n value={val.name}\n placeholder=\"PI000-E000-Problem-Name\"\n />\n
    \n {(() => {\n const saved = savedProblems[val.name] || false;\n\n // problem was already saved\n if (saved) return (\n \n );\n\n // problem is not yet saved\n return (\n
    \n

    \n Tables found: {val.tables ? val.tables.length : 0}\n

    \n this.open('showCodeModal', i)}\n >\n \n
    \n this.addProblemTable(i)}\n >\n \n
    \n this.open('specsModal', i)}\n style={{ backgroundColor: '#3498ff' }}\n >\n \n
    \n \n );\n })()}\n \n }\n >\n
      \n {val.tables &&\n val.tables.map((tableHtml, j) => {\n return (\n
    • \n \n this.removeProblemTable(i, j)}\n >\n \n \n \n \n
    • \n );\n })}\n
    \n \n ))}\n \n \n \n\n this.close('showCodeModal')}\n >\n \n Source Code\n \n \n \n \n \n this.saveSelectedCode(selectedProblem)}\n appearance=\"primary\"\n >\n Ok\n \n this.close('showCodeModal')}\n appearance=\"subtle\"\n >\n Cancel\n \n \n \n\n this.close('specsModal')}\n >\n \n Spec\n \n \n \n \n \n \n this.close('specsModal')}\n appearance=\"subtle\"\n >\n Cancel\n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(DocProblems);\n","import React, { createRef } from 'react';\nimport { Card, CardContent, Typography } from '@material-ui/core';\n\nimport DocsNav from './DocsNav';\nimport DocProblems from './DocProblems';\nimport AdminLayout from '../../../layouts/AdminLayout';\n\nclass DocumentParser extends React.Component {\n constructor() {\n super();\n this.state = {\n fileList: [],\n activeFile: null\n };\n\n this.mainContainerRef = createRef();\n this.handleWindowResize = this.handleWindowResize.bind(this);\n this.handleFilesChange = this.handleFilesChange.bind(this);\n this.handleActiveFileChange = this.handleActiveFileChange.bind(this);\n }\n\n componentDidMount() {\n window.addEventListener('resize', this.handleWindowResize);\n this.forceUpdate(); // refreshes main container style\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n get mainContainerStyle() {\n try {\n const mainContainer = this.mainContainerRef.current;\n if (mainContainer) {\n const windowHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n return {\n height: `${windowHeight - mainContainer.offsetTop}px`\n };\n }\n return {\n height: '100vh'\n };\n }\n catch (e) {\n return {\n height: '100vh'\n };\n }\n }\n\n handleWindowResize() {\n this.forceUpdate();\n }\n\n handleFilesChange(files) {\n this.setState({fileList: files});\n }\n\n handleActiveFileChange(file) {\n this.setState({activeFile: file});\n }\n\n render() {\n const {\n fileList,\n activeFile\n } = this.state;\n return (\n \n
    \n \n \n Parse Document\n A utility to quickly parse exam-checker specifications from exercise files (.docx supported).\n \n \n
    \n\n \n\n \n\n \n \n\n
    \n );\n }\n}\n\nexport default DocumentParser;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n Grid,\n Typography,\n makeStyles\n} from '@material-ui/core';\n\nconst useStyle = makeStyles(() => ({\n container: {\n width: '100vw',\n height: '100vh',\n textAlign: 'center'\n }\n}));\n\nconst PageNotFound = () => {\n const classes = useStyle();\n return (\n \n \n Error 404: Page Not Found\n The link you followed may be broken, or the page may have been removed.\n Go to Home\n \n \n );\n};\n\nexport default PageNotFound;\n","import React from 'react';\nimport {\n HashRouter as Router,\n Switch,\n Route,\n Redirect,\n} from 'react-router-dom';\n\nimport Axios from 'axios';\nimport './scss/main.scss';\nimport './App.css';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\n\nimport auth from './libs/auth';\nimport { DialogProvider } from './context/Dialog';\nimport { StudentPerspectiveProvider } from './context/StudentPerspective';\nimport defaultTheme from './themes/defaultTheme';\nimport { ServerError } from './components/Errors';\n\nimport Home from './views/home';\nimport PrivacyPolicy from './views/privacy-policy';\n\nimport AdminLogin from './views/admin/login';\nimport AdminCourses from './views/admin/courses';\nimport AdminCourseAssignments from './views/admin/courses/course_id/assignments';\nimport AdminCourseAssignmentStudent from './views/admin/courses/course_id/assignments/assignment_id/students/student_id';\nimport AdminInvestigate from './views/admin/investigate';\nimport AdminAssignmentSpecs from './views/admin/specs/assignmentspecs';\nimport AdminSpecView from './views/admin/specs/specview';\nimport AdminCourseAssignmentSpecs from './views/admin/courses/course_id/assignments/assignment_id/specs';\nimport AdminReports from './views/admin/reports';\nimport AdminSpecs from './views/admin/specs';\nimport AdminSpecComments from './views/admin/spec-comments';\nimport AdminsSpecsCreate from './views/admin/specs/create';\nimport AdminAnnouncements from './views/admin/announcements';\nimport AdminFiles from './views/admin/files';\nimport AdminFilesBrowser from './views/admin/files/browser';\nimport AdminStudents from './views/admin/students';\nimport AdminStudentCourses from './views/admin/students/student_id/courses';\nimport AdminStudentCourseWorks from './views/admin/students/student_id/courses/course_id/assignments';\n\nimport StudentCourses from './views/student/courses';\nimport StudentCourseAssignments from './views/student/courses/course_id/assignments';\nimport StudentCourseAssignment from './views/student/courses/course_id/assignments/assignment_id';\nimport StudentLogin from './views/student/login';\nimport DocumentParser from './views/admin/document-parser';\nimport PageNotFound from './views/errors/page-not-found';\n\nAxios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'http://localhost:7777' : '';\nAxios.interceptors.request.use(async (config) => {\n const session = auth.getSession();\n if (session) config.headers = { Authorization: session.accessToken};\n return config;\n});\n\n\nAxios.interceptors.response.use(response => response, error => {\n const session = auth.getSession();\n if (error.response) {\n const status = error.response.status;\n const loginLoc = session?.user?.admin ? 'admin' : 'student';\n if (status === 401) {\n auth.logout();\n window.location.href = `/#/${loginLoc}/login`;\n }\n }\n return Promise.reject(error); \n});\n\nconst App = () => {\n return (\n \n \n \n \n {/* commented out for moodle implementation*/}\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n {/* {alert();}} /> */}\n \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import Axios from 'axios';\nimport { uuid } from 'uuidv4';\n\nexport interface Output {\n passed: boolean;\n inputs: string[];\n expectedOutput: string;\n actualOutput: string;\n}\n\nexport interface Test {\n outputs: Output[] | null;\n isBusy: boolean;\n errorMessage: string;\n}\n\nexport interface Log {\n submissionID: number;\n personID: string;\n assignmentID: string;\n courseID: string;\n specID: string;\n}\n\nclass Submission {\n public id: string;\n public name: string;\n public answer: string;\n public test: Test;\n\n public static async getAllIDs(): Promise {\n const data = (await Axios.get('/admin/submissions')).data;\n\n return data;\n }\n\n public static async get(submissionID: string): Promise {\n const { activityID, code } = (\n await Axios.get(`/admin/retrieve-submission?id=${submissionID}`)\n ).data;\n const id = activityID;\n const name = id;\n const answer = code.replace(/((\\\\n)+((?!\\S+)|(?=})))/g, '\\n') || '';\n\n const submission = new Submission({\n id,\n name,\n answer,\n test: { outputs: null, isBusy: false, errorMessage: '' },\n } as Submission);\n \n return submission;\n }\n\n public static async getSubmissionLogs(): Promise {\n const { logs = [] } = (await Axios.get('/admin/submission-logs')).data;\n\n return logs;\n }\n\n constructor(submission: Submission) {\n this.id = submission.id;\n this.name = submission.name;\n this.answer = submission.answer;\n this.test = submission.test;\n this.submit = this.submit.bind(this);\n }\n\n public async submit(): Promise {\n const { output = [] } = (\n await Axios.post(\n '/exam/submit',\n JSON.stringify({\n submitterID: uuid(),\n activityID: this.id,\n code: this.answer,\n })\n )\n ).data;\n\n return output;\n }\n\n}\n\nexport default Submission;\n","import { useState } from 'react';\n\nimport utils from '../libs/utils';\n\nconst useLoadingStatus = () => {\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const executeWithStatus = async (execute: () => Promise, onError?: (err: Error) => {}) => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await execute();\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n if (onError) onError(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n return {\n isLoading,\n setIsLoading,\n errorMessage,\n setErrorMessage,\n executeWithStatus\n };\n};\n\nexport default useLoadingStatus;\n","export interface QueryParamsType {\n [key: string]: string | boolean | number | undefined;\n}\n\nexport const parseQueryParams = (params: QueryParamsType = {}): string => {\n const queryString = Object.keys(params)\n .map((key: string) => `${key}=${params[key]}`)\n .join('&');\n\n return !!queryString.length ? `?${queryString}` : '';\n};\n","import * as api from '../libs/api';\n\nclass APITools {\n public static get parseQueryParams() {\n return api.parseQueryParams;\n }\n}\n\nexport default APITools;\n","import crypto from 'crypto';\nimport axios, { AxiosRequestConfig, AxiosPromise } from 'axios';\n\ninterface CacheItem {\n id: string\n timestamp: number\n promise: AxiosPromise\n config: AxiosRequestConfig\n}\n\ninterface CacheOptions {\n maxAge: number\n}\n\nexport interface AxiosCacheRequestConfig extends AxiosRequestConfig {\n acceptCache?: CacheOptions | boolean\n}\n\nexport class AxiosCache {\n\n // cache items store\n static _caches: CacheItem[] = [];\n\n // some caches should be removed on some events to avoid memory leak\n static _removeCache(cache: CacheItem) {\n AxiosCache._caches = AxiosCache._caches.filter(a => a !== cache);\n }\n\n // will derive an id that will serve as reference for retrieving cache\n static _getRequestId(config: AxiosRequestConfig): string {\n const { url, method, baseURL, headers, params, data } = config;\n const hash = crypto.createHash('md5');\n hash.update(JSON.stringify({ url, method, baseURL, headers, params, data }));\n return hash.digest().toString('hex');\n }\n\n // will create and adapter for caching\n static _createAdapter(options: CacheOptions): AxiosRequestConfig['adapter'] {\n return (config: AxiosRequestConfig): AxiosPromise => new Promise(async (resolve, reject) => {\n const id = AxiosCache._getRequestId(config);\n\n // check cache store\n for (const _cache of AxiosCache._caches) {\n const age = new Date().getTime() - _cache.timestamp;\n if (_cache.id === id) {\n if (!options.maxAge || age <= options.maxAge) {\n return resolve(_cache.promise);\n } else {\n AxiosCache._removeCache(_cache);\n }\n break;\n }\n }\n\n // ensure there's a default adapter\n const { adapter } = axios.defaults;\n if (!adapter) return reject(new Error('axios default adapter is undefined'));\n\n // create new request using default adapter\n const promise = adapter(config);\n const timestamp = new Date().getTime();\n const cache: CacheItem = { id, timestamp, promise, config };\n AxiosCache._caches.push(cache);\n\n // execute request\n try {\n await promise;\n return resolve(promise);\n } catch (e) {\n AxiosCache._removeCache(cache);\n reject(e);\n }\n });\n }\n\n // config getter to supply in axios functions\n static getConfig(config?: AxiosCacheRequestConfig): AxiosRequestConfig {\n const { acceptCache, ..._config } = config || {};\n if (acceptCache) {\n const minute = 60000;\n _config.adapter = AxiosCache._createAdapter(typeof acceptCache === 'object' ? acceptCache : {\n maxAge: 60 * minute\n });\n }\n return _config;\n };\n\n // reset caches\n static reset() {\n AxiosCache._caches = [];\n }\n}\n\nexport default AxiosCache;\n","import { subHours } from 'date-fns';\nimport { v4 as uuid } from 'uuid';\nimport moment from 'moment';\n\nimport CourseWork from '../models/CourseWork';\n\nconst utils = {\n\n formatScore(score: number): string {\n if (score % 1) {\n return score.toFixed(2);\n }\n\n return score.toString();\n },\n\n offsetDateToUS(date: string): Date {\n const d = new Date(date);\n return subHours(d, 12);\n },\n\n generateSubmissionUID(course_id: string, assignment_id: string): string {\n const prefix = [course_id, assignment_id].join('-');\n const uid = (() => {\n let value = uuid().substring(prefix.length + 1);\n if (/^-/.test(value)) {\n value = value.substring(1);\n const filler = Math.round(Math.random() * 15).toString(16);\n return filler + value;\n }\n return value;\n })();\n\n return [prefix, uid].join('-');\n },\n\n // returns formatted activity id from a submitted file file name\n getActivityIdFromFileName(fileName: string): string {\n const keyArr = fileName.split('.');\n keyArr.pop(); // remove file extension\n const formattedKey = keyArr.join('.');\n return formattedKey.replace(/(\\.js$|[^0-9a-zA-Z-().]+)/g, '');\n },\n\n // returns sanitized activity id (no special characters)\n getSanitizedActivityId(rawActivityId: string): string {\n return rawActivityId.replace(/[^0-9a-zA-Z-().]+/g, '');\n },\n\n // returns formatted content of submitted file\n getFormattedFileContent(rawContent: string): string {\n return rawContent.replace(/((\\\\n)+((?!\\S+)|(?=})))/g, '\\n');\n },\n\n // swaps 2 children of an array\n swapArrayItems(arr: any[], index1: number, index2: number) {\n const temp = arr[index1];\n arr[index1] = arr[index2];\n arr[index2] = temp;\n },\n\n // moves array item to different index\n moveArrayItem(arr: ArrayType[], sourceIndex: number, destinationIndex: number): ArrayType[] {\n const [source] = arr.splice(sourceIndex, 1);\n arr.splice(destinationIndex, 0, source);\n return arr;\n },\n\n // parses error message from an https request error\n getRequestErrorMessage(error: any, defaultMessage = 'An unknown error occurred.') {\n if (typeof error?.response?.data?.message === 'string')\n return error.response.data.message;\n\n if (typeof error?.response?.data === 'string' && error.response.data.length < 500)\n return error.response.data;\n\n if (typeof error?.message === 'string')\n return error.message;\n\n return defaultMessage;\n },\n\n getExamDueDateTime(courseWork?: CourseWork | null) {\n if (courseWork && courseWork.dueDate) {\n return moment.utc([\n courseWork.dueDate.year,\n courseWork.dueDate.month - 1,\n courseWork.dueDate.day,\n courseWork.dueTime && courseWork.dueTime.hours ? courseWork.dueTime.hours : 0,\n courseWork.dueTime && courseWork.dueTime.minutes ? courseWork.dueTime.minutes : 0,\n ]);\n }\n\n return undefined;\n },\n\n getFormattedExamDue(courseWork?: CourseWork | null) {\n return this.getExamDueDateTime(courseWork)?.format('MMMM DD, YYYY - HH:mm');\n },\n\n getExamDueUnix(courseWork?: CourseWork | null) {\n return moment(this.getExamDueDateTime(courseWork)).unix() * 1000;\n },\n\n hasExamEnded(courseWork?: CourseWork | null) {\n return Date.now() > this.getExamDueUnix(courseWork);\n }\n};\n\nexport default utils;\n","import React, { HtmlHTMLAttributes } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n button: {\n '&, &:focus': {\n padding: '0',\n outline: 'none',\n border: 'none',\n borderWidth: '0',\n background: 'rgba(0,0,0,0)'\n },\n\n '& img': {\n userDrag: 'none',\n '&.gbtn-normal': { display: 'block' },\n '&.gbtn-focus': { display: 'none' },\n '&.gbtn-pressed': { display: 'none' },\n '&.gbtn-disabled': { display: 'none' }\n },\n '&:focus img': {\n '&.gbtn-normal': { display: 'none' },\n '&.gbtn-focus': { display: 'block' },\n '&.gbtn-pressed': { display: 'none' },\n '&.gbtn-disabled': { display: 'none' }\n },\n '&:active img, &:focus:active img': {\n '&.gbtn-normal': { display: 'none' },\n '&.gbtn-focus': { display: 'none' },\n '&.gbtn-pressed': { display: 'block' },\n '&.gbtn-disabled': { display: 'none' }\n },\n '&:disabled img': {\n '&.gbtn-normal': { display: 'none' },\n '&.gbtn-focus': { display: 'none' },\n '&.gbtn-pressed': { display: 'none' },\n '&.gbtn-disabled': { display: 'block' }\n }\n }\n}));\n\ninterface GoogleSignInButtonProps extends HtmlHTMLAttributes {\n theme?: 'light' | 'dark'\n}\n\nexport const GoogleSignInButton = (props: GoogleSignInButtonProps) => {\n const {\n theme = 'light',\n children,\n ...btnProps\n } = props;\n const classes = useStyles();\n const className = [props.className, classes.button].filter(a => a).join(' ');\n\n return (\n \n );\n};\n\nexport default GoogleSignInButton;\n","import React, { useState, Dispatch, SetStateAction } from 'react';\nimport {\n IconButton,\n IconButtonProps,\n Menu,\n MenuProps\n} from '@material-ui/core';\n\ntype ChildFunction = (actions: {\n anchorEl: HTMLElement | null,\n setAnchorEl: Dispatch>\n}) => MenuProps['children']\n\nexport interface MenuIconButtonProps {\n icon: IconButtonProps['children']\n iconButtonProps?: IconButtonProps\n menuProps?: Partial\n children?: MenuProps['children'] | ChildFunction\n}\n\nexport const MenuIconButton = (props: MenuIconButtonProps) => {\n const {\n icon,\n iconButtonProps = {},\n menuProps = {},\n children\n } = props;\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n return (\n <>\n {\n e.preventDefault();\n e.stopPropagation();\n setAnchorEl(e.currentTarget);\n }}>\n {icon}\n \n setAnchorEl(null)}\n onClick={e => {\n e.stopPropagation();\n }}\n >\n {(() => {\n if (typeof children === 'function') {\n return children({\n anchorEl,\n setAnchorEl\n });\n }\n\n if (children)\n return children;\n\n return '';\n })()}\n \n \n );\n};\n\nexport default MenuIconButton;\n","import React from 'react';\nimport {\n IconButton,\n IconButtonProps\n} from '@material-ui/core';\nimport { ArrowBack } from '@material-ui/icons';\nimport { useHistory } from 'react-router-dom';\n\nexport const BackArrowButton = (props: IconButtonProps) => {\n const history = useHistory();\n return (\n history.goBack()}>\n \n \n );\n};\n\nexport default BackArrowButton;\n","import React from 'react';\nimport { OpenInNew } from '@material-ui/icons';\n\nexport interface ClassroomResourceLinkProps {\n resource: {\n alternateLink?: string\n }\n}\n\nconst ClassroomResourceLink = (props: ClassroomResourceLinkProps) => {\n const { resource } = props;\n\n if (!resource.alternateLink)\n return ;\n\n return (\n \n \n \n );\n};\n\nexport default ClassroomResourceLink;\n","import axios from 'axios';\n\nimport { BasicUserInfo } from '../interfaces/BasicUserInfo';\nimport { PagingResult } from '../interfaces/pagination';\n\nexport interface SpecCommentType {\n id: number\n authorId: string\n author?: BasicUserInfo\n specId: string\n content: string\n createdAt: string\n updatedAt: string\n}\n\nclass SpecComment implements SpecCommentType {\n id: number\n authorId: string\n author?: BasicUserInfo\n specId: string\n content: string\n createdAt: string\n updatedAt: string\n\n constructor(specComment: SpecCommentType) {\n this.id = specComment.id;\n this.authorId = specComment.authorId;\n this.author = specComment.author;\n this.specId = specComment.specId;\n this.content = specComment.content;\n this.createdAt = specComment.createdAt;\n this.updatedAt = specComment.updatedAt;\n }\n\n // creates new spec comment\n static async create(specComment: Partial): Promise {\n const { data } = await axios.post('/spec/comment', specComment);\n return new SpecComment(data);\n }\n\n // returns spec comment list\n static async find(query?: { specId?: string, [key: string]: any }): Promise> {\n const { data } = await axios.get>('/spec/comment/list', {\n params: query\n });\n return { ...data, items: data.items.map(s => new SpecComment(s)) };\n }\n\n // static method for creating read receipt\n static async read(query: { commentId: number }) {\n const { data } = await axios.post('/spec/comment/read-receipt', {\n commentId: query.commentId\n });\n return data;\n }\n\n // created read receipt\n async read() {\n return SpecComment.read({ commentId: this.id });\n }\n\n // deletes the comments\n async destroy(): Promise<{ message: string }> {\n const { data } = await axios.delete<{ message: string }>('/spec/comment', {\n params: {id: this.id}\n });\n return data;\n }\n}\n\nexport default SpecComment;\n","import Axios from 'axios';\nimport jsCookie from 'js-cookie';\n\nexport interface Session {\n name: string;\n firstName: string;\n lastName: string;\n email: string;\n id_token: string;\n accountID: string;\n accountType: string;\n imageURL?: string;\n accessToken: string;\n user: User;\n}\ninterface User {\n __v: number;\n _id: string;\n createdAt: string;\n email: string;\n updatedAt: string;\n firstname: string;\n fullname: string;\n lastname: string;\n userid: number;\n userpictureurl: string;\n admin: boolean;\n}\n\nexport interface LoginWithGoogleOptions {\n role: 'student' | 'teacher'\n}\n\nclass Auth {\n // checks if there's an available cookie to consume that came from login endpoint\n // if available, it will transfer the data to session storage via setSession\n static syncCookie() {\n try {\n const data = jsCookie.get('User');\n if (typeof data !== 'string' || !data) return;\n\n const user = JSON.parse(atob(data)) as any;\n if (typeof user !== 'object') return;\n\n // Auth.setSession({\n // name: user.Name,\n // firstName: user.Given_name,\n // lastName: user.Family_name,\n // email: user.Email,\n // accountID: user.Id,\n // id_token: user.Id_token,\n // accountType: user.Role,\n // imageURL: user.Picture,\n // });\n } catch (e) {\n console.error(e);\n }\n }\n\n // sets session data to local storage\n static setSession(data: Session | null) {\n localStorage.setItem('APP_USER_SESSION', JSON.stringify(data));\n }\n\n // retrieves session data from local storage\n static getSession(): Session | null {\n try {\n Auth.syncCookie();\n return JSON.parse(String(localStorage.getItem('APP_USER_SESSION')));\n } catch {\n return null;\n }\n }\n\n // checks if current session is an admin\n static isAdmin(): boolean {\n return Auth.getSession()?.user.admin === true;\n }\n\n // checks if current session is a student\n static isStudent(): boolean {\n return Auth.getSession()?.user.admin === false;\n }\n\n // logout; removes session data from local storage\n static logout() {\n Auth.setSession(null);\n jsCookie.remove('User');\n }\n\n // login with google\n static async loginWithGoogle(options: LoginWithGoogleOptions): Promise {\n const { data } = await Axios.get('/grant-scopes', {\n params: { login_page_role: options.role }\n });\n window.location.href = data;\n return Auth.getSession();\n }\n\n static async login({ email, password, role }:{ email:string, password:string, role?: 'student' | 'admin' }) {\n const res = await Axios.post('/login', { email, password, strategy: 'local' });\n \n if(role === 'admin' && !res?.data?.authentication?.payload?.moodle_user?.admin) return null;\n \n if(res) {\n const session = {\n accessToken: res.data.accessToken,\n user: {\n ...res.data.user,\n ...res.data.authentication.payload.moodle_user,\n },\n };\n localStorage.setItem('APP_USER_SESSION', JSON.stringify(session));\n }\n\n return res;\n }\n}\n\nexport default Auth;","var _path, _path2, _path3, _path4;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSlack(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 127,\n height: 127,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.2 80c0 7.3-5.9 13.2-13.2 13.2C6.7 93.2.8 87.3.8 80c0-7.3 5.9-13.2 13.2-13.2h13.2V80zm6.6 0c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2v33c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V80z\",\n fill: \"#E01E5A\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M47 27c-7.3 0-13.2-5.9-13.2-13.2C33.8 6.5 39.7.6 47 .6c7.3 0 13.2 5.9 13.2 13.2V27H47zm0 6.7c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H13.9C6.6 60.1.7 54.2.7 46.9c0-7.3 5.9-13.2 13.2-13.2H47z\",\n fill: \"#36C5F0\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99.9 46.9c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H99.9V46.9zm-6.6 0c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V13.8C66.9 6.5 72.8.6 80.1.6c7.3 0 13.2 5.9 13.2 13.2v33.1z\",\n fill: \"#2EB67D\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.1 99.8c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V99.8h13.2zm0-6.6c-7.3 0-13.2-5.9-13.2-13.2 0-7.3 5.9-13.2 13.2-13.2h33.1c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H80.1z\",\n fill: \"#ECB22E\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSlack);\nexport default __webpack_public_path__ + \"static/media/slack.63931903.svg\";\nexport { ForwardRef as ReactComponent };","import React, { SVGProps } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { SVGPathData } from 'svg-pathdata';\nimport * as MuiUtils from '@material-ui/core/utils';\n\ninterface BoxData {\n x: number\n y: number\n width: number\n height: number\n}\n\n// default icon size in pixels\nconst ICON_SIZE = 24;\n\n// finds svg recursively\nconst extractSvg = (children: HTMLCollection): Element | null => {\n for (const child of Array.from(children)) {\n if (/^svg$/i.test(child.tagName)) return child;\n\n if (!!child.children.length) {\n const _svg = extractSvg(child.children);\n if (_svg) return _svg;\n }\n }\n return null;\n};\n\n// parses box data from svg\nconst parseBoxData = (svg: Element): BoxData => {\n const result = {x: 0, y: 0, width: 0, height: 0};\n const viewBox = svg.getAttribute('viewBox');\n\n result.width = Number(svg.getAttribute('width') || 0);\n result.height = Number(svg.getAttribute('height') || 0);\n\n if (viewBox) {\n const [_x, _y, _width, _height] = viewBox.split(' ');\n result.x = Number(_x);\n result.y = Number(_y);\n result.width = Number(_width);\n result.height = Number(_height);\n }\n\n return result;\n};\n\n// fixes path data\nconst fixPathData = (pathData: SVGPathData, boxData: BoxData) => {\n const { x, y, width, height } = boxData;\n const scale = ICON_SIZE / Math.max(width, height);\n\n // fix svg icon position\n if (x !== 0 || y !== 0) pathData.translate(0 - x, 0 - y);\n if (width > height) pathData.translate(0, (width - height) / 2);\n if (height > width) pathData.translate((height - width) / 2, 0);\n\n // scale to target size\n pathData.scale(scale, scale);\n\n return pathData;\n};\n\n// extracts element attributes to object\nconst extractElementProps = (el: Element) => {\n const _props: {[key: string]: string | null} = {};\n for (const name of el.getAttributeNames()) {\n const properName = (() => {\n const parts = name.split(/[-_:]/i);\n if (parts.length === 1) return parts[0];\n return parts.map((a, i) => {\n if (i > 0) return a.toLowerCase().replace(/^\\w/, b => b.toUpperCase());\n return a.toLowerCase();\n }).join('');\n })();\n _props[properName] = el.getAttribute(name);\n }\n return _props;\n};\n\n// creates normal svg element icon\nexport const createSvgIcon = (SvgComponent: React.FunctionComponent) => {\n const element = document.createElement('div');\n element.innerHTML = renderToStaticMarkup();\n\n const svg = extractSvg(element.children);\n if (!svg) throw new Error('invalid svg: svg not found');\n\n const boxData = parseBoxData(svg);\n const ns = svg.getAttribute('xmlns');\n\n svg.removeAttribute('width');\n svg.removeAttribute('height');\n svg.removeAttribute('x');\n svg.removeAttribute('y');\n svg.setAttribute( 'viewBox', `0 0 ${ICON_SIZE} ${ICON_SIZE}`);\n svg.setAttributeNS(ns, 'viewBox', `0 0 ${ICON_SIZE} ${ICON_SIZE}`);\n\n const fixPaths = (children: HTMLCollection) => {\n for (const child of Array.from(children)) {\n if (!!child.children.length) fixPaths(child.children);\n\n if (!/^path$/i.test(child.tagName)) continue;\n\n const pathData = new SVGPathData(child.getAttribute('d') || '');\n fixPathData(pathData, boxData);\n\n child.setAttribute('d', pathData.encode());\n child.setAttributeNS(ns, 'd', pathData.encode());\n }\n };\n fixPaths(svg.children);\n\n return (props: SVGProps) => {\n const svgProps = extractElementProps(svg);\n svgProps.className = 'MuiSvgIcon-root';\n\n const extraProps = {...props};\n if (extraProps.viewBox) delete extraProps.viewBox;\n if (extraProps.className) {\n svgProps.className = [svgProps.className, extraProps.className].join(' ');\n delete extraProps.className;\n }\n Object.assign(svgProps, extraProps);\n\n return (\n \n );\n };\n};\n\n// creates material-ui based icon\nexport const createMuiSvgIcon = (SvgComponent: React.FunctionComponent, displayName: string) => {\n const element = document.createElement('div');\n element.innerHTML = renderToStaticMarkup();\n\n const svg = extractSvg(element.children);\n if (!svg) throw new Error('invalid svg: svg not found');\n\n // scan recursively to extract all paths of svg\n const paths: string[] = [];\n const scanDom = (children: HTMLCollection) => {\n for (const child of Array.from(children)) {\n if (!!child.children.length) scanDom(child.children);\n\n if (!/^path$/i.test(child.tagName)) continue;\n\n const d = child.getAttribute('d');\n if (d) paths.push(d);\n }\n };\n scanDom(svg.children);\n\n if (!paths.length) throw new Error('invalid svg: no path found');\n\n const boxData = parseBoxData(svg);\n const pathData = new SVGPathData(paths.join(' '));\n\n fixPathData(pathData, boxData);\n return MuiUtils.createSvgIcon(React.createElement('path', {d: pathData.encode()}), displayName);\n};","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgGoogleClassroom(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Livello_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 578.9 500\",\n enableBackground: \"new 0 0 578.9 500\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0F9D58\",\n d: \"M52.6,52.6h473.7v394.7H52.6V52.6z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#57BB8A\",\n d: \"M394.7,263.2c16.4,0,29.6-13.3,29.6-29.6s-13.3-29.6-29.6-29.6s-29.6,13.3-29.6,29.6 S378.4,263.2,394.7,263.2L394.7,263.2z M394.7,282.9c-31.7,0-65.8,16.8-65.8,37.6v21.6h131.6v-21.6 C460.5,299.7,426.4,282.9,394.7,282.9z M184.2,263.2c16.4,0,29.6-13.3,29.6-29.6s-13.3-29.6-29.6-29.6s-29.6,13.3-29.6,29.6 S167.9,263.2,184.2,263.2L184.2,263.2z M184.2,282.9c-31.7,0-65.8,16.8-65.8,37.6v21.6H250v-21.6 C250,299.7,215.9,282.9,184.2,282.9z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F7F7F7\",\n d: \"M289.5,236.8c21.8,0,39.5-17.7,39.4-39.5c0-21.8-17.7-39.5-39.5-39.4c-21.8,0-39.4,17.7-39.4,39.5 C250,219.2,267.7,236.8,289.5,236.8z M289.5,263.2c-44.4,0-92.1,23.6-92.1,52.6v26.3h184.2v-26.3 C381.6,286.7,333.9,263.2,289.5,263.2z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F1F1F1\",\n d: \"M342.1,421.1h118.4v26.3H342.1V421.1z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4B400\",\n d: \"M539.5,0h-500C17.7,0,0,17.7,0,39.5v421.1C0,482.3,17.7,500,39.5,500h500c21.8,0,39.5-17.7,39.5-39.5V39.5 C578.9,17.7,561.3,0,539.5,0z M526.3,447.4H52.6V52.6h473.7V447.4z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.2,\n fill: \"#FFFFFF\",\n enableBackground: \"new \",\n d: \"M539.5,0h-500C17.7,0,0,17.7,0,39.5v3.3C0,21,17.7,3.3,39.5,3.3 h500c21.8,0,39.5,17.7,39.5,39.5v-3.3C578.9,17.7,561.3,0,539.5,0z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.2,\n fill: \"#BF360C\",\n enableBackground: \"new \",\n d: \"M539.5,496.7h-500C17.7,496.7,0,479,0,457.2v3.3 C0,482.3,17.7,500,39.5,500h500c21.8,0,39.5-17.7,39.5-39.5v-3.3C578.9,479,561.3,496.7,539.5,496.7z\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"SVGID_1_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 154.8649,\n y1: 295.747,\n x2: 154.8649,\n y2: 282.6343,\n gradientTransform: \"matrix(12.992 0 0 -4 -1584.6235 1631.0867)\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#BF360C\",\n stopOpacity: 0.2\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#BF360C\",\n stopOpacity: 0.02\n }\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#SVGID_1_)\",\n d: \"M460.3,447.4H341.9l52.6,52.6h118.3L460.3,447.4z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.2,\n fill: \"#263238\",\n enableBackground: \"new \",\n d: \"M52.6,49.3h473.7v3.3H52.6V49.3z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.2,\n fill: \"#FFFFFF\",\n enableBackground: \"new \",\n d: \"M52.6,447.4h473.7v3.3H52.6V447.4z\"\n })), /*#__PURE__*/React.createElement(\"radialGradient\", {\n id: \"SVGID_2_\",\n cx: 131.4012,\n cy: 367.2001,\n r: 18.1966,\n gradientTransform: \"matrix(38.0002 0 0 -38 -4973.3276 13965.3232)\",\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#FFFFFF\",\n stopOpacity: 0.1\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#FFFFFF\",\n stopOpacity: 0\n }\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#SVGID_2_)\",\n d: \"M539.5,0h-500C17.7,0,0,17.7,0,39.5v421.1C0,482.3,17.7,500,39.5,500h500 c21.8,0,39.5-17.7,39.5-39.5V39.5C578.9,17.7,561.3,0,539.5,0z\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGoogleClassroom);\nexport default __webpack_public_path__ + \"static/media/google-classroom.a477848f.svg\";\nexport { ForwardRef as ReactComponent };","import { createSvgIcon, createMuiSvgIcon } from './utils';\n\nimport { ReactComponent as SlackSvg } from '../../assets/svg-icons/slack.svg';\nimport { ReactComponent as GoogleClassroomSvg } from '../../assets/svg-icons/google-classroom.svg';\n\n// slack\nexport const CSlack = createSvgIcon(SlackSvg);\nexport const Slack = createMuiSvgIcon(SlackSvg, 'Slack');\n\n// google classroom\nexport const CGoogleClassroom = createSvgIcon(GoogleClassroomSvg);\nexport const GoogleClassroom = createMuiSvgIcon(GoogleClassroomSvg, 'GoogleClassroom');","import React, { useState, ComponentProps } from 'react';\nimport {\n Box,\n Button,\n CircularProgress,\n Grid,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport {\n PlayArrow as PlayArrowIcon\n} from '@material-ui/icons';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport Editor from 'react-simple-code-editor';\nimport prism from 'prismjs';\nimport axios from 'axios';\nimport { v4 as uuid } from 'uuid';\nimport SplitPane from 'react-split-pane';\n\nimport { cleanCode } from '../../../libs/cleaner';\nimport Spec from '../../../models/Spec';\nimport TestOutputs, { Output as TestOutput, Props as TestOutputsProp } from '../../TestOutputs';\nimport utils from '../../../libs/utils';\nimport auth from '../../../libs/auth';\nimport { useDialog } from '../../../context/Dialog';\nimport { CSlack } from '../../Icons';\n\n\ninterface SpecTestProps extends Pick{\n spec: Spec\n answer: string\n graded?: boolean\n onAnswerChange: (answer: string) => any\n onTestResultChange?: (result: TestResult | null) => any\n onBeforeTest?: () => any\n showReference?: boolean,\n courseId?: string\n courseWorkId?: string\n editorFooter?: ComponentProps['children']\n resultFooter?: ComponentProps['children']\n}\n\nexport interface TestResult {\n id: string\n output: TestOutput[]\n}\n\nconst useStyle = makeStyles(() => ({\n contentBox: {\n minWidth: '415px',\n maxHeight: '600px',\n overflow: 'auto'\n },\n editor: {\n display: 'flex',\n flex: '1 0 auto',\n\n '& pre': {\n width: '100%',\n display: 'block !important'\n }\n },\n splitPane: {\n '& .Resizer': {\n position: 'relative',\n opacity: 1,\n background: 'rgba(0,0,0,0.2)',\n backgroundClip: 'padding-box',\n\n '&.vertical:hover': {\n borderLeft: '5px solid rgba(0,0,0,0.1)',\n borderRight: '5px solid rgba(0,0,0,0.1)'\n },\n\n '&:before': {\n content: '\"\"',\n display: 'block',\n height: '40px',\n width: '20px',\n backgroundColor: 'white',\n border: '1px solid rgba(0,0,0,0.2)',\n position: 'absolute',\n top: '50%',\n left: '-9.5px',\n transform: 'translateY(-50%)',\n borderRadius: '50px'\n },\n\n '&:after': {\n content: '\"\"',\n display: 'block',\n height: '15px',\n width: '15px',\n backgroundImage: 'url(/assets/svg-icons/horizontal-resize.svg)',\n backgroundSize: 'contain',\n backgroundPosition: 'center',\n position: 'absolute',\n opacity: '0.5',\n top: '50%',\n left: '-7px',\n transform: 'translateY(-50%)',\n borderRadius: '50px'\n }\n }\n }\n}));\n\nexport const SpecTest = (props: SpecTestProps) => {\n const {\n spec,\n answer,\n graded,\n onAnswerChange,\n onTestResultChange,\n onBeforeTest,\n showReference = false,\n courseId,\n courseWorkId,\n editorFooter,\n resultFooter,\n\n activityIndex,\n onMarkAllAsCorrect,\n onMarkAsCorrect\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [testResult, setTestResult] = useState(null);\n\n const { alert } = useDialog();\n const classes = useStyle();\n\n const runTest = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setTestResult(null);\n\n if (onBeforeTest)\n await onBeforeTest();\n\n const { data } = await axios.post('/exam/submit', JSON.stringify({\n submitterID: courseId && courseWorkId ? utils.generateSubmissionUID(courseId, courseWorkId) : uuid(),\n assignmentID: courseWorkId,\n activityID: spec.id,\n code: answer,\n isAdmin: auth.isAdmin(),\n accountID: auth.getSession()?.user?.userid.toString(),\n graded,\n }));\n\n data.output = data.output || [];\n setTestResult(data as TestResult);\n if (onTestResultChange)\n onTestResultChange(data as TestResult);\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n const shareRefToSlack = async (ref: string) => {\n await navigator.clipboard.writeText([\n 'Hello. I need assistance with my code:',\n `\\`${ref}\\`\\n`,\n 'The problem that I\\'m having is:',\n ''\n ].join('\\n'));\n\n await alert((\n Reference code has been copied. Simply paste it in your message and send.\n ), {\n title: 'Share Reference to Slack'\n });\n window.open('slack://open');\n };\n\n const showOutputColumn = !!testResult || !!errorMessage;\n\n const editorColumn = (\n <>\n \n \n onAnswerChange(cleanCode(event.target.value))}\n disabled={isLoading}\n highlight={(code) => prism.highlight(\n code,\n prism.languages.javascript,\n 'javascript'\n )}\n padding={10}\n style={{\n fontFamily: '\"Fira code\", \"Fira Mono\", monospace',\n backgroundColor: 'rgba(250,250,250, 1)',\n fontSize: 12\n }}\n className={classes.editor}\n textareaClassName=\"box-border\"\n preClassName=\"box-border\"\n autoFocus\n />\n \n \n \n {editorFooter}\n \n : }\n onClick={() => runTest()}\n variant=\"contained\"\n color=\"primary\"\n >\n Run\n \n \n \n \n );\n\n const outputColumn = (\n <>\n \n \n {!!testResult?.id && showReference && (\n \n \n Having issues?\n \n Submit the following reference code to #technical-questions on Slack for support:\n \n \n { testResult.id }\n   \n }\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n onClick={() => shareRefToSlack(testResult?.id || '')}\n >\n Share to Slack\n \n \n \n \n )}\n\n {(() => {\n if (errorMessage)\n return (\n
    \n Something went wrong.\n

    { errorMessage }

    \n

    Please run test again.

    \n
    \n );\n\n if (testResult)\n return (\n \n );\n })()}\n
    \n
    \n\n \n
    {resultFooter}
    \n\n {\n setTestResult(null);\n setErrorMessage('');\n if (onTestResultChange)\n onTestResultChange(null);\n }}>\n Close\n \n
    \n \n );\n\n if (showOutputColumn)\n return (\n \n {editorColumn}\n {outputColumn}\n \n );\n\n return ({editorColumn});\n};\n\nexport default SpecTest;\n","import React, { useState } from 'react';\nimport {\n Box,\n Button,\n CircularProgress\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport ReactMde from 'react-mde';\nimport ReactMarkdown from 'react-markdown';\nimport gfm from 'remark-gfm';\n\nimport SpecComment from '../../../models/SpecComment';\nimport useLoadingStatus from '../../../hooks/useLoadingStatus';\n\ninterface CommentInputProps {\n specId: string\n onNewComment: (comment: SpecComment) => void\n onFocus?: () => void\n}\n\nexport const CommentInput = (props: CommentInputProps) => {\n const { specId, onNewComment, onFocus } = props;\n const [activeTab, setActiveTab] = useState<'write' | 'preview'>('write');\n const [input, setInput] = useState('');\n const { isLoading, errorMessage, setErrorMessage, executeWithStatus } = useLoadingStatus();\n\n // submit comment\n const submit = async () => {\n await executeWithStatus(async () => {\n onNewComment(await SpecComment.create({\n specId,\n content: input,\n }));\n setInput('');\n });\n };\n\n return (\n <>\n setInput(value)}\n readOnly={false}\n selectedTab={activeTab}\n minEditorHeight={100}\n maxEditorHeight={200}\n initialEditorHeight={200}\n onTabChange={setActiveTab}\n generateMarkdownPreview={(markdown: any) => Promise.resolve(\n ,\n )}\n childProps={{\n textArea: {\n onFocus,\n tabIndex: -1,\n style: {\n height: '125px',\n resize: 'none'\n }\n }\n }}\n />\n\n {!!errorMessage && (\n \n setErrorMessage('')}>\n {errorMessage}\n \n \n )}\n\n \n }\n disabled={isLoading || !input}\n variant=\"contained\" color=\"primary\"\n onClick={() => submit()}\n >\n Submit\n \n \n \n );\n};\n\nexport default CommentInput;\n","import React from 'react';\nimport {\n Box,\n Grid,\n Divider,\n Avatar,\n Typography,\n CircularProgress,\n makeStyles,\n MenuItem\n} from '@material-ui/core';\nimport {\n MoreVert as MoreIcon\n} from '@material-ui/icons';\nimport ReactMarkdown from 'react-markdown';\nimport gfm from 'remark-gfm';\nimport moment from 'moment';\n\nimport SpecComment from '../../../models/SpecComment';\nimport SpecCommentReport from '../../../models/SpecCommentReport';\nimport { MenuIconButton } from '../../Buttons';\nimport { useDialog } from '../../../context/Dialog';\nimport utils from '../../../libs/utils';\nimport auth from '../../../libs/auth';\nimport useLoadingStatus from '../../../hooks/useLoadingStatus';\n\ninterface CommentItemProps {\n comment: SpecComment\n divider?: boolean\n showMenu?: boolean\n onDeleted?: () => void\n}\n\ninterface CommentAction {\n name: string\n onClick: () => void\n show: boolean\n}\n\nconst useStyle = makeStyles(() => ({\n authorName: {\n fontWeight: 'bold',\n opacity: 0.85,\n margin: 0\n },\n timestamp: {\n fontSize: '0.75em',\n lineHeight: '1',\n opacity: 0.75,\n }\n}));\n\nexport const CommentItem = (props: CommentItemProps) => {\n const { divider, comment, onDeleted = () => {}, showMenu = true } = props;\n const { isLoading, executeWithStatus } = useLoadingStatus();\n const classes = useStyle();\n const { alert, confirm, prompt } = useDialog();\n\n const session = auth.getSession();\n const isOwner = session?.accountID === comment.authorId;\n const isAdmin = ['admin', 'teacher'].includes(session?.accountType || '');\n\n // delete comment\n const deleteComment = async () => {\n await executeWithStatus(async () => {\n const confirmed = await confirm('Are you sure to delete the comment?', {\n title: 'Delete Confirmation'\n });\n if (confirmed) {\n await comment.destroy();\n onDeleted();\n }\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Delete Comment Error'\n }));\n };\n\n // hide comment\n const hideComment = async () => {\n await executeWithStatus(async () => {\n const confirmed = await confirm('Are you sure to hide the comment?', {\n title: 'Hide Confirmation'\n });\n if (confirmed) {\n await comment.destroy();\n onDeleted();\n }\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Hide Comment Error'\n }));\n };\n\n // report comment\n const reportComment = async () => {\n await executeWithStatus(async () => {\n const description = await prompt((\n \n \n \n ), {\n title: 'Report Comment',\n fieldProps: {\n placeholder: 'Enter report description',\n required: true,\n fullWidth: true,\n multiline: true,\n rows: 3\n }\n });\n if (typeof description === 'string') {\n await SpecCommentReport.create({\n commentId: comment.id,\n description: description\n });\n\n await alert('Report has been sent successfully. Admins will resolve this concern.', {\n title: 'Report sent'\n });\n }\n }, e => alert(utils.getRequestErrorMessage(e),{\n title: 'Report Note Error'\n }));\n };\n\n const actions: CommentAction[] = [\n {\n name: 'Delete',\n onClick: deleteComment,\n show: isOwner\n },\n {\n name: 'Remove',\n onClick: hideComment,\n show: !isOwner && isAdmin\n },\n {\n name: 'Report',\n onClick: reportComment,\n show: !isOwner\n }\n ].filter(a => a.show);\n\n return (\n <>\n \n \n \n \n \n \n \n {comment.author?.fullName || comment.authorId}\n {moment(comment.createdAt).format('MMM D, YYYY [at] h:mm:ss a')}\n \n \n \n\n \n \n {showMenu && (\n : }\n iconButtonProps={{size: 'small', disabled: isLoading}}>\n {({ setAnchorEl }) => actions.map(action => (\n {\n setAnchorEl(null);\n action.onClick();\n }}>\n { action.name }\n \n ))}\n \n )}\n \n \n \n\n \n
    \n \n
    \n
    \n\n {divider && ()}\n \n );\n};\n\nexport default CommentItem;\n","import React, { useEffect, useState, useRef } from 'react';\nimport {\n Box,\n Grid,\n Button,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport {\n Alert,\n Skeleton\n} from '@material-ui/lab';\n\nimport SpecComment from '../../../models/SpecComment';\nimport { CommentInput } from './CommentInput';\nimport { CommentItem } from './CommentItem';\nimport { Paging } from '../../../interfaces/pagination';\nimport useLoadingStatus from '../../../hooks/useLoadingStatus';\n\nexport interface SpecCommentsProps {\n specId: string\n onCommentRead?: (id: number) => void\n}\n\nconst useStyle = makeStyles(() => ({\n container: {\n height: '100%',\n minHeight: '50vh',\n },\n feedsWrapper: {\n overflow: 'hidden auto',\n '&::-webkit-scrollbar': {\n width: '0.4em'\n },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: 'rgba(0,0,0,0.2)'\n }\n }\n}));\n\nexport const SpecComments = (props: SpecCommentsProps) => {\n const { specId, onCommentRead } = props;\n const [comments, setComments] = useState([]);\n const [paging, setPaging] = useState(null);\n\n const { isLoading, errorMessage, executeWithStatus } = useLoadingStatus();\n const feedsRef = useRef();\n const classes = useStyle();\n\n const hint = 'Your notes are publicly visible on all Kingsland University cohorts that use this assignment.';\n\n // scrolls feed to the end\n const scrollToEnd = () => {\n setTimeout(() => {\n const { current } = feedsRef;\n if (current) current.scrollTo(0, current.scrollHeight);\n });\n };\n\n // loads latest comments\n const loadComments = async () => {\n await executeWithStatus(async () => {\n setComments([]);\n const result = await SpecComment.find({\n specId,\n $limit: 10\n });\n setPaging(result.paging);\n setComments(result.items.reverse());\n scrollToEnd();\n });\n };\n\n // loads more comments to append\n const loadMoreComments = async () => {\n await executeWithStatus(async () => {\n const result = await SpecComment.find({\n specId,\n $limit: 10,\n $page: (paging?.currentPage || 0) + 1\n });\n const existingIds = comments.map(c => c.id);\n const newComments = result.items.filter(c => !existingIds.includes(c.id));\n setPaging(result.paging);\n setComments([...newComments.reverse(), ...comments]);\n setTimeout(() => feedsRef.current?.scrollTo(0, 1));\n });\n };\n\n // reload comments when spec id changes\n useEffect(() => {\n loadComments();\n }, [specId]);\n\n // trigger read event\n useEffect(() => {\n let timeout: NodeJS.Timeout|null = null;\n if (comments.length) {\n timeout = setTimeout(async () => {\n try {\n const _comment = comments[comments.length - 1];\n await _comment.read();\n if (onCommentRead) onCommentRead(_comment.id);\n } catch (e) {\n console.error(e);\n } finally {\n timeout = null;\n }\n }, 3000);\n }\n return () => {\n if (timeout !== null)\n clearTimeout(timeout);\n };\n }, [comments.length]);\n\n return (\n \n feedsRef.current = ref} item xs className={classes.feedsWrapper} onScroll={e => {\n if (isLoading) return;\n if (paging && !paging.nextPage) return;\n if (e.currentTarget.scrollTop <= 0) loadMoreComments();\n }}>\n \n {!!errorMessage && (\n \n loadMoreComments()}>\n Try Again\n \n }\n >\n {errorMessage}\n \n \n )}\n\n {(() => {\n if (isLoading)\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n\n if (paging?.nextPage)\n return (\n \n loadMoreComments()}>\n Load More\n \n \n );\n\n if (!comments.length)\n return (\n \n No notes yet, be the first to add a note!\n {hint}\n \n );\n })()}\n\n {comments.map((comment, index) => (\n \n setComments(comments.filter(c => c !== comment))}\n />\n \n ))}\n \n \n \n \n {!!comments.length && {hint}}\n {\n setComments([...comments, comment]);\n scrollToEnd();\n }}\n />\n \n \n \n );\n};\n\nexport default SpecComments;\n\nexport {\n CommentInput,\n CommentItem\n};\n","import axios from 'axios';\n\nimport { AxiosCache, AxiosCacheRequestConfig } from '../libs/AxiosCache';\n\nexport interface StudentType {\n userId: string\n courseId: string\n profile: {\n id: string\n emailAddress: string\n photoUrl: string\n name: {\n givenName: string\n familyName: string\n fullName: string\n }\n }\n}\n\nclass Student implements StudentType {\n userId: string\n courseId: string\n profile: {\n id: string\n emailAddress: string\n photoUrl: string\n name: {\n givenName: string\n familyName: string\n fullName: string\n }\n }\n\n constructor(student: StudentType) {\n this.userId = student.userId;\n this.courseId = student.courseId;\n this.profile = student.profile;\n }\n\n static async findOne(query?: {courseId: string, userId: string}, config?: AxiosCacheRequestConfig): Promise {\n const { data } = await axios.get('/classroom/courses/student', AxiosCache.getConfig({\n ...config, params: query\n }));\n return data ? new Student(data) : null;\n }\n\n static async find(query?: {courseId: string}, config?: AxiosCacheRequestConfig): Promise {\n const { data = [] } = await axios.get('/classroom/courses/students/list', AxiosCache.getConfig({\n ...config, params: query\n }));\n return (data as StudentType[]).map(a => new Student(a));\n }\n}\n\nexport default Student;\n","export const cleanCode = (raw: string | undefined): string => {\n let result = removeAndParseInvalidLineBreak(raw);\n result = removeZeroWidthSpace(result);\n\n return result;\n};\n\nexport const removeZeroWidthSpace = (raw: string | undefined): string => {\n if (!raw) return '';\n\n return raw.replace(/\\u200b/g, '');\n};\n\nexport const removeAndParseInvalidLineBreak = (\n raw: string | undefined\n): string => {\n if (!raw) return '';\n\n const rg = RegExp(/\\\\n/g);\n const validLineBreak = '-validLN-';\n const toBeTested = '-toBeTestedLN-';\n let rawData = raw || '';\n rawData = rawData.replace(/^\\\\n$/gm, '');\n while (rg.exec(rawData) !== null) {\n try {\n rawData = rawData.replace(/\\\\n/, toBeTested);\n rawData = rawData.replace(/\\\\n/g, '(function forTesting(){})();');\n rawData = rawData.replace(toBeTested, '\\\\n');\n window.Function(`\"use strict\";${rawData}`);\n\n rawData = rawData.replace(/\\\\n/, validLineBreak);\n } catch (error) {\n rawData = rawData.replace(/\\\\n/, '\\n');\n rg.lastIndex = rg.lastIndex - 1;\n } finally {\n rawData = rawData.replace(\n /\\(function forTesting\\(\\)\\{\\}\\)\\(\\);/g,\n '\\\\n'\n );\n }\n }\n\n const validCode = rawData.replace(RegExp(validLineBreak, 'g'), '\\\\n');\n\n return validCode;\n};\n","import React, { useState } from 'react';\nimport { Button, CircularProgress } from '@material-ui/core';\nimport {\n Favorite as FavoriteIcon,\n LibraryBooks as LibraryBooksIcon\n} from '@material-ui/icons';\n\nimport { SolutionGalleryModal } from '../components/Modal';\nimport Solution from '../models/Solution';\nimport useSnackbar from './useSnackbar';\nimport { useDialog } from '../context/Dialog';\n\ninterface renderOpenButtonProps {\n specId: string\n}\n\ninterface renderSaveButtonProps {\n specId: string\n code: string\n}\n\nconst useSolutionGallery = () => {\n // modal\n const [isGalleryOpen, setIsGalleryOpen] = useState(false);\n const [gallerySpecId, setGallerySpecId] = useState('');\n\n const { confirm } = useDialog();\n\n const openGallery = (specId: string) => {\n setGallerySpecId(specId);\n setIsGalleryOpen(true);\n };\n\n // save\n const [isSavingCode, setIsSavingCode] = useState(false);\n const [saveStatusMap] = useState>(new Map());\n const saveCode = async (specId: string, code: string) => {\n try {\n saveStatusMap.set(specId, true);\n setIsSavingCode(true);\n if (await confirm('Do you want to save the code to solution gallery?')) {\n await (new Solution({\n specID: specId,\n name: `${specId} [${new Date().toLocaleString()}]`,\n code: code\n })).create();\n\n showSnackbarMessage( 'Code has been successfully saved.', 'success');\n setGallerySpecId('');\n }\n }\n catch (e) {\n showSnackbarMessage(`Unable to save code: ${e.message}`, 'error');\n }\n finally {\n saveStatusMap.set(specId, false);\n setIsSavingCode(false);\n }\n };\n\n // snackbar\n const { renderSnackbar, showMessage: showSnackbarMessage } = useSnackbar();\n\n return {\n renderModal() {\n return (\n setIsGalleryOpen(false)}\n />\n );\n },\n\n renderOpenButton(props: renderOpenButtonProps) {\n return (\n openGallery(props.specId)}\n variant=\"outlined\"\n color=\"primary\"\n startIcon={}\n >\n Solutions\n \n );\n },\n\n renderSaveButton(props: renderSaveButtonProps) {\n return (\n saveCode(props.specId, props.code)}\n variant=\"outlined\"\n color=\"primary\"\n startIcon={isSavingCode && !!saveStatusMap.get(props.specId)? () : ()}\n disabled={(isSavingCode && !!saveStatusMap.get(props.specId)) || !props.code.trim()}\n >\n Save\n \n );\n },\n\n renderSnackbar\n };\n};\n\nexport default useSolutionGallery;\n","import React, { useEffect, ComponentProps } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport {\n Button,\n Container, ContainerProps,\n} from '@material-ui/core';\n\nimport auth from '../libs/auth';\n\ninterface Props extends Omit {\n children: ComponentProps['children']\n}\n\nconst StudentLayout = (props: Props) => {\n const { children, ...containerProps } = props;\n const history = useHistory();\n const session = auth.getSession();\n\n const logout = () => {\n auth.logout();\n history.push('/student/login');\n };\n\n useEffect(() => {\n if (!auth.isStudent()) history.push('/');\n }, []);\n\n if(!session) return (<>);\n\n return (\n \n
    \n \"Logo\"/\n
    \n
    \n

    {session.user.fullname} (#{session.user.userid})

    \n

    \n {session.email}\n

    \n
    \n
    \n \n
    \n
    \n
    \n {children}\n
    \n );\n};\n\nexport default StudentLayout;\n","import axios from 'axios';\nimport FormData from 'form-data';\n\nimport auth from '../libs/auth';\nimport { AxiosCacheRequestConfig } from '../libs/AxiosCache';\nimport Spec from './Spec';\nimport GenericResponse from './GenericResponse';\nimport APITools from './APITools';\n\ninterface StudentInfo {\n studentID: string;\n firstName: string;\n lastName: string;\n grade: string;\n letterGrade: string;\n submittedAssignmentData: string;\n}\n\nclass Assignment {\n id: string;\n name: string;\n type: string;\n points: string;\n students: StudentInfo[];\n grade?: string;\n letterGrade?: string;\n checked?: boolean;\n\n constructor(assignment: Assignment) {\n this.id = assignment.id;\n this.name = assignment.name;\n this.type = assignment.type;\n this.points = assignment.points;\n this.students = assignment.students;\n }\n\n public static async getAll(courseID: String): Promise {\n const data = (\n await axios.post('/populi/get-course-instance-assignments', {\n instanceID: courseID,\n })\n ).data;\n\n return (data.assignments || []).map((item: any) => ({\n id: item.assignmentID as string,\n name: item.name as string,\n type: item.type as string,\n points: item.points as string,\n students: (item.studentInfo || []) as StudentInfo[],\n grade: item.grade as string,\n letterGrade: item.letterGrade as string,\n checked: true,\n }));\n }\n\n public static async getSpecList(assignmentID: string): Promise {\n const data = (await axios.get(`/specs?assignmentID=${assignmentID}`)).data;\n\n return data;\n }\n\n public static async cloneSpecs(\n sourceAssignmentID: string,\n targetAssignmentID: string\n ) {\n const data = (\n await axios.post('/admin/assignment/clone', {\n sourceAssignmentID,\n targetAssignmentID,\n })\n ).data;\n\n return data;\n }\n\n public static async addSpec(assignmentID: string, specID: string) {\n const data = (\n await axios.post('/admin/assignment/spec', {\n assignmentID,\n specID,\n })\n ).data;\n return data;\n }\n\n public static async removeSpec(assignmentID: string, specID: string) {\n const data = (\n await axios.delete('/admin/assignment/spec', {\n data: { assignmentID, specID },\n })\n ).data;\n return data;\n }\n\n public static async setSpecs(assignmentID: string, specIDs: string[]) {\n const { data } = await axios.put('/admin/assignment/specs', {\n assignmentId: assignmentID,\n specIds: specIDs\n });\n return data;\n }\n\n public async addComment({\n studentID,\n specID,\n comment,\n file,\n internal,\n }: {\n studentID: string;\n specID?: string;\n comment?: string;\n file?: File;\n internal?: boolean;\n }): Promise {\n const assignmentID = this.id;\n const form = new FormData();\n\n form.append('file', file);\n form.append('personID', studentID);\n form.append('assignmentID', assignmentID);\n form.append('comment', comment);\n form.append('internal', internal);\n\n if (!!specID) {\n form.append('specID', specID);\n }\n\n const { data } = await axios.post('/populi/assignment/comment', form, {\n headers: 'multipart/form-data',\n });\n\n return data;\n }\n\n public async getComments(params: { personID: string }): Promise {\n const queryString = APITools.parseQueryParams({\n ...params,\n assignmentID: this.id,\n });\n const data = await axios.get(`/populi/assignment/comments${queryString}`);\n\n return data;\n }\n\n static async saveMoodleAssignmentGrade(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n const data = await axios.post('/student/course/assignments/save-grade', {...query, token: session?.accessToken});\n\n return data;\n }\n\n static async saveMoodleAssignment(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n\n return await axios.post('/student/course/save-assignment', {...query, token: session?.accessToken});\n }\n}\n\nexport default Assignment;\n","import axios from 'axios';\nimport moment from 'moment';\n\nconst formatDate = (dateStr: string | undefined): string => {\n if (dateStr && dateStr !== 'n/a') {\n const dateTime = new Date(dateStr);\n return moment(dateTime).format('MMM DD, YYYY HH:mm');\n }\n\n return 'n/a';\n};\n\nconst formatSpecData = (data: SpecData[]): SpecData[] => {\n if (data) {\n return data.reduce((acc: any, curr: SpecData) => {\n const { mainInvoker, output } = curr;\n\n return [\n ...acc,\n {\n arguments: curr.arguments,\n mainInvoker,\n output,\n },\n ];\n }, []);\n }\n\n return [];\n};\n\nexport interface SpecData {\n id?: string;\n arguments: string[];\n mainInvoker: string;\n output: string;\n}\n\nexport interface SpecInterface {\n assignmentOrderIndex?: number;\n id?: string;\n name?: string;\n autoGradeOff?: boolean;\n showTestCase?: boolean;\n solution?: string;\n env?: string;\n entry?: string;\n data?: SpecData[];\n status?: string;\n assignmentID?: string;\n createdAt?: string;\n updatedAt?: string;\n deletedAt?: string;\n}\n\nclass Spec {\n public assignmentOrderIndex?: number;\n public id: string = '';\n public name: string = '';\n public autoGradeOff: boolean = false;\n public showTestCase?: boolean = false;\n public solution: string = '';\n public env: string = 'node';\n public entry: string = 'argv';\n public data: SpecData[] = [];\n public status?: string;\n public assignmentID?: string;\n public createdAt?: string;\n public updatedAt?: string;\n public deletedAt?: string;\n\n constructor(props?: Spec | SpecInterface) {\n if (props) {\n this.id = props.id || this.id;\n this.name = props.name || this.name;\n this.autoGradeOff = props.autoGradeOff || this.autoGradeOff;\n this.showTestCase = props.showTestCase || this.showTestCase;\n this.solution = props.solution || this.solution;\n this.env = props.env || this.env;\n this.entry = props.entry || this.entry;\n this.data = props.data || this.data;\n this.assignmentOrderIndex = props.assignmentOrderIndex;\n this.assignmentID = props.assignmentID;\n\n if (props.createdAt) {\n this.createdAt = formatDate(props.createdAt);\n }\n\n if (props.updatedAt) {\n this.updatedAt = formatDate(props.updatedAt);\n }\n\n if (props.deletedAt) {\n this.deletedAt = formatDate(props.deletedAt);\n }\n }\n }\n\n public static async find(query?: { assignmentID: string }): Promise {\n const { data = [] } = await axios.get('/specs', {\n params: query\n });\n const sortedData: Spec[] = (data || []);\n sortedData.sort((a, b) => {\n if (a.assignmentOrderIndex === undefined)\n return 1;\n\n if (b.assignmentOrderIndex === undefined)\n return -1;\n\n if (a.assignmentOrderIndex > b.assignmentOrderIndex)\n return 1;\n\n if (a.assignmentOrderIndex < b.assignmentOrderIndex)\n return -1;\n\n return 0;\n });\n return sortedData;\n }\n\n public static async findById(id: string): Promise {\n const { data } = await axios.get('/admin/spec', {\n params: { id }\n });\n return new Spec(data);\n }\n\n public static async fetchList(): Promise {\n const { data } = await axios.get('/admin/specs');\n return data.map(s => new Spec(s));\n }\n\n public static async delete(id: string) {\n const { data } = await axios.delete('/admin/spec', {\n params: { id }\n });\n return data;\n }\n\n public static getTestCaseMainInvoker(testCase: Spec['data'][number]) {\n return `main(${testCase.arguments.map((arg) => (Number(arg) ? Number(arg) : `\"${arg}\"`))})`;\n }\n\n public async save() {\n let {\n id,\n name,\n autoGradeOff,\n showTestCase,\n entry,\n env,\n data,\n assignmentID,\n assignmentOrderIndex,\n } = this;\n if (!name) {\n name = id.replace(/-/g, ' ');\n }\n\n const { data: result } = await axios.post('admin/spec', {\n id,\n name,\n autoGradeOff,\n showTestCase,\n entry,\n env,\n data,\n assignmentID,\n assignmentOrderIndex,\n });\n\n return result;\n }\n\n public async update() {\n let {\n id,\n name,\n autoGradeOff,\n showTestCase,\n entry,\n env,\n data,\n assignmentID,\n assignmentOrderIndex,\n } = this;\n if (!name) {\n name = id.replace(/-/g, ' ');\n }\n\n const { data: result } = await axios.put('admin/spec', {\n id,\n name,\n autoGradeOff,\n showTestCase,\n entry,\n env,\n data,\n assignmentID,\n assignmentOrderIndex,\n });\n\n return result;\n }\n\n public formatData() {\n this.data = formatSpecData(this.data);\n }\n\n public addItem(item?: SpecData) {\n this.data.push(\n item || {\n arguments: [],\n mainInvoker: 'main()',\n output: '',\n }\n );\n }\n}\n\nexport default Spec;\n","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n Button,\n IconButton,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Grid,\n Typography,\n Checkbox,\n FormControlLabel,\n Tooltip,\n makeStyles\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {\n CheckCircleOutline as CheckCircleOutlineIcon,\n ErrorOutline as ErrorOutlineIcon,\n DoneAll as DoneAllIcon,\n Check as CheckIcon\n} from '@material-ui/icons';\nimport { diffChars } from 'diff';\nimport { red, lightGreen } from '@material-ui/core/colors';\n\nimport auth from '../../libs/auth';\n\nexport interface Output {\n passed: boolean\n inputs: string[]\n expectedOutput: string\n actualOutput: string\n}\n\nexport interface Props {\n activityIndex?: number\n outputs: Output[]\n showTestCase?: boolean\n onMarkAsCorrect?(activityIndex: number, outputIndex: number): void\n onMarkAllAsCorrect?(activityIndex: number): void\n}\n\nconst useStyle = makeStyles(() => ({\n outputTable: {\n width: '100%',\n\n '& tr th, & tr td': {\n verticalAlign: 'text-top',\n width: 'auto',\n textAlign: 'left',\n padding: '10px 0',\n\n '&:nth-child(1)': {\n whiteSpace: 'nowrap',\n paddingRight: '20px'\n },\n\n '&:nth-child(2)': {\n width: '100%'\n }\n }\n },\n outputTextBox: {\n margin: 0\n }\n}));\n\nconst findDifference = (expected: string, actual: string) => {\n const characterDiffs = diffChars(expected, actual);\n return characterDiffs.map((diffOutput, index) => {\n const key = `${diffOutput.value}_${index}`;\n if (diffOutput.added) {\n return (\n \n {diffOutput.value.replace(/^\\n$/, ' \\n')}\n \n );\n }\n if (diffOutput.removed) {\n return (\n {diffOutput.value.replace(/^\\n$/, ' \\n')}\n );\n }\n return {diffOutput.value};\n });\n};\n\nconst TestOutputs = ({\n outputs,\n activityIndex,\n showTestCase,\n onMarkAsCorrect,\n onMarkAllAsCorrect,\n}: Props) => {\n const [showOutputDifference, setShowOutputDifference] = useState(false);\n const [hasFailedTest, setHasFailedTest] = useState(false);\n\n const classes = useStyle();\n\n useEffect(() => {\n const failed = outputs.some((output) => !output.passed);\n setHasFailedTest(failed);\n }, [outputs]);\n\n return (\n \n {hasFailedTest && (\n \n \n \n \n setShowOutputDifference(!showOutputDifference)}\n inputProps={{ 'aria-label': 'primary checkbox' }}\n />\n }\n label={Show Difference}\n />\n \n \n \n {(auth.isAdmin()) &&\n !!onMarkAllAsCorrect && (\n \n }\n color=\"primary\"\n onClick={() => {\n if (activityIndex !== undefined)\n onMarkAllAsCorrect(activityIndex);\n }}\n >\n Mark all as correct\n \n \n )}\n \n \n \n )}\n\n {outputs.map((out, index) => {\n const hidden = !showTestCase && /^hidden$/i.test(out.actualOutput) && /^hidden$/i.test(out.expectedOutput);\n return (\n \n } disabled={hidden}>\n \n \n \n \n {out.passed ? : }\n \n \n {out.passed ? 'Test Passed' : 'Test Failed'}\n \n \n ({`${index + 1} of ${outputs.length}`})\n \n \n \n \n {(auth.isAdmin()) &&\n !out.passed &&\n !!onMarkAsCorrect && (\n \n {\n e.preventDefault();\n e.stopPropagation();\n if (activityIndex !== undefined)\n onMarkAsCorrect(activityIndex, index);\n }}\n >\n \n \n \n )}\n\n {hidden && hidden}\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Inputs{(out.inputs || []).join(', ')}
    Expected Answer\n
    {out.expectedOutput}
    \n
    Your Answer\n
    {showOutputDifference ? findDifference(out.expectedOutput, out.actualOutput) : out.actualOutput}
    \n
    \n
    \n \n );\n })}\n
    \n );\n};\n\nexport default TestOutputs;\n","import axios from 'axios';\n\ninterface SolutionType {\n id?: number;\n specID: string;\n name: string;\n code: string;\n}\n\nclass Solution implements SolutionType {\n id?: number;\n specID: string;\n name: string;\n code: string;\n\n constructor(solution: SolutionType) {\n this.id = solution.id;\n this.specID = solution.specID;\n this.name = solution.name;\n this.code = solution.code;\n }\n\n async create(): Promise<{message: string}> {\n const { data: response } = await axios.post('/admin/solutions', {\n specID: this.specID,\n name: this.name,\n code: this.code\n });\n\n if (response.error)\n throw new Error(response.error);\n\n return response as {message: string};\n }\n\n async destroy(): Promise<{message: string}> {\n if (!this.id) throw new Error('ID is required.');\n const { data } = await axios.delete('/admin/solutions', {\n data: {solutionID: this.id}\n });\n\n if (data.error)\n throw new Error(data.error);\n\n return data as {message: string};\n }\n\n static async find(query?: any): Promise {\n const { data } = await axios.get('/admin/solutions', {params: query});\n\n return (data.solutions as SolutionType[]).map(a => new Solution(a));\n }\n}\n\nexport default Solution;","export { SpecTest } from './SpecTest';\nexport { SpecComments } from './SpecComments';\n","import axios from 'axios';\n\nimport SpecComment from './SpecComment';\nimport { BasicUserInfo } from '../interfaces/BasicUserInfo';\nimport { PagingResult } from '../interfaces/pagination';\n\nexport interface SpecCommentReportType {\n id: number\n reporterId: string\n reporter?: BasicUserInfo\n commentId: number\n comment?: SpecComment\n description: string\n resolved: boolean\n createdAt: string\n updatedAt: string\n}\n\nclass SpecCommentReport implements SpecCommentReportType {\n id: number\n reporterId: string\n reporter?: BasicUserInfo\n commentId: number\n comment?: SpecComment\n description: string\n resolved: boolean\n createdAt: string\n updatedAt: string\n\n constructor(report: SpecCommentReportType) {\n this.id = report.id;\n this.reporterId = report.reporterId;\n this.reporter = report.reporter;\n this.commentId = report.commentId;\n this.comment = report.comment ? new SpecComment(report.comment) : report.comment;\n this.description = report.description;\n this.resolved = report.resolved;\n this.createdAt = report.createdAt;\n this.updatedAt = report.updatedAt;\n }\n\n // creates new spec comment report\n static async create(specComment: Partial): Promise {\n const { data } = await axios.post('/spec/comment-report', specComment);\n return new SpecCommentReport(data);\n }\n\n // returns spec comment report list\n static async find(query?: { [key: string]: any }): Promise> {\n const { data } = await axios.get>('/spec/comment-report/list', {\n params: query\n });\n return { ...data, items: data.items.map(s => new SpecCommentReport(s)) };\n }\n\n // static method for resolving report\n static async resolve(query: { id: number }) {\n const { data } = await axios.post('/spec/comment-report/resolve', {}, {\n params: query\n });\n return data;\n }\n\n // resolve report\n async resolve() {\n return SpecCommentReport.resolve({ id: this.id });\n }\n}\n\nexport default SpecCommentReport;\n","import React, { useState } from 'react';\nimport { Button } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\n\nimport { GenericModal } from '../components/Modal';\nimport { ZipFileExplorer } from '../components/ZipFileExplorer';\n\ninterface renderOpenProps {\n fileId: string\n params?: {[key: string]: string}\n}\n\nconst useZipFileExplorerPopUp = () => {\n // modal\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [fileId, setFileId] = useState('');\n const [query, setQuery] = useState<{[key: string]: string}>({});\n const openFileExplorer = (id: string, _query?: {[key: string]: string}) => {\n setFileId(id);\n setIsModalOpen(true);\n setQuery(_query || {});\n };\n\n return {\n openFileExplorer,\n\n renderOpenLink(props: renderOpenProps) {\n return (\n {\n e.preventDefault();\n openFileExplorer(props.fileId, props.params);\n }}>\n Open File Explorer\n \n );\n },\n\n renderOpenButton(props: renderOpenProps) {\n return (\n openFileExplorer(props.fileId, props.params)}\n variant=\"outlined\"\n color=\"primary\"\n >\n Open File Explorer\n \n );\n },\n\n renderModal() {\n return (\n setIsModalOpen(false)}\n footer={(\n
    \n setIsModalOpen(false)}\n variant=\"outlined\"\n color=\"primary\"\n >\n Close\n \n
    \n )}\n >\n
    \n \n
    \n \n );\n }\n };\n};\n\nexport default useZipFileExplorerPopUp;\n","import axios from 'axios';\n\nimport { BasicUserInfo } from '../interfaces/BasicUserInfo';\nimport { PagingResult } from '../interfaces/pagination';\n\nexport interface SpecFeedbackType {\n id: number\n authorId: string\n author?: BasicUserInfo\n specId: string\n description: string\n status: string\n createdAt: string\n updatedAt: string\n}\n\nexport interface FindOptions {\n specId?: string\n status?: string\n [key: string]: any\n}\n\nclass SpecFeedback implements SpecFeedbackType {\n id: number\n authorId: string\n author?: BasicUserInfo\n specId: string\n description: string\n status: string\n createdAt: string\n updatedAt: string\n\n constructor(feedback: SpecFeedbackType) {\n this.id = feedback.id;\n this.authorId = feedback.authorId;\n this.author = feedback.author;\n this.specId = feedback.specId;\n this.description = feedback.description;\n this.status = feedback.status;\n this.createdAt = feedback.createdAt;\n this.updatedAt = feedback.updatedAt;\n }\n\n // creates new spec feedback\n static async create(feedback: Partial): Promise {\n const { data } = await axios.post('/spec/feedback', feedback);\n return new SpecFeedback(data);\n }\n\n // returns spec feedback list\n static async find(query?: FindOptions): Promise> {\n const { data } = await axios.get>('/spec/feedback/list', {\n params: query\n });\n return { ...data, items: data.items.map(s => new SpecFeedback(s)) };\n }\n\n // sets feedback status\n async setStatus(status: string): Promise {\n const { data } = await axios.put('/spec/feedback/status', { status }, {\n params: { id: this.id }\n });\n return new SpecFeedback(data);\n }\n}\n\nexport default SpecFeedback;\n","import React, {useState, useEffect} from 'react';\nimport {\n Grid,\n Button,\n CircularProgress\n} from '@material-ui/core';\nimport axios, { CancelTokenSource } from 'axios';\nimport { makeStyles } from '@material-ui/core/styles';\nimport prism from 'prismjs';\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-numbers/prism-line-numbers.css';\n\nimport utils from '../../libs/utils';\n\nconst useStyles = makeStyles((theme) => ({\n viewer: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n margin: '0 !important'\n }\n}));\n\ninterface CodeViewerProps {\n src: string\n}\n\nconst CodeViewer = (props: CodeViewerProps) => {\n const { src } = props;\n const [content, setContent] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [cancelToken, setCancelToken] = useState(axios.CancelToken.source());\n\n const classes = useStyles();\n const ext = src.split('.').reverse()[0].toLowerCase();\n const language = !!prism.languages[ext] ? ext : '';\n\n const loadSrc = () => {\n const _cancelToken = axios.CancelToken.source();\n cancelToken.cancel(); // cancel existing request\n setCancelToken(_cancelToken);\n\n setTimeout(async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setContent('');\n\n if (src && src !== 'about:blank') {\n const { data } = await axios.get(src, {\n withCredentials: true,\n cancelToken: _cancelToken.token\n });\n setContent(data);\n }\n }\n catch (e) {\n if (!axios.isCancel(e)) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n }\n finally {\n setIsLoading(false);\n }\n });\n };\n\n const renderPrism = (el: HTMLElement | null) => {\n if (el) {\n if (!el.getAttribute('data-prism-initialized')) {\n el.setAttribute('data-prism-initialized', 'true');\n prism.highlightElement(el);\n }\n }\n };\n\n useEffect(() => {\n loadSrc();\n }, [src]);\n\n if (isLoading)\n return (\n \n \n \n \n \n );\n\n if (errorMessage)\n return (\n \n \n
    Something went wrong
    \n

    {errorMessage}

    \n \n
    \n
    \n );\n\n return (\n
    {content}
    \n );\n};\n\nexport default CodeViewer;\n","import React, {useState, useEffect, useRef} from 'react';\nimport {\n Button,\n Switch,\n Grid,\n CircularProgress\n} from '@material-ui/core';\nimport axios from 'axios';\nimport { makeStyles } from '@material-ui/core/styles';\nimport SplitPane from 'react-split-pane';\nimport Divider from '@material-ui/core/Divider';\n\nimport CodeViewer from './CodeViewer';\nimport utils from '../../libs/utils';\n\ninterface Directory {\n name: string\n path: string\n children: Directory[]\n}\n\ninterface FileExplorerProps {\n directory: Directory[]\n isNested?: boolean\n onSelect: (a: Directory) => void\n rootUrl: string\n activeSrc?: string\n}\n\ninterface ZipFileExplorerProps {\n fileId: string\n query?: {[key: string]: string}\n getDirectoryListUrl?: string\n directoryRootUrl?: string\n}\n\nconst useStyles = makeStyles((theme) => ({\n nestedDirectory: {\n paddingLeft: '8px',\n marginLeft: '12px',\n borderLeft: '1px dashed rgba(0,0,0,0.2)',\n },\n directoryItem: {\n display: 'block',\n position: 'relative',\n padding: '3px 7px',\n borderRadius: '4px',\n\n '&.clickable': {\n color: theme.palette.primary.dark,\n textDecoration: 'none',\n\n '&:hover': {\n textDecoration: 'none',\n backgroundColor: 'rgba(0,0,0,0.05)'\n },\n\n '&.active': {\n color: theme.palette.primary.contrastText,\n fontWeight: '400',\n backgroundColor: theme.palette.primary.main\n }\n },\n\n '&.nested:after': {\n content: '\"\"',\n position: 'absolute',\n borderBottom: '1px dashed rgba(0,0,0,0.2)',\n height: '0px',\n width: '8px',\n top: '50%',\n right: '100%'\n }\n },\n panel: {\n overflow: 'auto',\n height: '100%',\n width: '100%'\n },\n iframe: {\n width: '100%',\n height: '99%',\n border: 'none'\n }\n}));\n\nconst FileExplorer = (props: FileExplorerProps) => {\n const {\n directory,\n isNested,\n onSelect,\n rootUrl,\n activeSrc\n } = props;\n const classes = useStyles();\n\n const isItemActive = (item: Directory): boolean => {\n if (!item.children.length) {\n return (activeSrc || '').toLowerCase().indexOf(item.path.toLowerCase()) >= 0;\n }\n return false;\n };\n\n const getItemClass = (item: Directory): string => {\n const result: string[] = [classes.directoryItem];\n\n if (isNested)\n result.push('nested');\n\n if (!item.children.length)\n result.push('clickable');\n\n if (isItemActive(item))\n result.push('active');\n\n return result.join(' ');\n };\n\n return (\n <>\n {directory.map((item) => (\n
    \n {(() => {\n if (item.children.length)\n return (\n <>\n
    \n {item.name}\n
    \n {!!item.children && !!item.children.length && (\n \n )}\n \n );\n\n return (\n {\n e.preventDefault();\n onSelect(item);\n }}>\n {item.name}\n \n );\n })()}\n
    \n ))}\n \n );\n};\n\nexport const ZipFileExplorer = (props: ZipFileExplorerProps) => {\n const {\n fileId,\n getDirectoryListUrl = '/classroom/zip-file/directory/access',\n directoryRootUrl = `${axios.defaults.baseURL}/classroom/zip-file/directory/browser/${fileId}`,\n query = {}\n } = props;\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [directory, setDirectory] = useState([]);\n const [activeSrc, setActiveSrc] = useState('');\n const [showTextOnly, setShowTextOnly] = useState(false);\n const iframeRef = useRef(null);\n\n const classes = useStyles();\n\n const getIndexDirectory = (directory: Directory[]): Directory | null => {\n for (let item of directory) {\n if (/^index\\./i.test(item.name))\n return item;\n }\n\n if (directory.length === 1 && directory[0].children.length > 0)\n return getIndexDirectory(directory[0].children);\n\n return null;\n };\n\n const loadDirectory = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n setDirectory([]);\n setActiveSrc('');\n\n if (fileId) {\n const { data } = await axios.post(getDirectoryListUrl, {\n fileId: fileId\n }, {\n params: query,\n withCredentials: true\n });\n\n const rootList: Directory[] = [];\n const insertToList = (list: Directory[], fileName: string, parentDirectory?: Directory) => {\n const parts = fileName.split('/').filter(a => a.trim());\n const name = parts.splice(0, 1)[0];\n const instance = list.filter(a => a.name === name)[0];\n\n if (instance) parentDirectory = instance;\n else list[list.length] = parentDirectory = {\n name: name,\n path: parentDirectory ? [parentDirectory.path, name].join('/') : name,\n children: []\n };\n\n if (parts.length) insertToList(parentDirectory.children, parts.join('/'), parentDirectory);\n };\n\n for (let fileName of data.files as string[]) {\n insertToList(rootList, fileName);\n }\n setDirectory(rootList);\n\n setTimeout(() => {\n const indexDirectory = getIndexDirectory(rootList);\n if (indexDirectory)\n handleSelect(indexDirectory);\n });\n }\n }\n catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n }\n finally {\n setIsLoading(false);\n }\n };\n\n const handleSelect = (directory: Directory) => {\n const src = `${directoryRootUrl}/${directory.path}`;\n if (iframeRef.current) {\n iframeRef.current.src = src;\n setActiveSrc(iframeRef.current.src);\n } else {\n setActiveSrc(src);\n }\n };\n\n const refreshActiveSrc = (callback?: (a: Window) => void) => {\n try {\n if (iframeRef.current) {\n const { contentWindow } = iframeRef.current;\n if (contentWindow) {\n setActiveSrc(contentWindow.location.href);\n if (callback) callback(contentWindow);\n }\n }\n }\n catch (e) {\n // qos 0 - call and forget function\n // do nothing on error\n }\n };\n\n const handleIframeLoad = () => {\n refreshActiveSrc((contentWindow) => {\n contentWindow.onunload = () => setTimeout(() => {\n refreshActiveSrc();\n });\n });\n };\n\n useEffect(() => {\n (async () => await loadDirectory())();\n\n // due to browsers critical history security, it's impossible to track/manipulate the history in iframe\n // the code below is a trick that will erase the history of iframe when file explorer is closed\n const initLength = window.history.length;\n return () => {\n window.history.pushState({purpose: 're-track history length'}, '', `${window.location.hash}?push-history=${new Date().getTime()}` );\n window.history.go(initLength - window.history.length);\n\n setTimeout(() => {\n window.history.pushState({purpose: 'overwrite forward items'}, '', `${window.location.hash}?reset-history=${new Date().getTime()}`);\n window.history.go(-1);\n });\n };\n }, []);\n\n if (isLoading)\n return (\n
    \n
    \n \n

    Loading Directory

    \n
    \n
    \n );\n\n if (errorMessage)\n return (\n
    \n
    \n

    Unable to load directory

    \n

    {errorMessage}

    \n loadDirectory()}>\n Try Again\n \n
    \n
    \n );\n\n return (\n \n
    \n
    \n
    Zip File Explorer
    \n

    File ID: {fileId}

    \n \n \n \n

    View Source

    \n
    \n \n setShowTextOnly(e.target.checked)}\n />\n \n
    \n \n \n
    \n
    \n\n
    \n {(() => {\n if (showTextOnly)\n return (\n \n );\n\n return (\n \n );\n })()}\n
    \n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Backdrop,\n Button,\n TextField,\n CircularProgress,\n Grid,\n Container,\n Typography\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { disablePageScroll, enablePageScroll } from 'scroll-lock';\nimport Editor from 'react-simple-code-editor';\nimport prism from 'prismjs';\n\nimport Submission, { Test } from '../../models/Submission';\nimport TestOutputs from '../TestOutputs';\nimport { cleanCode } from '../../libs/cleaner';\nimport useSolutionGallery from '../../hooks/useSolutionGallery';\nimport useSpecComments from '../../hooks/useSpecComments';\nimport utils from '../../libs/utils';\n\ninterface InvestigateBackdropProps {\n visibility: boolean;\n onClose(): void;\n}\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n backgroundColor: '#ffffff',\n borderRadius: 3,\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n option: {\n border: 0,\n },\n paper: {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n boxShadow: '0px 3px 4px -3px rgba(0,0,0,0.75)',\n MozBoxShadow: '0px 3px 4px -3px rgba(0,0,0,0.75)',\n WebkitBoxShadow: '0px 3px 4px -3px rgba(0,0,0,0.75)',\n },\n listbox: {\n borderTop: 0,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n}));\n\nexport const InvestigateBackdrop = ({\n visibility,\n onClose,\n }: InvestigateBackdropProps) => {\n const classes = useStyles();\n const [isSelectActive, setSelectActive] = useState(false as boolean);\n const [options, setOptions] = useState([] as string[]);\n const [isFetchingSubmissions, setIsFetchingSubmissions] = useState(\n false as boolean\n );\n const [isFetchingSubmission, setIsFetchingSubmission] = useState(\n false as boolean\n );\n const [hasInitialized, setHasInitialized] = useState(false as boolean);\n const [errorMessage, setErrorMessage] = useState('' as string);\n const [submission, setSubmission] = useState(\n undefined as Submission | undefined\n );\n const [selectedSubmissionID, setSelectedSubmissionID] = useState(\n null as string | null\n );\n\n const {\n renderModal,\n renderSaveButton,\n renderOpenButton,\n renderSnackbar\n } = useSolutionGallery();\n\n const {\n renderModal: renderSpecCommentsModal,\n renderOpenButton: renderSpecCommentsOpenButton\n } = useSpecComments();\n\n const hideHandler = (event: any) => {\n setSubmission(undefined);\n setSelectedSubmissionID(null);\n onClose();\n };\n\n const overrideBackgroundClickEvent = (event: any) => event.stopPropagation();\n\n const handleActivateSelect = () => setSelectActive(true);\n\n const handleDeactivateSelect = () => setSelectActive(false);\n\n const handleChange = async (event: any, value: string | null) => {\n setSubmission(undefined);\n setSelectedSubmissionID(value);\n\n if (!!value) {\n try {\n setIsFetchingSubmission(true);\n\n const result = await Submission.get(value);\n\n setSubmission(result);\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsFetchingSubmission(false);\n }\n }\n };\n\n const updateSubmission = (setter: (submission: Submission) => Submission) => {\n setSubmission(setter(JSON.parse(JSON.stringify(submission))));\n };\n\n const test = async (data: Submission) => {\n const submission = new Submission(data);\n\n try {\n updateSubmission((submission) => {\n submission.test.outputs = null;\n submission.test.isBusy = true;\n submission.test.errorMessage = '';\n return submission;\n });\n\n const outputs = await submission.submit();\n\n updateSubmission((submission) => {\n submission.test.outputs = outputs;\n submission.test.isBusy = false;\n return submission;\n });\n } catch (error) {\n updateSubmission((submission) => {\n submission.test.errorMessage = error.message;\n submission.test.isBusy = false;\n return submission;\n });\n }\n };\n\n const fetchSubmissions = async () => {\n try {\n setErrorMessage('');\n setHasInitialized(false);\n setSelectedSubmissionID(null);\n setOptions([]);\n setIsFetchingSubmissions(true);\n\n const response = await Submission.getAllIDs();\n\n setOptions(response);\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsFetchingSubmissions(false);\n setHasInitialized(true);\n }\n };\n\n useEffect(() => {\n if (visibility) {\n disablePageScroll();\n if (!hasInitialized) {\n fetchSubmissions();\n }\n } else {\n enablePageScroll();\n }\n }, [visibility]);\n\n const TestResult = (props: { data: Test }) => {\n const outputs = props.data.outputs;\n const errorMessage = props.data.errorMessage;\n\n return (\n <>\n {errorMessage && (\n
    \n

    An Error Occurred

    \n

    {errorMessage}

    \n

    Please run test again.

    \n
    \n )}\n\n {outputs && !errorMessage && }\n \n );\n };\n\n return (\n <>\n { renderModal() }\n\n { renderSnackbar() }\n\n { renderSpecCommentsModal() }\n\n \n \n \n\n \n Investigate Submission\n \n\n \n (\n \n {isFetchingSubmissions ? (\n \n ) : null}\n {params.InputProps.endAdornment}\n \n ),\n }}\n />\n )}\n />\n \n\n {(() => {\n\n if (errorMessage) return (\n \n
    \n

    Error Loading Data

    \n

    {errorMessage}

    \n \n Try Again\n \n
    \n
    \n );\n\n if (isFetchingSubmission) return (\n \n \n \n );\n\n if (submission) {\n const showSideInfo = !!(submission.test.errorMessage || submission.test.outputs);\n\n return (\n \n \n {/* editor */}\n \n \n {\n updateSubmission((submission) => {\n submission.answer = answer;\n return submission;\n });\n }}\n onBlur={(event: any) => {\n updateSubmission((submission) => {\n submission.answer = cleanCode(\n event.target.value\n );\n return submission;\n });\n }}\n disabled={submission.test.isBusy}\n highlight={(code) =>\n prism.highlight(\n code,\n prism.languages.javascript,\n 'javascript'\n )\n }\n padding={10}\n style={{\n fontFamily: '\"Fira code\", \"Fira Mono\", monospace',\n backgroundColor: 'rgba(250,250,250, 1)',\n fontSize: 12,\n }}\n textareaClassName=\"box-border\"\n preClassName=\"box-border\"\n autoFocus\n />\n \n\n
    \n\n
    \n\n { renderSaveButton({specId: submission.id, code: submission.answer}) }\n\n { renderOpenButton({specId: submission.id}) }\n\n {renderSpecCommentsOpenButton({specId: submission.id})}\n\n
    \n\n
    \n test(submission)}\n variant=\"contained\"\n color=\"primary\"\n >\n {submission.test.isBusy && (\n \n )}\n Run Test\n \n
    \n
    \n\n
    \n\n {/* test result */}\n {showSideInfo && (\n \n \n \n \n\n
    \n {\n updateSubmission((submission) => {\n submission.test.outputs = null;\n submission.test.errorMessage = '';\n return submission;\n });\n }}\n >\n Close\n \n
    \n
    \n )}\n
    \n \n );\n }\n\n return '';\n })()}\n \n
    \n \n \n );\n};\n","import mammoth from 'mammoth';\n\nimport Spec, { SpecData } from '../models/Spec';\n\nexport interface DocumentTableDataTypes {\n name: string;\n tables: RegExpMatchArray;\n code: string;\n spec: string;\n}\n\nexport interface DocumentTablesTypes {\n title: string;\n data: DocumentTableDataTypes[];\n}\n\nexport const filterExcerciseName = (\n md: any\n): { filtered: string[]; raw: string[] } => {\n const excerciseNameFiltered: string[] = [];\n const excerciseNameFilteredRaw: string[] = [];\n // let cleanMD = md.value.replace(\n // /\\n#+ Output\\n|\\n#+ Input\\n|#+ Examples*|_*Examples*_*\\n|\\n#+ Constraints\\n|#* *What to submit\\? +\\n|_+What to submit\\?_+|#* *Hints *\\n|_*Hints_*/g,\n // \"\"\n // );\n let excerciseName = md.value.match(\n /\\n\\n## ([^<>]*?)\\n\\n|\\n\\n\\d\\. *__([^<>]*?)__\\n\\n/g\n );\n if (excerciseName == null) {\n let top = md.value.match(/\\b([^]*?)\\n\\n/);\n excerciseName = [top[0]];\n }\n excerciseName.forEach((ex: any, i: number) => {\n excerciseNameFilteredRaw.push(ex.replace(/\\d\\.|#|_*/g, '').trim());\n ex = ex.replace(/__|#|[.]|\\\\|\\*|\"|\\//g, '').trim();\n ex = ex\n .replaceAll(/[\\s-]+/g, '-')\n .toUpperCase()\n .replace(/^\\d+-/g, '');\n excerciseNameFiltered.push(ex);\n });\n return { filtered: excerciseNameFiltered, raw: excerciseNameFilteredRaw };\n};\n\nexport const reformatTable = (tables: RegExpMatchArray, i: number) => {\n let newTables: string[] = [];\n // const test = \"abc\";\n if (!tables) {\n return [];\n }\n tables.forEach((tableHtml, j) => {\n let tr = tableHtml.match(//g);\n let ifValidTable = tableHtml.match(/Input|Output|Comment|Explanation/g);\n if (tr) {\n let headerCount: number;\n let indexOfOutput: number | null;\n tr.forEach((val, k) => {\n if (val.match(/Input|Output|Comment|Explanation/g)) {\n let newVal = val.replace(\n //g,\n ''\n );\n tableHtml = tableHtml.replace(val, newVal);\n }\n let td = val.match(//g);\n if (td) {\n td.forEach((thead, i) => {\n if (thead.match(/Output/g)) {\n indexOfOutput = i;\n }\n });\n }\n // making sure td length are equal\n if (td && k === 0) {\n headerCount = td.length;\n }\n if (td && headerCount && td.length !== headerCount && indexOfOutput) {\n for (let u = td.length; u < headerCount; u++) {\n td.splice(indexOfOutput, 1, '');\n }\n let newVal = val.replace(val, td.join('')); // adding empty td if td length is not equal\n tableHtml = tableHtml.replace(val, newVal);\n indexOfOutput = null;\n }\n if (td && headerCount && td.length !== headerCount) {\n for (let u = td.length; u < headerCount; u++) {\n if (indexOfOutput !== null) {\n td.splice(indexOfOutput, 1, '');\n }\n }\n let newVal = val.replace(/ {\n if (l % 2 === 0 && td !== null) {\n if (td.length % 2 !== 0) {\n if (l === td.length - 1) return;\n }\n let newVal = val.replace(\n //g,\n ``\n );\n tableHtml = tableHtml.replace(val, newVal);\n } else {\n let newVal = val.replace(\n //g,\n ``\n );\n tableHtml = tableHtml.replace(val, newVal);\n }\n });\n }\n });\n }\n newTables.push(tableHtml);\n });\n return newTables;\n};\n\nexport const getTablesFromDocument = async (\n file: File\n): Promise => {\n const arrayBuffer = await file.arrayBuffer();\n let data = [];\n let html = await mammoth.convertToHtml({ arrayBuffer: arrayBuffer });\n let md = await mammoth.convertToMarkdown({ arrayBuffer: arrayBuffer });\n\n let excercises = filterExcerciseName(md);\n\n for (let i = 1; i <= excercises.raw.length; i++) {\n let matched;\n let otherFormat = `${excercises.raw[i - 1].replace(\n / /g,\n ' '\n )}`;\n if (i === excercises.raw.length) {\n let relast = new RegExp(\n `(${excercises.raw[i - 1]}|${otherFormat})([^]*?)$`,\n 'g'\n );\n matched = html.value.match(relast);\n } else {\n let otherFormatEnd = `${excercises.raw[i].replace(\n / /g,\n ' '\n )}`;\n let re = new RegExp(\n `(${excercises.raw[i - 1]}|${otherFormat})([^]*?)(${\n excercises.raw[i]\n }|${otherFormatEnd})`,\n 'g'\n );\n matched = html.value.match(re);\n }\n if (matched) {\n let cleanTable = matched[0]\n .replace(\n /<\\/td>|<\\/td>|<\\/td>|<\\/tr>/g,\n ''\n )\n .replace(//g, '');\n let tables: RegExpMatchArray = cleanTable.match(//g);\n tables = reformatTable(tables, i - 1);\n data[i - 1] = {\n name: excercises.filtered[i - 1].replace(/\\\\/g, ''),\n tables,\n code: '',\n spec: '',\n };\n } else {\n data[i - 1] = {\n name: excercises.filtered[i - 1].replace(/\\\\/g, ''),\n tables: [],\n code: '',\n spec: '',\n };\n }\n }\n\n return { title: file.name.replace(/.docx|.doc/gi, ''), data };\n};\n\nexport const convertTablesToSpec = (\n tables: RegExpMatchArray\n): Partial => {\n let data = [];\n\n for (let i = 0; i < tables.length; i++) {\n let table = tables[i];\n let rows = table.match(//g);\n let validRow = true;\n if (!!rows) {\n for (let r = 0; r < rows.length; r++) {\n if (\n rows[r].match(/Input|Output|Comments|Comment|Explanation/g) ===\n null &&\n validRow\n ) {\n let cells = rows[r].match(//g);\n let d: SpecData = { arguments: [], mainInvoker: '', output: '' };\n for (let c = 0; cells && c < cells.length; c++) {\n let value = cells[c]\n .replace(/
    |<\\/br>|<\\/p>|<\\/div>/g, '\\n')\n .replace(/<([^]*?)>/g, '')\n .trim()\n .replace(/\\n$/g, '');\n if (cells.length % 2 !== 0) {\n if (c === cells.length - 1) break;\n }\n if (c % 2 === 0) {\n value = value.replace(/\\n/g, '');\n d.arguments = [value];\n d.mainInvoker = `main(${value})`;\n }\n if (c % 2 === 1) {\n d.output = value;\n data.push(d);\n d = { arguments: [], mainInvoker: '', output: '' };\n }\n }\n }\n }\n }\n }\n\n let spec: Partial = {\n env: 'node',\n entry: 'argv',\n data,\n };\n\n return spec;\n};\n","import * as specParser from './specParser';\n\nclass SpecDocument {\n public static get filterExerciseName() {\n return specParser.filterExcerciseName;\n }\n\n public static get getTables() {\n return specParser.getTablesFromDocument;\n }\n\n public static get reformatTable() {\n return specParser.reformatTable;\n }\n\n public static get convertTables() {\n return specParser.convertTablesToSpec;\n }\n}\n\nexport default SpecDocument;\n","import React, { useState, useEffect } from 'react';\nimport { Backdrop, CircularProgress, Grid } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { disablePageScroll, enablePageScroll } from 'scroll-lock';\nimport Axios from 'axios';\nimport {\n Button,\n Icon,\n PanelGroup,\n Panel,\n Modal,\n Input,\n IconButton,\n Notification,\n} from 'rsuite';\n\nimport {\n DocumentTablesTypes,\n DocumentTableDataTypes,\n} from '../../libs/specParser';\nimport SpecDocument from '../../libs/SpecDocument';\nimport Spec from '../../models/Spec';\n\ninterface ParseDocumentBackdropProps {\n isLoading: boolean;\n spec: DocumentTablesTypes | null;\n visibility: boolean;\n onClose(): void;\n}\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n closeBtn: {\n margin: 'unset !important',\n },\n loader: {\n color: 'black',\n },\n container: {\n maxHeight: '95vh',\n backgroundColor: '#ffffff',\n borderRadius: 3,\n },\n problemsContainer: {\n position: 'relative',\n maxHeight: '90vh !important',\n maxWidth: '95vw !important',\n width: '90vw !important',\n overflow: 'unset !important',\n },\n problemsBody: {\n overflow: 'auto',\n boxShadow: '0px 0px 2px 0px rgba(153,153,153,1)',\n MozBoxShadow: '0px 0px 2px 0px rgba(153,153,153,1)',\n WebkitBoxShadow: '0px 0px 2px 0px rgba(153,153,153,1)',\n },\n problemsContainerTitle: {\n maxWidth: '80vw !important',\n },\n}));\n\ntype ParsedSpecDocumentType = DocumentTablesTypes | null;\n\nexport const ParseDocumentBackdrop = ({\n isLoading,\n spec,\n visibility,\n onClose,\n}: ParseDocumentBackdropProps) => {\n const classes = useStyles();\n const [showCodeModal, setShowCodeModal] = useState(false as boolean);\n const [showSpecsModal, setShowSpecsModal] = useState(false as boolean);\n const [parsedSpecDocument, setParsedSpecDocument] = useState(\n null as ParsedSpecDocumentType\n );\n const [selectedSpec, setSelectedSpec] = useState('' as string);\n const [selectedSpecIndex, setSelectedSpecIndex] = useState(0 as number);\n const [selectedCode, setSelectedCode] = useState('' as string);\n const [specIDs, setSpecIDs] = useState([] as string[]);\n const [isFetching, setIsFetching] = useState(false as boolean);\n const [isUploading, setIsUploading] = useState(false as boolean);\n\n const hideHandler = (event: any) => {\n onClose();\n setParsedSpecDocument(null);\n setSelectedSpec('');\n setSelectedSpecIndex(0);\n };\n\n const overrideBackgroundClickEvent = (event: any) => event.stopPropagation();\n\n const showSpecsModalHandler = (index: number) => {\n if (!!parsedSpecDocument) {\n const { tables } = parsedSpecDocument.data[index];\n const spec = JSON.stringify(SpecDocument.convertTables(tables), null, 2);\n\n setSelectedSpec(spec);\n setSelectedSpecIndex(index);\n setShowSpecsModal(true);\n }\n };\n\n const hideSpecsModalHandler = () => setShowSpecsModal(false);\n\n const selectedSpecChangeHandler = (value: string) => {\n setSelectedSpec(value);\n setParsedSpecDocument((prevValue) => {\n if (prevValue && prevValue.data[selectedSpecIndex]) {\n prevValue.data[selectedSpecIndex].spec = value;\n }\n\n return { ...prevValue } as ParsedSpecDocumentType;\n });\n };\n\n const showCodeModalHandler = (index: number) => {\n if (!!parsedSpecDocument) {\n const { code } = parsedSpecDocument.data[index];\n\n setSelectedCode(code);\n setSelectedSpecIndex(index);\n setShowCodeModal(true);\n }\n };\n\n const hideCodeModalHandler = () => setShowCodeModal(false);\n\n const selectedCodeChangeHandler = (value: string) => setSelectedCode(value);\n\n const saveCodeHandler = () => {\n setParsedSpecDocument((prevValue) => {\n if (prevValue && prevValue.data[selectedSpecIndex]) {\n prevValue.data[selectedSpecIndex].code = selectedCode;\n }\n\n setSelectedCode('');\n\n return { ...prevValue } as ParsedSpecDocumentType;\n });\n };\n\n const problemNameChangeHandler = (event: any, index: number) => {\n const value = event.target.value;\n\n setParsedSpecDocument((prevValue) => {\n if (prevValue && prevValue.data[index] && value) {\n prevValue.data[index].name = value;\n }\n\n return { ...prevValue } as ParsedSpecDocumentType;\n });\n };\n\n const addTableHandler = (dataIndex: number) => {\n setParsedSpecDocument((prevValue) => {\n if (prevValue && prevValue.data[dataIndex]) {\n const emptyTable =\n '

    Input

    Output

    ';\n let tables = prevValue.data[dataIndex].tables;\n tables.push(emptyTable);\n tables = SpecDocument.reformatTable(tables, dataIndex);\n\n prevValue.data[dataIndex].tables = tables;\n }\n\n return { ...prevValue } as ParsedSpecDocumentType;\n });\n };\n\n const removeTableHandler = (dataIndex: number, tableIndex: number) => {\n setParsedSpecDocument((prevValue) => {\n if (\n prevValue &&\n prevValue.data[dataIndex] &&\n prevValue.data[dataIndex].tables[tableIndex]\n ) {\n prevValue.data[dataIndex].tables.splice(tableIndex, 1);\n }\n\n return { ...prevValue } as ParsedSpecDocumentType;\n });\n };\n\n const uploadSpec = async () => {\n let spec = JSON.parse(selectedSpec);\n let problemName = parsedSpecDocument?.data[selectedSpecIndex].name || '';\n\n const newSpecifications = {\n data: [...spec.data],\n id: problemName,\n name: problemName.replace(/-/g, ' '),\n description: problemName,\n entry: spec.entry,\n env: spec.env,\n };\n\n try {\n setIsUploading(true);\n await Axios.post('/admin/spec', newSpecifications);\n Notification['success']({\n title: 'Success',\n description:
    {problemName} specification created.
    ,\n });\n\n setSpecIDs((prevValue) => [...prevValue, problemName]);\n } catch (e) {\n Notification['error']({\n title: 'Error',\n description:
    Failed to create spec: {e.message}
    ,\n });\n } finally {\n setShowSpecsModal(false);\n setIsUploading(false);\n }\n };\n\n const fetchSpecList = async () => {\n try {\n setIsFetching(true);\n const result = await Spec.fetchList();\n\n const specIDs: string[] = result.map(({ id }) => id);\n setSpecIDs(specIDs);\n setParsedSpecDocument(spec);\n } catch (error) {\n Notification['error']({\n title: 'Error',\n description:
    {error.message}
    ,\n });\n hideHandler(error);\n } finally {\n setIsFetching(false);\n }\n };\n\n useEffect(() => {\n if (visibility) {\n disablePageScroll();\n } else {\n enablePageScroll();\n }\n }, [visibility]);\n\n useEffect(() => {\n if (visibility) {\n fetchSpecList();\n }\n }, [spec]);\n\n return (\n <>\n \n \n Source Code\n \n \n \n \n \n \n \n \n \n \n \n Spec\n \n \n \n \n \n \n Upload\n \n \n Cancel\n \n \n \n \n \n \n {isLoading || isFetching ? (\n
    \n \n
    \n ) : (\n !!parsedSpecDocument && (\n \n \n {parsedSpecDocument.title}\n \n }\n />\n
    \n \n {parsedSpecDocument.data.map(\n (val: DocumentTableDataTypes, i) => (\n \n
    \n {`${i + 1}. `}\n \n await problemNameChangeHandler(e, i)\n }\n value={`${val.name}`}\n placeholder=\"PI000-E000-Problem-Name\"\n />\n
    \n {!specIDs.includes(val.name) ? (\n
    \n

    \n Tables found:{' '}\n {val.tables ? val.tables.length : 0}\n

    \n showCodeModalHandler(i)}\n icon={}\n />\n\n addTableHandler(i)}\n icon={}\n />\n\n showSpecsModalHandler(i)}\n style={{ backgroundColor: '#3498ff' }}\n icon={}\n />\n
    \n ) : (\n \n )}\n
    \n }\n >\n
      \n {val.tables &&\n val.tables.map((tableHtml, j) => {\n return (\n
    • \n \n \n removeTableHandler(i, j)\n }\n icon={}\n />\n \n \n
    • \n );\n })}\n
    \n \n )\n )}\n \n \n \n )\n )}\n
    \n \n \n \n );\n};\n","import React, { useState } from 'react';\nimport { SpeedDial, SpeedDialIcon, SpeedDialAction } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport BuildIcon from '@material-ui/icons/Build';\nimport SearchIcon from '@material-ui/icons/Search';\nimport InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';\nimport Draggable from 'react-draggable';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\n\nimport { InvestigateBackdrop, ParseDocumentBackdrop } from '../Backdrop';\nimport SpecDocument from '../../libs/SpecDocument';\nimport { DocumentTablesTypes } from '../../libs/specParser';\n\ninterface AdminToolsSpeedDialProps extends RouteComponentProps {}\n\nconst useStyles = makeStyles((theme) => ({\n speedDial: {\n position: 'fixed',\n '&.MuiSpeedDial-directionUp, &.MuiSpeedDial-directionLeft': {\n bottom: theme.spacing(2),\n right: theme.spacing(2),\n },\n '&.MuiSpeedDial-directionDown, &.MuiSpeedDial-directionRight': {\n top: theme.spacing(2),\n left: theme.spacing(2),\n },\n },\n input: {\n display: 'none',\n },\n}));\n\nexport const AdminToolsSpeedDial = withRouter((props: AdminToolsSpeedDialProps) => {\n const classes = useStyles();\n const [toolsVisibility, setToolsVisibility] = useState(false as boolean);\n const [investigateVisibility, setInvestigateVisibility] = useState(\n false as boolean\n );\n const [parseDocumentVisibility, setParseDocumentVisibility] = useState(\n false as boolean\n );\n const [parsedSpecDocument, setParsedSpecDocument] = useState(\n null as DocumentTablesTypes | null\n );\n const [isParsingSpecDocument, setIsParsingSpecDocument] = useState(\n false as boolean\n );\n\n const handeHideTools = () => setToolsVisibility(false);\n\n const handleToggleTools = () => setToolsVisibility(!toolsVisibility);\n\n const handleShowInvestigate = () => setInvestigateVisibility(true);\n\n const handleHideInvestigate = () => setInvestigateVisibility(false);\n\n const handleShowParseDocument = () => setParseDocumentVisibility(true);\n\n const handleHideParseDocument = () => setParseDocumentVisibility(false);\n\n const actions = [\n {\n icon: ,\n name: 'Parse Document',\n clickHandler: () => {\n props.history.push('/admin/document-parser');\n },\n },\n {\n icon: ,\n name: 'Investigate Submission',\n clickHandler: () => handleShowInvestigate(),\n },\n ];\n\n return (\n <>\n {\n e.target.value = '';\n }}\n onChange={async (event: any) => {\n if (!!event.target.files[0]) {\n setIsParsingSpecDocument(true);\n handleShowParseDocument();\n const result = await SpecDocument.getTables(event.target.files[0]);\n setParsedSpecDocument(result);\n setIsParsingSpecDocument(false);\n }\n }}\n />\n \n } />}\n onClose={handeHideTools}\n onClick={handleToggleTools}\n open={toolsVisibility}\n direction=\"up\"\n >\n {actions.map((action) => (\n {\n handeHideTools();\n action.clickHandler();\n }}\n />\n ))}\n \n \n \n \n \n );\n});\n","import React, { useEffect, ComponentProps } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Button, Container, IconButton, ContainerProps } from '@material-ui/core';\nimport Divider from '@material-ui/core/Divider';\nimport Drawer from '@material-ui/core/Drawer';\nimport clsx from 'clsx';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n Menu as MenuIcon,\n Search as SearchIcon,\n InsertDriveFile as InsertDriveFileIcon,\n List as ListIcon,\n Announcement as AnnouncementIcon,\n MenuBook as MenuBookIcon,\n ChevronLeft as ChevronLeftIcon,\n People as PeopleIcon,\n Comment as CommentIcon\n} from '@material-ui/icons';\n\nimport auth from '../libs/auth';\nimport { AdminToolsSpeedDial } from '../components/SpeedDial';\n\nconst drawerWidth = 275;\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n menuButton: {\n marginRight: theme.spacing(2),\n position: 'absolute',\n left: '25px',\n top: '50%',\n transform: 'translateY(-50%)'\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: drawerWidth,\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n padding: `${theme.spacing(3)} 0`,\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n minHeight: '100vh',\n marginLeft: -drawerWidth,\n },\n contentShift: {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: 0,\n },\n}));\n\ninterface Props extends Omit {\n children: ComponentProps['children']\n}\n\ninterface NavItem {\n name: string\n path: string\n icon: ComponentProps['children']\n}\n\nconst AdminLayout = (props: Props) => {\n const { children, ...containerProps } = props;\n const classes = useStyles();\n const [mobileOpen, setMobileOpen] = React.useState(sessionStorage.getItem('sidenavState') === 'open');\n\n const history = useHistory();\n const session = auth.getSession();\n\n const logout = () => {\n auth.logout();\n history.push('/admin/login');\n };\n\n const handleDrawerToggle = () => {\n sessionStorage.setItem('sidenavState', mobileOpen ? 'close' : 'open');\n setMobileOpen(!mobileOpen);\n };\n\n const isPathActive = (path: string):boolean => {\n if (history.location.pathname) {\n return history.location.pathname.indexOf(path) === 0;\n }\n return false;\n };\n\n const navItems: NavItem[] = [\n {\n name: 'Courses',\n path: '/admin/courses',\n icon: \n },\n {\n name: 'Parse Document',\n path: '/admin/document-parser',\n icon: \n },\n {\n name: 'Investigate Submission',\n path: '/admin/investigate',\n icon: \n },\n {\n name: 'Spec Repository',\n path: '/admin/specs',\n icon: \n },\n {\n name: 'Spec Discussions',\n path: '/admin/spec-comments',\n icon: \n },\n {\n name: 'Announcements',\n path: '/admin/announcements',\n icon: \n },\n {\n name: 'Students',\n path: '/admin/students',\n icon: \n }\n ];\n\n const drawer = (\n \n \n \n \n \n \n \n\n \n \"Logo\"\n \n\n {navItems.map((navItem, index) => (\n \n {navItem.icon}\n \n \n ))}\n \n );\n\n useEffect(() => {\n if (!auth.isAdmin()) history.push('/');\n }, []);\n\n if (!session) return <>;\n\n return (\n
    \n \n\n \n {drawer}\n \n\n \n\n
    \n \n \n \n\n \n
    \n
     
    \n\n
    \n
    \n

    \n {session.user.fullname} (#{session.user.userid})\n

    \n

    \n {session.user.email}\n

    \n
    \n \n \n Logout\n \n
    \n
    \n
    \n \n
    \n\n \n \n {children}\n \n \n \n );\n};\n\nexport default AdminLayout;\n","import React from 'react';\nimport {\n Typography,\n IconButton,\n DialogTitle as MuiDialogTitle,\n DialogTitleProps as MuiDialogTitleProps,\n makeStyles\n} from '@material-ui/core';\nimport {\n Close as CloseIcon\n} from '@material-ui/icons';\n\nexport interface DialogTitleProps extends MuiDialogTitleProps {\n onClose?: () => void;\n}\n\nconst useStyle = makeStyles((theme) => ({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n text: {\n paddingRight: theme.spacing(6)\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n }\n}));\n\nconst DialogTitle = (props: DialogTitleProps) => {\n const { children, onClose, ...other } = props;\n const classes = useStyle();\n\n return (\n \n {children}\n {!!onClose && (\n \n \n \n )}\n \n );\n};\n\nexport default DialogTitle;","import React, { ComponentProps } from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n} from '@material-ui/core';\n\nimport DialogTitle from './DialogTitle';\n\nexport interface AlertDialogProps {\n title: string\n message: ComponentProps['children']\n okText: string\n callback: () => void\n}\n\nconst AlertDialog = (props: AlertDialogProps) => {\n return (\n props.callback()}>\n props.callback()}>{props.title}\n \n {(() => {\n if (typeof props.message === 'string')\n return ({props.message});\n return props.message;\n })()}\n \n \n \n \n \n );\n};\n\nexport default AlertDialog;","import React, { ComponentProps } from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n} from '@material-ui/core';\n\nimport DialogTitle from './DialogTitle';\n\nexport interface ConfirmDialogProps {\n title: string\n message: ComponentProps['children']\n confirmText: string\n cancelText: string\n callback: (confirm: boolean) => void\n}\n\nconst ConfirmDialog = (props: ConfirmDialogProps) => {\n return (\n props.callback(false)}>\n props.callback(false)}>{props.title}\n \n \n {props.message}\n \n \n \n \n \n \n \n );\n};\n\nexport default ConfirmDialog;","import React, { ComponentProps, useState } from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n TextFieldProps, TextField\n} from '@material-ui/core';\n\nimport DialogTitle from './DialogTitle';\n\nexport interface PromptDialogProps {\n title: string\n message: ComponentProps['children']\n submitText: string\n cancelText: string\n fieldProps: Omit,\n callback: (value: string|null) => void\n}\n\nconst PromptDialog = (props: PromptDialogProps) => {\n const [value, setValue] = useState('');\n\n return (\n props.callback(null)} fullWidth={true}>\n
    props.callback(value)}>\n props.callback(null)}>{props.title}\n \n \n {props.message}\n \n setValue(e.target.value)} {...props.fieldProps} />\n \n \n \n \n \n
    \n
    \n );\n};\n\nexport default PromptDialog;","import React, { useState, useContext } from 'react';\n\nimport AlertDialog, { AlertDialogProps as AlertItem } from './AlertDialog';\nimport ConfirmDialog, { ConfirmDialogProps as ConfirmItem } from './ConfirmDialog';\nimport PromptDialog, { PromptDialogProps as PromptItem } from './PromptDialog';\n\ninterface AlertOptions {\n title?: AlertItem['title']\n okText?: AlertItem['okText']\n}\n\ninterface ConfirmOptions {\n title?: ConfirmItem['title']\n confirmText?: ConfirmItem['confirmText']\n cancelText?: ConfirmItem['cancelText']\n}\n\ninterface PromptOptions {\n title?: PromptItem['title']\n submitText?: PromptItem['submitText']\n cancelText?: PromptItem['cancelText']\n fieldProps?: PromptItem['fieldProps']\n}\n\nexport interface DialogContextState {\n alert: (message: AlertItem['message'], options?: AlertOptions) => Promise\n confirm: (message: ConfirmItem['message'], options?: ConfirmOptions) => Promise\n prompt: (message: PromptItem['message'], options?: PromptOptions) => Promise\n}\n\nexport const DialogContext = React.createContext({\n alert: async(message: AlertItem['message']) => window.alert(String(message)),\n confirm: async(message: ConfirmItem['message']) => window.confirm(message),\n prompt: async (message: PromptItem['message']) => window.prompt(message)\n});\n\nexport const DialogProvider = (props: React.ComponentProps) => {\n const [alertItems, setAlertItems] = useState([]);\n const [confirmItems, setConfirmItems] = useState([]);\n const [promptItems, setPromptItems] = useState([]);\n\n const alert = (message: AlertItem['message'], options?: AlertOptions): Promise => new Promise(resolve => {\n const item: AlertItem = {\n title: options?.title || 'Alert',\n message: message,\n okText: options?.okText || 'Ok',\n callback() {\n resolve();\n setAlertItems(alertItems.filter(a => a !== item));\n }\n };\n setAlertItems([...alertItems, item]);\n });\n\n const confirm = (message: ConfirmItem['message'], options?: ConfirmOptions): Promise => new Promise(resolve => {\n const item: ConfirmItem = {\n title: options?.title || 'Confirm',\n message: message,\n confirmText: options?.confirmText || 'Confirm',\n cancelText: options?.cancelText || 'Cancel',\n callback(confirmed: boolean) {\n resolve(confirmed);\n setConfirmItems(confirmItems.filter(a => a !== item));\n }\n };\n setConfirmItems([...confirmItems, item]);\n });\n\n const prompt = (message: PromptItem['message'], options?: PromptOptions): Promise => new Promise(resolve => {\n const item: PromptItem = {\n title: options?.title || 'Prompt',\n message: message,\n submitText: options?.submitText || 'Submit',\n cancelText: options?.cancelText || 'Cancel',\n fieldProps: options?.fieldProps || {},\n callback(value: string|null) {\n resolve(value);\n setPromptItems(promptItems.filter(a => a !== item));\n }\n };\n setPromptItems([...promptItems, item]);\n });\n\n return (\n \n {alertItems.map((data, index) => ())}\n\n {confirmItems.map((data, index) => ())}\n\n {promptItems.map((data, index) => ())}\n\n {props.children}\n \n );\n};\n\nexport const useDialog = (): DialogContextState => useContext(DialogContext);\n","\nexport interface DriveFile {\n id: string\n title: string\n alternateLink: string\n thumbnailUrl: string\n}\n\nexport interface SharedDriveFile {\n driveFile: DriveFile\n shareMode: 'UNKNOWN_SHARE_MODE' | 'VIEW' | 'EDIT' | 'STUDENT_COPY'\n}\n\nexport interface YouTubeVideo {\n id: string\n title: string\n alternateLink: string\n thumbnailUrl: string\n}\n\nexport interface Link {\n url: string\n title: string\n thumbnailUrl: string\n}\n\nexport interface Form {\n formUrl: string\n responseUrl: string\n title: string\n thumbnailUrl: string\n}\n\nexport interface MaterialType {\n driveFile?: SharedDriveFile\n youtubeVideo?: YouTubeVideo\n link?: Link\n form?: Form\n}\n\nclass Material implements MaterialType {\n driveFile?: any\n youtubeVideo?: any\n link?: any\n form?: any\n\n constructor(material: MaterialType) {\n this.driveFile = material.driveFile;\n this.youtubeVideo = material.youtubeVideo;\n this.link = material.link;\n this.form = material.form;\n }\n}\n\nexport default Material;\n","import axios from 'axios';\n\nimport auth from '../libs/auth';\nimport { AxiosCache, AxiosCacheRequestConfig } from '../libs/AxiosCache';\nimport Material from './Material';\nimport Spec from './Spec';\n\nexport interface CourseWorkType {\n id: string;\n courseId: string;\n title: string;\n description: string;\n materials: Material[] | null;\n state: string;\n alternateLink: string;\n creationTime: string;\n updateTime: string;\n maxPoints: number;\n workType: string;\n associatedWithDeveloper: boolean;\n topicId: string;\n checked?: boolean;\n dueDate?: DueDateType;\n dueTime?: DueTimeType;\n\n //moodle assignment\n name: string;\n grade: number;\n cmid: number;\n}\n\nexport interface DueDateType {\n day: number\n month: number\n year: number\n}\n\nexport interface DueTimeType {\n hours: number\n minutes: number\n}\n\nclass CourseWork implements CourseWorkType {\n id: string\n courseId: string\n title: string\n description: string\n materials: Material[] | null\n state: string\n alternateLink: string\n creationTime: string\n updateTime: string\n maxPoints: number\n workType: string\n associatedWithDeveloper: boolean\n topicId: string\n checked?: boolean\n dueDate?: DueDateType\n dueTime?: DueTimeType\n name: string;\n grade: number;\n cmid: number;\n\n constructor(courseWork: CourseWorkType) {\n this.id = courseWork.id;\n this.courseId = courseWork.courseId;\n this.title = courseWork.title;\n this.description = courseWork.description;\n this.materials = courseWork.materials ? courseWork.materials.map(a => new Material(a)) : null;\n this.state = courseWork.state;\n this.alternateLink = courseWork.alternateLink;\n this.creationTime = courseWork.creationTime;\n this.updateTime = courseWork.updateTime;\n this.maxPoints = courseWork.maxPoints;\n this.workType = courseWork.workType;\n this.associatedWithDeveloper = courseWork.associatedWithDeveloper;\n this.topicId = courseWork.topicId;\n this.dueDate = courseWork.dueDate;\n this.dueTime = courseWork.dueTime;\n this.name = courseWork.name;\n this.grade = courseWork.grade;\n this.cmid = courseWork.cmid;\n }\n\n // checks if the course work type is supported by the platform\n get isSupported(): boolean {\n\n // only assignment is supported by the platform\n if (this.workType === 'ASSIGNMENT') {\n\n // if a google form was detected it's a quiz assignment, not an actual assignment\n return !this.materials?.find(a => a.form);\n }\n\n return false;\n }\n\n async associate(): Promise {\n const { data } = await axios.post('/classroom/courses/course-work/associate', {\n courseId: this.courseId,\n courseWorkId: this.id\n });\n AxiosCache.reset();\n return new CourseWork(data);\n }\n\n static async getMoodleCourseAssignments(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n const { data = [] } = await axios.post('/student/course/get-assignments', {...query, token: session?.accessToken});\n\n return (data as CourseWorkType[]).map((item) => new CourseWork({...item, id: item.id.toString()}));\n }\n\n async getSpecs(): Promise {\n return await Spec.find({\n assignmentID: this.id\n });\n }\n\n async setSpecs(specIds: string[]) {\n const { data } = await axios.put('/admin/assignment/specs', {\n assignmentId: this.id,\n specIds: specIds\n });\n return data;\n }\n\n async addSpec(specId: string) {\n return await CourseWork.addSpec(this.id, specId);\n }\n\n async removeSpec(specId: string) {\n return await CourseWork.removeSpec(this.id, specId);\n }\n\n static async addSpec(courseWorkId: string, specId: string) {\n const { data } = await axios.post('/admin/assignment/spec', {\n assignmentID: courseWorkId,\n specId\n });\n return data;\n }\n\n static async removeSpec(courseWorkId: string, specId: string) {\n const { data } = await axios.delete('/admin/assignment/spec', {\n data: {\n assignmentID: courseWorkId,\n specId\n }\n });\n return data;\n }\n\n static async cloneSpecs(sourceCourseWorkId: string, targetCourseWorkId: string) {\n const { data } = await axios.post('/admin/assignment/clone', {\n sourceCourseWorkId,\n targetCourseWorkId,\n });\n return data;\n }\n\n static async find(query?: {courseId: string}, config?: AxiosCacheRequestConfig): Promise {\n const [{ data = [] }, { data: topics = [] }] = await Promise.all([\n axios.get('/classroom/courses/course-work/list', AxiosCache.getConfig({\n ...config, params: query\n })),\n axios.get('/classroom/courses/topics/list', AxiosCache.getConfig({\n ...config, params: query\n }))\n ]);\n\n const _data = [...data]; // remove array reference\n let sortedData: CourseWorkType[] = [];\n for (const topic of topics) {\n const items = _data.filter((a: CourseWorkType) => a.topicId === topic.topicId);\n for (let item of items) {\n sortedData = [...sortedData, ..._data.splice(_data.indexOf(item), 1)];\n }\n }\n sortedData = [...sortedData, ..._data].filter(courseWork => {\n const topic = topics.find((t: any) => t.topicId === courseWork.topicId);\n const topicName = topic?.name || '';\n\n // filter attendance course works\n return !/attendance/i.test(topicName);\n });\n return (sortedData).map(a => new CourseWork(a)).filter(a => a.isSupported);\n }\n\n static async getSubmissions(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n\n const {data} = await axios.post('/student/course/get-assignment-submissions', {...query, token: session?.accessToken});\n \n // const _data = data as MoodleSubmissionData;\n // const studentSubmissions: MoodleSubmissionData = {\n // ..._data,\n // assignments: _data.assignments.map((obj) => ({\n // ...obj,\n // submissions: obj.submissions.filter(\n // (submission) => submission.userid === session?.user.userid\n // ),\n // })),\n // };\n\n return data;\n }\n\n static async getSubmission(query: {assignmentIds: string[], userId?: number}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n\n const submission = await axios.post('/student/course/get-assignment-submission', {...query, token: session?.accessToken});\n\n return submission;\n }\n\n static async findOne(query?: {courseId: string, id: string}, config?: AxiosCacheRequestConfig): Promise {\n const { data } = await axios.get('/classroom/courses/course-work', AxiosCache.getConfig({\n ...config, params: query\n }));\n\n const courseWork = new CourseWork(data);\n if (courseWork.isSupported)\n return courseWork;\n throw new Error('course work is not supported by the platform');\n }\n\n static getListUrlPath(courseId: string, role: string) {\n return `/${role}/courses/${courseId}/assignments`;\n }\n}\n\nexport default CourseWork;\n\n\ninterface File {\n filename: string;\n filepath: string;\n filesize: number;\n fileurl: string;\n timemodified: number;\n mimetype: string;\n isexternalfile: boolean;\n}\n\ninterface Plugin {\n type: string;\n name: string;\n fileareas: FileArea[] | null;\n}\n\ninterface FileArea {\n area: string;\n files: File[];\n}\n\ninterface Submission {\n id: number;\n userid: number;\n attemptnumber: number;\n timecreated: number;\n timemodified: number;\n timestarted: number;\n status: string;\n groupid: number;\n plugins: Plugin[];\n gradingstatus: string;\n}\n\ninterface Assignment {\n assignmentid: number;\n submissions: Submission[];\n}\n\ninterface MoodleSubmissionData {\n assignments: Assignment[];\n warnings: any[];\n}","import axios from 'axios';\n\nimport auth from '../libs/auth';\nimport { AxiosCache, AxiosCacheRequestConfig } from '../libs/AxiosCache';\n\nexport interface CourseType {\n id: string;\n ownerId: string;\n name: string;\n descriptionHeading: string;\n room: string;\n section: string;\n enrollmentCode?: string;\n teacherFolder?: { [key: string]: any };\n alternateLink: string;\n courseState: string;\n creationTime: string;\n updateTime: string;\n // id: string;\n fullname: string;\n shortname: string;\n timemodified: number;\n}\n\nclass Course implements CourseType {\n id: string\n ownerId: string\n name: string\n descriptionHeading: string\n room: string\n section: string\n enrollmentCode?: string\n teacherFolder?: {[key: string]: any}\n alternateLink: string\n courseState: string\n creationTime: string\n updateTime: string\n fullname: string;\n shortname: string;\n timemodified: number;\n\n constructor(course: CourseType) {\n this.id = course.id;\n this.ownerId = course.ownerId;\n this.name = course.name;\n this.descriptionHeading = course.descriptionHeading;\n this.room = course.room;\n this.section = course.section;\n this.enrollmentCode = course.enrollmentCode;\n this.teacherFolder = course.teacherFolder;\n this.alternateLink = course.alternateLink;\n this.courseState = course.courseState;\n this.creationTime = course.creationTime;\n this.updateTime = course.updateTime;\n this.fullname = course.fullname;\n this.shortname = course.shortname;\n this.timemodified = course.timemodified;\n }\n\n static async findById(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n const { data } = await axios.post('/student/get-course', {...query, token: session?.accessToken});\n return new Course(data[0]);\n }\n\n static async getCourses(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const session = auth.getSession();\n const { data = [] } = await axios.get('/classroom/courses', AxiosCache.getConfig({\n ...config, params: {\n token: session?.accessToken\n }\n }));\n return (data as CourseType[]).map(item => new Course(item));\n }\n \n static async getMoodleCourses(query: { [key: string]: any } = {}, config?: AxiosCacheRequestConfig): Promise {\n const { data = [] } = await axios.post('/student/get-courses', query);\n\n return (data as CourseType[]).map(item => new Course({...item, id: item.id.toString()}));\n }\n\n static getListUrlPath(role: string) {\n return `/${role}/courses`;\n }\n}\n\nexport default Course;\n","import React, { useState, useEffect } from 'react';\nimport { RouteComponentProps, Link } from 'react-router-dom';\nimport {\n Box,\n Button,\n CircularProgress,\n Paper,\n Grid,\n Typography,\n IconButton,\n ButtonGroup,\n Table,\n TableRow,\n TableCell,\n TableHead,\n TableBody,\n AccordionSummary,\n AccordionDetails,\n Accordion,\n Divider,\n Breadcrumbs,\n} from '@material-ui/core';\nimport Axios from 'axios';\nimport { GetApp, ExpandMore as ExpandMoreIcon } from '@material-ui/icons';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport AdminLayout from '../../../../../../../../layouts/AdminLayout';\nimport Spec from '../../../../../../../../models/Spec';\nimport APITools from '../../../../../../../../models/APITools';\nimport { GradeInput } from '../../../../../../../../components/Inputs';\nimport Submission, { Log } from '../../../../../../../../models/Submission';\nimport StudentSubmission, {\n DriveFile,\n MoodleFile\n} from '../../../../../../../../models/StudentSubmission';\nimport utils from '../../../../../../../../libs/utils';\nimport useSolutionGallery from '../../../../../../../../hooks/useSolutionGallery';\nimport useZipFileExplorerPopUp from '../../../../../../../../hooks/useZipFileExplorerPopUp';\nimport useSpecComments from '../../../../../../../../hooks/useSpecComments';\nimport CourseWork from '../../../../../../../../models/CourseWork';\nimport Student from '../../../../../../../../models/Student';\nimport {\n SpecTest,\n TestResult,\n} from '../../../../../../../../components/Spec/SpecTest';\nimport Course from '../../../../../../../../models/Course';\nimport { ClassroomResourceLink } from '../../../../../../../../components/Links';\nimport { TitleHeader } from '../../../../../../../../components/Headers';\nimport auth from '../../../../../../../../libs/auth';\n\ninterface WorkItem {\n spec: Spec;\n submission: {\n file: MoodleFile;\n content: string;\n } | null;\n answer: string;\n rawFileAnswer?: File;\n testResult: TestResult | null;\n manual: boolean;\n uploadStatus?: {\n isLoading: boolean;\n errorMessage: string;\n successMessage: string;\n };\n}\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n overflow: 'hidden',\n color: 'white',\n },\n accordionSummary: {\n backgroundColor: 'rgb(55, 71, 79)',\n color: 'white',\n paddingLeft: 0,\n },\n}));\n\nconst AssignmentProfile = (\n props: RouteComponentProps<{\n course_id: string;\n assignment_id: string;\n student_id: string;\n }>\n) => {\n const {\n course_id: courseId,\n assignment_id: courseWorkId,\n student_id: studentId,\n } = props.match.params;\n\n const [course, setCourse] = useState(null);\n const [courseWork, setCourseWork] = useState(null);\n const [workItems, setWorkItems] = useState([]);\n const [student, setStudent] = useState(null);\n const [studentName, setStudentName] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n const [overridden, setOverridden] = useState(false);\n const [submissionLogs, setSubmissionLogs] = useState([]);\n const [rawSubmittedFiles, setRawSubmittedFiles] = useState([]);\n const [studentSubmission, setStudentSubmission] =\n useState(null);\n\n const hasNewSubmission = (\n courseID: string,\n studentID: string,\n assignmentID: string,\n specID: string\n ): number => {\n let arr: Log[] = submissionLogs.filter(\n (log: Log): Boolean =>\n log.courseID === courseID &&\n log.personID === studentID &&\n log.assignmentID === assignmentID &&\n log.specID === specID\n );\n return arr.length > 0 ? arr[0].submissionID : 0;\n };\n\n const getGradeStatus = async () => {\n const params = {\n accountID: studentId,\n assignmentID: courseWorkId,\n };\n const queryString = APITools.parseQueryParams(params);\n const { data } = await Axios.get(\n `/admin/grade-override-status${queryString}`\n );\n setOverridden(data);\n };\n\n const loadLogs = async () => {\n const data = await Submission.getSubmissionLogs();\n setSubmissionLogs(data);\n };\n\n const loadCourse = async () => {\n const _course = await Course.findById({\n courseId,\n });\n\n setCourse(_course);\n };\n\n const loadWorkItems = async () => {\n const specs = await Spec.find({\n assignmentID: courseWorkId,\n });\n\n const _workItems: WorkItem[] = specs.map((spec) => {\n return {\n spec,\n submission: null,\n answer: '',\n testResult: null,\n manual: !spec.data.length,\n };\n });\n\n setWorkItems(_workItems);\n\n const submissionResponse = await CourseWork.getSubmission({\n assignmentIds: [courseWorkId],\n userId: parseInt(studentId),\n });\n\n const submission = submissionResponse?.data;\n\n if (submission) {\n const submissions = _workItems.map((item, index) => {\n const matchingSubmission = submission.find(\n (sub: { file: { title: string } }) =>\n sub.file.title.split('.')[0] === item.spec.name\n );\n\n if (matchingSubmission) {\n const content = matchingSubmission.file.content;\n const title = matchingSubmission.file.title as string;\n\n if (title.endsWith('.zip')) {\n const binaryString = atob(content);\n\n const uint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n uint8Array[i] = binaryString.charCodeAt(i);\n }\n\n const zipBlob = new Blob([uint8Array], {\n type: 'application/zip',\n });\n const zipFile = new File([zipBlob], item.spec.name + '.zip', {\n type: 'application/zip',\n });\n\n const rawFileAnswer = zipFile;\n const alternateLink = URL.createObjectURL(zipFile);\n\n return {\n ...item,\n submission: {\n file: {\n title,\n id: '',\n alternateLink,\n },\n content,\n },\n rawFileAnswer,\n };\n }\n\n return {\n ...item,\n submission: {\n file: {\n title,\n id: '',\n alternateLink: '',\n },\n content,\n },\n answer: content,\n };\n }\n\n return item;\n });\n \n setWorkItems(submissions);\n }\n };\n\n const loadCourseWork = async () => {\n const session = auth.getSession();\n\n const moodleCourseAssignments = await CourseWork.getMoodleCourseAssignments(\n {\n token: session?.accessToken,\n courseId,\n }\n );\n\n if (!moodleCourseAssignments)\n throw new Error('Unable to get coursework profile');\n\n const _courseWork = moodleCourseAssignments.find(\n (obj) => obj.id === courseWorkId\n ) as CourseWork;\n setCourseWork(_courseWork);\n };\n\n const loadStudent = async () => {\n const _student = await Student.findOne({\n courseId: courseId,\n userId: studentId,\n });\n if (!_student) throw new Error('Unable to get student profile');\n setStudent(_student);\n };\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await Promise.all([\n loadCourse(),\n loadWorkItems(),\n loadCourseWork(),\n // loadStudent(),\n loadLogs(),\n // getGradeStatus()\n ]);\n } catch (error) {\n setErrorMessage('Error loading: ' + error.message);\n } finally {\n setIsLoading(false);\n window.scrollTo(0, 0);\n }\n };\n\n const classes = useStyles();\n\n const { renderModal, renderOpenButton, renderSaveButton, renderSnackbar } =\n useSolutionGallery();\n\n const {\n renderModal: renderFileExplorerModal,\n renderOpenLink: renderFileExplorerOpenLink,\n renderOpenButton: renderFileExplorerOpenButton,\n } = useZipFileExplorerPopUp();\n\n const {\n renderModal: renderSpecCommentsModal,\n renderOpenButton: renderSpecCommentsOpenButton,\n } = useSpecComments();\n\n const downloadDriveAssignment = async (fileId: string, studentId: string) => {\n const params = { fileId, studentId };\n const queryString = APITools.parseQueryParams(params);\n const { data } = await Axios.get(\n `/classroom/courses/course-work/student-submission/file${queryString}`\n );\n const { fileBinary, fileType } = data;\n\n const arr = new Uint8Array(Buffer.from(fileBinary, 'hex'));\n const blob = new Blob([arr], { type: fileType });\n return blob;\n };\n\n const getTotalTestScore = (): number | null => {\n const items = workItems.filter((a) => !!a.testResult);\n if (items.length) {\n let score = 0;\n for (let item of items)\n if (item.testResult)\n score +=\n item.testResult.output.filter((a) => a.passed).length /\n item.testResult.output.length;\n return score;\n }\n return null;\n };\n\n const markAllAsCorrectHandler = (workItemIndex: number) => {\n const workItem = workItems[workItemIndex];\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem && item.testResult) {\n for (let outputItem of item.testResult.output)\n outputItem.passed = true;\n }\n return item;\n })\n );\n };\n\n const markAsCorrectHandler = (workItemIndex: number, outputIndex: number) => {\n const workItem = workItems[workItemIndex];\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem && item.testResult) {\n const output = item.testResult.output[outputIndex];\n if (output) output.passed = true;\n }\n return item;\n })\n );\n };\n\n const testScore = getTotalTestScore();\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n return (\n \n {renderModal()}\n {renderSnackbar()}\n {renderFileExplorerModal()}\n {renderSpecCommentsModal()}\n\n
    \n \n Courses\n {course?.fullname || courseId}\n \n Assignments\n \n {courseWork?.name || courseWorkId}\n \n }\n >\n \n {courseWork?.name || courseWorkId} \n {!!courseWork && }\n \n \n\n {(() => {\n // loading data\n if (isLoading)\n return (\n
    \n \n

    Loading Data

    \n
    \n );\n\n // loading data error\n if (errorMessage)\n return (\n
    \n

    Error Loading Data

    \n

    {errorMessage}

    \n \n Try Again\n \n
    \n );\n\n if (courseWork)\n return (\n <>\n \n \n \n\n \n \n Student:  \n {studentName || studentId}\n \n {!!studentSubmission && (\n \n \n {overridden ? 'Overridden Grade' : 'Grade'}:\n \n \n \n \n \n )}\n \n\n {testScore !== null && (\n \n \n Test Score: {utils.formatScore(testScore)} /{' '}\n {workItems.length} (\n {utils.formatScore((testScore / workItems.length) * 100)}\n %)\n \n \n )}\n\n {!!rawSubmittedFiles.length && (\n
    \n \n \n }\n >\n

    Raw Submitted Files

    \n \n \n \n \n \n \n Filename\n \n \n \n \n \n \n {rawSubmittedFiles.map(\n (item) =>\n !!item.title && (\n \n {item.title}\n\n \n {/\\.zip/gi.test(item.title) &&\n renderFileExplorerOpenLink({\n fileId: item.id,\n params: { studentId },\n })}\n \n\n \n \n Download\n \n \n \n )\n )}\n \n
    \n
    \n
    \n
    \n )}\n\n {workItems.map((workItem, index) => {\n const perfectScore = workItem.testResult\n ? workItem.testResult.output.length\n : 0;\n const score = workItem.testResult\n ? workItem.testResult.output.filter((a) => a.passed).length\n : 0;\n const logID = hasNewSubmission(\n courseId,\n studentId,\n courseWorkId,\n workItem.spec.id\n );\n\n return (\n \n \n
    \n

    {workItem.spec.name}

    \n {logID ? (\n

    \n ) : null}\n
    \n\n {!!workItem.testResult && (\n
    \n Score: {score} / {perfectScore}\n
    \n )}\n
    \n\n
    \n {(() => {\n if (workItem.manual)\n return (\n
    \n {(() => {\n if (workItem.submission)\n return (\n
    \n \n \n \n

    {workItem.submission.file.title}

    \n\n {/\\.zip/gi.test(\n workItem.submission.file.title\n ) && (\n
    \n {renderFileExplorerOpenButton({\n fileId:\n workItem.submission.file.id,\n params: { studentId },\n })}\n
    \n )}\n
    \n );\n\n return

    No submitted file yet.

    ;\n })()}\n
    \n );\n\n return (\n <>\n {!workItem.submission && (\n \n No submission detected.\n \n )}\n\n {\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem)\n item.answer = answer;\n return item;\n })\n );\n }}\n onTestResultChange={(\n result: TestResult | null\n ) => {\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem)\n item.testResult = result;\n return item;\n })\n );\n }}\n editorFooter={\n \n {renderSaveButton({\n specId: workItem.spec.id,\n code: workItem.answer,\n })}\n {renderOpenButton({\n specId: workItem.spec.id,\n })}\n {renderSpecCommentsOpenButton({\n specId: workItem.spec.id,\n })}\n \n }\n activityIndex={index}\n onMarkAllAsCorrect={markAllAsCorrectHandler}\n onMarkAsCorrect={markAsCorrectHandler}\n />\n \n );\n })()}\n
    \n \n );\n })}\n \n );\n\n return '';\n })()}\n \n
    \n );\n};\n\nexport default AssignmentProfile;\n","import React, { useState, useEffect } from 'react';\nimport { RouteComponentProps, Link } from 'react-router-dom';\nimport {\n Box,\n Button,\n ButtonGroup,\n CircularProgress,\n Breadcrumbs,\n Paper,\n Typography,\n Grid,\n IconButton,\n Card,\n CardContent,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport axios from 'axios';\nimport prism from 'prismjs';\nimport {\n CheckCircle,\n GetApp,\n Attachment as AttachmentIcon,\n OpenInBrowser,\n Save as SaveIcon,\n Feedback as FeedbackIcon,\n} from '@material-ui/icons';\nimport Dropzone, { DropzoneState } from 'react-dropzone';\nimport path from 'path';\nimport JSZip from 'jszip';\n\nimport StudentLayout from '../../../../../../layouts/StudentLayout';\nimport auth from '../../../../../../libs/auth';\nimport Spec from '../../../../../../models/Spec';\nimport APITools from '../../../../../../models/APITools';\nimport useZipFileExplorerPopUp from '../../../../../../hooks/useZipFileExplorerPopUp';\nimport CourseWork from '../../../../../../models/CourseWork';\nimport StudentSubmission, {\n DriveFile,\n MoodleFile,\n} from '../../../../../../models/StudentSubmission';\nimport {\n SpecTest,\n TestResult,\n} from '../../../../../../components/Spec/SpecTest';\nimport { useDialog } from '../../../../../../context/Dialog';\nimport useSnackbar from '../../../../../../hooks/useSnackbar';\nimport utils from '../../../../../../libs/utils';\nimport Course from '../../../../../../models/Course';\nimport { ClassroomResourceLink } from '../../../../../../components/Links';\nimport useSpecComments from '../../../../../../hooks/useSpecComments';\nimport useLoadingStatusMap from '../../../../../../hooks/useLoadingStatusMap';\nimport { TitleHeader } from '../../../../../../components/Headers';\nimport SpecFeedback from '../../../../../../models/SpecFeedback';\nimport { ExamCountdown } from '../../../../../../components/ExamCountdown';\nimport Assignment from '../../../../../../models/Assignment';\n\nconst useStyles = makeStyles((theme) => ({\n input: {\n display: 'none',\n },\n fileDropArea: {\n height: '150px',\n backgroundColor: 'rgba(55, 71, 79, 0.1)',\n borderRadius: theme.shape.borderRadius,\n padding: '15px',\n userSelect: 'none',\n outline: 'none',\n cursor: 'pointer',\n },\n fileDropZone: {\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: '2px dashed currentColor',\n borderRadius: theme.shape.borderRadius,\n opacity: '0.5',\n },\n fileDropZoneDrag: {\n opacity: '1',\n },\n buttonsContainer: {\n display: 'flex',\n width: '400px',\n },\n}));\n\ninterface WorkItem {\n spec: Spec;\n submission: {\n file: MoodleFile;\n content: string;\n } | null;\n answer: string;\n rawFileAnswer?: File;\n testResult: TestResult | null;\n manual: boolean;\n uploadStatus?: {\n isLoading: boolean;\n errorMessage: string;\n successMessage: string;\n };\n}\n\nconst sampleCode = `// Example\n// Problem: Print sum of two numbers\n\nfunction main(num1, num2) {\n const sum = num1 + num2;\n console.log(sum);\n}\n`;\n\nconst AssignmentProfile = (\n props: RouteComponentProps<{ course_id: string; assignment_id: string }>\n) => {\n const { course_id: courseId, assignment_id: courseWorkId } =\n props.match.params;\n\n const [course, setCourse] = useState(null);\n const [courseWork, setCourseWork] = useState(null);\n const [workItems, setWorkItems] = useState([]);\n const [isLoading, setIsLoading] = useState(true as boolean);\n const [errorMessage, setErrorMessage] = useState('' as string);\n const [overridden, setOverridden] = useState(false as boolean);\n const [grade, setGrade] = useState('' as string);\n const [recalculating, setRecalculating] = useState(false as boolean);\n const [hasExamEnded, setExamEnded] = useState(false as boolean);\n const [isFileRejected, setIsFileRejected] = useState(false as boolean);\n\n\n const classes = useStyles();\n\n const { confirm, alert, prompt } = useDialog();\n\n const { renderSnackbar, showMessage } = useSnackbar();\n\n const { renderModal, openFileExplorer } = useZipFileExplorerPopUp();\n\n const {\n renderModal: renderSpecCommentsModal,\n renderOpenButton: renderSpecCommentsOpenButton,\n } = useSpecComments();\n\n const {\n isLoading: isFeedbackLoading,\n executeWithStatus: executeFeedbackWithStatus,\n } = useLoadingStatusMap();\n\n const getGradeStatus = async () => {\n const params = {\n accountID: auth.getSession()?.accountID,\n assignmentID: courseWorkId,\n };\n const queryString = APITools.parseQueryParams(params);\n const { data } = await axios.get(\n `/admin/grade-override-status${queryString}`\n );\n setOverridden(data);\n };\n\n const loadWorkItems = async () => {\n const session = auth.getSession();\n const specs = await Spec.find({\n assignmentID: courseWorkId,\n });\n\n // const _rawSubmittedFiles: DriveFile[] = [];\n const _workItems: WorkItem[] = specs.map((spec) => {\n return {\n spec,\n submission: null,\n answer: '',\n testResult: null,\n manual: !spec.data.length,\n };\n });\n\n setWorkItems(_workItems);\n\n const submissionResponse = await CourseWork.getSubmission({\n assignmentIds: [courseWorkId],\n });\n\n const submission = submissionResponse?.data;\n\n if (submission) {\n const submissions = _workItems.map((item, index) => {\n const matchingSubmission = submission.find(\n (sub: { file: { title: string } }) =>\n sub.file.title.split('.')[0] === item.spec.name\n );\n\n if (matchingSubmission) {\n const content = matchingSubmission.file.content;\n const title = matchingSubmission.file.title as string;\n\n if (title.endsWith('.zip')) {\n const binaryString = atob(content);\n\n const uint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n uint8Array[i] = binaryString.charCodeAt(i);\n }\n\n const zipBlob = new Blob([uint8Array], {\n type: 'application/zip',\n });\n const zipFile = new File([zipBlob], item.spec.name + '.zip', {\n type: 'application/zip',\n });\n\n const rawFileAnswer = zipFile;\n const alternateLink = URL.createObjectURL(zipFile);\n\n return {\n ...item,\n submission: {\n file: {\n title,\n id: '',\n alternateLink,\n },\n content,\n },\n rawFileAnswer,\n };\n }\n\n return {\n ...item,\n submission: {\n file: {\n title,\n id: '',\n alternateLink: '',\n },\n content,\n },\n answer: content,\n };\n }\n\n return item;\n });\n\n setWorkItems(submissions);\n }\n };\n\n const loadCourseWork = async () => {\n const session = auth.getSession();\n\n const moodleCourseAssignments = await CourseWork.getMoodleCourseAssignments(\n {\n token: session?.accessToken,\n courseId,\n }\n );\n\n if (!moodleCourseAssignments)\n throw new Error('Unable to get coursework profile');\n\n const _courseWork = moodleCourseAssignments.find(\n (obj) => obj.id === courseWorkId\n ) as CourseWork;\n setCourseWork(_courseWork);\n };\n\n const loadCourse = async () => {\n const _course = await Course.findById({\n courseId,\n });\n\n setCourse(_course);\n };\n\n const loadData = async () => {\n try {\n setIsLoading(true);\n setErrorMessage('');\n await Promise.all([\n loadWorkItems(),\n loadCourseWork(),\n // getGradeStatus(),\n loadCourse(),\n ]);\n } catch (e) {\n setErrorMessage(utils.getRequestErrorMessage(e));\n } finally {\n setIsLoading(false);\n window.scrollTo(0, 0);\n }\n };\n\n const submitWorkItem = async (\n workItem: WorkItem,\n rawFile: File[] | null = null\n ) => {\n const confirmed = await confirm(\n `Are you sure to submit ${\n rawFile && rawFile.length > 1 ? 'these files' : 'this file'\n }?`\n );\n if (!confirmed) return;\n\n try {\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem)\n item.uploadStatus = {\n isLoading: true,\n errorMessage: '',\n successMessage: '',\n };\n return item;\n })\n );\n\n if (workItems.length >= 2) {\n (async () => {\n const zip = new JSZip();\n\n await Promise.all(\n workItems.map(async (item, index) => {\n if (workItem === item && rawFile) {\n const rawFileZip = new JSZip();\n\n rawFile.forEach((rawItem, index) => {\n const fileBlob = new Blob([rawItem], {\n type: rawItem.type,\n });\n rawFileZip.file(rawItem.name, fileBlob);\n });\n const zipBlob = await rawFileZip.generateAsync({\n type: 'blob',\n });\n\n zip.file(`${workItem.spec.name}.zip`, zipBlob);\n\n const zipFile = new File(\n [zipBlob],\n workItem.spec.name + '.zip',\n {\n type: 'application/zip',\n }\n );\n const zipUrl = URL.createObjectURL(zipFile);\n\n const rawFileAnswer = zipFile;\n const submission = {\n file: {\n id: '',\n title: zipFile.name,\n alternateLink: zipUrl,\n },\n content: workItem.answer,\n };\n\n setWorkItems(\n workItems.map((_item) => {\n if (_item === workItem) {\n _item.submission = submission;\n _item.rawFileAnswer = rawFileAnswer;\n }\n return _item;\n })\n );\n } else {\n if (item.manual && item.rawFileAnswer) {\n const zipBlob = new Blob([item.rawFileAnswer], {\n type: item.rawFileAnswer.type,\n });\n zip.file(`${item.spec.name}.zip`, zipBlob);\n\n const zipFile = new File(\n [zipBlob],\n workItem.spec.name + '.zip',\n {\n type: 'application/zip',\n }\n );\n const zipUrl = URL.createObjectURL(zipFile);\n\n const rawFileAnswer = zipFile;\n const submission = {\n file: {\n id: '',\n title: zipFile.name,\n alternateLink: zipUrl,\n },\n content: workItem.answer,\n };\n\n setWorkItems(\n workItems.map((_item) => {\n if (_item === workItem) {\n _item.submission = submission;\n _item.rawFileAnswer = rawFileAnswer;\n }\n return _item;\n })\n );\n } else {\n const jsBlob = new Blob([item.answer], {\n type: 'text/javascript',\n });\n zip.file(`${item.spec.name}.js`, jsBlob);\n\n setWorkItems(\n workItems.map((_item) => {\n if (_item === workItem) {\n _item.submission = {\n file: {\n id: '',\n title: _item.spec.name + '.js',\n alternateLink:\n _item.submission?.file.alternateLink ?? '',\n },\n content: workItem.answer,\n };\n }\n return _item;\n })\n );\n }\n }\n })\n );\n\n const zipBase64 = await zip.generateAsync({ type: 'base64' });\n try {\n const response = await Assignment.saveMoodleAssignment({\n fileName: 'solution.zip',\n fileContent: zipBase64,\n assignmentId: courseWorkId,\n });\n\n const gradeResponse = await Assignment.saveMoodleAssignmentGrade({\n assignmentId: courseWorkId,\n userId: auth.getSession()?.user?.userid.toString(),\n attemptNumber: -1,\n addAttempt: 0,\n workFlowState: 'graded',\n applyToAll: 0,\n comment: '',\n commentFormat: 1,\n fileManager: 1,\n });\n\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem) {\n // item.submission = {\n // file: {\n // id: '',\n // title:\n // item.spec.name + (item.rawFileAnswer ? '.zip' : '.js'),\n // alternateLink: item.submission?.file.alternateLink ?? '',\n // },\n // content: workItem.answer,\n // };\n item.uploadStatus = {\n isLoading: false,\n errorMessage: '',\n successMessage:\n response.data.length === 0\n ? 'Submission Success!'\n : 'Submission Failed!',\n };\n }\n return item;\n })\n );\n\n // await loadWorkItems()\n\n showMessage('Submission Success!', 'success');\n } catch (error) {\n console.log('ERROR: ', error);\n }\n })();\n } else {\n if (rawFile) {\n (async () => {\n const zip = new JSZip();\n rawFile.forEach((item, index) => {\n const fileBlob = new Blob([item], {\n type: item.type,\n });\n zip.file(item.name, fileBlob);\n });\n\n const zipBase64 = await zip.generateAsync({ type: 'base64' });\n\n try {\n const response = await Assignment.saveMoodleAssignment({\n fileName: workItem.spec.name + '.zip',\n fileContent: zipBase64,\n assignmentId: courseWorkId,\n });\n\n const zipBlob = await zip.generateAsync({ type: 'blob' });\n const zipAnswer = new File(\n [zipBlob],\n workItem.spec.name + '.zip',\n {\n type: 'application/zip',\n }\n );\n const zipUrl = URL.createObjectURL(zipAnswer);\n\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem) {\n item.submission = {\n file: {\n id: '',\n title: zipAnswer.name,\n alternateLink: zipUrl,\n },\n content: workItem.answer,\n };\n item.uploadStatus = {\n isLoading: false,\n errorMessage: '',\n successMessage:\n response.data.length === 0\n ? 'Submission Success!'\n : 'Submission Failed!',\n };\n\n if (rawFile) {\n item.rawFileAnswer = zipAnswer;\n }\n }\n return item;\n })\n );\n\n showMessage('Submission Success!', 'success');\n } catch (error) {\n console.log('ERROR: ', error);\n }\n })();\n } else {\n const file = (() => {\n const blobFile: any = new Blob([workItem.answer], {\n type: 'text/javascript',\n });\n return new File([blobFile], `${workItem.spec.name}.js`, {\n lastModified: new Date().getTime(),\n });\n })();\n\n const reader = new FileReader();\n\n reader.onload = async () => {\n const base64Content = btoa(reader.result as string);\n\n try {\n const response = await Assignment.saveMoodleAssignment({\n fileName: file.name,\n fileContent: base64Content,\n assignmentId: courseWorkId,\n });\n\n const gradeResponse = await Assignment.saveMoodleAssignmentGrade({\n assignmentId: courseWorkId,\n userId: auth.getSession()?.user?.userid.toString(),\n attemptNumber: -1,\n addAttempt: 0,\n workFlowState: 'graded',\n applyToAll: 0,\n comment: '',\n commentFormat: 1,\n fileManager: 1,\n });\n\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem) {\n item.submission = {\n file: {\n id: '',\n title: file.name,\n alternateLink: '',\n },\n content: workItem.answer,\n };\n item.uploadStatus = {\n isLoading: false,\n errorMessage: '',\n successMessage:\n response.data.length === 0\n ? 'Submission Success!'\n : 'Submission Failed!',\n };\n }\n return item;\n })\n );\n\n showMessage('Submission Success!', 'success');\n } catch (error) {\n console.log('ERROR: ', error);\n }\n };\n\n reader.readAsBinaryString(file);\n }\n }\n } catch (error) {\n showMessage(utils.getRequestErrorMessage(error), 'error');\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem)\n item.uploadStatus = {\n isLoading: false,\n errorMessage: error.message,\n successMessage: '',\n };\n return item;\n })\n );\n }\n };\n\n const validateWorkItemAnswer = async (workItem: WorkItem) => {\n const hasMainFunction = (str: string): boolean => {\n if (/function(\\s)+main(\\s|)+\\(/g.test(str)) return true;\n if (/(var|let|const)(\\s|)+main(\\s|)+=(\\s|)+\\(.*\\)(\\s|)+=>/g.test(str))\n return true;\n return /(var|let|const)(\\s|)+\\w+(\\s|)+=(\\s|)+function(\\s|)+\\(/g.test(str);\n };\n\n const hasClassImplementation = (str: string): boolean => {\n return /(class)(\\s)*(\\S)+(\\s)*\\{/g.test(str);\n };\n\n try {\n const answer = workItem.answer.trim();\n if (!answer) throw new Error('Please provide an answer to test.');\n if (!hasMainFunction(answer) && !hasClassImplementation(answer))\n throw new Error('Unable to find main function.');\n } catch (error) {\n alert(\n <>\n

    {error.message}

    \n

    \n Important: Please name your function into \"main\".\n

    \n \n ,\n {\n title: 'Run Test Validation',\n }\n );\n throw new Error(error);\n }\n };\n\n const recalculateGrade = () => {\n setRecalculating(true);\n const res = workItems.map(async (workItem) => {\n if (workItem.answer !== '') {\n return await axios.post(\n '/exam/submit',\n JSON.stringify({\n submitterID: utils.generateSubmissionUID(courseId, courseWorkId),\n activityID: workItem.spec.id,\n assignmentID: courseWorkId,\n code: workItem.answer,\n isAdmin: auth.isAdmin(),\n accountID: auth.getSession()?.user?.userid.toString(),\n })\n );\n }\n });\n Promise.all(res).then(async () => {\n const data = (\n await axios.post(\n '/classroom/courses/course-work/recalculate-grade',\n JSON.stringify({\n courseID: courseId,\n personID: auth.getSession()?.user?.userid.toString(),\n assignmentID: courseWorkId,\n })\n )\n ).data;\n if (data) {\n setRecalculating(false);\n }\n });\n };\n\n const downloadDriveAssignment = async (fileId: string) => {\n const params = { fileId };\n const queryString = APITools.parseQueryParams(params);\n const { data } = await axios.get(\n `/classroom/courses/course-work/student-submission/file${queryString}`\n );\n const { fileBinary, fileType } = data;\n\n const arr = new Uint8Array(Buffer.from(fileBinary, 'hex'));\n const blob = new Blob([arr], { type: fileType });\n return blob;\n };\n\n const openFeedbackForm = async (spec: Spec) => {\n const feedback = await prompt(\n \n \n Please enter your feedback for {spec.name}. Your feedback will\n be read by all the training teams at Kingsland University.\n \n\n \n \n Your feedback helps us improve and create better learning\n experiences for you and for our Kingsland students.\n \n \n ,\n {\n title: 'Send Feedback',\n fieldProps: {\n placeholder: 'Enter feedback',\n required: true,\n fullWidth: true,\n multiline: true,\n inputProps: {\n style: {\n minHeight: '5em',\n },\n },\n },\n }\n );\n\n await executeFeedbackWithStatus(\n spec.id,\n async () => {\n if (typeof feedback === 'string') {\n await SpecFeedback.create({\n specId: spec.id,\n description: feedback,\n });\n\n await alert('Feedback has been sent successfully!', {\n title: 'Feedback sent',\n });\n }\n },\n (e) =>\n alert(utils.getRequestErrorMessage(e), {\n title: 'Send Feedback Error',\n })\n );\n };\n\n useEffect(() => {\n (async () => await loadData())();\n }, []);\n\n let examEndedInterval: NodeJS.Timeout;\n useEffect(() => {\n if (courseWork && courseWork.dueDate)\n examEndedInterval = setInterval(() => {\n setExamEnded((_examEnded) => utils.hasExamEnded(courseWork));\n\n if (utils.hasExamEnded(courseWork)) clearInterval(examEndedInterval);\n }, 1000);\n }, [courseWork]);\n\n return (\n \n
    \n {renderSnackbar()}\n {renderModal()}\n {renderSpecCommentsModal()}\n
    \n\n
    \n \n Courses\n {course?.fullname || courseId}\n \n Assignments\n \n {courseWork?.name || courseWorkId}\n \n }\n >\n \n {courseWork?.name || courseWorkId} \n {!!courseWork && }\n \n \n\n {(() => {\n if (isLoading)\n return (\n
    \n \n

    Loading Assignment

    \n
    \n );\n\n if (errorMessage)\n return (\n
    \n

    Error Loading Assignment

    \n

    {errorMessage}

    \n \n Try Again\n \n
    \n );\n\n if (!workItems.length)\n return (\n
    \n

    \n This exercise does not have an automated test.\n

    \n
    \n );\n\n if (courseWork)\n return (\n <>\n \n
    \n
    \n {/* \n {recalculating && (\n \n )}\n Recalculate Grade\n */}\n
    \n\n {!!grade && (\n \n Grade:{' '}\n {grade}/{courseWork.maxPoints}\n \n )}\n
    \n\n {workItems.map((workItem, index) => (\n \n {/* title of the activity */}\n \n

    {workItem.spec.name}

    \n
    \n\n
    \n {(() => {\n if (workItem.manual)\n return (\n \n \n {workItem.spec.name.toUpperCase() !== 'EXAM' ||\n (workItem.spec.name.toUpperCase() === 'EXAM' &&\n !hasExamEnded) ? (\n \n {(() => {\n if (workItem.uploadStatus?.isLoading)\n return (\n \n
    \n \n
    Uploading
    \n
    \n
    \n );\n\n return (\n {\n if (\n acceptedFiles.length > 0 &&\n rejectedFiles.length === 0\n ) {\n setIsFileRejected(false);\n (async () =>\n await submitWorkItem(\n workItem,\n acceptedFiles\n ))();\n }\n }}\n onDropRejected={() => {\n setIsFileRejected(true);\n }}\n noClick={false}\n validator={(file) => {\n if (file.name.endsWith('.zip')) {\n return {\n code: 'unsupported-file-format',\n message:\n '.zip file cannot be accepted',\n };\n }\n\n return null;\n }}\n >\n {(state: DropzoneState) => {\n return (\n \n \n {(() => {\n if (state.isDragActive) {\n return (\n

    \n Drop file(s)\n here\n

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

    \n Drop file(s)\n here\n

    \n

    \n or click to select\n file(s)\n

    \n
    \n );\n })()}\n
    \n \n \n );\n }}\n \n );\n })()}\n \n ) : null}\n\n {!!workItem.submission &&\n workItem.submission.file.alternateLink && (\n \n
    Submitted File:
    \n\n \n \n \n \n \n \n \n \n {workItem.submission.file.title}\n \n \n \n {!!workItem.submission.file.id &&\n /\\.zip/gi.test(\n workItem.submission.file.title\n ) && (\n {\n if (workItem.submission)\n openFileExplorer(\n workItem.submission\n .file.id\n );\n }}\n >\n \n \n )}\n\n {!!workItem.submission.file\n .alternateLink && (\n \n \n \n )}\n \n \n \n \n \n )}\n \n\n \n \n \n {isFileRejected ? (\n \n Unfortunately, we do not support zip\n files or any other compressed formats at\n this time. Please upload files that are\n not compressed or zipped.\n \n ) : (\n \n Please submit the necessary\n file(s) and we will zip it for\n you.\n \n )}\n\n {/* {\n e.preventDefault();\n alert(\n
    \n \n
    ,\n {\n title: 'How to zip your files',\n }\n );\n }}\n >\n Don't know how to zip a file?\n */}\n
    \n
    \n
    \n \n );\n\n return (\n {\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem) item.answer = answer;\n return item;\n })\n );\n }}\n onTestResultChange={(result: TestResult | null) => {\n setWorkItems(\n workItems.map((item) => {\n if (item === workItem) {\n if (item.uploadStatus)\n delete item.uploadStatus;\n item.testResult = result;\n }\n return item;\n })\n );\n }}\n onBeforeTest={async () =>\n await validateWorkItemAnswer(workItem)\n }\n showReference={true}\n resultFooter={(() => {\n const { uploadStatus } = workItem;\n\n if (uploadStatus?.errorMessage)\n return (\n

    \n {uploadStatus.errorMessage}\n {\n e.preventDefault();\n setWorkItems(\n workItems.map((item) => {\n if (\n item === workItem &&\n item.uploadStatus\n )\n uploadStatus.errorMessage = '';\n return item;\n })\n );\n }}\n >\n close\n \n

    \n );\n\n if (uploadStatus?.successMessage)\n return (\n

    \n {uploadStatus.successMessage}\n

    \n );\n\n return (\n \n ) : (\n \n )\n }\n onClick={() => submitWorkItem(workItem)}\n >\n \n {workItem.spec.name.toUpperCase() ===\n 'EXAM' && hasExamEnded\n ? 'Exam Ended'\n : 'Submit For Checking'}\n \n \n );\n })()}\n editorFooter={\n \n {renderSpecCommentsOpenButton({\n specId: workItem.spec.id,\n })}\n \n ) : (\n \n )\n }\n onClick={() =>\n openFeedbackForm(workItem.spec)\n }\n color=\"primary\"\n size=\"small\"\n >\n Feedback\n \n \n }\n />\n );\n })()}\n \n \n ))}\n \n );\n })()}\n \n
    \n );\n};\n\nexport default AssignmentProfile;\n","import { useState } from 'react';\n\nimport utils from '../libs/utils';\n\ninterface LoadingMap {\n [reference: string]: boolean\n}\n\ninterface ErrorMessageMap {\n [reference: string]: string\n}\n\ninterface Status {\n isLoading: boolean\n errorMessage: string\n}\n\nconst useLoadingStatusMap = () => {\n // to ensure all values retrieved are latest/updated, a reference type variable map is required (centralized value reference)\n const [referenceMap] = useState>(new Map());\n\n const [isLoading, _setIsLoading] = useState({});\n const [errorMessage, _setErrorMessage] = useState({});\n\n const _syncReferenceMap = () => {\n const newLoadingMap: LoadingMap = {};\n const newErrorMessageMap: ErrorMessageMap = {};\n\n for (const [ref, status] of Array.from(referenceMap.entries())) {\n newLoadingMap[ref] = status.isLoading;\n newErrorMessageMap[ref] = status.errorMessage;\n }\n\n _setIsLoading(newLoadingMap);\n _setErrorMessage(newErrorMessageMap);\n };\n\n const _setReferenceStatus = (ref: string, status: Partial) => {\n const currentStatus = referenceMap.get(ref);\n const {\n isLoading = currentStatus?.isLoading || false,\n errorMessage = currentStatus?.errorMessage || ''\n } = status;\n referenceMap.set(ref, { isLoading, errorMessage });\n _syncReferenceMap();\n };\n\n const setIsLoading = (ref: string, isLoading: boolean) => {\n _setReferenceStatus(ref, { isLoading });\n };\n\n const setErrorMessage = (ref: string, errorMessage: string) => {\n _setReferenceStatus(ref, { errorMessage });\n };\n\n const executeWithStatus = async (ref: string, execute: () => Promise, onError?: (err: Error) => {}) => {\n try {\n _setReferenceStatus(ref, {\n isLoading: true,\n errorMessage: ''\n });\n await execute();\n } catch (e) {\n setErrorMessage(ref, utils.getRequestErrorMessage(e));\n if (onError) onError(e);\n } finally {\n setIsLoading(ref, false);\n }\n };\n\n return {\n isLoading,\n setIsLoading,\n errorMessage,\n setErrorMessage,\n executeWithStatus\n };\n};\n\nexport default useLoadingStatusMap;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport countdown from 'countdown';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport CourseWork from '../../models/CourseWork';\nimport utils from '../../libs/utils';\n\nexport interface ExamCountdownProps {\n courseWork?: CourseWork;\n}\n\nconst useStyles = makeStyles((theme) => ({\n buttonsContainer: {\n display: 'flex',\n },\n}));\n\nexport const ExamCountdown = (props: ExamCountdownProps) => {\n const classes = useStyles();\n const { courseWork } = props;\n const [currentTime, setCurrentTime] = useState(Date.now());\n \n let countdownInterval: NodeJS.Timeout;\n const startCurrentTimeInterval = () =>\n setInterval(() => {\n setCurrentTime((_currentTime) => Date.now());\n \n if (utils.hasExamEnded(courseWork)) clearInterval(countdownInterval);\n }, 1000);\n\n useEffect(() => {\n if (courseWork && courseWork.dueDate) countdownInterval = startCurrentTimeInterval();\n }, []);\n\n const timeRemainingTillDue = useMemo(\n () =>\n countdown(currentTime, utils.getExamDueUnix(courseWork)).toString() ||\n '0',\n [currentTime]\n );\n\n if (!courseWork || courseWork.name !== 'Exam' || !courseWork.dueDate) {\n return null;\n }\n\n return (\n <>\n
    \n

    \n Due Date: {utils.getFormattedExamDue(courseWork)} UTC\n

    \n
    \n
    \n
    \n {utils.hasExamEnded(courseWork)\n ? 'Exam Ended'\n : `Time Remaining: ${timeRemainingTillDue}`}\n
    \n
    \n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Grid,\n Button,\n TextField,\n CircularProgress,\n Typography\n} from '@material-ui/core';\n\nimport CourseWork from '../../models/CourseWork';\nimport StudentSubmission from '../../models/StudentSubmission';\nimport { useDialog } from '../../context/Dialog';\nimport utils from '../../libs/utils';\n\nexport interface GradeInputProps {\n courseWork: CourseWork\n submission: StudentSubmission\n}\n\nconst GradeInput = (props: GradeInputProps) => {\n const { courseWork, submission } = props;\n const [isSaving, setIsSaving] = useState(false);\n const [isEnterMode, setIsEnterMode] = useState(false);\n const [grade, setGrade] = useState(null);\n const dialog = useDialog();\n\n const currentGrade = submission.getGrade();\n const isEmptyGrade: boolean = currentGrade === null;\n\n const saveGrade = async () => {\n try {\n setIsSaving(true);\n await submission.setAssignedGrade(grade);\n setIsEnterMode(false);\n }\n catch (e) {\n await dialog.alert(utils.getRequestErrorMessage(e), {\n title: 'Set Grade Error'\n });\n }\n finally {\n setIsSaving(false);\n }\n };\n\n useEffect(() => {\n setGrade(isEmptyGrade ? null : Number(submission.getGrade()));\n }, [submission, isEnterMode]);\n\n if(isEnterMode) return (\n
    \n \n \n setGrade(e.target.value ? Number(e.target.value) : null)}\n />\n \n\n {(() => {\n if (isSaving)\n return (\n \n \n \n );\n\n return (\n <>\n \n \n \n \n \n \n \n );\n })()}\n \n
    \n );\n\n return (\n \n {!isEmptyGrade && (\n \n {currentGrade}/{courseWork.maxPoints}\n \n )}\n \n \n \n \n );\n};\n\nexport default GradeInput;\n"],"sourceRoot":""}