{"version":3,"sources":["components/uiComponents/highlightedText.js","assets/icons/videos.svg","assets/icons/settings.svg","assets/icons/feedback_white.svg","assets/icons/profile-user_white.svg","utils/storage/auth.js","components/sideBar/generalSideBar.js","assets/icons/arrow_right_red.svg","utils/api/httpClient.js","utils/api/topicApi.js","components/uiComponents/card.js","components/uiComponents/button.js","assets/icons/quiz.svg","assets/icons/video_wine.svg","assets/icons/notes-wine.svg","utils/constants.js","utils/utilFnx.js","components/sideBar/topicSideBarSectionTile.js","components/sideBar/topicSideBar.js","assets/icons/profile-user.svg","utils/api/accountApi.js","components/uiComponents/uiElements.js","assets/icons/menu1.svg","assets/icons/graphic-progression_green.svg","components/topBar/topBar.js","assets/illustrations/brainstorming.svg","assets/images/course.svg","assets/images/courseImage.jpg","components/uiComponents/text.js","components/topic/backgroundFiller.js","components/topic/ genericTopicCard.js","components/topic/enrolledTopicCard.js","pages/authorized/home/home.js","assets/icons/block-user.svg","components/topic/syllabusContent.js","components/topic/syllabusSection.js","utils/api/subscriberApi.js","pages/authorized/topicOverview/topicOverview.js","utils/api/quizApi.js","assets/illustrations/signin.svg","components/uiComponents/promptToAuthenticate.js","components/uiComponents/input.js","assets/icons/info.svg","assets/icons/question.svg","assets/icons/question_fill.svg","components/quiz/quizExtraInfoCard.js","pages/authorized/quiz/exam.js","assets/icons/empty.svg","pages/authorized/quiz/quizSummary.js","pages/authorized/quiz/quiz.js","assets/icons/liked.svg","assets/icons/unliked.svg","components/media/lessonNote.js","assets/icons/comment.svg","utils/api/dialogueApi.js","components/media/discussion.js","components/media/discussionBoard.js","utils/api/videoApi.js","pages/authorized/media/videoPlayer.js","pages/authorized/media/media.js","pages/authorized/feedback/feedback.js","assets/icons/checkmark-settings_green.svg","pages/authorized/settings/account.js","assets/icons/cancel.svg","pages/authorized/settings/profile.js","pages/authorized/settings/security.js","pages/authorized/settings/settings.js","utils/api/noteApi.js","pages/authorized/note/note.js","layouts/authorized.js","pages/unauthorized/login.js","pages/unauthorized/signup.js","pages/unauthorized/activate.js","assets/icons/email.svg","pages/unauthorized/forgotPassword.js","pages/unauthorized/resetPassword.js","layouts/unAuthorized.js","App.js","serviceWorker.js","index.js"],"names":["HighlightedText","styled","h1","size","weight","fontStyle","textTransform","lineHeight","color","margin","width","height","alignItems","display","space","background","radius","padding","alignSelf","textAlign","HightlightedSpan","span","getAuthToken","localStorage","getItem","JSON","parse","deleteAuthToken","removeItem","GeneralSideBar","props","state","authenticated","Boolean","SideBar","className","exact","activeClassName","to","isActive","match","location","pathname","includes","src","VideoIcon","alt","this","SettingsIcon","FeedbackIcon","UnAuthorizedUserIcon","React","Component","div","APIClient","url","process","accountApi","axios","create","baseURL","accountAuthApi","headers","Authorization","NoteApi","TopicApi","QuizApi","VideoApi","DialogueApi","SubscriberApi","getStudentTopics","a","student","get","data","retrieveFullTopic","id","endpoint","getSyllabusList","getStudentEnrolledTopics","enrollInQuiz","topicID","post","topic","Card","border","shadow","flexFlow","gradientBackground","hoverBorderColor","Button","button","TOPIC_SIDEBAR_REGEX","HOMEPAGE_FILLER_CARDS_WITHOUT_GRADIENT","HOMEPAGE_FILLER_CARDS_WITH_GRADIENT_AND_FALLBACK","setItemToLocal","name","setItem","stringify","getItemFromLocal","readableServerError","err","response","status","Array","isArray","map","e","Object","entries","ee","toLocaleUpperCase","message","enrollment","enrolls","numberingShortnerReadable","timeSince","date","Date","seconds","Math","floor","interval","convertTimeDelta","dateTimeHigh","dateTimeLow","timeDelta","toFixed","durationReadableFromNumer","duration","split","reverse","value","i","parseInt","parseFloat","convertDurationStringToSeconds","secs","mins","number","String","packageFormDataSubmission","field","sendField","bodyFormData","FormData","forEach","kvPair","length","append","getBackgroundFiller","withGradient","TopicSideBarSectionTile","render","section","title","collapse","onClick","setState","isOpened","syllabus_contents","syllabusContent","SyllabusContentContainer","content_type","content","completed","completed_by_user","undefined","contentID","contentType","QuizIcon","NoteIcon","ArrowRed","Link","TopicSidebar","componentDidMount","_isMounted","topicSyllabus","getTopicSyllabusData","componentWillUnmount","params","then","isLoggedIn","account","userLogout","put","login","email","password","registerUser","registerData","activateAccount","activationData","getUserProfile","userId","updateUserBasicAccountSettings","userData","retrieveMyProfile","updateUserAccountProfile","profileData","profilePictureData","console","log","profile_picture","updatePasswordData","passwordData","extra_data","confirm_new_password","resetPassword","resetData","forgottenPassword","LogoImg","img","fit","TopBar","handleClick","prevState","logout_option","handleLogout","clear","window","reload","catch","history","push","isOpen","TopBarContainer","test","open","onClose","direction","path","MenuIcon","ProgressIcon","style","marginLeft","UserIcon","href","AshMidTitle","SuperScript","sup","BackgroundFiller","labels","learning_goals","GenericTopicCard","GenericTopicCardContainer","thumbnail","CourseImg","user","profile_pic","Course","user_enrollment","first_name","last_name","created_datetime","EnrolledTopicCard","EnrolledTopicCardContainer","CourseModules","getSuggestedTopicsData","getStudentEnrolledCoursesData","loadingEnrolled","enrolledTopics","catchLogic","errorMessage","snackMessage","type","loadingSuggested","suggestedTopics","TopicContainer","position","timeout","noLabel","onNo","yesLabel","onYes","css","LoadingAnimationStyle","NoEnrolls","enrolledTopic","SyllabusContentTile","SyllabusSectionTile","loading","contents","subscribeToAUser","subscribingToID","api","subscribing_to","getSubscribings","TopicOverview","getUserProfileData","getTopicFullDetails","toISOString","slice","userFollowings","loadingTopic","syllabus_sections","loadingSyllabus","loadingProfile","instructorProfile","enrollLearner","loadingEnrollment","loadingFollowing","onFollow","cached","appendItemToLocalArray","firstContent","current_stage","syl_sec","find","TopicOverviewContainer","disabled","level","description","goal","syllabus","public_profile","biography","subjects_of_interest","join","some","PrivateUser","subscribes","retrieveQuiz","quizID","quiz","createQuizSummary","retrieveQuizSummary","quizSummaryID","postAnswersWithSummaryID","answers","summaryID","PromptToAuthenticate","PromtContainer","AuthenticateIllustration","Input","input","borderFocus","TextArea","textarea","Radio","QuizExtraInfoCard","getQuizSummary","quizSummary","updateUserSummaries","QuizExtraInfoCardContainer","submittedQuiz","total","InfoIcon","pass_mark","quiz_overall_statistics","total__max","total__avg","total__min","questionLength","keys","questionNumberIndex","index","QuestionAnswered","QuestionUnAnswered","prevProps","end_time","Exam","REACT_APP_DEBUG","addEventListener","onRefreshPrompt","getQuizData","createQuizSummaryData","removeEventListener","onAnswer","picked","target","dataset","paid","question","selected_answer","input_answer","answer","essay","shortanswer","questionnumber","onSubmit","depth","filter","d","pruneReturnObject","ExamPageContainer","when","action","instruction","questions","points","genre","possible_answers","pa","j","required","onChange","rightAnswers","preventDefault","returnValue","QuizSummary","summaryCard","summaryProps","passed","summary","timeSpent","start_time","summaries","user_summaries","QuizSummaryContainer","EmptyIcon","Quiz","userSummaries","existingSummary","findIndex","LessonNotesBulletPoint","LessonNotesBulletPointContainer","postFeedback","feedback","postDiscussionForVideo","videoID","discussionData","getDiscussionForVideo","likeOrUnlikeComment","commentID","liked","Discussion","laudableThreshold","componentDidUpdate","userLikeWithinComponent","liked_by_user","commentLikes","likes","onChangeEmbeddedCommenting","discussion","submitEmbeddedDiscussion","parentID","appendEmbeddedToParent","embeddedDiscussions","onCancel","openEmbeddedCommenting","comment","likeDiscussionInterraction","openReplies","worthLaudable","embeddedComments","LikedIcon","UnLikedIcon","CommentIcon","placeholder","comments","innerMostEmbedded","getDerivedStateFromProps","comment_to","DiscussionBoard","onGetVideoDiscussion","onMainDiscussionChange","discussionNumber","organizingComments","discussionBoard","onPostVideoDiscussion","parentComments","splice","c","parent","showMore","DiscussionBoardContainer","retrieveVideo","updateVideoInterraction","interractionData","createVideoLog","createVideoLogInterraction","videoLogID","videoLogInterractionData","VideoPlayer","onCreateOrGetVideoLog","videoLog","analyticsMaker","timeStamp","command","videoLogInterraction","current_timestamp","video_log","deltaMainTimeStamp","onLoadedData","onLoadedMetaData","bufferingVideo","onError","onProgress","onEnded","baseTimeStamp","onLoadStart","playTimeBaseStamp","onPlay","onPause","onPlaying","onSeeked","onSeeking","onSuspend","VideoPlayerContainer","video","controls","replace","MediaPage","getVideoData","videoLikeInterraction","like","onCollapse","collapseNotes","MediaPageContainer","substr","Feedback","handleChange","handleCancel","subject","anonymous","handleSend","FeedbackPageContainer","borderLeft","rows","checked","Account","saveChanges","onSaveChanges","username","AccountContainer","SavedIcon","Profile","profile","onVariableChange","onAddDeleteLabel","updatedLabels","item","interest","handleProfileChange","handleImages","URL","createObjectURL","files","onSaveProfileChanges","returnData","key","hasOwnProperty","call","element","pruneDataObject","ProfileContainer","ProfilePic","accept","hidden","document","getElementsByName","click","date_of_birth","gender","school","telephone","CancelIcon","Security","handlePasswordChange","savePasswordChanges","onSavePasswordChanges","loadingPassword","new_password","onsavePrivacyChanges","privacy","loadingPrivacy","savePrivacyChanges","SecurityContainer","display_real_name","Settings","SettingsContainer","component","retrieveNote","noteID","Note","getNoteData","note","NoteContainer","toolbarHidden","readOnly","wrapperClassName","editorClassName","defaultContentState","Authorized","re","loggedIn","isAuthenticated","UserContainer","UserBody","HomePage","SettingsPage","NotePage","StudentQuizPage","FeedBack","Login","handleSubmit","token","error","skipAuthentication","LoginFormContainer","Register","confirm_password","organization","SignUpFormContainer","ActivateAccount","code","r_err","ActivateAccountEmailFormContainer","ForgotPassword","submitted","ForgotPasswordEmailFormContainer","EmailIcon","ResetPassword","newPassword","confirmNewPassword","resetID","ResetPasswordFormContainer","UnAuthorized","SignUp","App","hostname","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.d74afffc.chunk.js","sourcesContent":["import styled from 'styled-components';\n\n\n\nexport const HighlightedText = styled.h1`\n font-size: ${({ size }) => size};\n font-weight: ${({ weight }) => weight || \"bold\"};\n font-style: ${({ fontStyle }) => fontStyle || \"normal\"};\n font-stretch: normal;\n text-transform: ${({ textTransform }) => textTransform};;\n line-height: ${({ lineHeight }) => lineHeight || \"normal\"};\n letter-spacing: normal;\n color: ${({ color }) => color || \"#000000\"};\n margin: ${({ margin }) => margin || \"0px\"};\n width: ${({ width }) => width};\n height: ${({ height }) => height};\n align-items: ${({ alignItems }) => alignItems};\n display: ${({ display }) => display};\n justify-content: ${({space}) => space};\n background-color: ${({ background }) => background};\n border-radius: ${({ radius }) => radius};\n padding: ${({ padding }) => padding};\n align-self: ${({ alignSelf }) => alignSelf};\n text-align: ${({ textAlign }) => textAlign};\n\n .center-text{\n text-align: center;\n }\n\n .right-text{\n float: right;\n }\n\n /*@media only screen and (max-width: 768px){\n font-size:medium\n }*/\n\n`\n\nexport const HightlightedSpan = styled.span`\n font-size: ${({ size }) => size};\n font-weight: ${({ weight }) => weight || \"bold\"};\n font-style: ${({ fontStyle }) => fontStyle || \"normal\"};\n font-stretch: normal;\n line-height: normal;\n letter-spacing: normal;\n color: ${({ color }) => color || \"#000000\"};\n background-color: ${({ background }) => background};\n margin: ${({ margin }) => margin || \"0px\"};\n padding: ${({ padding }) => padding};\n display: ${({ display }) => display};\n border-radius: ${({ radius }) => radius};\n\n .center-text{\n text-align: center;\n }\n\n .right-text{\n float: right;\n }\n\n`\n","export default __webpack_public_path__ + \"static/media/videos.d7e630dd.svg\";","export default __webpack_public_path__ + \"static/media/settings.22231209.svg\";","export default __webpack_public_path__ + \"static/media/feedback_white.1e091f3f.svg\";","export default __webpack_public_path__ + \"static/media/profile-user_white.4dd32ea3.svg\";","\n\n\nexport const setAuthToken = (token) => {\n localStorage.setItem(\"a_bearer\", JSON.stringify(token));\n}\nexport const getAuthToken = () => {\n return localStorage.getItem(\"a_bearer\") ? JSON.parse(localStorage.getItem(\"a_bearer\")) : null;\n}\nexport const setInstitution = (token) => {\n localStorage.setItem(\"se_insti_ion\", JSON.stringify(token));\n}\nexport const getInstitution = () => {\n return localStorage.getItem(\"se_insti_ion\") ? JSON.parse(localStorage.getItem(\"se_insti_ion\")) : null;\n}\n\nexport const setFirstName = (firstName) => {\n localStorage.setItem(\"f_name\", JSON.stringify(firstName));\n}\nexport const getFirstName = () => {\n return localStorage.getItem(\"f_name\") ? JSON.parse(localStorage.getItem(\"f_name\")) : null;\n}\n\n\nexport const setLastName = (lastName) => {\n localStorage.setItem(\"l_name\", JSON.stringify(lastName));\n}\nexport const getLastName = () => {\n return localStorage.getItem(\"l_name\") ? JSON.parse(localStorage.getItem(\"l_name\")) : null;\n}\n\n\n\nexport const setUserId = (userId) => {\n localStorage.setItem(\"u_id\", JSON.stringify(userId));\n}\nexport const getUserId = () => {\n return localStorage.getItem(\"u_id\") ? JSON.parse(localStorage.getItem(\"u_id\")) : null;\n}\n\n\n\nexport const setAuthGroup = (group) => {\n localStorage.setItem(\"g_user\", JSON.stringify(group));\n}\n\n\nexport const getGroup = () => {\n return localStorage.getItem(\"g_user\") ? JSON.parse(localStorage.getItem(\"g_user\")) : null;\n}\n\nexport const deleteAuthToken = () => {\n return localStorage.removeItem(\"a_bearer\");\n}\n\n\nexport const setCity = (city) => {\n localStorage.setItem(\"secitiyy\", JSON.stringify(city));\n}\nexport const getCity = () => {\n return localStorage.getItem(\"secitiyy\") ? JSON.parse(localStorage.getItem(\"secitiyy\")) : null;\n}\nexport const setCountry = (country) => {\n localStorage.setItem(\"se_country\", JSON.stringify(country));\n}\nexport const getCountry = () => {\n return localStorage.getItem(\"se_country\") ? JSON.parse(localStorage.getItem(\"se_country\")) : null;\n}\nexport const setImageUrl = (imageUrl) => {\n localStorage.setItem(\"image_pfrl\", JSON.stringify(imageUrl));\n}\nexport const getImageUrl = () => {\n return localStorage.getItem(\"image_pfrl\") ? JSON.parse(localStorage.getItem(\"image_pfrl\")) : null;\n}\nexport const setEmail = (email) => {\n localStorage.setItem(\"em_u_id\", JSON.stringify(email));\n}\nexport const getEmail = () => {\n return localStorage.getItem(\"em_u_id\") ? JSON.parse(localStorage.getItem(\"em_u_id\")) : null;\n}\n\nexport const deleteLocalStorageForLogout = () => {\n // remove token\n localStorage.removeItem(\"a_bearer\");\n // remove sighted state. \n localStorage.removeItem(\"s_sghtd\");\n}\n\nexport const setWindowLocationPathName = (pathname) => {\n localStorage.setItem(\"pth_nme\", JSON.stringify(pathname));\n}\nexport const getWindowLocationPathName = () => {\n return localStorage.getItem(\"pth_nme\") ? JSON.parse(localStorage.getItem(\"pth_nme\")) : null;\n}\n\nexport const setInitialInstruction = (pathname) => {\n localStorage.setItem(\"init_instr\", JSON.stringify(pathname));\n}\nexport const getInitialInstruction = () => {\n return localStorage.getItem(\"init_instr\") ? JSON.parse(localStorage.getItem(\"init_instr\")) : null;\n}\nexport const deleteInitialInstruction = () => { \n localStorage.removeItem(\"init_instr\");\n}\n\nexport const getCounter = () => {\n return localStorage.getItem(\"cntr\") ? JSON.parse(localStorage.getItem(\"cntr\")) : 0;\n}\nexport const setCounter = (pathname) => {\n localStorage.setItem(\"cntr\", JSON.stringify(pathname));\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n// import ArrowRed from '../../assets/icons/arrow_right_red.svg'\n// import { Card } from '../uiComponents/card'\nimport { HighlightedText } from '../uiComponents/highlightedText';\n// import { Button } from '../uiComponents/button'\n/* imported images*/\nimport VideoIcon from \"../../assets/icons/videos.svg\";\n// import SubscriberIcon from \"../../assets/icons/suscriber_white.svg\";\nimport SettingsIcon from \"../../assets/icons/settings.svg\";\n// import SubscriberImage from \"../../assets/images/course.svg\"\nimport FeedbackIcon from \"../../assets/icons/feedback_white.svg\"\nimport UnAuthorizedUserIcon from \"../../assets/icons/profile-user_white.svg\"\nimport { getAuthToken } from '../../utils/storage/auth';\n\nclass GeneralSideBar extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n authenticated: Boolean(getAuthToken()),\n\n }\n }\n\n render() {\n return (\n \n \n Skideo\n \n\n
\n\n {\n return location.pathname.includes(`/home`)\n || location.pathname.includes(`/topic`)\n }}\n data-testid=\"home\"\n >\n \"icon\"\n \n Home\n \n\n \n\n\n\n {this.state.authenticated && <>\n {\n return location.pathname.includes(`/settings`)\n }}\n data-testid=\"settingslink\"\n >\n \"settings\n \n Account Settings\n \n\n \n\n }\n
\n\n {\n this.state.authenticated ?\n \n \"feedback\n \n Feedback\n \n\n \n :\n \n \"unauthorized\n \n Account\n \n\n \n }\n
\n\n
\n \n Learn with confidence!\n \n {/* */}\n
\n\n\n
\n )\n }\n}\n\nexport default GeneralSideBar\n\n\n\n\n\nconst SideBar = styled.div`\n min-width: 15%;\n height: 100vh;\n box-shadow: 0px 3px 6px #00000029;\n background-color: #923D41;\n\n hr{\n margin: 1em;\n }\n .middleDiv{\n position: absolute;\n top: 20%;\n text-align-last: center;\n padding: 0.5em;\n margin: 0.5em;\n\n }\n\n .feedbackDiv{\n position: absolute;\n top: 30%;\n text-align-last: center;\n padding: 0.5em;\n margin: 0.5em;\n\n }\n\n .bottomDiv{\n /* position: absolute;\n bottom: 20%; */\n text-align-last: center;\n padding: 0.5em;\n margin: 0.5em;\n }\n \n\n a{\n align-items: center;\n text-decoration: none;\n display: flex;\n padding: 0em 0 0 1em;\n\n &.active { // & - making a class name inside the tag itself\n background-color: rgba(128,128,128, 0.5);\n border-radius: 0.3em;\n margin: 0em 0.5em;\n \n .img {\n filter: drop-shadow(0px 0px 13px #fff) brightness(1.2); \n }\n h1 {\n font-weight: bold;\n }\n }\n\n }\n\n \n\n @media only screen and (max-width: 1080px){\n /* responsiveness code has to be at the bottom so it overrides any conflicting above css */\n\n display: flex;\n width: 100%;\n height: 7vh;\n position:fixed;\n bottom:0;\n\n .bottomDiv{\n display: none;\n }\n\n .resp__bo{ // a jargon i created: explained in README.md more would follow\n display: none;\n }\n .topDiv{\n display: flex;\n text-align: center;\n width: 100%;\n justify-content: space-between;\n padding: 0 5px;\n\n // to make the code for responsiveness modular: \n // ie appear similar to html above, \n // you could embedd the tag just as they appear\n a{\n align-items: center;\n align-self: center;\n text-decoration: none;\n display: block;\n padding: 2% 2%;\n width: 25%;\n /* width: 20%; */\n\n h1{ // HighlightedText responsiveness\n /* font-size: 10px; */\n font-size: 50%;\n margin: 0;\n }\n &.active {\n margin: 0;\n }\n\n }\n }\n\n }\n\n \n\n`\n\n","export default __webpack_public_path__ + \"static/media/arrow_right_red.c9e07a0f.svg\";","import axios from 'axios';\n\n/* \n* if going to production, change the `url`\n in APIClient to backend url to the right one in an .env file. THis is gitignored\n*/\n\nclass APIClient {\n\n url = process.env.REACT_APP_BACKEND_URL;\n\n\n accountApi = axios.create({\n baseURL: `${this.url}/account/`,\n });\n\n\n accountAuthApi = axios.create({\n baseURL: `${this.url}/account/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n\n });\n\n\n NoteApi = axios.create({\n baseURL: `${this.url}/note/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n });\n \n TopicApi = axios.create({\n baseURL: `${this.url}/topic/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n\n });\n\n QuizApi = axios.create({\n baseURL: `${this.url}/quiz/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n });\n VideoApi = axios.create({\n baseURL: `${this.url}/video/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n });\n\n DialogueApi = axios.create({\n baseURL: `${this.url}/dialogue/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n });\n\n SubscriberApi = axios.create({\n baseURL: `${this.url}/subscribe/`,\n headers: {\n Authorization: Boolean(localStorage.getItem(\"a_bearer\")) ? `Token ${JSON.parse(localStorage.getItem(\"a_bearer\"))}` : null\n }\n });\n\n\n}\n\nexport default APIClient;\n","import APIClient from './httpClient';\n\n\n\nexport const getStudentTopics = async () => {\n const student = new APIClient();\n const endpoint = '/list/';\n\n const { data } = await student.TopicApi.get(endpoint);\n return data;\n}\n\n\nexport const retrieveFullTopic = async (id) => {\n const student = new APIClient();\n const endpoint = `/student/full/${id}/`;\n\n const { data } = await student.TopicApi.get(endpoint);\n return data;\n}\n\nexport const getSyllabusList = async (id) => {\n const student = new APIClient();\n const endpoint = `/${id}/sections/list/`;\n\n const { data } = await student.TopicApi.get(endpoint);\n return data;\n\n}\n\nexport const getStudentEnrolledTopics = async () => {\n const student = new APIClient();\n const endpoint = '/user/enrollment/list/';\n\n const { data } = await student.TopicApi.get(endpoint);\n return data;\n\n\n}\nexport const getStudentEnrollmentObjects = async () => {\n const student = new APIClient();\n const endpoint = '/enroll/';\n\n const { data } = await student.TopicApi.get(endpoint);\n return data;\n\n\n}\n\n\nexport const enrollInQuiz = async (topicID) => {\n const student = new APIClient();\n const endpoint = '/enroll/';\n\n const { data } = await student.TopicApi.post(endpoint, {topic: topicID});\n return data;\n\n\n}\n\n\n","import styled from 'styled-components';\n\nexport const Card = styled.div`\ndisplay: ${({ display }) => display || \"block\"};\ncolor: ${({ color }) => color || \"#ffffff\"};\nbackground-color: ${({ background }) => background || \"#ffffff\"};\nborder: ${({ border }) => border || 0};\npadding: ${({ padding }) => padding || \"0px 0px\"};\nmargin: ${({ margin }) => margin || \"0px 0px\"};\nborder-radius: ${({ radius }) => radius || \"2px\"};\nwidth: ${({ width }) => width || \"auto\"};\nheight: ${({ height }) => height || \"auto\"};\nbox-shadow: ${({ shadow }) => shadow || \"none\"};\njustify-content: ${({ space }) => space || \"normal\"};\nalign-items: ${({ alignItems }) => alignItems || \"normal\"};\ntext-align: ${({ textAlign }) => textAlign};\n\nflex-flow: ${({ flexFlow }) => flexFlow};\n\n\n &.withGradientBackground{\n \n background: ${({ background }) => background || \"black\"}; /* fallback for old browsers */\n background: -webkit-linear-gradient(${({ gradientBackground }) => gradientBackground}); /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(${({ gradientBackground }) => gradientBackground}); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n\n }\n \n /* to use the hover, make sure you already have a border property set by default */\n &:hover{\n border-color: ${({ hoverBorderColor }) => hoverBorderColor || \"#a93b3f\"};\n }\n \n`;\n","import styled from 'styled-components';\n\nexport const Button = styled.button`\ndisplay: ${({ display }) => display};\ncolor: ${({ color }) => color || \"#ffffff\"};\nbackground-color: ${({ background }) => background || \"#923d41\"};\nborder: ${({border}) => border || 0};\npadding: ${({ padding }) => padding || \"7px 53px\"};\nmargin: ${({ margin }) => margin || \"0px 0px\"};\nborder-radius: ${({radius}) => radius || \"2px\"};\nwidth: ${({width}) => width || \"auto\"};\nheight: ${({height}) => height || \"auto\"};\n`;\n\n","export default __webpack_public_path__ + \"static/media/quiz.aa47bdc5.svg\";","export default __webpack_public_path__ + \"static/media/video_wine.12976a8c.svg\";","export default __webpack_public_path__ + \"static/media/notes-wine.c1f9ed30.svg\";","\nexport const TOPIC_SIDEBAR_REGEX = /\\/topic\\/\\d+\\/main\\/\\w+/;\n\nexport const HOMEPAGE_FILLER_CARDS_WITHOUT_GRADIENT = [\"#023e8a\", \"#40916c\", \"#9d4edd\", \"#b07d62\", \"#723c70\", \"#212f45\"]\n\nexport const HOMEPAGE_FILLER_CARDS_WITH_GRADIENT_AND_FALLBACK = [\n [\"#799f0c\", \"to right, #ffe000, #799f0c\"],\n [\"#314755\", \"to right, #26a0da, #314755\"], \n [\"#2b5876\", \"to right, #4e4376, #2b5876\"],\n [\"#e65c00\", \"to right, #F9D423, #e65c00\"],\n [\"#cc2b5e\", \"to right, #753a88, #cc2b5e\"],\n [\"#00467F\", \"to right, #A5CC82, #00467F\"],\n]\n\n\n\n\n","import { HOMEPAGE_FILLER_CARDS_WITHOUT_GRADIENT, HOMEPAGE_FILLER_CARDS_WITH_GRADIENT_AND_FALLBACK } from \"./constants\";\n\nexport const setItemToLocal = (name, data) => {\n localStorage.setItem(name, JSON.stringify(data));\n}\n\nexport const getItemFromLocal = (name) => {\n return localStorage.getItem(name) ? JSON.parse(localStorage.getItem(name)) : null;\n}\n\n\nexport const appendItemToLocalArray = (name, data) => {\n const cached = getItemFromLocal(name) || []\n setItemToLocal(name, [data, ...cached])\n}\n\n\nexport const readableServerError = (err) => {\n return err.response\n ? err.response.status === 500\n ? \"The server had an issue with your request\"\n : err.response.status === 404 ?\n \"Resource not found\"\n : typeof (err.response.data) === \"string\" ?\n err.response.data\n : Array.isArray(err.response.data) ?\n err.response.data.map(e => {\n if (typeof (e) === \"string\") {\n return e\n } else {\n return Object.entries(e).map(ee =>\n `${ee[0].toLocaleUpperCase()}-${ee[1]} \\n`)\n\n }\n })\n :\n Object.entries(err.response.data).map(e =>\n `${e[0].toLocaleUpperCase()}-${e[1]} \\n`)\n : err.message ?? \"Unknown error. Kindly report for fixing\"\n}\n\n\nexport const enrollment = (enrolls) => {\n return `${numberingShortnerReadable(enrolls)} enrolled`\n\n}\n\nexport function timeSince(date) {\n // console.log(date);\n if (typeof (date) === \"string\") {\n date = new Date(date)\n }\n\n var seconds = Math.floor((new Date() - date) / 1000);\n\n var interval = seconds / 31536000;\n\n if (interval > 1) {\n return Math.floor(interval) + \" years ago\";\n }\n interval = seconds / 2592000;\n if (interval > 1) {\n return Math.floor(interval) + \" months ago\";\n }\n interval = seconds / 86400;\n if (interval > 1) {\n return Math.floor(interval) + \" days ago\";\n }\n interval = seconds / 3600;\n if (interval > 1) {\n return Math.floor(interval) + \" hours ago\";\n }\n interval = seconds / 60;\n if (interval > 1) {\n return Math.floor(interval) + \" minutes ago\";\n }\n return Math.floor(seconds) + \" seconds ago\";\n}\n\nexport const durationReadable = (duration) => {\n if (!Boolean(duration)) {\n return \"\"\n }\n\n duration = duration.split(\":\")\n duration[2] = parseFloat(duration[2]).toFixed(2)\n if (parseInt(duration[0]) > 0) {\n duration[0] = parseInt(duration[0]).toString() // hh:mm:ss or \n return duration.join(\":\")\n }\n else {\n duration[1] = parseInt(duration[1]).toString() // mm:ss \n return duration.slice(1, 3).join(\":\")\n }\n}\n\nexport const pruneReturnObject = (data, depth) => {\n if (Array.isArray(data)) {\n if (depth === 1) {\n return data.filter(d => Boolean(d))\n }\n\n }\n\n}\n\n\nexport const convertTimeDelta = (dateTimeHigh, dateTimeLow) => {\n // returns [timedelta, unit]\n\n const timeDelta = ((new Date(dateTimeHigh) - new Date(dateTimeLow)) / 1000)\n\n if (timeDelta <= 60) {\n return [timeDelta.toFixed(2), \"secs\"]\n } else if ((timeDelta / 60) <= 60) {\n return [(timeDelta / 60).toFixed(2), \"mins\"]\n } else if ((timeDelta / 3600) <= 24) {\n return [(timeDelta / 3600).toFixed(2), \"hrs\"]\n } else {\n return [(timeDelta / 86400).toFixed(2), \"days\"]\n }\n\n}\n\n\nexport const convertDurationStringToSeconds = (duration) => {\n if (typeof (duration) === \"number\") {\n return duration\n }\n duration = duration.split(\":\").reverse()\n var seconds = 0\n duration.map((value, i) => {\n if (i > 0) {\n seconds += parseInt(value) * 60 ** i\n } else {\n seconds += parseFloat(value) * 60 ** i\n }\n return []\n })\n return seconds\n}\n\nexport const durationReadableFromNumer = (duration) => {\n\n if (typeof (duration) === \"string\") {\n duration = convertDurationStringToSeconds(duration)\n }\n\n if (!Boolean(duration)) {\n return \"\"\n }\n var secs = Math.floor(duration % 60);\n if (duration / 60 < 1) {\n return secs + \" secs\";\n }\n var mins = Math.floor(duration / 60);\n if (mins < 60) {\n return mins + \":\" + secs + \" mins\"\n }\n else {\n mins = mins % 60\n return Math.floor(duration / 3600) + \":\" + mins + \":\" + secs + \" hrs\"\n }\n\n}\n\n\n\nexport const numberingShortnerReadable = (number) => {\n\n if (number >= 1e6) {\n return `${(number / 1e6).toFixed(1)}M`\n } else if (number >= 1e3) {\n return `${(number / 1e3).toFixed(1)}K`\n } else {\n return String(number)\n }\n\n}\n\n\n\nexport const pruneDataObject = (data) => {\n let returnData = {}\n for (const key in data) {\n if (Object.hasOwnProperty.call(data, key)) {\n const element = data[key];\n if (Boolean(element)) {\n // console.log(element);\n returnData[key] = element\n }\n }\n }\n return returnData\n}\n\n\n\nexport const packageFormDataSubmission = (data, field, sendField) => {\n let bodyFormData = new FormData();\n\n Object.entries(data).forEach(kvPair => {\n if (kvPair[1] !== null && !(Array.isArray(kvPair[1]) && kvPair[1].length === 0)) {\n if (Array.isArray(kvPair[1])) {\n bodyFormData.append(kvPair[0], JSON.stringify(kvPair[1]))\n\n } else {\n bodyFormData.append(kvPair[0], kvPair[1])\n }\n\n }\n })\n if (data[field]) {\n bodyFormData.append(sendField, data[field]);\n }\n return bodyFormData\n}\n\nexport const getBackgroundFiller = (id, withGradient) => {\n if (withGradient) {\n return HOMEPAGE_FILLER_CARDS_WITH_GRADIENT_AND_FALLBACK[id % HOMEPAGE_FILLER_CARDS_WITH_GRADIENT_AND_FALLBACK.length]\n\n } else {\n return [HOMEPAGE_FILLER_CARDS_WITHOUT_GRADIENT[id % HOMEPAGE_FILLER_CARDS_WITHOUT_GRADIENT.length]]\n } \n}","\nimport React from 'react';\nimport styled from 'styled-components';\nimport ArrowRed from '../../assets/icons/arrow_right_red.svg'\nimport { Card } from '../uiComponents/card'\nimport { HighlightedText, HightlightedSpan } from '../uiComponents/highlightedText';\nimport { Link } from 'react-router-dom'\nimport { Button } from '../uiComponents/button';\nimport QuizIcon from '../../assets/icons/quiz.svg'\nimport VideoIcon from '../../assets/icons/video_wine.svg'\nimport NoteIcon from '../../assets/icons/notes-wine.svg'\n\nimport { durationReadableFromNumer } from '../../utils/utilFnx';\nimport { Collapse } from 'react-collapse';\n\n\nclass TopicSideBarSectionTile extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n collapse: false,\n }\n }\n render = () => {\n // console.log(this.props);\n return (\n
\n \n \n {this.props.section.title}\n \n {\n this.setState({\n collapse: !this.state.collapse\n })\n }\n }\n >\n {this.state.collapse ? \"Expand\" : \"Collapse\"}\n \n \n\n \n {\n this.props.section.syllabus_contents.map((syllabusContent, i) => {\n // console.log(syllabusContent.content);\n return \n {\n // TODO: eliminate this class with & > div attribite\n }\n
\n \n\n\n \n {syllabusContent.content?.title}\n \n {durationReadableFromNumer(syllabusContent.content?.duration)}\n \n \n \"link\"\n
\n
\n })\n }\n
\n
\n\n )\n }\n}\n\nexport default TopicSideBarSectionTile\n\n\n\n\nconst SyllabusContentContainer = styled(Link)`\n\n \n text-decoration: none;\n \n\n .tabTile{ // TODO: eliminate this class with & > div attribite\n width: 80%;\n border-radius: 8px;\n border: ${({ completed }) => completed ? \"none\" : \"2px solid #923d41\"};\n background-color: ${({ completed }) => completed ? \"rgba(0, 230, 64, 0.3)\" : \"#fff\"};\n padding: 5px;\n margin: 10px 15px;\n display: flex;\n justify-content: space-around;\n\n }\n\n &.activeContent{\n background: rgba(232, 232, 232, 0.7);\n display: block;\n padding: 1px 0.5px;\n margin: 10px 5px;\n border-radius: 10px;\n }\n \n`\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport ArrowRed from '../../assets/icons/arrow_right_red.svg'\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport { Link } from 'react-router-dom'\nimport { getSyllabusList } from \"../../utils/api/topicApi\";\nimport TopicSideBarSectionTile from './topicSideBarSectionTile';\n\nclass TopicSidebar extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n topicSyllabus: [],\n }\n }\n\n componentDidMount = () => {\n this._isMounted = true\n\n // check whether it is coming from state\n if (this.props.location.state != null && Array.isArray(this.props.location.state)) {\n this._isMounted && this.setState({\n topicSyllabus: this.props.location.state,\n })\n }\n else {\n // if is it not coming from state, fetch from db\n this.getTopicSyllabusData()\n\n }\n\n }\n\n componentWillUnmount = () => {\n this._isMounted = false\n }\n\n getTopicSyllabusData = () => {\n // console.log(this.props.match.params.topicID);\n if (this.props.match.params.topicID) {\n // to prevent making request with param parameter of `undefined`\n getSyllabusList(this.props.match.params.topicID)\n .then(data => {\n // console.log(data);\n this._isMounted && this.setState({\n topicSyllabus: data,\n })\n });\n }\n }\n\n\n\n render() {\n // console.log(this.props);\n return (\n this.props.onClick && this.props.onClick()}>\n \n Skideo\n \n
\n\n
\n\n {this.state.topicSyllabus.map((section, i) =>\n \n )}\n
\n\n
\n\n \n Close \"close\n \n
\n\n
\n )\n }\n}\n\nexport default TopicSidebar\n\n\nconst SideBar = styled.div`\n\n min-width: 15%;\n height: 100vh;\n box-shadow: 0px 3px 6px #00000029;\n background-color: #ffffff;\n overflow: scroll;\n overflow-y:scroll;\n overflow-x:hidden; \n\n \n .bottomDiv{\n position: absolute;\n bottom: 0%;\n text-align-last: center;\n padding: 0.5em;\n margin: 0.5em;\n\n .exitTopic{\n background-color: #fff;\n color: #923d41;\n border-radius: 7px;\n padding: 8px 15px;\n border: 1px solid #923d41;\n text-decoration: none;\n }\n }\n\n .barBody{\n display: block;\n margin: 10px auto 5em;\n }\n\n @media only screen and (max-width: 768px){\n .bottomDiv{\n bottom: 5vh;\n }\n\n }\n\n\n`\n","export default __webpack_public_path__ + \"static/media/profile-user.2ab6e483.svg\";","import APIClient from './httpClient';\nimport { packageFormDataSubmission } from '../utilFnx';\n\n\nexport const isLoggedIn = async () => {\n const account = new APIClient();\n const endpoint = '/check/logged-in/';\n const { data } = await account.accountAuthApi.get(endpoint);\n // console.log(data);\n return data;\n\n}\nexport const userLogout = async () => {\n const account = new APIClient();\n const endpoint = '/update/logout/';\n const { data } = await account.accountAuthApi.put(endpoint);\n return data;\n\n}\n\nexport const login = async (email, password) => {\n const account = new APIClient();\n const endpoint = '/login/';\n const { data } = await account.accountApi.post(endpoint, { email, password });\n return data\n}\n\n\nexport const registerUser = async (registerData) => {\n \n const account = new APIClient();\n\n const endpoint = '/register/';\n\n const { data } = await account.accountApi.post(endpoint, registerData);\n\n return data\n}\n\nexport const activateAccount = async (activationData) => {\n \n const account = new APIClient();\n\n const endpoint = '/activate/';\n\n const { data } = await account.accountApi.post(endpoint, activationData);\n\n return data\n}\n\n\n\nexport const getUserProfile = async (userId) => {\n\n const account = new APIClient();\n const endpoint = `/user/profile/${userId}/`;\n\n const { data } = await account.accountAuthApi.get(endpoint);\n return data;\n}\n\n\nexport const updateUserBasicAccountSettings = async (userData) => {\n\n const account = new APIClient();\n const endpoint = '/update/account/';\n\n const { data } = await account.accountAuthApi.put(endpoint, userData);\n return data;\n}\n\n\nexport const retrieveMyProfile = async () => {\n\n const account = new APIClient();\n const endpoint = '/user/profile/me/';\n\n const { data } = await account.accountAuthApi.get(endpoint);\n return data;\n}\n\n\n\nexport const updateUserAccountProfile = async (profileData) => {\n\n const account = new APIClient();\n const endpoint = '/user/profile/update/';\n if (profileData.profilePictureData) {\n console.log(\"profileData\");\n profileData = packageFormDataSubmission(profileData, \"profilePictureData\", \"profile_picture\")\n const { data } = await account.accountAuthApi.put(endpoint, profileData);\n return data;\n\n } else {\n delete profileData.profile_picture\n\n const { data } = await account.accountAuthApi.put(endpoint, profileData);\n return data;\n }\n\n}\n\n\n\nexport const updatePasswordData = async (passwordData) => {\n\n const account = new APIClient();\n const endpoint = '/update/change_password/';\n\n passwordData.extra_data = passwordData.confirm_new_password // new password field according to backend\n\n const { data } = await account.accountAuthApi.put(endpoint, passwordData);\n return data;\n\n\n}\n\nexport const resetPassword = async (resetData) =>{\n const account = new APIClient();\n const endpoint = '/reset/';\n const { data } = await account.accountApi.post(endpoint, resetData);\n return data;\n}\n\n\nexport const forgottenPassword = async (resetData) =>{\n const account = new APIClient();\n const endpoint = '/forgot_password/';\n const { data } = await account.accountApi.post(endpoint, resetData);\n return data;\n}\n\n\n\n","import styled from 'styled-components';\n\n\nexport const LogoImg = styled.img`\nborder-radius: ${({ radius }) => radius};\nobject-fit: ${({ fit }) => fit || \"contain\"};\ndisplay: block;\nmargin: ${({ margin }) => margin};\n`;\n","export default __webpack_public_path__ + \"static/media/menu1.de21b81a.svg\";","export default __webpack_public_path__ + \"static/media/graphic-progression_green.8103f70b.svg\";","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport UserIcon from '../../assets/icons/profile-user.svg'\n// import SearchIcon from '../assets/icons/search_white.svg'\nimport { Button } from '../uiComponents/button'\nimport { userLogout } from '../../utils/api/accountApi'\nimport { deleteAuthToken, getAuthToken, getFirstName, getLastName } from '../../utils/storage/auth'\n// import { Input } from './input';\nimport { LogoImg } from '../uiComponents/uiElements';\nimport MenuIcon from \"../../assets/icons/menu1.svg\";\nimport ProgressIcon from \"../../assets/icons/graphic-progression_green.svg\";\n// import component 👇\nimport Drawer from 'react-modern-drawer'\n\n//import styles 👇\nimport 'react-modern-drawer/dist/index.css'\nimport TopicSideBar from \"../sideBar/topicSideBar\";\nimport { TOPIC_SIDEBAR_REGEX } from '../../utils/constants';\nimport { getItemFromLocal } from '../../utils/utilFnx';\nimport { Link } from 'react-router-dom'\nimport { Route } from 'react-router-dom';\n\nclass TopBar extends Component {\n\n constructor(props) {\n super(props)\n\n this.state = {\n logout_option: false,\n isOpen: false,\n }\n }\n\n\n handleClick = (e) => {\n\n this.setState(prevState => ({\n logout_option: !prevState.logout_option\n }));\n }\n\n handleLogout = (e) => {\n\n userLogout().then(data => {\n deleteAuthToken();\n localStorage.clear()\n window.location.reload();\n }).catch((err) => {\n deleteAuthToken();\n this.props.history.push(\"/home\");\n })\n }\n\n render() {\n // console.log(this.props.location.pathname);\n return (\n \n\n {TOPIC_SIDEBAR_REGEX.test(this.props.location.pathname) &&
\n this.setState({ isOpen: !this.state.isOpen })}\n onClick={() => this.setState({ isOpen: !this.state.isOpen })}\n direction='left'>\n \n this.setState({ isOpen: !this.state.isOpen })}\n />}\n />\n {/* this.setState({ isOpen: !this.state.isOpen })}/> */}\n \n this.setState({ isOpen: !this.state.isOpen })}\n >\n {getAuthToken() && \"menu}\n \"menu\n \n
}\n {(!TOPIC_SIDEBAR_REGEX.test(this.props.location.pathname) || !this.state.isOpen)\n && \n Skideo\n }\n\n
\n {/* \n */}\n
\n\n\n {getAuthToken() !== null ?\n
\n \n\n {this.state.logout_option ?\n <>\n \n \n : \n {`${getFirstName()} ${getLastName()}`}\n }\n\n
:
\n \n Login\n \n \n Register\n \n
}\n\n
\n )\n }\n}\n\nexport default TopBar\n\n\n\nconst TopBarContainer = styled.div`\n width: 100%;\n height: 50px;\n box-shadow: 0px 1px 6px #00000029;\n justify-content: space-between;\n display: flex;\n\n .SKIDEO_HOME{\n font-size: 25px;\n color: #923D41;\n padding: 5px 7px;\n align-self: center;\n text-align: center;\n font-weight: bold;\n text-decoration: none;\n }\n\n .resp__so{\n align-self: center;\n }\n\n\n form{\n align-items: center;\n display: flex;\n margin-left: 2em;\n width: 50%;\n\n input{\n &:hover{\n border :1px solid rgba(120,120,120, 0.5);\n box-shadow: inset 0 0 0 2px rgba(120,120,120, 0.5);\n }\n\n &:focus {\n outline: none !important;\n box-shadow: inset 0 0 0 2px rgba(146, 61, 65, 0.5);\n border: 1px solid #923D41;\n }\n \n }\n\n }\n\n .auth_container{\n display: flex;\n margin: 10px 2em;\n cursor:pointer;\n\n\n span{\n align-self: center;\n }\n\n }\n\n .unauth_container{\n margin: 0 1em;\n align-self: center;\n display: flex;\n\n .login{\n text-decoration: none;\n padding: 7px 15px;\n color: rgba(31, 58, 147, 1);\n background: rgba(137, 196, 244, 0.7);\n margin: 0 1em;\n display: block;\n border-radius: 1em;\n }\n .signup{\n text-decoration: none;\n\n padding: 7px 15px;\n color: rgba(30, 130, 76, 1);\n background: rgba(0, 230, 64, 0.3);\n /* margin-top: 19em; */\n display: block;\n border-radius: 1em;\n }\n }\n\n .btn-group{ \n padding: 0px 40px;\n margin: 0px 10px;\n }\n\n .logout{\n background:#ffffff;\n color: red;\n border: 2px solid green;\n padding: 0px 36px;\n margin: 0px 10px;\n }\n\n\n @media only screen and (max-width: 768px){\n /* responsiveness code has to be at the bottom so it overrides any conflicting above css */\n\n width: 100%;\n height: 45px;\n box-shadow: 0px 3px 6px #00000029;\n \n .auth_container{\n \n display: flex;\n margin: 5px 0em;\n cursor:pointer;\n\n\n span{\n align-self: center;\n }\n \n }\n \n input{\n padding: 1em 1em;\n height: -webkit-fill-available;\n border: none;\n font-size: 12px;\n width: 80%;\n \n }\n \n form{\n display: none;\n margin-left: 1em;\n width: 50%;\n float: left;\n \n }\n\n \n }\n`\n\n\n","export default __webpack_public_path__ + \"static/media/brainstorming.747a1137.svg\";","export default __webpack_public_path__ + \"static/media/course.3922be21.svg\";","export default __webpack_public_path__ + \"static/media/courseImage.d4a526d5.jpg\";","import React from 'react';\nimport { HighlightedText } from \"./highlightedText\";\nimport styled from 'styled-components';\n\n\nexport function AshMidTitle(props) {\n\nreturn {props.title}\n\n}\n\nexport const SuperScript = styled.sup`\n font-size: ${({ size }) => size};\n font-weight: ${({ weight }) => weight || \"bold\"};\n font-style: ${({ fontStyle }) => fontStyle || \"normal\"};\n font-stretch: normal;\n line-height: ${({ lineHeight }) => lineHeight || \"normal\"};\n letter-spacing: normal;\n color: ${({ color }) => color || \"#000000\"};\n margin: ${({ margin }) => margin || \"0px\"};\n`\n","\nimport React from 'react';\nimport { getBackgroundFiller } from '../../utils/utilFnx';\nimport { Card } from '../uiComponents/card'\nimport { HighlightedText } from '../uiComponents/highlightedText';\n\n\nclass BackgroundFiller extends React.Component {\n\n render =()=>{\n const withGradient = this.props.data.labels.length && this.props.data.learning_goals.length\n const color = getBackgroundFiller(this.props.data.id, withGradient)\n return (\n // `topicImage` is a class specified in the parent class\n \n \n {this.props.data.title}\n \n \n )\n }\n}\n\nexport default BackgroundFiller","\nimport React from 'react';\nimport { Card } from '../uiComponents/card'\nimport styled from 'styled-components';\nimport Course from '../../assets/images/course.svg'\nimport CourseImg from '../../assets/images/courseImage.jpg'\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport { SuperScript } from '../uiComponents/text';\nimport { enrollment, timeSince } from '../../utils/utilFnx';\nimport { Link } from 'react-router-dom'\nimport { LogoImg } from \"../uiComponents/uiElements\";\nimport BackgroundFiller from './backgroundFiller';\n\nclass GenericTopicCard extends React.Component {\n\n render() {\n return (\n < GenericTopicCardContainer to={{\n pathname: `/topic/${this.props.data.id}/overview`,\n state: this.props.data\n }} data-testid=\"genericcard\">\n\n {/* Bigger card */}\n {/* Picture card at the top */}\n {/* Author picuture or logo card */}\n {/* Name of the course */}\n {/* Number of student who have taken */}\n {/* shen the course was posten */}\n\n {/* NOTE: image dimensions are set in the `topicImage` css class */}\n\n {\n this.props.data.thumbnail ?\n \"topic\"\n :\n\n \n }\n\n \n \n \n \n \n \n\n \n {this.props.data.title}\n \n {this.props.data.user_enrollment && \n Enrolled\n }\n \n \n\n \n {this.props.data.user.first_name} {this.props.data.user.last_name}\n T\n\n \n \n \n {enrollment(this.props.data.enrollment)}\n | {timeSince(new Date(this.props.data.created_datetime))}\n \n \n \n\n\n \n )\n }\n\n}\n\nexport default GenericTopicCard\n\n\n\nconst GenericTopicCardContainer = styled(Link)`\n box-shadow: 0px 12px 30px #923D411A;\n padding: 0 0em 0.5em;\n background-color: #fff;\n border-radius: 0 0 5px 5px;\n margin: 1em;\n border: 1px solid transparent;\n cursor: pointer;\n width: calc(25% - 2.25em);\n height: initial;\n\n .topicImage{\n width:100%;\n height: 175px;\n }\n\n .title{\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 20px;\n max-height: 40px;\n white-space: normal;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n\n @media only screen and (max-width: 1350px){\n width: calc(33% - 2.25em);\n\n }\n\n @media only screen and (max-width: 900px){\n width: calc(50% - 2.25em);\n\n }\n\n @media only screen and (max-width: 620px){\n\n width: 100%;\n height: min-content;\n margin: 1em 0;\n\n @media only screen and (min-width: 400px){\n .topicImage{\n width: 100%;\n height: 100%;\n }\n .coloredBackground{\n height: 200px;\n }\n }\n\n }\n\n`","\nimport React from 'react';\nimport { Card } from '../uiComponents/card'\nimport styled from 'styled-components';\nimport Course from '../../assets/images/course.svg'\nimport CourseImg from '../../assets/images/courseImage.jpg'\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport { SuperScript } from '../uiComponents/text';\nimport { enrollment, timeSince } from '../../utils/utilFnx';\nimport { Link } from 'react-router-dom'\nimport { LogoImg } from \"../uiComponents/uiElements\";\nimport BackgroundFiller from './backgroundFiller';\n\nclass EnrolledTopicCard extends React.Component {\n\n render() {\n return (\n < EnrolledTopicCardContainer to={{\n pathname: `/topic/${this.props.data.id}/overview`,\n state: this.props.data,\n }} data-testid=\"maincard\">\n\n {/* Bigger card */}\n {/* Picture card at the top */}\n {/* Author picuture or logo card */}\n {/* Name of the course */}\n {/* Number of student who have taken */}\n {/* shen the course was posten */}\n\n {/* NOTE: image dimensions are set in the `topicImage` css class */}\n {\n this.props.data.thumbnail ?\n \"topic\"\n :\n \n }\n \n \n \n \n \n \n {this.props.data.title}\n \n \n \n {this.props.data.user.first_name} {this.props.data.user.last_name}\n T\n\n \n \n \n {enrollment(this.props.data.enrollment)}\n | {timeSince(new Date(this.props.data.created_datetime))}\n \n \n \n\n\n \n )\n }\n\n}\n\nexport default EnrolledTopicCard\n\n\n\nconst EnrolledTopicCardContainer = styled(Link)`\n box-shadow: 0px 12px 30px #923D411A;\n padding: 0 0em 0.5em;\n background-color: #fff;\n border-radius: 0 0 5px 5px;\n margin: 1em;\n border: 1px solid transparent;\n cursor: pointer;\n width: calc(25% - 2.25em);\n height: initial;\n\n .topicImage{\n width:100%;\n height: 175px;\n }\n\n .title{\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 20px;\n max-height: 40px;\n white-space: normal;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n\n @media only screen and (max-width: 1350px){\n width: calc(33% - 2.25em);\n\n }\n\n @media only screen and (max-width: 900px){\n width: calc(50% - 2.25em);\n\n }\n\n @media only screen and (max-width: 620px){\n\n width: 100%;\n height: min-content;\n margin: 1em 0;\n\n @media only screen and (min-width: 400px){\n .topicImage{\n width: 100%;\n height: 100%;\n }\n .coloredBackground{\n height: 200px;\n }\n }\n\n }\n\n`","\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport NoEnrolls from '../../../assets/illustrations/brainstorming.svg'\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { getStudentTopics, getStudentEnrolledTopics } from \"../../../utils/api/topicApi\";\nimport GenericTopicCard from \"../../../components/topic/ genericTopicCard\";\nimport { readableServerError } from '../../../utils/utilFnx';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport SnackBar from 'my-react-snackbar';\nimport EnrolledTopicCard from '../../../components/topic/enrolledTopicCard';\nimport GridLoader from \"react-spinners/GridLoader\";\nimport { css } from \"@emotion/react\";\n\n\n\n\nclass CourseModules extends Component {\n\n constructor(props) {\n super();\n this.state = {\n suggestedTopics: [],\n enrolledTopics: [],\n loadingSuggested: false,\n loadingEnrolled: false,\n snackMessage: { type: null, message: null },\n }\n }\n\n\n componentDidMount = () => {\n this._isMounted = true\n this.getSuggestedTopicsData()\n if (getAuthToken()) {\n this.getStudentEnrolledCoursesData()\n }\n }\n\n componentWillUnmount = () => {\n this._isMounted = false\n }\n\n\n getStudentEnrolledCoursesData = () => {\n this._isMounted && this.setState({\n loadingEnrolled: true\n })\n getStudentEnrolledTopics().then(data => {\n\n this._isMounted && this.setState({\n loadingEnrolled: false,\n enrolledTopics: data,\n })\n }).catch((err) => {\n this.catchLogic(err)\n this._isMounted && this.setState({\n loadingEnrolled: false,\n })\n });\n }\n\n catchLogic =(err) =>{\n const errorMessage = readableServerError(err)\n if (String(errorMessage).includes(\"Invalid token\")) {\n this._isMounted && this.setState({\n snackMessage: { type: \"warning\", message: \"Authorization is invalid. Login to get authorized.\" },\n })\n }\n else {\n this._isMounted && this.setState({\n snackMessage: { type: \"error\", message: errorMessage },\n })\n\n }\n }\n\n getSuggestedTopicsData = () => {\n this._isMounted && this.setState({\n loadingSuggested: true\n })\n getStudentTopics()\n .then(data => {\n // console.log(data)\n this._isMounted && this.setState({\n loadingSuggested: false,\n suggestedTopics: data\n })\n }).catch((err) => {\n this.catchLogic(err)\n this._isMounted && this.setState({\n loadingSuggested: false,\n })\n });\n }\n\n\n\n\n render = () => {\n // console.log(this.state.enrolledTopics);\n return (\n \n {}}\n yesLabel={this.state.snackMessage.type === \"warning\" && 'Fix'}\n onYes={() => { \n if (this.state.snackMessage.type === \"warning\"){\n localStorage.removeItem(\"a_bearer\")\n window.location.reload()\n }\n }}\n />\n {this.state.loadingSuggested && this.state.loadingEnrolled ?\n \n : <>\n {getAuthToken()\n ?\n this.state.loadingEnrolled ?\n \n :\n <>\n Topics you are taking\n {this.state.enrolledTopics.length === 0 ?\n
\n \"no\n \n No current enrollments.\n \n
\n :
\n {this.state.enrolledTopics.map((enrolledTopic, i) => )}\n
\n }\n : null\n }\n\n Suggested Topics\n
\n\n {this.state.loadingSuggested ?\n \n :\n this.state.suggestedTopics.map((topic, i) => )\n }\n\n
\n }\n
\n\n )\n }\n\n}\n\nexport default CourseModules\n\nconst TopicContainer = styled.div`\n\n margin: 1em 1em 15vh 1em;\n\n .noEnrolls{\n text-align: center;\n display: block;\n margin: 1em auto;\n\n span{\n width: fit-content;\n\n padding: 7px 15px;\n color: #500a1c;\n background: rgba(241, 169, 160, 0.5);\n margin: 10px auto;\n display: block;\n border-radius: 1em;\n }\n }\n\n .topicListDiv{\n display: flex;\n flex-flow: wrap;\n justify-content: flex-start;\n\n }\n\n a{\n text-decoration: none;\n }\n\n @media only screen and (max-width: 768px){\n\n .titleH1{\n margin: 1em 0 0.3em;\n width: 100%;\n }\n }\n`\n\n\n\n\nconst LoadingAnimationStyle = css`\n display: block;\n margin: 20px auto;\n`;","export default __webpack_public_path__ + \"static/media/block-user.f26d1501.svg\";","\n\nimport React from 'react';\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport styled from 'styled-components';\nimport QuizIcon from '../../assets/icons/quiz.svg'\nimport { durationReadableFromNumer } from '../../utils/utilFnx';\nimport VideoIcon from '../../assets/icons/video_wine.svg'\nimport NoteIcon from '../../assets/icons/notes-wine.svg'\nimport { Link } from 'react-router-dom'\n\n\n\nclass SyllabusContentTile extends React.Component {\n\n render() {\n return (\n \n \n {this.props.data.content?.title}\n \n \n {durationReadableFromNumer(this.props.data.content?.duration)}\n \n \n\n \n\n )\n }\n}\n\nexport default SyllabusContentTile\n\nconst SyllabusContentContainer = styled(Link)`\n display: flex;\n color: #923D41;\n border-left: 2px solid #923D41;\n padding: 0.5em !important;\n margin: 1em 0 !important;\n width: 100%;\n justify-content: space-between;\n background-color: ${({ background }) => background || \"#ffffff\"} !important;\n\n\n`","\nimport React from 'react';\nimport { HighlightedText } from '../uiComponents/highlightedText';\n\nimport { Card } from \"../uiComponents/card\";\nimport { Button } from '../uiComponents/button';\nimport { Collapse } from 'react-collapse';\nimport SyllabusContentTile from './syllabusContent';\n\nclass SyllabusSectionTile extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n collapse: false,\n loading: false,\n contents: [],\n snackMessage: { type: null, message: null },\n }\n }\n componentDidMount = () => {\n\n }\n\n render = () => {\n // console.log(this.props.data);\n // console.log(this.props.data.syllabus_contents[0]?.content);\n\n return (\n \n\n\n this.setState({ collapse: !this.state.collapse })}\n background=\"transparent\"\n padding=\"0\"\n margin=\"0\"\n radius=\"1em\"\n >\n\n \n {this.props.data.title}\n \n \n \n
    \n {this.props.data.syllabus_contents?.map((syllabusContent, i) =>\n
  • \n \n
  • \n )}\n\n
\n
\n\n
\n\n )\n }\n\n}\n\nexport default SyllabusSectionTile","import APIClient from './httpClient';\n\n\n\nexport const subscribeToAUser = async (subscribingToID) => {\n const api = new APIClient();\n const endpoint = `/`;\n\n const { data } = await api.SubscriberApi.post(endpoint, { subscribing_to: subscribingToID });\n return data;\n}\n\nexport const getSubscribings = async () => {\n // get the users that the requester is subscribed to.\n const api = new APIClient();\n const endpoint = `/`;\n\n const { data } = await api.SubscriberApi.get(endpoint);\n return data;\n}","\nimport React from 'react';\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { enrollInQuiz, getSyllabusList, retrieveFullTopic } from \"../../../utils/api/topicApi\";\nimport { Link } from 'react-router-dom'\nimport { Card } from \"../../../components/uiComponents/card\";\nimport { AshMidTitle } from \"../../../components/uiComponents/text\";\nimport { Button } from '../../../components/uiComponents/button';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport {\n appendItemToLocalArray,\n durationReadableFromNumer,\n getItemFromLocal,\n readableServerError,\n setItemToLocal\n} from '../../../utils/utilFnx';\nimport { getUserProfile } from '../../../utils/api/accountApi';\nimport SnackBar from 'my-react-snackbar';\nimport PrivateUser from \"../../../assets/icons/block-user.svg\";\nimport SyllabusContentTile from \"../../../components/topic/syllabusSection\";\nimport UserIcon from '../../../assets/icons/profile-user.svg'\nimport BarLoader from \"react-spinners/BarLoader\";\nimport ClipLoader from \"react-spinners/ClipLoader\";\nimport { css } from \"@emotion/react\";\nimport { getSubscribings, subscribeToAUser } from '../../../utils/api/subscriberApi';\n\nclass TopicOverview extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n authenticated: Boolean(getAuthToken()),\n topic: {},\n instructorProfile: {},\n topicSyllabus: [{ syllabus_contents: [] }],\n subscribes: [], // who the user has subscribed to\n loadingTopic: false,\n loadingSyllabus: false,\n loadingProfile: false,\n loadingFollowing: false,\n loadingEnrollment: false,\n snackMessage: { type: null, message: null },\n\n }\n }\n\n\n componentDidMount = () => {\n this._isMounted = true\n // check whether it is coming from state\n if (this.props.location.state != null) {\n this._isMounted && this.setState({\n topic: this.props.location.state,\n })\n this.getTopicSyllabusData()\n this.getUserProfileData(this.props.location.state.user.id)\n }\n else {\n // if is it not coming from state, fetch from db\n this.getTopicFullDetails()\n }\n\n const cachedSubscribes = getItemFromLocal(`subscribes-${new Date().toISOString().slice(0, 10)}`)\n if (!cachedSubscribes) {\n // we dont put subscribes this.state\n this.userFollowings()\n }\n\n\n }\n\n componentWillUnmount = () => {\n this._isMounted = false\n }\n\n\n getTopicFullDetails = () => {\n this._isMounted && this.setState({\n loadingTopic: true\n })\n retrieveFullTopic(this.props.match.params.topicID)\n .then(data => {\n // console.log(data)\n this._isMounted && this.setState({\n topic: data,\n topicSyllabus: data.syllabus_sections,\n loadingTopic: false,\n })\n this.getUserProfileData(data.user.id)\n }).catch((err) => {\n this._isMounted && this.setState({\n loadingTopic: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n });\n }\n\n\n getTopicSyllabusData = () => {\n this._isMounted && this.setState({\n loadingSyllabus: true,\n })\n getSyllabusList(this.props.match.params.topicID)\n .then(data => {\n // console.log(data);\n this._isMounted && this.setState({\n topicSyllabus: data,\n loadingSyllabus: false,\n })\n }).catch((err) => {\n this._isMounted && this.setState({\n loadingSyllabus: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n });\n }\n\n\n\n getUserProfileData = (userId) => {\n this._isMounted && this.setState({\n loadingProfile: true\n })\n getUserProfile(userId).then((data) => {\n this._isMounted && this.setState({\n instructorProfile: data,\n loadingProfile: false,\n })\n }).catch((err) => {\n this._isMounted && this.setState({\n loadingProfile: false,\n snackMessage: err.response?.status === 404 ?\n { type: \"info\", message: \"Instructor's profile is private\" }\n : { type: \"error\", message: readableServerError(err) },\n })\n })\n }\n\n enrollLearner = async (e) => {\n this.setState({\n loadingEnrollment: true\n })\n\n if (this.state.authenticated) {\n await enrollInQuiz(this.state.topic.id).then(data => {\n this.setState({\n loadingEnrollment: false,\n })\n }).catch((err) => {\n console.log(\"error\");\n this.setState({\n loadingEnrollment: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n })\n\n }\n }\n\n userFollowings = () => {\n this.setState({\n loadingFollowing: true\n })\n if (getAuthToken()) {\n getSubscribings().then(data => {\n setItemToLocal(`subscribes-${new Date().toISOString().slice(0, 10)}`, data)\n this.setState({\n loadingFollowing: false,\n })\n }).catch(err => {\n this.setState({\n loadingFollowing: false,\n snackMessage: { \"type\": \"error\", \"message\": readableServerError(err) }\n })\n })\n }\n }\n\n onFollow = (e) => {\n if (getAuthToken()) {\n this.setState({\n loadingFollowing: true\n })\n subscribeToAUser(this.state.instructorProfile.user.id).then((data) => {\n appendItemToLocalArray(`subscribes-${new Date().toISOString().slice(0, 10)}`, data)\n this.setState({\n loadingFollowing: false,\n snackMessage: { \"type\": \"success\", \"message\": `You are following ${this.state.instructorProfile.user.first_name}` }\n })\n\n }).catch((err) => {\n this.setState({\n loadingFollowing: false,\n snackMessage: { \"type\": \"error\", \"message\": readableServerError(err) }\n })\n\n\n })\n\n } else {\n this.props.history.push(\"/auth/login\");\n }\n\n }\n\n\n\n render = () => {\n // console.log(this.state.topicSyllabus[0]?.syllabus_contents[0]);\n // console.log(this.state.topicSyllabus);\n\n /* what the code above here is doing is that it check first \n if there is a current_state variable in the `user_enrollment` object\n if present, it send the syllabus content associated with it since\n it doesnt have to `content` data by itself\n hence, it check in it fron `this.state.topicSyllabus[0]?.syllabus_contents`\n else, it gets the first one.\n */\n\n let firstContent = {}\n\n if (this.state.topic.user_enrollment?.current_stage) {\n this.state.topicSyllabus.forEach((syl_sec) => {\n firstContent = syl_sec.syllabus_contents.find(\n ({ id }) =>\n id === this.state.topic.user_enrollment?.current_stage\n )\n if (Boolean(firstContent)) {\n return\n }\n\n })\n if (!Boolean(firstContent)) {\n firstContent = this.state.topicSyllabus[0]?.syllabus_contents[0]\n }\n } else {\n firstContent = this.state.topicSyllabus[0]?.syllabus_contents[0]\n }\n\n return (\n \n \n {this.state.loadingTopic ?\n
\n \n
\n :\n <>\n
\n {this.state.topic.title}\n \n \n\n {firstContent ?\n <>\n {!this.state.authenticated &&\n \n View\n \n }\n {this.state.topic.user_enrollment ?\n \n Continue\n \n : \n {this.state.loadingEnrollment ? \"Loading...\" : \"Join\"}\n }\n \n :\n

\n Not ready\n

\n }\n
\n\n
\n\n \n \n \n Instructor:\n \n \n {this.state.topic.user?.first_name} {this.state.topic.user?.last_name}\n \n \n\n \n \n \n Duration:\n \n \n {durationReadableFromNumer(this.state.topic.duration) || \"Indeterminate\"}\n \n \n \n\n \n \n Level:\n \n \n {this.state.topic.level ?? \"None\"}\n \n \n\n {/* \n \n Rating: 4.5\n \n */}\n \n\n \n \n \n Description\n \n\n \n {this.state.topic.description}\n\n \n \n {this.state.topic.learning_goals?.length > 0 &&\n \n \n
    \n {\n this.state.topic.learning_goals?.map((goal, i) =>
  • \n {goal}\n
  • )\n }\n\n
\n
\n }\n
\n\n \n \n {this.state.loadingSyllabus ?\n
\n \n
\n :\n this.state.topicSyllabus.map((syllabus, i) => {\n\n return \n\n })\n }\n\n\n
\n \n }\n {this.state.loadingProfile ?\n
\n \n
\n : this.state.instructorProfile.public_profile ?\n \n \n \n\n \n {this.state.instructorProfile.biography}\n \n \n\n \n\n \"instructor\n \n {this.state.instructorProfile.user?.first_name} {this.state.instructorProfile.user?.last_name}\n \n \n {this.state.instructorProfile.subjects_of_interest?.join(\", \")}\n \n {\n getAuthToken() ? getItemFromLocal(`subscribes-${new Date().toISOString().slice(0, 10)}`, [])\n ?.some(({ subscribing_to }) => {\n if (typeof (subscribing_to) === \"number\") {\n return subscribing_to === this.state.instructorProfile.user?.id\n } else {\n return subscribing_to.id === this.state.instructorProfile.user?.id\n }\n }\n ) ?\n \n Following\n \n :\n < Button\n radius=\"1em\"\n margin=\"0.5em\"\n onClick={this.onFollow}\n data-testid=\"followbutton\"\n disabled={this.state.loadingFollowing}\n >\n {this.state.loadingFollowing ?\n \n :\n \"Follow\"\n }\n \n : null\n }\n \n\n \n :\n \n \"private\n This account's profile is private.\n \n }\n\n {\n // TODO: course feedback \n }\n\n
\n\n )\n }\n\n}\n\nexport default TopicOverview\n\n\n\n\n\nconst TopicOverviewContainer = styled.div`\n\n margin: 1em 1em 5em 1em;\n\n ul {\n list-style-type: square;\n color: black;\n\n li{\n padding: 0 0 0.5em;\n }\n }\n \n .introHeader{\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n div{\n .viewLink{\n background-color: rgba(0, 177, 106, 1);\n }\n\n .joinLink{\n margin: 0 0 0 20px;\n }\n\n .continueLink{\n color: rgba(142, 68, 173, 1);\n background-color: rgba(213, 184, 255, 0.3);\n padding: 7px 30px;\n border-radius: 15px;\n font-weight: 600;\n }\n\n .notReady{\n padding: 7px 15px;\n color: rgba(207, 0, 15, 1);\n background: rgba(231, 76, 60, 0.3);\n /* margin-top: 19em; */\n display: block;\n border-radius: 1em;\n }\n }\n\n }\n \n div{\n /* can be taken off later */\n max-width: 90%;\n }\n\n a{\n text-decoration: none;\n padding: 7px 53px;\n background-color: #923d41;\n color: #fff;\n border-radius: 2px;\n }\n\n @media only screen and (max-width: 768px){\n margin: 0 0 5em;\n\n div{\n width: 100%;\n }\n\n .introHeader{\n div{\n flex-flow: wrap;\n display: flex;\n a{\n margin: 8px !important;\n padding: 10px;\n }\n }\n \n h1{\n margin:0.5em;\n }\n\n }\n }\n`\n\n\nconst LoadingAnimationStyle = css`\n display: block;\n margin: 10px;\n`;","\nimport APIClient from './httpClient';\n\n\nexport const getQuizFromSyllabusContent = async (syllabusContent) => {\n const quiz = new APIClient();\n const endpoint = `/syllabus/content/${syllabusContent}/exam/`;\n\n const { data } = await quiz.QuizApi.get(endpoint);\n return data;\n\n}\n\n\nexport const retrieveQuiz = async (quizID) => {\n const quiz = new APIClient();\n const endpoint = `/${quizID}/exam/`;\n\n const { data } = await quiz.QuizApi.get(endpoint);\n return data;\n\n}\n\nexport const createQuizSummary = async (quizID) => {\n const quiz = new APIClient();\n const endpoint = `/summary/`;\n\n const { data } = await quiz.QuizApi.post(endpoint, { \"quiz\": quizID });\n return data;\n\n}\n\nexport const retrieveQuizSummary = async (quizSummaryID) => {\n const quiz = new APIClient();\n const endpoint = `/summary/${quizSummaryID}/`;\n\n const { data } = await quiz.QuizApi.get(endpoint);\n return data;\n\n}\n\nexport const getQuizInfoFromSyllabusContent = async (syllabusContentID) => {\n const quiz = new APIClient();\n const endpoint = `retrieve/syllabus/content/${syllabusContentID}/`;\n\n\n const { data } = await quiz.QuizApi.get(endpoint);\n return data\n\n}\n\n\n\nexport const postAnswersWithSummaryID = async (\n answers, summaryID\n) => {\n const quiz = new APIClient();\n const endpoint = `/summary/${summaryID}/answers/`;\n const { data } = await quiz.QuizApi.post(endpoint, answers);\n return data\n}\n\nexport const postAnswersWithQuizID = async (\n answers, quizID\n) => {\n const quiz = new APIClient();\n const endpoint = `/${quizID}/answers/`;\n const { data } = await quiz.QuizApi.post(endpoint, answers);\n return data\n}\n","export default __webpack_public_path__ + \"static/media/signin.299774f2.svg\";","\n\nimport React from 'react';\nimport styled from 'styled-components';\nimport AuthenticateIllustration from '../../assets/illustrations/signin.svg'\n\nclass PromptToAuthenticate extends React.Component{\n\n render=()=>{\n return (\n \n \"authenticate\n
\n {this.props.message || \"We cannot perform this action without authentication. Kindly login or register for to continue.\"}\n
\n \n \n\n
\n )\n }\n}\n\nexport default PromptToAuthenticate;\n\nconst PromtContainer = styled.div`\n width: 100%;\n display: block;\n margin: 3em auto 2em;\n text-align: -webkit-center;\n text-align: -moz-center;\n\n .message{\n background-color: rgba(213,184,255,0.3);\n color: rgba(142,68,173,1);\n width: 30%;\n padding: 1em;\n border-radius: 5px;\n }\n\n\n .unauth_container{\n margin: 2em 1em;\n align-self: center;\n display: flex;\n justify-content: center;\n\n .login{\n text-decoration: none;\n padding: 7px 15px;\n color: rgba(31, 58, 147, 1);\n background: rgba(137, 196, 244, 0.7);\n margin: 0 1em;\n display: block;\n border-radius: 1em;\n }\n .signup{\n text-decoration: none;\n\n padding: 7px 15px;\n color: rgba(30, 130, 76, 1);\n background: rgba(0, 230, 64, 0.3);\n /* margin-top: 19em; */\n display: block;\n border-radius: 1em;\n }\n }\n\n\n @media only screen and (max-width: 768px){\n .message{\n width: 80%;\n }\n }\n \n\n`","import styled from \"styled-components\";\n\nexport const Input = styled.input`\n border: ${({ border }) => border || \"1px solid black\"};\n border-radius: ${({ radius }) => radius || \"3px\"};\n display: ${({ display }) => display || \"block\"};\n padding: ${({ padding }) => padding || \"10px 20px\"};\n margin: ${({ margin }) => margin || \"25px auto\"};\n width: ${({ width }) => width || \"80%\"};\n height: ${({ height }) => height || \"1.5em\"};\n \n\n text-align: ${({ textAlign }) => textAlign || \"left\"};;\n font-size: ${({ size }) => size || \"14px\"};\n text-transform: ${({ textTransform }) => textTransform || \"none\"};\n font-weight: ${({ weight }) => weight || \"bold\"};\n letter-spacing: 0;\n color: ${({ color }) => color || \"#000\"};\n\n &:focus {\n outline: none !important;\n border: ${({ borderFocus }) => borderFocus || \"2px solid #923D41\"};\n }\n \n`\n\nexport const TextArea = styled.textarea`\n\n border: 1px solid black;\n border-radius: 5px;\n display: block;\n padding: 8px 15px;\n margin: ${({ margin }) => margin || \"15px 2px\"};\n width: ${({ width }) => width || \"-webkit-fill-available\"};\n width: ${({ width }) => width || \"-moz-available\"};\n text-align: left;\n font-size: 15px;\n font-weight: bold;\n letter-spacing: 0;\n color: ${({ color }) => color || \"#923D41\"};\n resize: vertical;\n\n &:focus {\n outline: none !important;\n border:2px solid #923D41;\n box-shadow: 0px 12px 30px #923D411A;\n }\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #923D41;\n font-weight: normal;\n opacity: 1; /* Firefox */\n }\n \n @media only screen and (max-width: 768px){\n \n \n ::placeholder{\n font-size: 12px;\n }\n }\n`\n\n\nexport const Radio = styled.div`\n position: relative;\n display: flex;\n padding: 24px 0 0 ;\n flex-wrap: wrap;\n width: ${({ width }) => width};\n \n /* The container */\n .container {\n display: flex;\n align-items: center;\n position: relative;\n padding-left: 35px;\n margin-right: \"50px\";\n cursor: pointer;\n color: #717070;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n flex: 1 1 24%;\n margin-top: 10px;\n }\n \n /* Hide the browser's default radio button */\n .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n \n /* Create a custom radio button */\n .checkmark {\n position: absolute;\n \n left: 0;\n height: 15px;\n width: 15px;\n border: 2px solid #717070;\n border-radius: 10px;\n }\n \n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n \n /* When the radio button is checked, add a blue background */\n .container input:checked ~ .checkmark {\n background-color: #717070;\n } \n`;\n","export default __webpack_public_path__ + \"static/media/info.7b39b710.svg\";","export default __webpack_public_path__ + \"static/media/question.298dfc7f.svg\";","export default __webpack_public_path__ + \"static/media/question_fill.b4a3d763.svg\";","import React from 'react';\nimport { Card } from '../uiComponents/card';\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport InfoIcon from \"../../assets/icons/info.svg\";\nimport QuestionUnAnswered from '../../assets/icons/question.svg'\nimport QuestionAnswered from '../../assets/icons/question_fill.svg'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components';\nimport { retrieveQuizSummary } from '../../utils/api/quizApi';\n\n\n\nclass QuizExtraInfoCard extends React.Component {\n constructor(props) {\n super();\n this.state = {\n quizSummary: {},\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.quizSummary.id !== this.state.quizSummary.id && this.props.submittedQuiz) {\n // console.log(\"here\");\n if (this.props.quizSummary.end_time) {\n this.setState({\n quizSummary: this.props.quizSummary\n })\n } else {\n this.getQuizSummary()\n }\n\n }\n\n }\n getQuizSummary = () => {\n // console.log(this.state.quizSummary);\n retrieveQuizSummary(this.props.quizSummary.id).then((data) => {\n console.log(data);\n this.props.updateUserSummaries(data)\n this.setState({\n quizSummary: data\n })\n })\n }\n\n render = () => {\n // console.log(this.props.quizSummary, this.props.quizSummary.id);\n return \n {this.props.submittedQuiz ? <> \n {this.state.quizSummary.total}\n \n \n \"info\"Pass mark: {this.props.quiz.pass_mark}\n \n = this.props.quiz.pass_mark ? \"#2ea44f\" : \"#cb2431\"} size=\"0.75em\" >\n {this.state.quizSummary.total >= this.props.quiz.pass_mark\n ? \"You passed with gusto!\"\n : \"You can do better, Try again.\"\n }\n \n \n {`Highest: ${this.props.quiz.quiz_overall_statistics?.total__max} `}\n |\n {` Average: ${this.props.quiz.quiz_overall_statistics?.total__avg} `}\n |\n Lowest: {this.props.quiz.quiz_overall_statistics?.total__min}\n \n \n Close Quiz\n \n :\n [...Array(this.props.questionLength).keys()].map((questionNumberIndex, index) => {\n\n return \n\n \n \"answered/unanswered\"\n \n Question {questionNumberIndex + 1}\n \n \n \n })\n }\n \n\n }\n\n}\n\nexport default QuizExtraInfoCard;\n\n\nconst QuizExtraInfoCardContainer = styled.div`\n\n width: 15%;\n height: fit-content;\n margin: 2em 1em 1em;\n padding: 1em;\n background-color: white;\n text-align: center;\n position: sticky;\n top: 10%;\n\n\n .closeQuiz{\n text-decoration: none;\n background-color: #0366d64d;\n padding: 0.5em;\n margin: 1em 0.5em 0.5em;\n display: block;\n color: #053f84;\n border-radius: 10px;\n\n }\n\n a{\n text-decoration: none;\n }\n\n @media only screen and (max-width: 768px){\n width: 100%;\n }\n\n\n\n`","\n\n\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Card } from '../../../components/uiComponents/card';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Input, TextArea, Radio } from \"../../../components/uiComponents/input\";\nimport { createQuizSummary, postAnswersWithSummaryID, retrieveQuiz } from '../../../utils/api/quizApi';\nimport { Button } from '../../../components/uiComponents/button';\nimport ExtraInfoCard from '../../../components/quiz/quizExtraInfoCard';\nimport { pruneReturnObject } from '../../../utils/utilFnx';\nimport { Prompt } from 'react-router';\n\n\nclass Exam extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n quiz: {},\n answers: [],\n quizSummary: {},\n rightAnswers: false,\n submittedQuiz: false,\n }\n this.onRefreshPrompt = e => {\n // the method that will be used for both add and remove event\n e.preventDefault();\n e.returnValue = '';\n }\n }\n\n componentDidMount = () => {\n // prompt the user they'll loose all saved work if refreshed\n\n if (!process.env.REACT_APP_DEBUG) {\n window.addEventListener(\"beforeunload\", this.onRefreshPrompt);\n }\n\n if (this.props.quiz.id !== undefined) {\n this.setState({\n quiz: this.props.quiz,\n })\n } else {\n // console.log(\"pulling quiz data\");\n this.getQuizData()\n }\n\n this.createQuizSummaryData()\n }\n\n componentWillUnmount = () => {\n if (!process.env.REACT_APP_DEBUG) {\n window.removeEventListener(\"beforeunload\", this.onRefreshPrompt)\n }\n }\n\n\n createQuizSummaryData = () => {\n createQuizSummary(this.props.match.params.quizID).then((data) => {\n this.setState({\n quizSummary: data,\n })\n })\n\n }\n getQuizData = () => {\n retrieveQuiz(this.props.match.params.quizID).then((data) => {\n this.setState({\n quiz: data,\n })\n })\n\n }\n\n onAnswer = (e) => {\n // console.log(e.target.value);\n let answers = this.state.answers\n let picked = {}\n if (e.target.dataset.paid) {\n picked = {\n question: e.target.name,\n selected_answer: [e.target.value],\n input_answer: e.target.dataset.answer\n }\n } else if (e.target.dataset.essay) {\n picked = {\n question: e.target.name,\n input_answer: e.target.value\n }\n\n } else if (e.target.dataset.shortanswer) {\n picked = {\n question: e.target.name,\n input_answer: e.target.value\n }\n } else {\n picked = {\n question: e.target.name,\n input_answer: e.target.value\n }\n }\n answers[e.target.dataset.questionnumber] = picked\n this.setState({\n answers: answers\n })\n // console.log(this.state.answers);\n\n\n }\n\n onSubmit = () => {\n postAnswersWithSummaryID(\n pruneReturnObject(this.state.answers, 1),\n this.state.quizSummary.id).then(data => {\n this.setState({\n submittedQuiz: true,\n })\n // console.log(data);\n\n }).catch(err => {\n console.log(err.response);\n })\n\n }\n render = () => {\n return (\n\n \n {\n if (action !== \"POP\") {\n return \"You are attempting to leave this page. You may lose your work if not saved. Are you sure you want to do this?\"\n }\n }\n }\n />\n\n {/* titile */}\n\n {/* Instructions to hte quiz */}\n\n {/* Listing the questions. Questions is a combination of multiple chose and typed choice */}\n
\n\n\n\n \n {this.state.quiz.instruction || \"Answer all of the questions in this quiz\"}\n \n\n {\n this.state.quiz.questions?.map((question, i) =>\n \n \n \n Question {i + 1}\n \n \n {`Points: ${question.points}`}\n \n\n\n \n\n \n {question.question}\n \n \n {(question.genre === \"multiple-choice\") ?\n \n {\n question.possible_answers.map((pa, j) => {\n return (\n \n )\n })\n }\n \n\n :\n (question.genre === \"essay\") ?\n \n\n : (question.genre === \"short-answer\") ?\n :\n }\n {/* */}\n {/* */}\n \n
\n\n {/* \n \n The correct answer is that trevor noah has a big house.\n \n */}\n\n
\n\n )\n }\n\n \n {this.state.submittedQuiz ? \"SUBMITTED\" : \"SUBMIT\"}\n \n
\n\n \n\n\n
\n\n )\n }\n}\n\nexport default Exam\n\n\n\nconst ExamPageContainer = styled.div`\n\n margin: 1em 1em 12vh;\n display: flex;\n\n .questionDivContainer{\n width: 80%;\n margin: 1em 1em 5em;\n }\n\n @media only screen and (max-width: 768px){\n flex-flow: wrap;\n .questionDivContainer{\n width: 100%;\n }\n }\n\n \n`","export default __webpack_public_path__ + \"static/media/empty.590465d2.svg\";","\n\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Card } from '../../../components/uiComponents/card';\nimport { HighlightedText, HightlightedSpan } from '../../../components/uiComponents/highlightedText';\nimport { Link } from 'react-router-dom';\nimport EmptyIcon from \"../../../assets/icons/empty.svg\";\nimport { convertTimeDelta } from '../../../utils/utilFnx';\n\n\n\nclass QuizSummary extends React.Component {\n\n\n render () {\n const summaries = this.props.quiz.user_summaries?.filter(summary => (summary.end_time !== null)) || []\n return (\n \n \n \n Quiz summaries\n \n\n\n \n New quiz\n \n\n\n \n \n {summaries.length === 0 ?\n \n \"empty\"\n \n You have not completed any quiz yet.\n Start a new quiz.\n \n\n \n Start a new quiz\n \n \n\n :\n summaries.map((summary, i) => {\n return \n })\n }\n\n \n\n\n \n )\n }\n\n summaryCard = (summaryProps) => {\n // console.log(summaryProps, summaryProps.summary.total ,this.props.quiz.pass_mark);\n const passed = summaryProps.summary.total >= this.props.quiz.pass_mark\n const timeSpent = convertTimeDelta(summaryProps.summary.end_time, summaryProps.summary.start_time)\n return (\n \n \n {summaryProps.summary.total}\n \n points\n \n \n \n {timeSpent[0]}\n \n {timeSpent[1]}\n \n \n \n {passed ? \"passed!\" : \"Try again\"}\n \n \n\n )\n }\n}\n\n\nexport default QuizSummary;\n\n\nconst QuizSummaryContainer = styled.div`\n background-color: transparent;\n margin: 2em 2em 12vh;\n\n a{\n color: #ffffff;\n text-decoration: none;\n background-color: #923d41;\n border: 0;\n padding: 7px 53px;\n margin: 10px 0px;\n border-radius: 2px;\n width: auto;\n height: auto;\n text-align: center;\n }\n\n @media only screen and (max-width: 768px){\n a{\n padding: 5px 10px;\n }\n }\n`","\n\nimport React from 'react';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { retrieveQuiz } from '../../../utils/api/quizApi';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport PromptToAuthenticate from '../../../components/uiComponents/promptToAuthenticate';\nimport { Redirect, Route, Switch } from 'react-router-dom';\nimport Exam from './exam';\nimport QuizSummary from \"./quizSummary\";\n\n\nclass Quiz extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n authenticated: getAuthToken(),\n quiz: {},\n answers: [],\n rightAnswers: false,\n }\n }\n\n componentDidMount = () => {\n this.getQuizData()\n }\n componentDidUpdate(prevProps, prevState) {\n // console.log(this.props.match.params.quizID, prevProps.match.params.quizID);\n\n if (this.props.match.params.quizID !== prevProps.match.params.quizID) {\n this.getQuizData()\n this.setState({\n answers: [],\n })\n }\n\n }\n\n getQuizData = () => {\n if (this.state.authenticated){\n \n retrieveQuiz(this.props.match.params.quizID).then((data) => {\n this.setState({\n quiz: data,\n })\n })\n }\n }\n\n\n updateUserSummaries = (summary) => {\n // this update would be just for just the user summaries. \n // takes the summary as the parameter \n \n let userSummaries = this.state.quiz.user_summaries\n const existingSummary = userSummaries.findIndex(({ id }) => id === summary.id); // NOTE: { id } extracts the id field\n \n if (existingSummary !== -1) {\n // then updates if there is one with the id available \n userSummaries[existingSummary] = summary\n } else {\n // else, it add to the list\n userSummaries.push(summary)\n }\n this.setState({\n quiz: {...this.state.quiz, user_summaries: userSummaries}\n })\n \n }\n\n\n render() {\n // console.log(this.state.quiz);\n if (this.state.authenticated) {\n\n return (\n
\n {this.state.quiz.title || \"Quiz\"}\n\n \n \n }\n />\n \n }\n />\n\n \n\n \n\n
\n )\n } else {\n return (\n \n )\n }\n\n }\n}\n\nexport default Quiz;\n","export default __webpack_public_path__ + \"static/media/liked.7933702b.svg\";","export default __webpack_public_path__ + \"static/media/unliked.c31d61db.svg\";","import React from 'react';\nimport styled from 'styled-components';\nimport { Card } from \"../uiComponents/card\"\nimport { HighlightedText } from \"../uiComponents/highlightedText\";\n\n\n\nclass LessonNotesBulletPoint extends React.Component {\n render() {\n return (\n \n \n \n {this.props.data}\n \n\n \n\n \n )\n }\n}\n\nexport default LessonNotesBulletPoint;\n\nconst LessonNotesBulletPointContainer = styled.span`\n padding: 0 1em;\n @media only screen and (max-width: 768px){\n \n }\n`","export default __webpack_public_path__ + \"static/media/comment.737b3536.svg\";","import APIClient from './httpClient';\n\nexport const postFeedback = async (feedback) => {\n /* post feedback\n */\n const api = new APIClient();\n const endpoint = '/feedback/';\n\n const { data } = await api.DialogueApi.post(endpoint, feedback);\n return data;\n\n}\n\n\nexport const postDiscussionForVideo = async (videoID, discussionData) => {\n const api = new APIClient();\n const endpoint = `/video/${videoID}/comments/`;\n\n const { data } = await api.DialogueApi.post(endpoint, discussionData);\n return data;\n}\n\nexport const getDiscussionForVideo = async (videoID) => {\n const api = new APIClient();\n const endpoint = `/video/${videoID}/comments/`;\n\n const { data } = await api.DialogueApi.get(endpoint);\n return data;\n}\n\nexport const likeOrUnlikeComment = async (commentID, liked) => {\n const api = new APIClient();\n\n if (liked) {\n const endpoint = `/like/${commentID}/comments/`;\n const { data } = await api.DialogueApi.post(endpoint);\n return data;\n }else{\n const endpoint = `/unlike/${commentID}/comments/`;\n const { data } = await api.DialogueApi.post(endpoint);\n return data;\n }\n}\n","import React from 'react';\nimport { Card } from '../../components/uiComponents/card';\nimport { HighlightedText, HightlightedSpan } from '../uiComponents/highlightedText';\nimport { Button } from '../../components/uiComponents/button';\nimport LikedIcon from '../../assets/icons/liked.svg'\nimport CommentIcon from '../../assets/icons/comment.svg'\nimport UserIcon from '../../assets/icons/profile-user.svg'\nimport { LogoImg } from '../uiComponents/uiElements';\nimport { numberingShortnerReadable, readableServerError, timeSince } from '../../utils/utilFnx';\nimport UnLikedIcon from '../../assets/icons/unliked.svg'\nimport { TextArea } from \"../uiComponents/input\";\nimport { Collapse } from 'react-collapse';\nimport { likeOrUnlikeComment, postDiscussionForVideo } from '../../utils/api/dialogueApi';\n\n\nclass Discussion extends React.Component {\n /* THE MAX DEPTH OF COMMENTING AT LEAST FOR VIDEO IS 2 \n when props come in, copies of likes and user liked are saved\n */\n\n laudableThreshold = 20\n\n constructor(props) {\n super();\n this.state = {\n openEmbeddedCommenting: false,\n userLikeWithinComponent: null,\n commentLikes: 0,\n openReplies: false,\n discussion: { message: \"\" },\n embeddedDiscussions: []\n }\n\n }\n\n componentDidUpdate = (prevProps) => {\n if (prevProps.data.id !== this.props.data.id) {\n this.setState({\n userLikeWithinComponent: prevProps.data.liked_by_user, commentLikes: prevProps.data.likes,\n })\n }\n }\n\n static getDerivedStateFromProps = (props, state) => {\n // console.log(\"fsd\",state.userLikeWithinComponent, props.data.id, props.innerMostEmbedded);\n if (state.userLikeWithinComponent === null) {\n state = { ...state, userLikeWithinComponent: props.data.liked_by_user, commentLikes: props.data.likes, }\n }\n\n if (props.data.id || props.innerMostEmbedded) {\n if (props.innerMostEmbedded && state.discussion.comment_to !== props.innerMostEmbedded) {\n return {\n ...state,\n discussion: {\n ...state.discussion,\n comment_to: props.innerMostEmbedded,\n message: `@${props.data.user.first_name} ${props.data.user.last_name}, `\n },\n }\n \n\n } else if (!Boolean(props.innerMostEmbedded) && state.discussion.comment_to !== props.data.id) {\n return {\n ...state,\n discussion: {\n ...state.discussion,\n comment_to: props.data.id,\n message: `@${props.data.user.first_name} ${props.data.user.last_name}, `\n },\n }\n }\n }\n \n return null\n }\n\n onChangeEmbeddedCommenting = (e) => {\n this.setState({\n discussion: { ...this.state.discussion, [e.target.name]: e.target.value },\n })\n }\n\n\n submitEmbeddedDiscussion = () => {\n // post discussion\n\n postDiscussionForVideo(this.props.parentID, this.state.discussion).then((data) => {\n // console.log(data);\n if (this.props.appendEmbeddedToParent) {\n this.props.appendEmbeddedToParent(data)\n } else {\n this.setState({\n embeddedDiscussions: [data, ...this.state.embeddedDiscussions]\n })\n }\n this.onCancel()\n }).catch((err) => {\n console.log(readableServerError(err));\n })\n }\n\n onCancel = () => {\n this.setState({\n discussion: { message: \"\" },\n openEmbeddedCommenting: false,\n })\n }\n appendEmbeddedToParent = (comment) => {\n this.setState({\n embeddedDiscussions: [comment, ...this.state.embeddedDiscussions]\n })\n }\n\n likeDiscussionInterraction = () => {\n // like discussion \n likeOrUnlikeComment(this.props.data.id, !this.state.userLikeWithinComponent).then(data => {\n // console.log(data);\n this.setState({\n userLikeWithinComponent: data.liked_by_user,\n commentLikes: data.likes,\n })\n })\n }\n\n render() {\n // console.log(this.props.data);\n const worthLaudable = this.props.data.likes + (this.props.data.embeddedComments?.length || 0) >= this.laudableThreshold\n return (\n \n \n \n \n \n {`${this.props.data.user.first_name} ${this.props.data.user.last_name}`}\n {worthLaudable &&\n \n Laudable\n }\n \n \n {this.props.data.message}\n \n\n \n this.likeDiscussionInterraction()}\n >\n \"like\"\n\n {this.state.commentLikes && \n {numberingShortnerReadable(this.state.commentLikes)}\n }\n \n\n this.setState({ openEmbeddedCommenting: !this.state.openEmbeddedCommenting })}\n >\n \"comment\"\n\n \n\n \n \n \n\n\n \n \n \n \n Post\n \n \n \n\n \n\n \n\n {\n\n [...this.state.embeddedDiscussions, ...this.props.data.embeddedComments || []].map(\n (comments, i) =>\n )\n\n }\n \n {(this.props.data.embeddedComments || this.state.embeddedDiscussions.length > 0) &&\n this.setState({\n openReplies: !this.state.openReplies\n })}\n >\n \n {`${this.state.openReplies ? \"Hide\" : \"Show\"} Comments `}\n ({`${this.props.data.embeddedComments?.length || 0 + this.state.embeddedDiscussions.length} \n ${(this.props.data.embeddedComments?.length || 0 + this.state.embeddedDiscussions.length) > 1\n ? \"replies\" : \"reply\"}`\n }\n )\n \n \n }\n \n \n \n {timeSince(new Date(this.props.data.created_datetime))}\n \n\n \n )\n }\n}\n\n\nexport default Discussion;","import React from 'react';\nimport styled from 'styled-components';\nimport { Card } from '../../components/uiComponents/card';\nimport { HighlightedText } from '../uiComponents/highlightedText';\nimport { TextArea } from \"../uiComponents/input\";\nimport { Button } from '../../components/uiComponents/button';\nimport UserIcon from '../../assets/icons/profile-user.svg'\nimport Discussion from \"./discussion\";\nimport { getItemFromLocal, readableServerError } from '../../utils/utilFnx';\nimport { LogoImg } from \"../uiComponents/uiElements\";\nimport { getDiscussionForVideo, postDiscussionForVideo } from '../../utils/api/dialogueApi';\n\n\nclass DiscussionBoard extends React.Component {\n constructor(props) {\n super();\n this.state = {\n showMore: false,\n discussion: { message: \"\" },\n discussionBoard: [],\n discussionNumber: 0\n }\n }\n\n componentDidUpdate = (prevProps) => {\n if (this.props.videoID !== prevProps.videoID) {\n this.onGetVideoDiscussion()\n\n }\n }\n\n onMainDiscussionChange = (e) => {\n this.setState({\n discussion: { ...this.state.discussion, [e.target.name]: e.target.value, }\n })\n // console.log(this.state.discussion.message);\n }\n\n\n onGetVideoDiscussion = () => {\n // post discussion\n getDiscussionForVideo(this.props.videoID).then((data) => {\n // console.log(data);\n // arrange the comments in their nexted order\n // loop through the arrays \n const discussionNumber = data.length\n data = this.organizingComments(data)\n // console.log(data);\n this.setState({\n discussionBoard: data,\n discussionNumber: discussionNumber\n })\n }).catch((err) => {\n console.log(readableServerError(err));\n })\n\n }\n\n onPostVideoDiscussion = () => {\n // post discussion\n postDiscussionForVideo(this.props.videoID, this.state.discussion).then((data) => {\n this.setState({\n discussionBoard: [data, ...this.state.discussionBoard]\n })\n this.onCancel()\n }).catch((err) => {\n console.log(readableServerError(err));\n })\n }\n\n organizingComments = (comments) => {\n let parentComments = comments.filter(({ comment_to }) => comment_to === null)\n comments.splice(0, parentComments.length)\n for (let i = 0; i < comments.length; i++) {\n const c = comments[i];\n let parent = parentComments.find(({ id }) => id === c.comment_to)\n parent.embeddedComments = parent.embeddedComments ? [...parent.embeddedComments, c] : [c]\n }\n return parentComments\n }\n\n onCancel = () => {\n this.setState({ discussion: { message: \"\" } })\n }\n\n\n render() {\n // console.log(this.props.videoID);\n\n return (\n \n\n \n DISCUSSION BOARD {this.state.discussionNumber === 0 ? \"(Be the first)\": `(${this.state.discussionNumber})`}\n \n \n \n \n \n \n\n \n \n \n \n Post\n \n \n \n\n \n
    \n {\n this.state.discussionBoard.map((discussion, i) =>\n )\n }\n
\n\n
\n\n )\n }\n}\n\nexport default DiscussionBoard;\n\nconst DiscussionBoardContainer = styled.div`\n margin: 1em;\n padding: 1em;\n border-radius: 0.5em;\n background-color: white;\n\n @media only screen and (max-width: 768px){\n padding: 1em 0;\n img{\n width: 30px;\n height: 30px;\n }\n }\n`","import APIClient from './httpClient';\n\n\n\nexport const retrieveVideo = async (videoID) => {\n const api = new APIClient();\n const endpoint = `/retrieve/${videoID}/`;\n\n const { data } = await api.VideoApi.get(endpoint);\n return data;\n}\n\nexport const getVideoInfoFromSyllabusContent = async (syllabusContentID) => {\n const api = new APIClient();\n const endpoint = `/retrieve/syllabus/content/${syllabusContentID}/`;\n \n const { data } = await api.VideoApi.get(endpoint);\n return data;\n}\n\nexport const updateVideoInterraction = async (videoID, interractionData) => {\n const api = new APIClient();\n const endpoint = `/interraction/${videoID}/`;\n \n const { data } = await api.VideoApi.put(endpoint, interractionData);\n return data;\n}\n\nexport const createVideoLog = async (videoID) => {\n const api = new APIClient();\n const endpoint = `/${videoID}/logs/create/`;\n \n const { data } = await api.VideoApi.post(endpoint);\n return data;\n}\n\nexport const createVideoLogInterraction = async (videoLogID, videoLogInterractionData) => {\n const api = new APIClient();\n const endpoint = `/logs/${videoLogID}/interraction/create/`;\n \n const { data } = await api.VideoApi.post(endpoint, videoLogInterractionData);\n return data;\n}","import React from 'react';\nimport styled from 'styled-components';\nimport { Stream } from \"@cloudflare/stream-react\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\nimport { css } from \"@emotion/react\";\nimport SnackBar from 'my-react-snackbar';\nimport { readableServerError, timeSince } from '../../../utils/utilFnx';\nimport { createVideoLog, createVideoLogInterraction } from '../../../utils/api/videoApi';\n\n\nclass VideoPlayer extends React.Component {\n constructor(props) {\n super();\n this.state = {\n bufferingVideo: true,\n videoLog: {},\n videoLogInterraction: {},\n snackMessage: { type: null, message: null },\n baseTimeStamp: 0, // currently the video play duration cannot be botten, this get it right fron the beginning\n playTimeBaseStamp: 0, // this gets the value for play timestamp\n deltaMainTimeStamp: 0,\n }\n }\n\n componentWillUnmount = () => {\n this._isMounted = false\n }\n\n componentDidMount = () => {\n // take care of leakages. https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html\n this._isMounted = true\n this.onCreateOrGetVideoLog()\n }\n\n onCreateOrGetVideoLog = () => {\n createVideoLog(this.props.videoID).then((data) => {\n this._isMounted && this.setState({\n videoLog: data\n })\n })\n }\n\n\n\n analyticsMaker = (action, timeStamp, command) => {\n console.log(this.state.videoLog);\n if (this.state.videoLogInterraction.action && !this.state.videoLogInterraction.end_time && this.state.videoLog.id) {\n // NOTE: it doesnt send the incoming action but saves the previous one stored in state\n // hence, onpause, it send out long it played for\n let videoLogInterractionData = this.state.videoLogInterraction\n videoLogInterractionData.end_time = new Date()\n videoLogInterractionData.action = action === \"ended\" ? action : this.state.videoLogInterraction.action\n // NOTE: || 0 is to cater for times where timeStamp `undefined`\n videoLogInterractionData.current_timestamp = ((timeStamp / 1000) || 0).toFixed(8) || 0\n videoLogInterractionData.video_log = this.state.videoLog.id\n\n createVideoLogInterraction(this.state.videoLog.id, videoLogInterractionData).then(data => {\n\n if (command === \"non-lethal\") {\n this.setState({\n videoLogInterraction: videoLogInterractionData\n })\n }\n else {\n this.setState({\n videoLogInterraction: {\n start_time: new Date(),\n action: action,\n current_timestamp: timeStamp,\n end_time: null\n },\n deltaMainTimeStamp: command === \"delta\" ? timeSince : 0\n })\n }\n\n }).catch((err) => {\n console.log(err.response);\n })\n } else {\n this.setState({\n videoLogInterraction: {\n start_time: new Date(),\n action: action,\n current_timestamp: timeStamp,\n end_time: null\n }\n })\n }\n }\n\n onLoadedData = (e) => {\n // TODO: check which of the 2 is called when video is ready\n console.log(\"video has loaded, onLoadedData\");\n }\n\n onLoadedMetaData = (e) => {\n this.setState({\n bufferingVideo: false\n })\n console.log(\"video has loaded, onLoadedMetaData\");\n }\n onError = (e) => {\n /**\n Sent when an error occurs. \n (e.g. the video has not finished encoding yet, \n or the video fails to load due to an incorrect signed URL)\n */\n this.setState({\n snackMessage: { type: \"error\", message: readableServerError(e) }\n })\n\n\n }\n\n onProgress = (e) => {\n\n /**\n * Sent periodically to inform interested parties of progress \n * downloading the media. Information about the current\n * amount of the media that has been downloaded \n * is available in the media element’s buffered attribute.\n */\n\n // console.log(\"video has loaded, onProgress\");\n\n }\n\n onEnded = (e) => {\n\n /**\n * Sent when playback completes.\n */\n this.analyticsMaker(e.type, e.timeStamp - this.state.baseTimeStamp)\n // console.log(\"video has loaded, onEnded\", e);\n\n }\n\n\n onLoadStart = (e) => {\n\n /**\n * Sent when loading of the media begins.\n */\n this.setState({\n baseTimeStamp: e.timeStamp,\n playTimeBaseStamp: e.timeStamp\n })\n // console.log(\"video has loaded, onLoadStart\", e);\n\n }\n\n onPlay = (e) => {\n\n /**\n * Sent when the playback state is no longer paused,\n * as a result of the play method, or the autoplay attribute.\n */\n\n // get between pause and play\n // var vid = document.getElementsByTagName(\"myVideo\");\n this.analyticsMaker(e.type)\n // console.log(\"video has loaded, onPlay\", e);\n\n }\n\n\n onPause = (e) => {\n\n /**\n * Sent when the playback state is changed to paused (paused property is true).\n */\n this.analyticsMaker(e.type, this.state.playTimeBaseStamp - e.timeStamp)\n // console.log(\"video has loaded, onPause\", e);\n\n }\n\n onPlaying = (e) => {\n\n /**\n * Sent when the media has enough data to start playing,\n * after the play event, but also when recovering from \n * being stalled, when looping media restarts, and\n * after seeked, if it was playing before seeking.\n */\n if (this.state.deltaMainTimeStamp) {\n this.setState({\n playTimeBaseStamp: this.state.playTimeBaseStamp + (e.timeStamp - this.state.deltaMainTimeStamp),\n deltaMainTimeStamp: 0,\n })\n }\n this.analyticsMaker(\"analytics-loading-internet-speed\", e.timeStamp - this.state.playTimeBaseStamp, \"non-lethal\")\n // console.log(\"video has loaded, onPlaying\", e);\n }\n onSeeked = (e) => {\n\n /**\n * Sent when a seek operation completes.\n */\n this.analyticsMaker(e.type, e.timeStamp - this.state.playTimeBaseStamp, \"delta\")\n // console.log(\"video has loaded, onSeeked\", e);\n\n }\n onSeeking = (e) => {\n\n /**\n * Sent when a seek operation begins.\n */\n // do nothing\n // console.log(\"video has loaded, onSeeking\");\n\n }\n onSuspend = (e) => {\n\n /**\n * Sent when loading of the media is suspended; \n * this may happen either because the download \n * has completed or because it has been paused\n * for any other reason.\n */\n // do nothing\n // console.log(\"video has loaded, onSuspend\");\n\n }\n\n render = () => {\n return (\n\n \n \n\n {this.state.bufferingVideo && }\n\n {\n // DEBUG: when ever a component expecially an external component\n // doesnt refresh on state change, use the && or the ? : operators\n // to make it refresh. Else it picks just the initial state\n // and doesnt respond to future props change\n this.props.video && \n }\n\n \n\n )\n }\n}\nexport default VideoPlayer\n\nconst VideoPlayerContainer = styled.div`\n height: 60vh;\n width: 100%;\n background-color: black;\n border-radius: 5px;\n display: block;\n text-align: center;\n\n position: relative;\n\n iframe{\n height: 60vh !important;\n }\n\n div{\n /* to remove padding on video that makes other page content unclickable */\n padding-top: 0% !important;\n }\n\n`\n\n\n\nconst LoadingAnimationStyle = css`\n margin: 0;\n position: absolute;\n top: 50%;\n left: 50%;\n -ms-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n\n`;\n","\n\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Card } from '../../../components/uiComponents/card';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Button } from '../../../components/uiComponents/button';\nimport { Collapse } from 'react-collapse';\nimport LikedIcon from '../../../assets/icons/liked.svg'\nimport UnLikedIcon from '../../../assets/icons/unliked.svg'\nimport LessonNotes from '../../../components/media/lessonNote';\nimport DiscussionBoard from '../../../components/media/discussionBoard';\nimport { retrieveVideo, updateVideoInterraction } from '../../../utils/api/videoApi';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport PromptToAuthenticate from '../../../components/uiComponents/promptToAuthenticate';\nimport VideoPlayer from './videoPlayer';\n\n\nclass MediaPage extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n video: {},\n collapseNotes: false,\n }\n }\n\n\n componentDidMount = () => {\n this._isMounted = true\n this.getVideoData()\n }\n componentWillUnmount = () => {\n this._isMounted = false\n }\n componentDidUpdate(prevProps, prevState) {\n // console.log(this.props.match.params.quizID, prevProps.match.params.quizID);\n\n if (this.props.match.params.videoID !== prevProps.match.params.videoID) {\n this.getVideoData()\n }\n }\n\n getVideoData = () => {\n retrieveVideo(this.props.match.params.videoID).then((data) => {\n // console.log(data);\n this._isMounted && this.setState({\n video: data,\n })\n })\n }\n\n videoLikeInterraction = (e) => {\n updateVideoInterraction(this.state.video.id, { like: !this.state.video.liked_by_user }).then((data) => {\n this.setState({\n video: { ...this.state.video, liked_by_user: data.like }\n })\n })\n }\n\n onCollapse = (e) => {\n this.setState({ collapseNotes: !this.state.collapseNotes })\n }\n\n render() {\n // console.log(this.state.video.video);\n return (\n\n \n\n\n {/* Video */}\n
\n \n
\n
\n\n
\n {this.state.video.title}\n \n {getAuthToken() && \n {this.state.video.liked_by_user\n }\n\n
\n\n \n\n \n Notes\n \n\n {!this.state.collapseNotes && }\n\n \n \n \n\n {this.state.video.description?.length > 100 &&\n }\n \n\n\n
\n {\n getAuthToken() ?\n :\n \n }\n
\n
\n\n
\n\n )\n }\n}\n\nexport default MediaPage;\n\n\n\nconst MediaPageContainer = styled.div`\n\n margin: 1em;\n\n ul {\n list-style-type: square;\n color: black;\n }\n .decorationLi{\n list-style: none;\n }\n\n .introHeader{\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n button{\n display: block;\n font-size: 10px;\n }\n\n a{\n text-decoration: none;\n }\n\n .react-player{\n\n }\n @media only screen and (max-width: 768px){\n margin: 0 0 12vh;\n\n .react-player{\n height: 45vh !important;\n }\n\n .discussionBoard{\n ul{\n padding:0;\n }\n\n }\n \n\n .lessonNotes{\n margin:0;\n padding:0;\n }\n .introHeader{\n \n h1{\n margin:0.5em;\n }\n\n }\n }\n`\n\n","\n\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Card } from \"../../../components/uiComponents/card\";\nimport { Button } from '../../../components/uiComponents/button';\nimport { Input, TextArea } from '../../../components/uiComponents/input';\nimport ScaleLoader from \"react-spinners/ScaleLoader\";\nimport { postFeedback } from '../../../utils/api/dialogueApi';\nimport { readableServerError } from '../../../utils/utilFnx';\nimport SnackBar from 'my-react-snackbar';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport PromptToAuthenticate from '../../../components/uiComponents/promptToAuthenticate';\n\n\nclass Feedback extends Component {\n\n constructor(props) {\n super();\n this.state = {\n feedback: {\n subject: \"\",\n message: \"\",\n anonymous: false,\n },\n loading: false,\n snackMessage: { type: null, message: null },\n }\n }\n\n handleChange = (e) => {\n this.setState({\n feedback: { ...this.state.feedback, [e.target.name]: e.target.value, },\n });\n }\n\n handleCancel = () => {\n this.setState({\n feedback: {\n subject: \"\",\n message: \"\",\n anonymous: false,\n }\n })\n }\n\n handleSend = () => {\n this.setState({\n loading: true,\n snackMessage: { type: null, message: null },\n })\n\n postFeedback(this.state.feedback).then((data) => {\n\n this.handleCancel()\n this.setState({\n loading: false,\n snackMessage: { type: \"success\", message: \"Feedback posted successfully! We really appreciate this.\" },\n\n })\n\n }).catch(err => {\n this.setState({\n loading: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n\n })\n\n })\n }\n\n\n render = () => {\n\n return (\n \n \n
\n Feedback\n \n \n We build the best product for you through your feedback. Thank you in advance.\n \n
\n {getAuthToken() ?\n \n \n Subject\n \n\n \n \n Message\n \n \n\n \n this.setState({ feedback: { ...this.state.feedback, [e.target.name]: e.target.checked } })}\n\n />\n Be Anonymous\n \n \n If you feel uncomfortable letting us know your identity, feel free to remain anonymous. Regardless, we don't bite.\n \n\n\n {\n this.state.loading ?\n \n :\n \n \n\n \n\n }\n\n \n\n : \n }\n
\n\n );\n }\n\n}\n\nexport default Feedback\n\n\nconst FeedbackPageContainer = styled.div`\n\n\n`","export default __webpack_public_path__ + \"static/media/checkmark-settings_green.ccc13a07.svg\";","\nimport React from 'react';\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Card } from \"../../../components/uiComponents/card\";\nimport { Input } from \"../../../components/uiComponents/input\";\nimport { Button } from '../../../components/uiComponents/button'\nimport SavedIcon from '../../../assets/icons/checkmark-settings_green.svg'\nimport { getItemFromLocal, readableServerError, setItemToLocal } from '../../../utils/utilFnx';\nimport SnackBar from 'my-react-snackbar';\nimport HashLoader from \"react-spinners/HashLoader\";\nimport { updateUserBasicAccountSettings } from '../../../utils/api/accountApi';\n\n\n\n\nclass Account extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n user: {\n username: getItemFromLocal(\"username\"),\n first_name: getItemFromLocal(\"f_name\"),\n last_name: getItemFromLocal(\"l_name\"),\n email: getItemFromLocal(\"email\"),\n },\n saveChanges: false,\n loading: false,\n snackMessage: { type: null, message: null },\n }\n }\n\n handleChange = (e) => {\n this.setState({\n user: { ...this.state.user, [e.target.name]: e.target.value, },\n saveChanges: true,\n });\n }\n\n onSaveChanges = () => {\n\n this.setState({\n loading: true,\n snackMessage: { type: null, message: null },\n })\n updateUserBasicAccountSettings(this.state.user).then((data) => {\n // console.log(data);\n setItemToLocal(\"email\", this.state.user.email || getItemFromLocal(\"email\"))\n setItemToLocal(\"f_name\", data.first_name)\n setItemToLocal(\"l_name\", data.last_name)\n setItemToLocal(\"username\", data.username)\n this.setState({\n loading: false,\n saveChanges: false,\n snackMessage: { type: \"success\", message: \"Account details successfully updated.\" },\n\n })\n\n }).catch((err) => {\n this.setState({\n loading: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n\n })\n })\n\n }\n\n render = () => {\n return (\n\n \n \n\n \n \n Account Information\n \n \n\n\n \n\n \n \n First Name\n \n \n \n \n \n Last Name\n \n \n \n\n \n\n \n \n Username\n \n \n \n Username is unique name used to identify your account other than your legal name.\n \n \n \n \n Your email address\n \n \n \n This is the email address used to identify the account. It is another communication channel for this platform. Login to your account with the email you input here.\n \n \n\n\n\n \n {this.state.loading ?\n \n :\n \n {this.state.saveChanges ? \"Save Changes\" : \"Saved!\"}\n {!this.state.saveChanges &&\n }\n \n }\n\n \n\n \n\n )\n }\n}\n\n\nexport default Account\n\n\nconst AccountContainer = styled.div`\n\n padding: 1em 1em 3em;\n margin: 1em;\n background-color: white;\n\n button{\n img{\n margin: 0px 0px 0px 10px;\n }\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 5% 0%;\n width: auto;\n h1{\n width: 90%;\n margin: 2%;\n }\n \n input{\n width: auto;\n margin: 5% 0;\n }\n\n div{\n display: block;\n }\n\n }\n`","export default __webpack_public_path__ + \"static/media/cancel.30c1cc63.svg\";","\nimport React from 'react';\nimport styled from 'styled-components';\nimport { HighlightedText, HightlightedSpan } from '../../../components/uiComponents/highlightedText';\nimport { Card } from \"../../../components/uiComponents/card\";\nimport ProfilePic from '../../../assets/icons/profile-user.svg'\nimport { Input, TextArea } from \"../../../components/uiComponents/input\";\nimport { Button } from '../../../components/uiComponents/button'\nimport SavedIcon from '../../../assets/icons/checkmark-settings_green.svg'\nimport CancelIcon from '../../../assets/icons/cancel.svg'\nimport { retrieveMyProfile, updateUserAccountProfile } from '../../../utils/api/accountApi';\nimport { getItemFromLocal, pruneDataObject, readableServerError, setItemToLocal } from '../../../utils/utilFnx';\nimport SnackBar from 'my-react-snackbar';\nimport HashLoader from \"react-spinners/HashLoader\";\nimport { LogoImg } from \"../../../components/uiComponents/uiElements\";\n\n\n\nclass Profile extends React.Component {\n constructor(props) {\n super();\n this.state = {\n profile: {\n subjects_of_interest: [],\n },\n saveChanges: false,\n loading: false,\n snackMessage: { type: null, message: null },\n }\n }\n \n componentDidMount = () => {\n this._isMounted = true\n if (Boolean(getItemFromLocal(\"profile\"))) {\n const data = getItemFromLocal(\"profile\")\n this._isMounted && this.setState({\n profile: { ...data, subjects_of_interest: data.subjects_of_interest || [] }\n })\n\n } else {\n this.getUserProfileData()\n\n }\n }\n componentWillUnmount = () => {\n this._isMounted = false\n }\n\n getUserProfileData = () => {\n this._isMounted && this.setState({\n loading: true,\n snackMessage: { type: null, message: null },\n })\n retrieveMyProfile().then((data) => {\n // console.log(data);\n this._isMounted && this.setState({\n profile: { ...data, subjects_of_interest: data.subjects_of_interest || [] },\n loading: false,\n\n })\n setItemToLocal(\"profile\", data)\n\n }).catch((err) => {\n this._isMounted && this.setState({\n loading: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n })\n }\n\n\n onVariableChange = (e) => {\n // track variable changes that are not conventional\n this.setState({\n [e.target.name]: e.target.value,\n });\n // console.log(this.state.label);\n }\n\n\n onAddDeleteLabel = (e, command) => {\n // TODO: merge this function into `onTopicChange`\n if (command === \"delete\") {\n const updatedLabels = this.state.profile.subjects_of_interest.filter(item => !(item === e))\n\n this.setState({\n profile: { ...this.state.profile, subjects_of_interest: updatedLabels }, saveChanges: true,\n })\n\n } else {\n\n\n\n this.setState({\n // NOTE: the variable for storing labels interrim is called \n interest: \"\",\n profile: {\n ...this.state.profile,\n subjects_of_interest: [\n ...this.state.profile.subjects_of_interest,\n this.state.interest\n ],\n },\n saveChanges: true,\n })\n }\n\n\n }\n\n handleProfileChange = (e) => {\n this.setState({\n profile: { ...this.state.profile, [e.target.name]: e.target.value },\n saveChanges: true,\n })\n // console.log(this.state.profile);\n }\n\n\n handleImages = (e) => {\n this.setState({\n profile: {\n ...this.state.profile,\n profile_picture: URL.createObjectURL(e.target.files[0]),\n profilePictureData: e.target.files[0],\n },\n saveChanges: true,\n })\n // console.log(e.target.files[0]);\n\n }\n\n \n\n onSaveProfileChanges = (e) => {\n this.setState({\n loading: true,\n snackMessage: { type: null, message: null },\n })\n updateUserAccountProfile(pruneDataObject(this.state.profile)).then((data) => {\n this.setState({\n loading: false,\n saveChanges: false,\n profile: { ...data, subjects_of_interest: data.subjects_of_interest || [] },\n snackMessage: { type: \"success\", message: \"Profile details successfully updated.\" },\n })\n setItemToLocal(\"profile\", data)\n }).catch(err => {\n console.log(err.response);\n this.setState({\n loading: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n })\n\n }\n\n render = () => {\n return (\n \n \n\n \n \n Profile Information\n \n
\n \n Your Photo\n \n \n
\n \n \n document.getElementsByName(\"profile_picture\")[0].click()}\n >\n Browse\n \n \n
\n \n\n\n\n\n \n\n \n \n Date of birth\n \n \n\n \n \n \n Gender\n \n \n \n\n \n\n \n \n Institution/School\n \n \n \n School or institution you are currently affiliated with.\n \n \n\n \n\n \n \n Location\n \n \n \n Knowing the location in which you are using the platform enables us to know\n how best to tailer content to you by factoring internet speed, need and popularity.\n \n \n \n \n Telephone\n \n \n \n This telephone number is going to be our secondary contact\n \n \n\n \n\n\n\n\n \n \n About You\n \n \n \n \n \n Subjects / Areas of interest\n \n \n {this.state.profile.subjects_of_interest?.map((interest, i) => {\n return (\n\n \n \n {interest}\n this.onAddDeleteLabel(interest, \"delete\")}\n >\n \"cancel\n \n \n\n \n )\n })\n }\n\n \n \n \n\n Add\n \n \n\n\n\n\n \n\n\n \n {this.state.loading ?\n \n :\n \n {this.state.saveChanges ? \"Save Changes\" : \"Saved!\"}\n {!this.state.saveChanges &&\n }\n }\n \n\n\n
\n\n )\n }\n}\n\n\nexport default Profile\n\n\nconst ProfileContainer = styled.div`\n padding: 1em;\n margin: 1em;\n background-color: white;\n\n select{\n width: 80%;\n margin: 0 1em;\n padding: 0.7em 1em;\n font-size: 1em;\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 5% 0%;\n width: auto;\n h1{\n width: 90%;\n margin: 2%;\n }\n \n input{\n width: auto;\n margin: 5% 0;\n }\n textarea{\n width: auto;\n margin: 5% 0;\n }\n select{\n width: auto;\n margin: 5% 0;\n }\n\n div{\n display: block;\n margin: 2px;\n }\n\n }\n`","\nimport React from 'react';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Card } from \"../../../components/uiComponents/card\";\nimport { Input } from \"../../../components/uiComponents/input\";\nimport { Button } from '../../../components/uiComponents/button'\nimport SavedIcon from '../../../assets/icons/checkmark-settings_green.svg'\nimport styled from 'styled-components';\nimport HashLoader from \"react-spinners/HashLoader\";\nimport SnackBar from 'my-react-snackbar';\nimport { updatePasswordData, updateUserAccountProfile } from '../../../utils/api/accountApi';\nimport { getItemFromLocal, readableServerError, setItemToLocal } from '../../../utils/utilFnx';\n\n\n\nclass Security extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n password: {\n password: \"\",\n new_password: \"\",\n confirm_new_password: \"\",\n },\n privacy: {\n display_real_name: getItemFromLocal(\"profile\")?.display_real_name ?? true,\n public_profile: getItemFromLocal(\"profile\")?.public_profile ?? true,\n },\n savePasswordChanges: false,\n savePrivacyChanges: false,\n loadingPassword: false,\n loadingPrivacy: false,\n snackMessage: { type: null, message: null },\n\n\n }\n }\n\n handlePasswordChange = (e) => {\n this.setState({\n password: { ...this.state.password, [e.target.name]: e.target.value, },\n savePasswordChanges: true,\n });\n }\n\n onSavePasswordChanges = () => {\n this.setState({\n loadingPassword: true,\n })\n if (this.state.password.new_password !== this.state.password.confirm_new_password) {\n this.setState({\n loadingPassword: false,\n snackMessage: { type: \"error\", message: \"New passwords do not match\" },\n })\n } else {\n updatePasswordData(this.state.password).then((data) => {\n this.setState({\n loadingPassword: false,\n savePasswordChanges: false,\n snackMessage: { type: \"success\", message: \"Password changed successfully.\" },\n })\n }).catch((err)=>{\n this.setState({\n loadingPassword: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n })\n\n\n }\n }\n onsavePrivacyChanges = () => {\n updateUserAccountProfile(this.state.privacy).then((data) => {\n setItemToLocal(\"profile\", data)\n this.setState({\n loadingPrivacy: false,\n savePrivacyChanges: false,\n snackMessage: { type: \"success\", message: \"Privacy settings saved successfully.\" },\n })\n }).catch((err)=>{\n this.setState({\n loadingPassword: false,\n snackMessage: { type: \"error\", message: readableServerError(err) },\n })\n })\n }\n\n render = () => {\n return (\n\n \n \n \n \n Security Information\n \n \n\n
\n\n \n Change password\n \n\n \n \n \n Current Password\n \n \n \n Password of the current account\n \n \n\n \n \n New Password\n \n \n \n Confirm New Password\n \n \n\n \n Confirm new password to make sure you got it right.\n \n \n\n\n \n {this.state.loadingPassword ?\n \n :\n\n \n {this.state.savePasswordChanges ? \"Save Password Changes\" : \"Saved!\"}\n {!this.state.savePasswordChanges &&\n }\n \n }\n \n\n \n\n
\n\n \n \n Privacy Information\n \n
\n \n this.setState({ privacy: { ...this.state.privacy, [e.target.name]: e.target.checked }, savePrivacyChanges: true })}\n />\n Display your real name on your profile\n \n \n If unchecked, your username will be displayed instead of your full name across all mentions on the platform.\n \n
\n \n this.setState({ privacy: { ...this.state.privacy, [e.target.name]: e.target.checked }, savePrivacyChanges: true })}\n\n />\n Allow everyone to see your profile\n \n \n If unchecked, your profile will be private and no one except you will be able to view it.\n \n
\n\n\n \n {\n this.state.loadingPrivacy ?\n \n :\n \n {this.state.savePrivacyChanges ? \"Save Privacy Changes\" : \"Saved!\"}\n {!this.state.savePrivacyChanges &&\n }\n \n\n }\n\n \n\n\n\n
\n\n )\n }\n}\n\n\nexport default Security\n\n\n\nconst SecurityContainer = styled.div`\n\n padding: 1em 3em 3em;\n margin: 1em 1em 3em;\n background-color: white;\n\n button{\n img{\n margin: 0px 0px 0px 10px;\n }\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 5% 0%;\n width: auto;\n h1{\n width: 90%;\n margin: 2%;\n }\n \n input{\n width: auto;\n margin: 5% 2px;\n }\n }\n`","\nimport React from 'react';\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { Card } from \"../../../components/uiComponents/card\";\nimport { NavLink, Redirect, Route, Switch } from 'react-router-dom';\nimport Account from './account';\nimport Profile from './profile';\nimport Security from './security';\n\n\n\n\nclass Settings extends React.Component {\n\n constructor(props) {\n super();\n\n }\n\n\n componentDidMount = () => {\n\n }\n\n\n render = () => {\n // console.log(this.props.match.path);\n return (\n \n\n \n Account Settings\n \n \n \n \n Account\n \n\n \n \n \n Profile\n \n\n \n \n \n Security and Privacy\n \n\n \n \n\n \n\n \n \n \n \n\n \n\n \n\n )\n }\n\n}\n\nexport default Settings\n\n\n\n\nconst SettingsContainer = styled.div`\n margin: 1em;\n\n a{\n text-decoration: none;\n margin: 10px 20px;\n \n border-radius: 10px;\n\n &.active{\n background-color: rgba(232, 232, 232, 0.6)\n }\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 5% 2%;\n width: auto;\n h1{\n width: 90%;\n margin: 2%;\n }\n .tab{\n padding: 2%;\n margin: 2%;\n align-items: center;\n justify-content: space-between;\n a{\n \n padding: 2% 4%;\n }\n }\n }\n`","\nimport APIClient from './httpClient';\n\n\n\nexport const retrieveNote = async (noteID) => {\n const api = new APIClient();\n const endpoint = `/${noteID}/`;\n\n const { data } = await api.NoteApi.get(endpoint);\n return data;\n}\n","\n\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { HighlightedText } from '../../../components/uiComponents/highlightedText';\nimport { getAuthToken } from '../../../utils/storage/auth';\nimport PromptToAuthenticate from '../../../components/uiComponents/promptToAuthenticate';\nimport { retrieveNote } from '../../../utils/api/noteApi';\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\nimport { Editor } from 'react-draft-wysiwyg';\nimport SnackBar from 'my-react-snackbar';\nimport { readableServerError } from '../../../utils/utilFnx';\nimport SyncLoader from \"react-spinners/SyncLoader\";\nimport { css } from \"@emotion/react\";\n\n\nclass Note extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n authenticated: getAuthToken(),\n note: null,\n loading: false,\n snackMessage: { type: null, message: null },\n }\n }\n componentDidMount = () => {\n this.getNoteData()\n }\n\n componentDidUpdate(prevProps, prevState) {\n console.log(this.props.match.params.noteID);\n if (this.props.match.params.noteID !== prevProps.match.params.noteID) {\n this.getNoteData()\n\n }\n\n }\n\n getNoteData = () => {\n this.setState({\n loading: true\n })\n retrieveNote(this.props.match.params.noteID).then((data) => {\n this.setState({ ...data, loading: false })\n }).catch(err => {\n this.setState({\n loading: false,\n snackMessage: { \"type\": \"error\", \"message\": readableServerError(err) }\n })\n })\n }\n\n render() {\n console.log(this.state);\n if (this.state.authenticated) {\n\n return (\n \n \n \n {this.state.title || \"Note\"}\n \n \n {this.state.loading ?\n \n :\n <>\n \n \n By {this.state.user?.first_name} {this.state.user?.last_name}\n \n \n }\n \n \n )\n }\n else{\n\n return (\n \n )\n\n }\n }\n\n}\nexport default Note;\n\nconst NoteContainer = styled.div`\n margin: 1em 2em;\n\n .wrapperClassName{\n color: #030508;\n background-color: #d8f3dc !important;\n border: #143601 1px solid;\n border-radius: 3px;\n padding: 5px;\n min-width: 100%;\n }\n \n .editorClassName{\n \n background-color: #d8f3dc !important;\n padding: 5px 15px;\n }\n\n\n`\n\n\nconst LoadingAnimationStyle = css`\n display: block;\n margin: 10vh 10px;\n text-align: center;\n`;","\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport GeneralSideBar from '../components/sideBar/generalSideBar'\nimport TopicSideBar from '../components/sideBar/topicSideBar'\nimport AdminTopBar from '../components/topBar/topBar'\nimport { Switch, Route, Redirect } from 'react-router-dom';\nimport HomePage from '../pages/authorized/home/home'\nimport TopicOverview from '../pages/authorized/topicOverview/topicOverview'\nimport StudentQuizPage from '../pages/authorized/quiz/quiz'\nimport MediaPage from \"../pages/authorized/media/media\";\nimport FeedBack from '../pages/authorized/feedback/feedback'\nimport SettingsPage from \"../pages/authorized/settings/settings\";\nimport { TOPIC_SIDEBAR_REGEX } from '../utils/constants';\nimport NotePage from '../pages/authorized/note/note';\nimport { isLoggedIn } from '../utils/api/accountApi';\nimport { getItemFromLocal } from '../utils/utilFnx';\n\n\n\nclass Authorized extends Component {\n re = TOPIC_SIDEBAR_REGEX;\n\n constructor(props) {\n super()\n this.state = {\n isAuthenticated: null,\n }\n }\n\n\n componentDidMount = () => {\n // condition to check for logged in user if they failed login pass and do not also have a token\n if (!getItemFromLocal(\"authPass\") && getItemFromLocal(\"a_bearer\")){\n this.loggedIn()\n }\n }\n\n loggedIn = () => {\n isLoggedIn().then(data => {\n if (!data.response) {\n this.props.history.push(\"/auth/login\");\n }\n\n }).catch((e) => {\n this.props.history.push(\"/auth/login\");\n\n // console.log(e.response);\n // console.log(\n // \"You're not logged in.😠\"\n // );\n });\n }\n\n\n render() {\n\n return (\n \n {/* */}\n {this.re.test(this.props.location.pathname) ?\n (\n \n }\n />\n )\n :\n \n }\n \n \n {\n \n \n \n \n \n \n \n \n\n \n\n \n }\n \n \n\n )\n }\n}\n\nexport default Authorized;\n\n\n\nconst UserContainer = styled.div`\n width:100%;\n display:flex;\n position: fixed;\n top: 0;\n bottom:0;\n\n`\nconst UserBody = styled.div`\n background-color: #F7F9FB;\n min-width: 85%;\n min-height: 90vh;\n overflow: scroll;\n overflow-y:scroll;\n overflow-x:hidden;\n\n @media only screen and (max-width: 768px){\n width: 100%;\n }\n\n`\n","\nimport React, { Component } from 'react';\nimport { Card } from '../../components/uiComponents/card'\nimport { Button } from '../../components/uiComponents/button'\nimport { login } from '../../utils/api/accountApi'\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../components/uiComponents/highlightedText';\nimport { Input } from '../../components/uiComponents/input';\nimport { readableServerError, setItemToLocal } from '../../utils/utilFnx';\nimport ClipLoader from \"react-spinners/ClipLoader\";\nimport { Link } from 'react-router-dom';\n\n\nclass Login extends Component {\n\n\n constructor(props) {\n super(props);\n\n this.state = {\n email: \"\",\n password: \"\",\n loading: false,\n errorMessage: null\n }\n }\n\n\n\n handleChange = (e) => {\n this.setState({\n [e.target.name]: e.target.value,\n errorMessage: null,\n });\n // console.log(this.state)\n }\n\n handleSubmit = (e) => {\n e.preventDefault();\n this.setState({ loading: true })\n login(this.state.email, this.state.password)\n .then(data => {\n // console.log(data);\n this.setState({ loading: false })\n setItemToLocal(\"a_bearer\", data.token)\n setItemToLocal(\"email\", this.state.email)\n setItemToLocal(\"f_name\", data.first_name)\n setItemToLocal(\"l_name\", data.last_name)\n setItemToLocal(\"username\", data.username)\n setItemToLocal(\"u_id\", data.id)\n setItemToLocal(\"profile_pic\", data.profile_pic) // set profile pic \n localStorage.removeItem(\"authPass\")\n\n this.props.history.push('/')\n })\n .catch(error => {\n console.log(error.message)\n this.setState({\n loading: false,\n errorMessage: readableServerError(error),\n })\n });\n }\n\n skipAuthentication = () => {\n localStorage.clear()\n setItemToLocal(\"authPass\", true)\n }\n\n render() {\n\n return (\n \n \n Skideo\n \n \n
\n \n\n \n {this.state.errorMessage &&

{this.state.errorMessage}

}\n\n \n \n {!this.state.loading && LOGIN}\n \n\n Forgot password?\n\n \n
\n Don't have an account? Sign up.\n\n \n Skip authentication\n \n
\n\n );\n }\n}\nexport default Login;\n\n\n\nconst LoginFormContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width:25%;\n\n input{\n border: 1px solid black;\n border-radius: 3px;\n display: block;\n padding: 10px 20px;\n margin: 25px auto;\n width: 80%;\n height: 1.5em;\n\n text-align: left;\n font-size: 12px;\n font-weight: bold;\n letter-spacing: 0;\n color: #923D41;\n }\n\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #923D41;\n font-weight: normal;\n opacity: 1; /* Firefox */\n }\n\n\n button{\n display: block;\n height: 40px;\n }\n\n a{\n text-decoration: none;\n color: #923D41;\n font-size: 12px;\n text-align: center;\n display: block;\n margin-top: 2em;\n }\n\n .forgotPassword{\n color: #240046;\n }\n \n p{\n color: #923D41;\n text-align: center;\n margin: 0 auto;\n background: rgba(146, 61, 65, 0.1);\n width: fit-content;\n padding: 0.5em;\n border-radius: 0.5em\n }\n\n .skipAuthentication{\n display: block;\n margin: 15px auto 10px;\n background-color: #cce0ff;\n text-decoration: underline;\n color: #000000cc;\n padding: 10px;\n width: inherit;\n border-radius: 5px;\n text-align: center;\n\n }\n\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 20px auto;\n width:90%;\n\n }\n\n\n`\n\n","import React, { Component } from 'react';\nimport { Card } from '../../components/uiComponents/card'\nimport { Button } from '../../components/uiComponents/button'\nimport { registerUser } from '../../utils/api/accountApi'\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../components/uiComponents/highlightedText';\nimport { Input } from '../../components/uiComponents/input';\nimport { readableServerError, setItemToLocal } from '../../utils/utilFnx';\nimport ClipLoader from \"react-spinners/ClipLoader\";\n\n\nclass Register extends Component {\n\n\n constructor(props) {\n super(props);\n\n this.state = {\n email: \"\",\n first_name: \"\",\n last_name: \"\",\n organization: \"\",\n password: \"\",\n confirm_password: \"\",\n loading: false,\n errorMessage: null\n }\n }\n\n handleChange = (e) => {\n this.setState({\n [e.target.name]: e.target.value,\n errorMessage: null,\n });\n }\n\n\n handleSubmit = (e) => {\n e.preventDefault();\n if (this.state.password !== this.state.confirm_password) {\n this.setState({ errorMessage: \"Password mismatch\" })\n return\n }\n\n else {\n this.setState({ loading: true })\n registerUser(this.state)\n .then(data => {\n // console.log(data);\n this.setState({ loading: false })\n setItemToLocal(\"email\", this.state.email)\n setItemToLocal(\"f_name\", data.first_name)\n setItemToLocal(\"l_name\", data.last_name)\n setItemToLocal(\"username\", data.username)\n setItemToLocal(\"u_id\", data.id)\n this.props.history.push('/auth/activate')\n })\n .catch(error => {\n console.log(error.message)\n this.setState({\n loading: false,\n errorMessage: readableServerError(error),\n })\n });\n }\n\n }\n\n render() {\n\n return (\n \n \n Sign Up to Skideo!\n \n \n
\n \n \n \n \n \n {this.state.errorMessage &&

{this.state.errorMessage}

}\n \n \n {!this.state.loading && Sign Up}\n \n \n
\n Already have an account? Sign In\n
\n\n );\n }\n}\nexport default Register;\n\n\nconst SignUpFormContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width:25%;\n\n input{\n border: 1px solid black;\n border-radius: 3px;\n display: block;\n padding: 10px 20px;\n margin: 25px auto;\n width: 80%;\n height: 1.5em;\n\n text-align: left;\n font-size: 12px;\n font-weight: bold;\n letter-spacing: 0;\n color: #923D41;\n }\n\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #923D41;\n font-weight: normal;\n opacity: 1; /* Firefox */\n }\n\n\n button{\n display: block;\n height: 40px;\n }\n\n a{\n text-decoration: none;\n color: #923D41;\n font-size: 12px;\n text-align: center;\n display: block;\n margin-top: 2em;\n }\n\n p{\n color: #923D41;\n text-align: center;\n margin: 0 auto;\n background: rgba(146, 61, 65, 0.1);\n width: fit-content;\n padding: 0.5em;\n border-radius: 0.5em\n }\n\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 20px auto;\n width:90%;\n\n }\n\n\n`\n","\nimport React, { Component } from 'react';\nimport { Card } from '../../components/uiComponents/card'\nimport { Button } from '../../components/uiComponents/button'\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../components/uiComponents/highlightedText';\nimport { Input } from '../../components/uiComponents/input';\nimport { activateAccount } from '../../utils/api/accountApi';\nimport { getItemFromLocal, readableServerError, setItemToLocal } from '../../utils/utilFnx';\nimport ClipLoader from \"react-spinners/ClipLoader\";\n\n\n\nclass ActivateAccount extends Component {\n\n\n constructor(props) {\n super();\n\n this.state = {\n code: null,\n loading: false,\n errorMessage: null\n }\n }\n\n\n handleChange = (e) => {\n this.setState({\n [e.target.name]: e.target.value\n });\n // console.log(this.state)\n }\n\n handleSubmit = (e) => {\n e.preventDefault();\n this.setState({ loading: true })\n activateAccount({ extra_data: `${getItemFromLocal(\"u_id\")}-${this.state.code}` }).then(data => {\n console.log(data);\n this.setState({ loading: false })\n setItemToLocal(\"a_bearer\", data.token)\n setItemToLocal(\"f_name\", data.first_name)\n setItemToLocal(\"l_name\", data.last_name)\n setItemToLocal(\"username\", data.username)\n setItemToLocal(\"u_id\", data.id)\n setItemToLocal(\"profile_pic\", data.profile_pic) // set profile pic \n\n this.props.history.push('/')\n }).catch(error => {\n\n const r_err = readableServerError(error)\n console.log(error.message)\n\n if (r_err === \"Unexpected token u in JSON at position 0\") {\n localStorage.removeItem(\"a_bearer\")\n this.handleSubmit({ preventDefault: () => { } })\n }\n else {\n this.setState({\n loading: false,\n errorMessage: r_err,\n })\n\n }\n });\n\n }\n\n\n render() {\n\n return (\n \n \n Verify Email\n \n \n
\n \n \n Shortcode sent to email\n \n {this.state.errorMessage &&

{this.state.errorMessage}

}\n \n
\n
\n
\n\n );\n }\n}\nexport default ActivateAccount;\n\n\n\n\nconst ActivateAccountEmailFormContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width:25%;\n\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #1b263b;\n font-weight: normal;\n opacity: 0.5; /* Firefox */\n }\n\n\n button{\n display: block;\n height: 40px;\n }\n\n a{\n text-decoration: none;\n color: #923D41;\n font-size: 12px;\n text-align: center;\n display: block;\n margin-top: 2em;\n }\n\n p{\n color: #923D41;\n text-align: center;\n margin: 0 auto;\n background: rgba(146, 61, 65, 0.1);\n width: fit-content;\n padding: 0.5em;\n border-radius: 0.5em\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 20px auto;\n width:90%;\n }\n\n\n`\n\n","export default __webpack_public_path__ + \"static/media/email.06593616.svg\";","\nimport React, { Component } from 'react';\nimport { Card } from '../../components/uiComponents/card'\nimport { Button } from '../../components/uiComponents/button'\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../components/uiComponents/highlightedText';\nimport { Input } from '../../components/uiComponents/input';\nimport { forgottenPassword } from '../../utils/api/accountApi';\nimport { readableServerError } from '../../utils/utilFnx';\nimport ClipLoader from \"react-spinners/ClipLoader\";\nimport EmailIcon from \"../../assets/icons/email.svg\";\n\n\nclass ForgotPassword extends Component {\n\n\n constructor(props) {\n super();\n\n this.state = {\n email: null,\n loading: false,\n submitted: false,\n errorMessage: null\n }\n }\n\n\n handleChange = (e) => {\n this.setState({\n [e.target.name]: e.target.value\n });\n // console.log(this.state)\n }\n\n handleSubmit = (e) => {\n e.preventDefault();\n this.setState({ loading: true })\n forgottenPassword({ email: this.state.email }).then(data => {\n this.setState({ loading: false, submitted: true })\n\n }).catch(err => {\n this.setState({\n loading: false,\n errorMessage: readableServerError(err),\n })\n })\n }\n\n\n render() {\n\n return (\n \n {this.state.submitted ?\n <>\n Check your email\n \n \n \n Back to Login\n\n \n \n :\n <> \n Provide your e-mail\n \n \n\n
\n \n {this.state.errorMessage &&

{this.state.errorMessage}

}\n \n
\n
\n \n }\n
\n\n );\n }\n}\nexport default ForgotPassword;\n\n\n\n\nconst ForgotPasswordEmailFormContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width:25%;\n\n input{\n border: 1px solid black;\n border-radius: 3px;\n display: block;\n padding: 10px 20px;\n margin: 25px auto;\n width: 80%;\n height: 1.5em;\n\n text-align: left;\n font-size: 12px;\n font-weight: bold;\n letter-spacing: 0;\n color: #923D41;\n }\n\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #923D41;\n font-weight: normal;\n opacity: 1; /* Firefox */\n }\n\n\n button{\n display: block;\n height: 40px;\n }\n\n a{\n text-decoration: none;\n color: #923D41;\n font-size: 12px;\n text-align: center;\n display: block;\n margin-top: 2em;\n }\n\n p{\n color: #923D41;\n text-align: center;\n margin: auto;\n background: rgba(146, 61, 65, 0.1);\n width: fit-content;\n padding: 0.5em;\n border-radius: 0.5em\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 20px auto;\n width:90%;\n }\n\n\n`\n\n","\nimport React from 'react';\nimport { Card } from '../../components/uiComponents/card'\nimport { Button } from '../../components/uiComponents/button'\nimport styled from 'styled-components';\nimport { HighlightedText } from '../../components/uiComponents/highlightedText';\nimport { Input } from '../../components/uiComponents/input';\nimport { resetPassword } from '../../utils/api/accountApi';\nimport { readableServerError } from '../../utils/utilFnx';\nimport ClipLoader from \"react-spinners/ClipLoader\";\n\n\nclass ResetPassword extends React.Component {\n\n\n constructor(props) {\n super(props);\n\n this.state = {\n newPassword: null,\n confirmNewPassword: null,\n resetID: null,\n loading: false,\n errorMessage: null\n }\n }\n\n handleChange = (e) => {\n this.setState({\n [e.target.name]: e.target.value\n });\n // console.log(this.state)\n }\n\n\n handleSubmit = (e) => {\n e.preventDefault();\n if (this.state.newPassword && this.state.newPassword === this.state.confirmNewPassword) {\n this.setState({ loading: true });\n resetPassword({\n password: this.state.newPassword,\n extra_data: this.props.match.params.resetID\n }).then(data => {\n this.setState({ loading: false });\n\n this.props.history.push('/auth/login')\n\n }).catch(err => {\n console.log(err.message)\n this.setState({\n loading: false,\n errorMessage: readableServerError(err),\n })\n\n })\n\n } else {\n this.setState({\n errorMessage: \"Password Mismatch\"\n })\n\n }\n\n }\n\n\n render() {\n\n return (\n \n \n Reset Password\n \n \n
\n \n \n {this.state.errorMessage &&

{this.state.errorMessage}

}\n \n
\n
\n
\n\n );\n }\n}\nexport default ResetPassword;\n\n\nconst ResetPasswordFormContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width:25%;\n\n input{\n border: 1px solid black;\n border-radius: 3px;\n display: block;\n padding: 10px 20px;\n margin: 25px auto;\n width: 80%;\n height: 1.5em;\n\n text-align: left;\n font-size: 12px;\n font-weight: bold;\n letter-spacing: 0;\n color: #923D41;\n }\n\n\n input::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n color: #923D41;\n font-weight: normal;\n opacity: 1; /* Firefox */\n }\n\n\n button{\n display: block;\n height: 40px;\n }\n\n a{\n text-decoration: none;\n color: #923D41;\n font-size: 12px;\n text-align: center;\n display: block;\n margin-top: 2em;\n }\n\n p{\n color: #923D41;\n text-align: center;\n margin: 0 auto;\n background: rgba(146, 61, 65, 0.1);\n width: fit-content;\n padding: 0.5em;\n border-radius: 0.5em\n }\n\n @media only screen and (max-width: 768px){\n display: block;\n margin: 20px auto;\n width:90%;\n }\n\n\n`\n","\nimport Login from '../pages/unauthorized/login'\nimport SignUp from '../pages/unauthorized/signup'\nimport ActivateAccount from '../pages/unauthorized/activate'\nimport ForgotPassword from '../pages/unauthorized/forgotPassword'\nimport ResetPassword from '../pages/unauthorized/resetPassword'\nimport { Switch, Route, Redirect } from 'react-router-dom';\nimport React from 'react';\n\n\n\nclass UnAuthorized extends React.Component {\n render() {\n return (\n
\n \n \n \n \n \n \n \n \n
\n )\n }\n}\n\nexport default UnAuthorized;\n","import './App.css'\nimport { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom'\nimport Authorized from './layouts/authorized'\nimport UnAuthorized from './layouts/unAuthorized'\nimport React from 'react'\n\n\nclass App extends React.Component {\n\n render() {\n return (\n \n \n \n \n \n \n \n )\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\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\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();\nif (process.env.NODE_ENV !== 'development') {\n console.log = () => {}\n}"],"sourceRoot":""}