{"version":3,"sources":["components/EditTimeline/ProjectInput/ProjectInput.module.css","components/EditTimeline/CategoryInput/CategoryInput.module.css","components/EditTimeline/Controls/Controls.module.css","components/EditTimeline/TitleInput/TitleInput.module.css","components/EditTimeline/DescriptionInput/DescriptionInput.module.css","pages/Timeline/AddTimelineEntry/AddTimelineEntry.module.css","pages/Timeline/EditTimelineEntry/EditTimelineEntry.module.css","redux/slices/AppRedux.ts","redux/slices/AuthRedux.ts","redux/slices/ProjectRedux.ts","redux/store.ts","services/adapters/authAdapter.ts","redux/hooks.ts","statics/routes.ts","statics/constants.ts","statics/text.ts","statics/nav.ts","services/authService.ts","statics/images/search-icon.svg","statics/images/vcl-logo-2023.png","components/generics/Link/Link.tsx","components/ProfileDropdown/ProfileDropdown.tsx","components/MobileNavbar/MobileNavbar.tsx","statics/resources.ts","components/Navbar/utils/utils.ts","components/Navbar/NavbarComponents/LinkWithMenu.tsx","components/Navbar/NavbarComponents/NavbarLinks.tsx","components/Navbar/NavbarComponents/Logo.tsx","components/Navbar/Navbar.tsx","services/api/projectAPI.ts","services/adapters/projectAdapter.ts","services/projectService.ts","components/LandingPage/LandingPage.tsx","statics/images/kenny-map.png","components/Card/Card.tsx","components/LabGoalsFooter/LabGoalsFooter.tsx","components/About/About.tsx","components/ProjectGallery2/ProjectGallery2.tsx","statics/images/HomePage/1.jpg","statics/images/HomePage/2.jpg","statics/images/HomePage/3.jpg","pages/Home/Home.tsx","components/ProjectOverviewCard/ProjectOverviewCard.tsx","pages/ProjectV2/Pages/ProjectOverview/ProjectOverview.tsx","statics/images/correlation/correlation1.png","statics/images/correlation/correlation3.png","statics/images/correlation/correlation2.png","statics/images/correlation/correlation4.png","statics/images/correlation/correlationSequence1.png","statics/images/correlation/correlationSequence2.png","statics/images/correlation/correlationSequence3.png","statics/images/correlation/correlationSequence4.png","statics/images/nova/novaImage1.png","statics/images/nova/novaImage2.png","statics/images/nova/novaImage3.png","statics/images/shiva/shiva1.png","statics/images/ideo/ideo1.png","statics/images/ideo/ideo2.png","statics/images/it/it1.png","statics/images/it/it2.png","statics/projectsV2.tsx","statics/images/shiva/shiva2.png","pages/ProjectV2/Pages/Default/ProjectV2Default.tsx","pages/ProjectV2/Pages/Publications/ProjectV2Publications.tsx","components/ProjectPeople/ProjectPeople.tsx","pages/ProjectV2/Pages/Team/ProjectV2Team.tsx","statics/images/JoinTeam/visualAttention.png","statics/images/JoinTeam/compModel.png","statics/images/JoinTeam/appliedResearch.png","statics/images/JoinTeam/dataVis.png","statics/images/JoinTeam/JS.png","pages/ProjectV2/Pages/Join/ProjectV2Join.tsx","statics/images/JoinTeam/browser.png","statics/images/JoinTeam/email.png","pages/ProjectV2/ProjectRouter/ProjectRouter.tsx","pages/ProjectV2/Wrapper/ProjectV2Wrapper.tsx","components/GetInvolvedSidebar/GetInvolvedSidebar.tsx","statics/images/JoinTeam/9.jpg","pages/GetInvolved/GetInvolved.tsx","statics/images/menu-icon.png","components/PageNav/PageNav.tsx","pages/People/People.tsx","statics/affiliations.ts","pages/Affiliations/Affiliations.tsx","components/TimelineSearchbar/TimelineSearchbar.tsx","components/FilterDropdown/AuthorsFilter.tsx","components/FilterDropdown/CategoriesFilter.tsx","components/DateRangePicker/DateRangePicker.tsx","components/FilterDropdown/DateFilter.tsx","components/FilterDropdown/ProjectsFilter.tsx","components/FilterDropdown/MobileAuthorsFilter.tsx","components/FilterDropdown/MobileCategoriesFilter.tsx","components/FilterDropdown/MobileDateFilter.tsx","components/FilterDropdown/MobileProjectsFilter.tsx","components/FilterDropdown/MobileFilterDropdown.tsx","pages/Timeline/TimelineFilter.tsx","components/TimelineCommitBlock/TimelineCommitBlock.tsx","components/ConfirmationWindow/ConfirmationWindow.tsx","pages/Timeline/Timeline.tsx","pages/Timeline/DefaultTimeline.tsx","statics/images/Group 5.png","pages/404ErrorPage/ErrorPage.tsx","pages/Resources/Cards/ResourceCards.tsx","pages/Resources/Resources.tsx","pages/Resources/Page/AddEditResource/AddResource.tsx","services/adapters/resourceAdapter.ts","components/Resources/ResourceEntry.tsx","pages/Resources/Page/AddEditResource/EditResource.tsx","pages/Resources/Page/ResourcePage.tsx","pages/EditProfile/EditProfile.tsx","components/EditTimeline/TitleInput/TitleInput.tsx","components/EditTimeline/DateInput/DateInput.tsx","components/EditTimeline/ProjectInput/ProjectInput.tsx","components/EditTimeline/CategoryInput/CategoryInput.tsx","components/EditTimeline/ContributorInput/ContributorInput.tsx","components/EditTimeline/HyperlinkInput/HyperlinkInput.tsx","components/EditTimeline/DescriptionInput/DescriptionInput.tsx","components/EditTimeline/Controls/Controls.tsx","pages/Timeline/AddTimelineEntry/AddTimelineEntry.tsx","pages/Timeline/EditTimelineEntry/EditTimelineEntry.tsx","App/Switch.tsx","components/generics/Modal/Modal.tsx","components/generics/Button/Button.tsx","components/LoginView/LoginForm/LoginForm.tsx","components/LoginView/LoginView.tsx","components/SignUpView/SignUpFinalForm/SignUpForm.tsx","components/SignUpView/SignUpView.tsx","App/Modals.tsx","components/Footer/Footer.tsx","App/ScrollToTop.tsx","App/App.tsx","reportWebVitals.ts","index.tsx","pages/EditProfile/EditProfile.module.css","components/Resources/ResourceEntry.module.css","components/ProfileDropdown/ProfileDropdown.module.css","components/EditTimeline/DateInput/DateInput.module.css","components/EditTimeline/ContributorInput/ContributorInput.module.css","components/EditTimeline/HyperlinkInput/HyperlinkInput.module.css"],"names":["module","exports","appSlice","createSlice","name","initialState","isReady","inProjectsPage","modals","login","visible","signup","alert","reducers","setIsReady","state","_ref","payload","setInProjectsPage","_ref2","openModal","_ref3","key","data","closeModal","_ref4","setAlert","_ref5","selectInProjectsPage","app","appActions","actions","authSlice","permissions","isLoggingIn","isLoggedIn","setIsLoggedIn","setUsername","username","setPermissions","logout","undefined","setIsLoggingIn","selectAuth","auth","selectIsLoggedIn","selectIsLoggingIn","authActions","projectSlice","isProjectLoading","projects","setIsProjectLoading","setProjects","addProject","push","removeProject","index","map","e","indexOf","splice","projectActions","rootReducer","combineReducers","appReducer","authReducer","project","projectReducer","store","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","dotenv","config","baseURL","process","useAppDispatch","useDispatch","useAppSelector","useSelector","ROUTES","HOME","PROJECT","PATH","BASE","OVERVIEW","PROJECT_DESCRIPTION","JOIN_OUR_TEAM","TEAM","CONTACT","ABOUT","GET_INVOLVED","PROJECT_PUBLICATIONS","PEOPLE","AFFILIATIONS","ERROR_PAGE","RESOURCES","TIMELINE","TIMELINE_EDIT","TIMELINE_ADD","PROJECT_TIMELINE","PROFILE","constants","MIN_PASSWORD_LENGTH","MIN_USERNAME_LENGTH","PROJECTS","color","POSITIONS","value","MODALS","LOGIN","SIGNUP","UBC_LOGO_URL","TEXT","COMMON","SUBMIT","BACK","NEXT","TITLE","LAB_TITLE_ONLY","LOGOUT","USERNAME","USERNAME_EMPTY_ERROR","USERNAME_LENGTH_ERROR","concat","PASSWORD","PASSWORD_EMPTY_ERROR","PASSWORD_LENGTH_ERROR","CREATE_ACCOUNT","CREATE_ACCOUNT_LINK","FIRSTNAME","FIRSTNAME_EMPTY_ERROR","LASTNAME","LASTNAME_EMPTY_ERROR","PROJECT_EMPTY_ERROR","POSITION","POSITION_EMPTY_ERROR","TOKEN","TOKEN_EMPTY_ERROR","LOGIN_ACCOUNT","LOGIN_ACCOUNT_LINK","PAGE_TITLES","NAVIGATE","PROJECT_NAV","TEAM_AND_ALUMNI","PROJECT_NAMES","CORRELATION","IDEO","IMG_TRANSITIONS","NOVA","SHIVA","NCIS","CODING_TEAM","ALERTS","AUTH_SUCCESS","AUTH_FAILED","LOGIN_SUCCESS","LOGOUT_SUCCESS","LAB_INFO","TEL_TEXT","TEL","FAX_TEXT","FAX","EMAIL","LAB_TEXT","DR_RENSINK","DRRENSINK_CONTACT","ADMIN_CONTACT","DANIEL","SARA","SOGOL","CAMPUS","ADDRESS_LINE_ONE","ADDRESS_LINE_TWO","HOURS","WEEKDAYS","WEEKENDS","LANDING_PAGE","DESCRIPTION","UBC_PAGE_BUTTON","MISSION_STATEMENT","LAB_GOALS","CURRENT_PROJECTS","TIMELINE_PAGE","SUBHEADER","ERROR_MESSAGE","ABOUT_PAGE","MAIN","P1","PHILOSOPHY","HEADER","P2","RESPONSIBILITIES","R1","R2","R3","R4","R5","VALUES","VALUE_1","VALUE_2","VALUE_3","BP_PLACEHOLDER","GAIN_SECTION","DIRECTED_STUDIES","RESEARCH_EXP","GRADUATE_STUDENTS","GLOBAL_RESEARCH","PROJECT_JOIN","HOME_SECTION","INTEREST","COPILOT_DESCRIPTION","RESEARCH_BACKGROUND","APPPLICATION_INSTRUCTION","WHAT_WE_DO","DESCRIPTION_1","DESCRIPTION_2","YOU_MIGHT_LIKE","PAST_POSITIONS_AND_PROJECTS","VCL_WEB_APP","PROJECT1","PROJECT2","MEMBER_TESTIMONIALS","APPLICATION_INSTRUCTIONS","STEP1","STEP2","BULLET_POINTS","BULLET_1","BULLET_2","BULLET_3","PEOPLE_PAGE","EMPTY_MEMBER_LIST","EMPTY_ALUMNI_LIST","RESPONSE_ERROR","PROJECT_TEAM_PAGE","RESOURCE_PAGE","EMPTY_DISPLAY_LIST","TITLE_EMPTY_ERROR","AUTHOR_EMPTY_ERROR","LINK_EMPTY_ERROR","INVALID_URL_LINK_ERROR","CATEGORY_EMPTY_ERROR","NAV","REF","useHandleCheckAuth","dispatch","handleCheckAuth","async","axios","get","err","response","checkAuth","then","res","catch","console","error","React","useEffect","useHandleLogin","isFetching","setIsFetching","useState","setError","success","setSuccess","handleLogin","password","post","loginUser","message","useHandleLogout","logoutUser","_path","_extends","Object","assign","bind","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","SvgSearchIcon","svgRef","title","titleId","props","width","height","viewBox","fill","xmlns","ref","id","d","ForwardRef","GenericLink","to","className","onClickHandler","_jsx","Fragment","children","Link","onClick","REACT_APP_WIP","ProfileDropdown","anchorEl","setAnchorEl","handleMenuClose","handleResize","window","addEventListener","removeEventListener","_jsxs","_Fragment","IconButton","event","currentTarget","AccountCircleIcon","Menu","styles","loginMenu","open","Boolean","onClose","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","MenuItem","profileDropdownItem","disableRipple","dropdownLink","LogoutIcon","sx","marginRight","handleLogout","LoginIcon","handleOpenLoginModal","CONSTANTS","DropdownMenu","styled","Drawer","_templateObject","_taggedTemplateLiteral","MobileNavbar","history","useHistory","setOpen","closeDropdown","AppBar","position","boxShadow","src","VCLIcon","alt","SearchIcon","GiHamburgerMenu","size","anchor","item","page_title","subcategories","setNoHover","els","document","getElementsByClassName","classList","add","stopTransitionEventPropagation","stopPropagation","setMenuSizeAfterTransition","_document$getElementB","menuContainerPaper","getElementById","querySelector","style","getBoundingClientRect","toString","remove","LinkWithMenu","active","refs","location","useLocation","projectAnchorEl","setProjectAnchorEl","projectOpen","resourceAnchorEl","setResourceAnchorEl","resourceOpen","handleProjectMenuOpen","handleResourceMenuOpen","handleProjectMenuClose","handleResourceMenuClose","baseRoute","namesArray","handleClose","handleOpen","menuOpen","KeyboardArrowDownIcon","onTransitionEnd","onTransitionEnter","disableScrollLock","menuItem","pathname","split","NavbarLinks","IS_WIP","includes","handleSearchBtnClick","Logo","href","innerWidth","require","Navbar","Toolbar","MobileMenu","ProjectAPI","getAllProjects","getProjectByName","useHandleGetAllProjects","handleGetAllProjects","projectAPI","callGetAllProjectsAPI","LandingPage","Card","desc","backgroundColor","SettingsOutlinedIcon","fontSize","defaultProps","MissionStatement","About","kennyMap","CarouselItem","side","darkmode","cardType","display","justifyContent","alignItems","ImQuotesLeft","description","ImQuotesRight","alignContent","img","ProjectGallery2","currentIndex","setCurrentIndex","touchStart","setTouchStart","touchEnd","setTouchEnd","windowSize","setWindowSize","previous","useCallback","next","handleKeyDown","interval","setInterval","AUTO_TIME","clearInterval","updateWindowSize","log","onTouchStart","touches","clientX","onTouchMove","onTouchEnd","handleTouchEnd","IoIosArrowDropleft","marginLeft","IoIosArrowDropright","_","Home","sourcePage","scrollIntoView","behavior","block","image1","image2","image3","ProjectOverviewCard","navigateToProject","projectName","ProjectOverview","PROJECT_TEXT","project_title","first","second","emphasis","qa","q","a","publications","citation","link","subpages","galleryList","correlationMainStream1","correlationSequence1","correlationSequence2","correlationSequence3","correlationSequence4","correlationSequence5","correlationGallery1","correlationGallery2","testimonials","pastProjects","joinTeam","whatWeDo","nova1","nova2","nova3","shiva1","ideo1","ideo2","it1","it2","ProjectV2Default","_currentProject2","_currentProject3","_currentProject4","_currentProject5","_currentProject6","_currentProject7","_currentProject8","_currentProject9","_currentProject9$qa","project_id","subPage","currentProject","find","element","toLowerCase","_currentProject","_currentProject$subpa","subpage","marginTop","marginBottom","RiDoubleQuotesL","RiDoubleQuotesR","margin","scrollTo","MdKeyboardDoubleArrowUp","ProjectV2Publications","padding","maxWidth","FaExternalLinkAlt","paddingTop","paddingBottom","Person","isAlumni","involvement","ORDER_OF_POSITIONS","ProjectTeamV2","openAlumniCollapse","setOpenAlumniCollapse","teamMembers","setTeamMembers","alumni","setAlumni","callComplete","setCallComplete","resSuccess","filterByPosition","members","lowerCasePositions","filter","sort","b","positions","getMembers","member","matchingPosition","displayedPosition","firstname","lastname","blurb","Alert","severity","Collapse","in","KeyboardArrowUpIcon","CircularProgress","ProjectV2Join","_currentProject$joinT","_currentProject$pastP","js","appResearch","dataVis","visualAttention","compModel","minWidth","ProjectRouter","isPages","Switch","p","Route","exact","path","render","ProjectV2Team","Redirect","ProjectV2Wrapper","match","menuSize","setMenuSize","openMobileDropdown","setOpenMobileDropdown","params","subPages","isSubpage","setIsSubpage","forEach","offsetHeight","listOfLinks","pseudoTitle","displayedTitle","hyperlink","lastPartURL","url","getLastPart","origin","search","hash","renderedLinks","subpageTitle","index1","textAlign","borderBottom","GetInvolvedSidebar","pRef","labMemberRef","coPilotRef","dsCoPilotRef","volunteerRef","directedStudiesRef","raRef","ctRef","customAutoScroll","sidebarState","setbarState","GetInvolved","useRef","refOBJ","navHeight","clientHeight","targetPosition","current","offsetTop","top","applicationInstructions","ResearchIMG","borderRadius","LabGoalsFooter","rel","getGridColumns","itemCount","defaultColumns","PageNav","items","currentSelection","onItemSelected","columns","setColumns","gridStyle","gridTemplateColumns","People","dummyList","setCurrProject","currentList","setList","opacity","filterMembers","some","filterAndCreatePersonsByPosition","createSinglePerson","MdAccountCircle","CONTENT","type","content","pi","faculty","SingleAffiliation","isMobile","setIsMobile","TitleWithLink","HiOutlineExternalLink","Affiliations","page","setPage","filteredAffiliations","TimelineSearchbar","setFilter","filterBy","textFieldRef","Box","component","m","noValidate","autoComplete","TextField","fullWidth","variant","defaultValue","input","onKeyDown","preventDefault","keyword","inputRef","onFocus","InputProps","startAdornment","flexDirection","bgcolor","ml","mt","mx","MenuProps","PaperProps","maxHeight","ITEM_HEIGHT","AuthorsFilter","authorSelected","setAuthorSelected","dummyData","list","FormControl","Select","labelId","disableUnderline","multiple","onChange","author","renderValue","selected","options","CategoriesFilter","categorySelected","setCategorySelected","category","DateRangePicker","dateRange","setDateRange","isVisible","setVisible","initialDate","targetDate","required","handleChange","_initialDate$current","_targetDate$current","_targetDate$current2","_initialDate$current2","_initialDate$current3","_targetDate$current3","_initialDate$current4","_targetDate$current4","Date","initialBeforeSwitch","targetBeforeSwitch","date","DateFilter","setRange","label","displayEmpty","onOpen","ProjectsFilter","projectSelected","setProjectSelected","MobileAuthorsFilter","MobileCategoriesFilter","MobileDateFilter","dateSelected","setDateSelected","MobileProjectsFilter","MobileFilterDropdownContainer","dummyDataForProject","dummyDataForCategory","dummyDataForDate","dummyDataForAuthor","List","ListItemButton","handleClick","ListItemText","primary","ExpandLess","ExpandMore","timeout","unmountOnExit","TimelineFilterContainer","dynamicProjects","dynamicAuthors","dynamicCategories","setMobile","updateMedia","Button","handleAddEntry","textTransform","ExpandedTimelineContent","_id","descriptions","hyperlinks","contributors","updatedTime","categories","onClickDelete","colorOfProject","BorderColorIcon","DeleteIcon","moment","format","contr","ClosedTimelineContent","TimelineCommitBlock","expand","setExpand","ConfirmationDailog","deleteSnapshot","deleteSuccess","setDeleteSuccess","Dialog","DialogTitle","DialogContentText","Timeline","defaultFilter","commitsArray","setCommitArray","openDialog","setOpenDialog","idToDelete","setIdToDelete","projectFilterList","setProjectFilterList","itemsPerPage","setItemsPerPage","totalPages","setTotalPages","commitList","objCommitHTTPS","TimelineFilter","filterList","filterOBJ","listFilter","restFilters","lowercaseKeyword","values","Array","isArray","entries","totalItems","newTotalPages","Math","ceil","paginatedList","slice","prj","commit","replace","Pagination","count","newPage","delete","status","Error","findIndex","snapshot","tempArray","Promise","resolve","reject","deleteCommit","DefaultTimeline","setDProjects","setDAuthors","setDCategories","getProjectCommit","dummyProjects","dummyCategories","dummyAuthors","item2","timeLineDefaultFilter","ErrorPage","Group5","cursor","ResourceCards","Resources","AddResource","_form$touched$categor","_form$errors$category","_form$touched$categor2","_form$errors$category2","resourceCategory","handleSubmit","submitSuccessful","setSubmitSuccessful","schema","useMemo","yup","shape","main","sub","resource_link","matches","form","useFormik","initialValues","getFullYear","validationSchema","onSubmit","submitResults","resetForm","IoCloseSharp","onBlur","handleBlur","touched","errors","helperText","multiline","minRows","maxRows","select","cat","isValid","ResourceEntry","resource","deleteResource","editResource","resourceEntryContainer","imageContainer","FcStackOfPhotos","contentContainer","titleContainer","iconsContainer","owner","authorContainer","EditResource","ResourcePage","currentResource","resource_id","categoryHeaders","setCategoryHeaders","resources","setResources","setNavHeight","isAddMenuVisible","setAddMenuVisible","handleGetAllResourcesInCategory","getAllResourcesInCategory","newCategoryHeaderArr","subCatArr","setMessage","dialogMessage","setDialogMessage","openDeleteDialog","setOpenDeleteDialog","resourceToDelete","setResourceToDelete","resourceToEdit","setResourceToEdit","isEditMenuVisible","setIsEditMenuVisible","initDeleteResourceProcess","resourceId","handleDeleteDialogClose","openEditResource","reqBody","createResource","resourceAddedToSubCategory","_res$data","unshift","patch","updateResource","handleDeleteResource","transition","borderRight","resourcesOfSubCat","EditProfile","setWidth","handleWindowResize","mainContent","Divider","borderBottomWidth","Grid","container","spacing","profilePicture","blueBtn","greyBtn","xs","readOnly","hidden","disabled","placeholder","TitleInput","timeline","setTimeline","inputForm","String","DateInput","months","years","selectMonth","getMonth","newIndex","getDate","month","selectDay","Number","day","selectYear","year","ProjectInput","setActive","toggleProject","buttonContainer","CategoryInput","selectedCategories","toggleCategory","ContributorInput","tags","addTag","tag","tagBox","tagItem","text","close","el","removeTag","HyperlinkInput","DescriptionInput","Controls","save","cancelButton","addButton","AddTimelineEntry","showError","currentCategories","setCategories","finished","setFinished","currUser","isEmpty","trim","info","headers","header","subHeader","entryCompleteTitle","entryCompleteButton","gridContainer","basicInfo","projectInfo","categoryInfo","c","contributorInfo","descriptionInfo","controls","method","toISOString","errorMessageContainer","visibility","MdErrorOutline","errorMessageIcon","EditTimelineEntry","timeline_id","useParams","AppSwitch","_ROUTES$RESOURCES","_ROUTES$RESOURCES2","ModalWrapper","modal","modalKey","injectedProps","modalData","Modal","disableDefaultClose","cloneElement","GenericButton","rest","classes","classNames","LoginForm","InputAdornment","PersonIcon","LockIcon","LoginView","CloseIcon","handleUserLogin","user","pwd","handleOpenSignUpModal","LoginModal","SignUpFinalForm","schemaError","setSchemaError","usernameError","setUsernameError","tokenError","setTokenError","otherError","token","FormHelperText","str","char","toUpperCase","tokenKey","__","errCode","SignUpView","SignUpModal","Modals","Footer","ScrollToTop","App","Router","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","defaults","withCredentials","ReactDOM","StrictMode","Provider"],"mappings":"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","file":"static/js/main.934465cb.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ProjectInput_container__1cMR0\",\"title\":\"ProjectInput_title__1bPaH\",\"buttonContainer\":\"ProjectInput_buttonContainer__3qZp9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"CategoryInput_container__DaAnz\",\"title\":\"CategoryInput_title__3YI9U\",\"buttonContainer\":\"CategoryInput_buttonContainer__2d_my\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"cancelButton\":\"Controls_cancelButton__1nYjs\",\"addButton\":\"Controls_addButton__2FgzO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputForm\":\"TitleInput_inputForm__9nlVr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputForm\":\"DescriptionInput_inputForm__23crN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"AddTimelineEntry_container__2m5TL\",\"info\":\"AddTimelineEntry_info__2nl8V\",\"header\":\"AddTimelineEntry_header__sqefP\",\"subHeader\":\"AddTimelineEntry_subHeader__3pwr-\",\"basicInfo\":\"AddTimelineEntry_basicInfo__3ScQh\",\"projectInfo\":\"AddTimelineEntry_projectInfo__2yU36\",\"categoryInfo\":\"AddTimelineEntry_categoryInfo__27hQQ\",\"contributorInfo\":\"AddTimelineEntry_contributorInfo__1-9sf\",\"descriptionInfo\":\"AddTimelineEntry_descriptionInfo__2sMIc\",\"controls\":\"AddTimelineEntry_controls__y982d\",\"errorMessageContainer\":\"AddTimelineEntry_errorMessageContainer__1RkXF\",\"errorMessageIcon\":\"AddTimelineEntry_errorMessageIcon__ODl9R\",\"entryCompleteTitle\":\"AddTimelineEntry_entryCompleteTitle__1n-A3\",\"entryCompleteButton\":\"AddTimelineEntry_entryCompleteButton__20IdB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"EditTimelineEntry_container__1cgxu\",\"info\":\"EditTimelineEntry_info__1fdLr\",\"header\":\"EditTimelineEntry_header__3JZ8b\",\"subHeader\":\"EditTimelineEntry_subHeader__3tpKC\",\"basicInfo\":\"EditTimelineEntry_basicInfo__3B5EL\",\"projectInfo\":\"EditTimelineEntry_projectInfo__3Jg8s\",\"categoryInfo\":\"EditTimelineEntry_categoryInfo__qBGgW\",\"contributorInfo\":\"EditTimelineEntry_contributorInfo__36ZSR\",\"descriptionInfo\":\"EditTimelineEntry_descriptionInfo__6KSMd\",\"controls\":\"EditTimelineEntry_controls__2l32Q\",\"errorMessageContainer\":\"EditTimelineEntry_errorMessageContainer__6GFCg\",\"errorMessageIcon\":\"EditTimelineEntry_errorMessageIcon__3wIbR\"};","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { RootState } from '@redux/store';\nimport { CONSTANTS } from '@statics';\n\nexport interface ModalState {\n visible: boolean;\n data?: Object;\n}\n\nexport type ValidModalKey =\n typeof CONSTANTS.MODALS[keyof typeof CONSTANTS.MODALS];\n\ninterface AppState {\n isReady: boolean;\n inProjectsPage: boolean;\n modals: Record;\n alert: string | null;\n}\n\nconst initialState: AppState = {\n isReady: false,\n inProjectsPage: false,\n modals: {\n login: {\n visible: false,\n },\n signup: {\n visible: false,\n }\n },\n alert: null,\n};\n\nexport const appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setIsReady: (state, { payload }: PayloadAction) => {\n state.isReady = payload;\n },\n setInProjectsPage: (state, { payload }: PayloadAction) => {\n state.inProjectsPage = payload;\n },\n openModal: (\n state,\n {\n payload,\n }: PayloadAction<{\n key: ValidModalKey;\n data?: Object;\n }>\n ) => {\n state.modals[payload.key] = {\n visible: true,\n data: payload.data,\n };\n },\n closeModal: (\n state,\n { payload }: PayloadAction<{ key: ValidModalKey; data?: Object }>\n ) => {\n state.modals[payload.key] = {\n visible: false,\n data: payload.data,\n };\n },\n setAlert: (state, { payload }: PayloadAction) => {\n state.alert = payload;\n },\n },\n});\n\nexport const selectApp = (state: RootState) => state.app;\nexport const selectModal = (modalKey: ValidModalKey) => (state: RootState) =>\n state.app.modals[modalKey];\nexport const selectInProjectsPage = (state: RootState) => state.app.inProjectsPage;\n\nexport const appActions = appSlice.actions;\nexport default appSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { RootState } from '@redux/store';\nimport { UserType } from '@services/adapters/authAdapter';\n\ninterface AuthState {\n isLoggedIn: boolean;\n username?: string;\n permissions: UserType;\n isLoggingIn: boolean;\n}\n\nconst initialState: AuthState = {\n permissions: 'default',\n isLoggingIn: false,\n isLoggedIn: false,\n};\n\nexport const authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n setIsLoggedIn: (state) => {\n state.isLoggedIn = true;\n },\n setUsername: (state, { payload }: PayloadAction) => {\n state.username = payload;\n },\n setPermissions: (state, { payload }: PayloadAction) => {\n state.permissions = payload;\n },\n logout: (state) => {\n state.username = undefined;\n state.permissions = 'default';\n state.isLoggedIn = false;\n state.isLoggingIn = false;\n },\n setIsLoggingIn: (state, { payload }: PayloadAction) => {\n state.isLoggingIn = payload;\n },\n },\n});\n\nexport const selectAuth = (state: RootState) => state.auth;\n\nexport const selectIsLoggedIn = (state: RootState) =>\n state.auth.isLoggedIn;\nexport const selectIsLoggingIn = (state: RootState) => state.auth.isLoggingIn;\n\nexport const authActions = authSlice.actions;\nexport default authSlice.reducer;\n","import {RootState} from \"@redux/store\";\nimport {createSlice, PayloadAction} from \"@reduxjs/toolkit\"\nimport { Project } from '@entities/Project'\n\nexport interface ProjectState {\n isProjectLoading: boolean,\n projects: Project[]\n}\n\nconst initialState: ProjectState = {\n isProjectLoading: false,\n projects: []\n}\n\nexport const projectSlice = createSlice({\n name: 'project',\n initialState,\n reducers: {\n setIsProjectLoading: (state, { payload }: PayloadAction) => {\n state.isProjectLoading = payload;\n },\n setProjects: (state, { payload }: PayloadAction) => {\n state.projects = payload;\n },\n addProject: (state, { payload }: PayloadAction) => {\n state.projects.push(\n payload\n )\n },\n removeProject: (state, { payload }: PayloadAction) => {\n let index = state.projects.map((e) => e.name).indexOf(payload);\n if (index !== -1) {\n state.projects.splice(index);\n }\n },\n }\n});\n\nexport const selectProject = (state: RootState) => state.project;\nexport const selectProjects = (state: RootState) => state.project.projects;\nexport const selectIsProjectLoading = (state: RootState) => state.project.isProjectLoading;\n\nexport const projectActions = projectSlice.actions;\nexport default projectSlice.reducer;\n","import { combineReducers } from 'redux';\nimport { configureStore } from '@reduxjs/toolkit';\n\n// Reducer imports go here\nimport appReducer from './slices/AppRedux';\nimport authReducer from './slices/AuthRedux';\nimport projectReducer from './slices/ProjectRedux';\n\nconst rootReducer = combineReducers({\n app: appReducer,\n auth: authReducer,\n project: projectReducer\n});\n\nexport const store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: false,\n }),\n});\n\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\n","import axios from 'axios';\nimport dotenv from 'dotenv';\nimport type { BaseResponse } from './types';\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\n\nexport type UserType = 'default' | 'member' | 'admin';\n\ninterface LoginResponse extends BaseResponse {\n data?: {\n username: string;\n permissions: UserType;\n };\n}\n\n\nexport const loginUser = async (\n username: string,\n password: string\n): Promise => {\n try {\n const res = await axios.post(\n `${baseURL}/api/users/login`,\n {\n username,\n password,\n },\n {\n baseURL,\n },\n\n );\n\n return res.data as LoginResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n};\n\nexport const checkAuth = async (): Promise => {\n try {\n const res = await axios.get('/api/tokens/access_token', {\n baseURL,\n });\n\n return res.data as LoginResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n};\n\nexport const logoutUser = async (): Promise => {\n try {\n const res = await axios.post('/api/users/logout', null, {\n baseURL,\n });\n\n return res.data as BaseResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n};\n","import { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\nimport type { RootState, AppDispatch } from \"./store\";\n\n// Use throughout app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch();\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n","const baseRoutes = {\n HOME: '/',\n PROJECT: {\n PATH: '/projects/:project_id/',\n BASE: '/projects',\n OVERVIEW: '/projects/overview',\n },\n PROJECT_DESCRIPTION: '/',\n JOIN_OUR_TEAM: '/join',\n TEAM: '/team',\n CONTACT: '/contact',\n ABOUT: '/about',\n GET_INVOLVED: '/get_involved',\n PROJECT_PUBLICATIONS: '/publications',\n PEOPLE: '/people',\n AFFILIATIONS: '/affiliations',\n ERROR_PAGE: '*'\n} as const;\n\nconst timelineRoutes = {\n RESOURCES: {\n BASE: '/resources',\n PATH: '/resources/:resource_id'\n },\n TIMELINE: '/timeline',\n TIMELINE_EDIT: '/timeline/edit/:timeline_id',\n TIMELINE_ADD: '/timeline/add',\n PROJECT_TIMELINE: '/timeline',\n PROFILE: '/editprofile',\n} as const;\n\nconst ROUTES = {\n ...baseRoutes,\n ...timelineRoutes,\n} as const;\n\n\n\nexport default ROUTES;\n","const constants = {\n MIN_PASSWORD_LENGTH: 8,\n MIN_USERNAME_LENGTH: 4,\n PROJECTS: [\n { // dummy projects\n name: \"Coding Team\",\n color: \"#fece25\"\n }, {\n name: \"Correlation\",\n color: \"#6776fe\"\n }, {\n name: \"Ideo\",\n color: \"#f66364\"\n }, {\n name: \"Image Transitions\",\n color: \"#848484\"\n }, {\n name: \"NCIS\",\n color: \"#848484\"\n }, {\n name: \"NOVA\",\n color: \"#fece25\"\n }, {\n name: \"SHIVA\",\n color: \"#fece25\"\n }\n ],\n POSITIONS:[\n {name: \"Project Lead\", value:\"project-lead\"},\n {name: \"Project Secondary\", value:\"project-secondary\"},\n {name: \"Research Assistant\", value:\"research-assistant\"},\n {name: \"Co-pilot\", value:\"co-pilot\"},\n {name: \"Volunteer\", value:\"volunteer\"},\n\n ],\n MODALS: {\n LOGIN: 'login',\n SIGNUP: 'signup',\n },\n UBC_LOGO_URL: 'https://brand3.sites.olt.ubc.ca/files/2018/09/5NarrowLogo_ex_768.png',\n} as const;\n\nexport default constants;\n","import constants from \"./constants\";\n\nconst TEXT = {\n COMMON: {\n SUBMIT: \"Submit\",\n BACK: \"Back\",\n NEXT: \"Next\",\n TITLE: \"UBC Visual Cognition Lab\",\n LAB_TITLE_ONLY: \"Visual Cognition Lab\",\n LOGIN: \"Login/Register\",\n LOGOUT: \"Logout\",\n SIGNUP: \"Sign Up\",\n PROFILE: \"View Profile\",\n },\n\n LOGIN: {\n TITLE:\n \"Login\",\n USERNAME: \"Username\",\n USERNAME_EMPTY_ERROR: \"Username is required\",\n USERNAME_LENGTH_ERROR: `Minimum ${constants.MIN_USERNAME_LENGTH} characters`,\n PASSWORD: \"Password\",\n PASSWORD_EMPTY_ERROR: \"Password is required\",\n PASSWORD_LENGTH_ERROR: `Minimum ${constants.MIN_PASSWORD_LENGTH} characters`,\n CREATE_ACCOUNT: \"If you don\\'t have an account, \",\n CREATE_ACCOUNT_LINK: \"create one here.\"\n },\n\n SIGNUP: {\n TITLE: \"Create an Account\",\n FIRSTNAME: \"First Name\",\n FIRSTNAME_EMPTY_ERROR: \"First Name is required\",\n LASTNAME: \"Last Name\",\n LASTNAME_EMPTY_ERROR: \"Last Name is required\",\n PROJECT: \"Project\",\n PROJECT_EMPTY_ERROR: \"Project is required\",\n POSITION: \"Position\",\n POSITION_EMPTY_ERROR: \"Position is required\",\n USERNAME: \"Username\",\n USERNAME_EMPTY_ERROR: \"Username is required\",\n PASSWORD: \"Password\",\n PASSWORD_EMPTY_ERROR: \"Password is required\",\n TOKEN: \"Sign-up Token\",\n TOKEN_EMPTY_ERROR: \"Sign-up Token is required\",\n LOGIN_ACCOUNT: \"If you already have an account, \",\n LOGIN_ACCOUNT_LINK: \"login here.\"\n\n },\n\n PAGE_TITLES: {\n NAVIGATE: 'Navigate',\n HOME: 'Home',\n TIMELINE: 'Timeline',\n PROJECTS: 'Projects',\n OVERVIEW: 'Overview',\n ABOUT: 'About',\n RESOURCES: 'Resources',\n GET_INVOLVED: 'Get Involved',\n PROJECT_PUBLICATIONS: 'Publications',\n PROJECT_TIMELINE: 'Timeline',\n PEOPLE: 'People',\n AFFILIATIONS: 'Affiliations',\n },\n PROJECT_NAV: {\n PROJECT_DESCRIPTION: \"Project Description\",\n JOIN_OUR_TEAM: \"Join Our Team\",\n RESOURCES: \"Resources\",\n TEAM_AND_ALUMNI: \"Team & Alumni\",\n CONTACT: \"Contact\",\n PROJECT_TIMELINE: \"Timeline\",\n PROJECT_PUBLICATIONS: 'Publications',\n PEOPLE: 'People'\n },\n\n PROJECT_NAMES: {\n CORRELATION: \"Correlation\",\n IDEO: \"Ideo\",\n IMG_TRANSITIONS: \"Image Transitions\",\n NOVA: \"NOVA\",\n SHIVA: \"SHIVA\",\n NCIS: \"NCIS\",\n CODING_TEAM: \"Coding Team\"\n },\n\n ALERTS: {\n AUTH_SUCCESS: \"Authentication successful.\",\n AUTH_FAILED: \"Authentication failed.\",\n LOGIN_SUCCESS: \"Successfully logged in.\",\n LOGOUT_SUCCESS: \"Successfully logged out.\",\n },\n\n LAB_INFO: {\n TEL_TEXT: \"Tel\",\n TEL: \"604 822 9653\",\n FAX_TEXT: \"Fax\",\n FAX: \"604 822 6923\",\n EMAIL: \"vclmanager@gmail.com\",\n LAB_TEXT: \"Lab\",\n DR_RENSINK: \"Dr. Rensink\",\n DRRENSINK_CONTACT: \"rensink@psych.ubc.ca\",\n ADMIN_CONTACT: {\n DANIEL: \"\",\n SARA: \"\",\n SOGOL: \"\",\n },\n CAMPUS: \"Vancouver Campus\",\n ADDRESS_LINE_ONE: \"3204 - 2136 West Mall\",\n ADDRESS_LINE_TWO: \"Vancouver, BC Canada V6T 1Z4\",\n HOURS: {\n WEEKDAYS: \"Weekdays: 9AM-5PM\",\n WEEKENDS: \"Closed\",\n },\n },\n\n LANDING_PAGE: {\n TITLE: \"Visual Cognition Lab\",\n DESCRIPTION:\n \"What is the Visual Cognition Lab? We investigate visual intelligence – \" +\n \"the way in which the human visual system uses the light entering the eyes to create a variety of perceptual experiences.\",\n UBC_PAGE_BUTTON: \"Official UBC Home Page\",\n MISSION_STATEMENT: {\n TITLE: \"Mission Statement\",\n LAB_GOALS:\n \"Our mission is to provide opportunities to learn about scientific research in a positive working environment that encourages open lines of communication, group cohesion, and most of all, respect for everyone. We strive towards personal and professional excellence in pursuit of scientific knowledge. Instead of perfection, we value constant evolution towards improvement, both on an individual and a lab-wide basis – and in doing so, we aim to become a role model for other labs by setting the standards of a professional research laboratory.\",\n },\n CURRENT_PROJECTS: {\n TITLE: \"Current Projects\",\n },\n },\n\n TIMELINE_PAGE: {\n TITLE: \"Timeline\",\n SUBHEADER: \"Browse project history and detailed updates\",\n ERROR_MESSAGE: \"Something went wrong :(\",\n },\n\n ABOUT_PAGE: {\n MAIN: {\n DESCRIPTION: {\n P1: \"The UBC Visual Cognition Lab is a vision science lab in the Psychology Department of the University of British Columbia. Dr. Ronald A. Rensink is the principal investigator. We investigate visual intelligence – the way in which the human visual system uses the light entering the eyes to create a variety of perceptual experiences. We are interested both in exploring the mechanisms that carry this out, and the ways in which this knowledge can help with the design of effective visual displays.\",\n },\n PHILOSOPHY: {\n HEADER: \"Our Philosophy\",\n P1: '\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"',\n P2: '\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"',\n },\n RESPONSIBILITIES: {\n HEADER: \"Our Responsibilities\",\n SUBHEADER:\n \"As a member of the lab, you will be asked to think critically, show initiative in research, and actively participate in the lab. You should respond to your project leader's directives - they are also responsible for supporting you in your role. Your personal responsibilities include:\",\n\n R1: \"Develop a deep understanding of your project and tasks\",\n R2: \"Collect high-quality data\",\n R3: \"Treat everyone with respect and help others in the lab whenever needed\",\n R4: \"Keep yourself informed about lab-related issues\",\n R5: \"Attend lab meetings whenever possible\",\n },\n VALUES: {\n HEADER: \"Our Core Values\",\n VALUE_1: \"Treating everyone with respect\",\n VALUE_2: \"Maintaining a positive environment\",\n VALUE_3: \"Constant evolution in pursuit of scientific knowledge\",\n },\n },\n BP_PLACEHOLDER:\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\n GAIN_SECTION: {\n HEADER: \"Who is this for?\",\n DIRECTED_STUDIES: {\n HEADER: \"Directed Studies\",\n DESCRIPTION:\n \"Take ownership of your own project. Typically for COGS 402, but we welcome other forms of directed studies too\",\n },\n RESEARCH_EXP: {\n HEADER: \"Research Experience\",\n DESCRIPTION: \"If you want to obtain professional research experience\",\n },\n GRADUATE_STUDENTS: {\n HEADER: \"Graduate Students\",\n DESCRIPTION:\n \"Complete a Master's thesis or PhD dissertation related directly to the lab's research goals\",\n },\n GLOBAL_RESEARCH: {\n HEADER: \"Global Research\",\n DESCRIPTION:\n \"Collaborate with other cutting-edge labs researching visual cognition\",\n },\n },\n },\n PROJECT_JOIN: {\n HOME_SECTION: {\n TITLE: \"Join our Team\",\n INTEREST:\n \"Interested in research? Good news, we're always looking for new co-pilots.\",\n COPILOT_DESCRIPTION:\n \"Co-Pilots sign a contract with the lab that lasts for a school term, with the possibility for renewal. Co-Pilots are assigned to a particular project team based on their interests, but have the freedom to explore different projects.\",\n RESEARCH_BACKGROUND:\n \"No background in research is needed, and Co-Pilots have the flexibility of helping out whenever they want!\",\n APPPLICATION_INSTRUCTION: \"Application Instructions\",\n },\n WHAT_WE_DO: {\n TITLE: \"What We Do\",\n DESCRIPTION_1:\n \"In a scatter plot, data is translated into a graphic form by placing points on a cartesian (x-y) coordinate plane according to their values on each variable. Correlation in a scatter-plot corresponds to the degree to which the points form a straight line.\",\n DESCRIPTION_2:\n \"Scatter plots represent the variability in a data set with a single visual variable, position, but there are others (ie: size, color, texture, and brightness) which could be used instead. For example, consider the two ring strip-plots below. They represent the same data-set as the scatter plots above, but they use ring-size rather than y-position to represent variability in one of the variables.\",\n },\n YOU_MIGHT_LIKE: {\n TITLE: \"You might like this if you like...\",\n },\n PAST_POSITIONS_AND_PROJECTS: {\n TITLE: \"Past Projects\",\n VCL_WEB_APP: {\n TITLE: \"VCL Web-App\",\n DESCRIPTION:\n \"Include a short description of what this project is about, what roles people took on, etc.\",\n },\n PROJECT1: {\n TITLE: \"Project 1\",\n DESCRIPTION:\n \"Include a short description of what this project is about, what roles people took on, etc.\",\n },\n PROJECT2: {\n TITLE: \"Project 2\",\n DESCRIPTION:\n \"Include a short description of what this project is about, what roles people took on, etc.\",\n },\n },\n MEMBER_TESTIMONIALS: {\n TITLE: \"What our team members say\",\n },\n APPLICATION_INSTRUCTIONS: {\n TITLE: \"Application Instructions\",\n STEP1: {\n TITLE: \"Step 1\",\n TEXT: \"Head over to the Orientation page to see if our lab philosophy matches yours\",\n },\n STEP2: {\n TITLE: \"Step 2\",\n TEXT: \"Email vclmanager@gmail.com with “VCL Co-Pilots” as subject, and include:\",\n BULLET_POINTS: {\n BULLET_1: \"Resume/CV\",\n BULLET_2: \"List of relevant courses you have taken so far\",\n BULLET_3: \"Research projects you’re interested in and why\",\n },\n },\n },\n },\n PEOPLE_PAGE: {\n EMPTY_MEMBER_LIST: \"No Members Found Here, Try Another Section!\",\n EMPTY_ALUMNI_LIST: \"No Alumni Members In This Section!\",\n RESPONSE_ERROR: \"Something Went Wrong! Check Your Connection!\"\n },\n PROJECT_TEAM_PAGE: {\n EMPTY_MEMBER_LIST: 'This Project has no Team Members',\n EMPTY_ALUMNI_LIST: 'This Project has no Alumni',\n RESPONSE_ERROR: \"Something Went Wrong! Check Your Connection!\"\n },\n RESOURCE_PAGE: {\n EMPTY_DISPLAY_LIST: \"No Resources Found Here, Try Another Category!\",\n RESPONSE_ERROR: \"Something Went Wrong! Check Your Connection!\",\n TITLE_EMPTY_ERROR: \"Please provide a title for the resource\",\n AUTHOR_EMPTY_ERROR: \"Please provide the author(s) for the resource\",\n LINK_EMPTY_ERROR: \"Please provide a link to the resource\",\n INVALID_URL_LINK_ERROR: 'Please enter a valid url',\n CATEGORY_EMPTY_ERROR: \"Please select a category for the resource\"\n }\n\n} as const;\n\nexport default TEXT;\n","import ROUTES from \"./routes\";\nimport TEXT from \"./text\";\n\nconst baseNav = [\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.HOME,\n\t\tREF: ROUTES.HOME\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.PROJECTS,\n\t\tREF: ROUTES.PROJECT.BASE\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.PEOPLE,\n\t\tREF: ROUTES.PEOPLE\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.GET_INVOLVED,\n\t\tREF: ROUTES.GET_INVOLVED\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.AFFILIATIONS,\n\t\tREF: ROUTES.AFFILIATIONS\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.RESOURCES,\n\t\tREF: ROUTES.RESOURCES!.BASE\n\t},\n\t{\n\t\tTITLE: TEXT.PAGE_TITLES.TIMELINE,\n\t\tREF: ROUTES.TIMELINE\n\t},\n];\n\nconst NAV = baseNav;\n\nexport default NAV;","import React, { useEffect, useState } from 'react';\nimport { loginUser, checkAuth, logoutUser } from './adapters/authAdapter';\nimport { useAppSelector, useAppDispatch } from '@redux/hooks';\nimport { selectAuth, authActions } from '@redux/slices/AuthRedux';\nimport { appActions } from '@redux/slices/AppRedux';\nimport { TEXT } from '@statics';\n\nexport const useHandleCheckAuth = () => {\n const dispatch = useAppDispatch();\n\n const handleCheckAuth = () => {\n checkAuth()\n .then((res) => {\n if (res.data) {\n dispatch(authActions.setIsLoggedIn());\n dispatch(authActions.setUsername(res.data.username));\n dispatch(authActions.setPermissions(res.data.permissions));\n\n dispatch(appActions.setAlert(TEXT.ALERTS.AUTH_SUCCESS));\n } else {\n dispatch(authActions.logout());\n dispatch(\n appActions.setAlert(TEXT.ALERTS.AUTH_FAILED)\n );\n }\n })\n .catch(() => console.error('Error: authService.ts checkAuth call'));\n };\n\n React.useEffect(() => {\n handleCheckAuth();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\n\nexport const useHandleLogin = () => {\n const dispatch = useAppDispatch();\n\n const [isFetching, setIsFetching] = useState(false);\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n\n // Cleanup state for component unmounting\n useEffect(() => {\n return () => {\n setIsFetching(false);\n setError(null);\n setSuccess(null);\n };\n }, []);\n\n const handleLogin = async (username: string, password: string) => {\n setIsFetching(true);\n dispatch(authActions.setIsLoggingIn(true));\n\n loginUser(username, password)\n .then((res) => {\n if (res.data) {\n dispatch(authActions.setIsLoggedIn());\n dispatch(authActions.setUsername(res.data.username));\n dispatch(authActions.setPermissions(res.data.permissions));\n\n dispatch(appActions.setAlert(TEXT.ALERTS.LOGIN_SUCCESS));\n\n setSuccess(res.message);\n setError(null);\n } else {\n setSuccess(null);\n setError(res.message);\n }\n })\n .then(() => {\n setIsFetching(false);\n dispatch(authActions.setIsLoggingIn(false));\n })\n .catch(() => console.error('Error: authService.ts loginUser call'));\n };\n\n return { handleLogin, isFetching, error, success };\n};\n\nexport const useHandleLogout = () => {\n const dispatch = useAppDispatch();\n\n const { isLoggingIn } = useAppSelector(selectAuth);\n\n const logout = async () => {\n if (!isLoggingIn) {\n logoutUser()\n .then(() => {\n dispatch(authActions.logout());\n dispatch(appActions.setAlert(TEXT.ALERTS.LOGOUT_SUCCESS));\n })\n .catch(() => console.error('Error: authService.ts logoutUser call'));\n }\n };\n\n return { logout };\n};\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgSearchIcon(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 22,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.0493 19.2807L19.3038 15.4881C19.1505 15.3329 18.9686 15.2098 18.7683 15.1258C18.5681 15.0418 18.3534 14.9985 18.1367 14.9985C17.9199 14.9985 17.7053 15.0418 17.505 15.1258C17.3048 15.2098 17.1228 15.3329 16.9696 15.4881L15.3193 13.8171C16.6592 12.1581 17.3181 10.041 17.1597 7.90375C17.0013 5.76655 16.0376 3.77278 14.4681 2.33485C12.8985 0.896923 10.8432 0.124869 8.72721 0.178389C6.61124 0.231909 4.59654 1.10691 3.09986 2.62239C1.60317 4.13787 0.739025 6.17788 0.686169 8.32043C0.633313 10.463 1.39579 12.5441 2.81588 14.1334C4.23597 15.7226 6.20502 16.6984 8.31571 16.8588C10.4264 17.0192 12.5172 16.3521 14.1557 14.9953L15.806 16.6663C15.6527 16.8215 15.5311 17.0057 15.4482 17.2085C15.3652 17.4112 15.3225 17.6286 15.3225 17.848C15.3225 18.0675 15.3652 18.2849 15.4482 18.4876C15.5311 18.6904 15.6527 18.8746 15.806 19.0298L19.5516 22.8224C20.0156 23.2917 20.6446 23.5554 21.3004 23.5554C21.9563 23.5554 22.5853 23.2917 23.0493 22.8224C23.5128 22.3526 23.7732 21.7156 23.7732 21.0516C23.7732 20.3875 23.5128 19.7505 23.0493 19.2807ZM2.32754 8.5226C2.32754 7.20098 2.71458 5.90904 3.43973 4.81015C4.16487 3.71127 5.19555 2.85479 6.40142 2.34903C7.6073 1.84327 8.93421 1.71093 10.2144 1.96877C11.4945 2.22661 12.6704 2.86303 13.5933 3.79755C14.5163 4.73208 15.1448 5.92274 15.3994 7.21896C15.6541 8.51519 15.5234 9.85876 15.0239 11.0798C14.5244 12.3008 13.6785 13.3444 12.5933 14.0787C11.508 14.8129 10.2321 15.2048 8.92688 15.2048C7.17663 15.2048 5.49806 14.5008 4.26044 13.2477C3.02283 11.9945 2.32754 10.2948 2.32754 8.5226ZM21.8866 21.6451C21.732 21.8008 21.5229 21.8881 21.3049 21.8881C21.0869 21.8881 20.8777 21.8008 20.7231 21.6451L16.9776 17.8525L18.1411 16.6744L21.8866 20.467C22.0404 20.6235 22.1266 20.8353 22.1266 21.0561C22.1266 21.2768 22.0404 21.4886 21.8866 21.6451Z\",\n fill: \"black\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSearchIcon);\nexport default __webpack_public_path__ + \"static/media/search-icon.4ad79b65.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/vcl-logo-2023.1cb680b0.png\";","import React from 'react';\nimport { Link } from 'react-router-dom';\n\ninterface LinkProps {\n name: string;\n to: string;\n className?: string;\n onClickHandler?: () => void;\n}\n\nconst GenericLink: React.FC = (props) => {\n const { name , to, className, onClickHandler } = props;\n\n return (\n \n {name}\n \n )\n\n}\n\nexport default GenericLink;\n","import { IconButton, Menu, MenuItem } from \"@mui/material\";\nimport { useAppSelector, useAppDispatch } from \"@redux/hooks\";\nimport { appActions } from \"@redux/slices/AppRedux\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\nimport { useHandleLogout } from \"@services/authService\";\nimport { CONSTANTS, TEXT, ROUTES } from \"@statics\";\nimport AccountCircleIcon from \"@mui/icons-material/AccountCircle\";\nimport LogoutIcon from \"@mui/icons-material/Logout\";\nimport LoginIcon from \"@mui/icons-material/Login\";\nimport React from \"react\";\nimport styles from \"./ProfileDropdown.module.css\";\nimport GenericLink from \"@components/generics/Link\";\n\nconst IS_WIP = process.env.REACT_APP_WIP === \"development\";\n\nexport default function ProfileDropdown() {\n\tconst [anchorEl, setAnchorEl] = React.useState(null);\n\tconst isLoggedIn = useAppSelector(selectIsLoggedIn);\n\tconst { logout } = useHandleLogout();\n\tconst dispatch = useAppDispatch();\n\n\t// HANDLERS\n\t// handles closing login modal\n\tconst handleMenuClose = () => {\n\t\tsetAnchorEl(null);\n\t};\n\n\tconst handleOpenLoginModal = () => {\n\t\tdispatch(\n\t\t\tappActions.openModal({\n\t\t\t\tkey: CONSTANTS.MODALS.LOGIN,\n\t\t\t})\n\t\t);\n\t\thandleMenuClose(); // this makes no difference?\n\t};\n\n\tconst handleLogout = () => {\n\t\tlogout();\n\t\thandleMenuClose();\n\t};\n\n\tconst handleMenuClick = (event: React.MouseEvent) => {\n\t\tsetAnchorEl(event.currentTarget);\n\t};\n\n\tReact.useEffect(() => {\n\t\tfunction handleResize() {\n\t\t\thandleMenuClose();\n\t\t}\n\t\t// Add event listener\n\t\twindow.addEventListener(\"resize\", handleResize);\n\n\t\t// Remove event listener on cleanup\n\t\treturn () => window.removeEventListener(\"resize\", handleResize);\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{\" \"}\n\t\t\t\t{\" \"}\n\t\t\t\n\t\t\t\n\t\t\t\t{isLoggedIn ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{TEXT.COMMON.LOGOUT}

\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{TEXT.COMMON.LOGIN}

\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\n\t\t\n\t);\n}\n","import React from \"react\";\nimport { AppBar, IconButton } from \"@mui/material\";\nimport { TEXT } from \"@statics\";\nimport { useAppSelector } from \"@redux/hooks\";\nimport { selectInProjectsPage } from \"@redux/slices/AppRedux\";\nimport \"./MobileNavbar.css\";\nimport { ReactComponent as SearchIcon } from \"@statics/images/search-icon.svg\";\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\nimport NAV from \"@statics/nav\";\nimport { Drawer, styled } from \"@mui/material\";\nimport { GiHamburgerMenu } from \"react-icons/gi\";\nimport { useHistory } from \"react-router-dom\";\nimport ProfileDropdown from \"@components/ProfileDropdown\";\n\n// Component that allows the dropdown menu to appear from the top of the screen and gives it\n// the transition animation\nconst DropdownMenu = styled(Drawer)`\n @media only screen and (min-width: 1024px) {\n display: none;\n }\n`;\n\nconst MobileNavbar = () => {\n const history = useHistory();\n\n const inProjectsPage = useAppSelector(selectInProjectsPage);\n\n // State of the dropdown menu, when true menu is open, false menu is closed\n const [open, setOpen] = React.useState(false);\n\n const closeDropdown = () => {\n setOpen(false);\n };\n\n // search button\n const handleSearchButtonClick = (\n event: React.MouseEvent\n ) => {\n // todo\n };\n\n return (\n
\n \n
\n \"VCL\n
{TEXT.COMMON.TITLE}
\n
\n
\n
\n \n \n \n
\n {\n setOpen(true);\n }}\n >\n \n
\n {NAV.map((item, index) => {\n return (\n {\n history.push(item.REF!)\n closeDropdown()\n }}\n >\n {item.TITLE}\n
\n );\n })}\n
\n \n
\n \n
\n
\n \n \n );\n};\n\nexport default MobileNavbar;\n","interface Resource {\n name: string,\n page_title: string,\n subcategories?: string[]\n}\nexport const RESOURCES: Resource[] = [\n {\n name: \"COGS 402\",\n page_title: \"COGS 402 Projects\",\n },\n {\n name: \"Skills Workshops\",\n page_title: \"Skills Workshops\",\n subcategories: [\n 'Coding',\n 'Storytelling',\n 'Data Science',\n 'Presentation Skills',\n 'Diversity'\n ]\n },\n {\n name: \"Research Project\",\n page_title: \"Research Project Presentations\",\n },\n {\n name: \"Career Workshops\",\n page_title: \"Career Workshops\",\n subcategories: [\n 'Management Skills',\n 'Interview Skills',\n 'Resume Building',\n 'Networking',\n 'Grad School'\n ]\n }\n]\n\nexport default RESOURCES;","\n\n// prevents menu items with hover transformations from running before dropdown fully opens\nfunction setNoHover() {\n const els = document.getElementsByClassName(\"item-hoverable\");\n for (let i = 0; i < els.length; i++) {\n els[i].classList.add(\"no-hover\");\n }\n}\n\n// stops the event from propagating to parent\nfunction stopTransitionEventPropagation(e: React.TransitionEvent) {\n e.stopPropagation();\n}\n\n\n// dynamically determines dropdown menu width on open and maintains that initial width when hovering menu items\n// child elements with transition events will pass those up. to prevent this, child elements with transitions \n// call stopTransitionEventPropagation()\nconst setMenuSizeAfterTransition = () => {\n const menuContainerPaper: HTMLDivElement | null | undefined = document.getElementById(\"basic-menu\")?.querySelector(\".MuiList-root\");\n if (menuContainerPaper && !menuContainerPaper.style.width || menuContainerPaper?.style.width === \"calc(100% + 0px)\") {\n menuContainerPaper.style.width = menuContainerPaper.getBoundingClientRect().width.toString() + \"px\";\n const els = document.getElementsByClassName(\"item-hoverable\");\n for (let i = 0; i < els.length; i++) {\n els[i].classList.remove(\"no-hover\");\n }\n }\n}\n\nexport { setNoHover, stopTransitionEventPropagation, setMenuSizeAfterTransition }\n","import GenericLink from \"@components/generics/Link\";\nimport { Menu, MenuItem } from \"@mui/material\";\nimport { TEXT, CONSTANTS } from \"@statics\";\nimport RESOURCES from \"@statics/resources\";\nimport ROUTES from \"@statics/routes\";\nimport React from \"react\";\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\nimport { setMenuSizeAfterTransition, setNoHover, stopTransitionEventPropagation } from \"../utils/utils\";\nimport { useLocation } from \"react-router-dom\";\n\n// INTERFACES AND TYPES \ninterface props {\n active: string,\n refs: string,\n}\n\n// type definition for close handlers\ntype OnCloseHandler = () => void;\n\n\nexport default function LinkWithMenu({ active, refs }: props) {\n \n // hook from react-router-dom to track active page\n const location = useLocation();\n\n // STATES\n const [projectAnchorEl, setProjectAnchorEl] = React.useState(null);\n const projectOpen = Boolean(projectAnchorEl);\n\n const [resourceAnchorEl, setResourceAnchorEl] = React.useState(null);\n const resourceOpen = Boolean(resourceAnchorEl);\n\n // HANDLERS\n const handleProjectMenuOpen = ( event: React.MouseEvent) => {\n setProjectAnchorEl(event.currentTarget);\n };\n\n const handleResourceMenuOpen = ( event: React.MouseEvent) => {\n setResourceAnchorEl(event.currentTarget);\n };\n\n const handleProjectMenuClose = () => { setProjectAnchorEl(null); };\n\n const handleResourceMenuClose = () => { setResourceAnchorEl(null); };\n\n let title: string;\n let baseRoute: string;\n let namesArray;\n let handleClose: OnCloseHandler;\n let handleOpen: React.MouseEventHandler;\n let menuOpen: boolean;\n let anchorEl: HTMLElement | null;\n switch (refs) {\n case ROUTES.PROJECT.BASE:\n title = TEXT.PAGE_TITLES.PROJECTS;\n baseRoute = ROUTES.PROJECT.BASE;\n namesArray = CONSTANTS.PROJECTS;\n handleClose = handleProjectMenuClose;\n handleOpen = handleProjectMenuOpen;\n menuOpen = projectOpen;\n anchorEl = projectAnchorEl;\n break;\n default:\n title = TEXT.PAGE_TITLES.RESOURCES;\n baseRoute = ROUTES.RESOURCES!.BASE;\n namesArray = RESOURCES;\n handleClose = handleResourceMenuClose;\n handleOpen = handleResourceMenuOpen;\n menuOpen = resourceOpen;\n anchorEl = resourceAnchorEl;\n }\n\n return (\n \n {/* \"button\" part of dropdown */}\n
\n \n {title}\n \n \n
\n\n {/* actual drop down menu */}\n \n \n \n
\n
\n {namesArray.map((menuItem, i) => {\n return (\n \n \n \n );\n })}\n \n
\n );\n}\n\n","import GenericLink from \"@components/generics/Link\";\nimport { NAV, TEXT } from \"@statics\";\nimport LinkWithMenu from \"./LinkWithMenu\";\nimport { IconButton } from \"@mui/material\";\nimport { ReactComponent as SearchIcon } from \"@statics/images/search-icon.svg\";\nimport { useLocation } from \"react-router-dom\";\nimport ProfileDropdown from \"@components/ProfileDropdown\";\nimport { useAppSelector } from \"@redux/hooks\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\n\ninterface props {\n\tIS_WIP: boolean;\n}\n\nexport default function NavbarLinks({ IS_WIP }: props) {\n\t// Hook from react-router-dom to track active page\n\tconst location = useLocation();\n\tconst isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n\tconst handleSearchBtnClick = () => {\n\t\t// todo\n\t};\n\n\treturn (\n\t\t\n\t\t\t{NAV.map(({ TITLE, REF }, index) => {\n\t\t\t\tlet active = REF === location.pathname ? \"active\" : \"\";\n\t\t\t\tif (isLoggedIn) {\n\t\t\t\t\tswitch (TITLE) {\n\t\t\t\t\t\tcase \"Resources\":\n\t\t\t\t\t\t\tactive = location.pathname.includes(REF) ? \"active\" : \"\";\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\tcase \"Projects\":\n\t\t\t\t\t\t\tactive = location.pathname.includes(REF) ? \"active\" : \"\";\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (TITLE) {\n\t\t\t\t\t\tcase \"Resources\":\n\t\t\t\t\t\t\treturn <>;\n\t\t\t\t\t\tcase \"Timeline\":\n\t\t\t\t\t\t\treturn <>;\n\t\t\t\t\t\tcase \"Projects\":\n\t\t\t\t\t\t\tactive = location.pathname.includes(REF) ? \"active\" : \"\";\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})}\n\n\t\t\t{/* Search icon */}\n\t\t\t{IS_WIP && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\n\t);\n}\n","import { ROUTES, TEXT } from \"@statics\";\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\n\nconst IS_WIP = true\n\nexport default function Logo() {\n\n return (\n \n )\n}","\nimport React, { useState, useEffect } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { NAV, TEXT, CONSTANTS, ROUTES } from \"@statics\";\nimport RESOURCES from \"@statics/resources\";\nimport { useHandleLogout } from \"@services/authService\";\nimport { useAppDispatch, useAppSelector } from \"@redux/hooks\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\nimport GenericLink from \"@components/generics/Link\";\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\nimport { Toolbar, } from \"@mui/material\";\nimport { selectInProjectsPage } from \"@redux/slices/AppRedux\";\nimport \"./Navbar.css\";\nimport MobileMenu from \"@components/MobileNavbar\";\nimport NavbarLinks from \"./NavbarComponents/NavbarLinks\";\nimport Logo from \"./NavbarComponents/Logo\";\nrequire(\"dotenv\").config();\n\n// export this somewhere? sounds like a shared state\nconst IS_WIP = process.env.REACT_APP_WIP === \"development\";\n\nconst Navbar: React.FC<{}> = () => {\n const location = useLocation();\n const history = useHistory()\n const { logout } = useHandleLogout();\n const dispatch = useAppDispatch();\n\n const inProjectsPage = useAppSelector(selectInProjectsPage);\n return (\n
\n \n \n \n \n \n
\n );\n};\n\nexport default Navbar;","import axios from 'axios'\nimport dotenv from 'dotenv'\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\n\nexport default class ProjectAPI {\n static async getAllProjects(): Promise {\n try {\n const response = await axios.get(\"/api/projects\", {\n baseURL,\n });\n return response;\n } catch (e) {\n throw e;\n }\n }\n\n static async getProjectByName(name: string): Promise {\n try {\n const response = await axios.get(`/api/projects/${name}`, {\n baseURL,\n });\n return response;\n } catch (e) {\n throw e;\n }\n }\n}\n","import type { BaseResponse } from './types'\nimport projectAPI from '../api/projectAPI'\nimport { Project } from '@entities/Project'\n\n// array of projects\nexport interface ProjectsResponse extends BaseResponse {\n data? : Project[]\n} \n\n// single project\nexport interface ProjectResponse extends BaseResponse {\n data?: Project\n}\n\nexport const callGetAllProjectsAPI = async (): Promise => {\n try {\n const res = await projectAPI.getAllProjects()\n return res.data as ProjectsResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}\n\nexport const callGetProjectByNameAPI = async (name: string): Promise<[ProjectResponse, boolean]> => {\n try {\n const res = await projectAPI.getProjectByName(name);\n return [res.data as ProjectResponse, false];\n } catch (err: any) {\n return [err.response.data as BaseResponse, true];\n }\n}","import { useEffect }from 'react';\nimport { useAppDispatch } from '@redux/hooks';\nimport { projectActions } from '@redux/slices/ProjectRedux';\nimport { appActions } from '@redux/slices/AppRedux';\nimport { callGetAllProjectsAPI } from '@services/adapters/projectAdapter'\n\nexport const useHandleGetAllProjects = () => {\n const dispatch = useAppDispatch();\n dispatch(projectActions.setIsProjectLoading(true));\n\n const handleGetAllProjects = async () => {\n callGetAllProjectsAPI()\n .then((res) => {\n if (res.data) {\n dispatch(projectActions.setProjects(res.data)) \n } else {\n dispatch(appActions.setAlert(res.message));\n }\n })\n .then(() => {\n dispatch(projectActions.setIsProjectLoading(false))\n })\n .catch(() => {\n console.error('Error: projectService.ts getAllProjects call')\n })\n }\n\n useEffect(() => {\n handleGetAllProjects();\n }, []);\n}\n","import React from \"react\";\nimport { TEXT } from \"@statics\";\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\nimport \"./LandingPage.css\";\n\nconst LandingPage = () => {\n return (\n
\n
\n
{TEXT.LANDING_PAGE.TITLE}
\n
{TEXT.LANDING_PAGE.DESCRIPTION}
\n
\n
\n \n {/*
*/}\n
\n
\n );\n};\n\nexport default LandingPage;\n","export default __webpack_public_path__ + \"static/media/kenny-map.573e48f1.png\";","import SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\nimport \"./Card.css\";\n\ninterface CardProps {\n title: string,\n desc: string,\n backgroundColor?: string,\n}\n\nconst defaultProps: CardProps = {\n title: '',\n desc: '',\n backgroundColor: '#ffffff'\n}\n\nconst Card = ({ title, desc, backgroundColor}: CardProps) => {\n return (\n
\n
\n \n
\n

{title}

\n

{desc}

\n
\n );\n};\n\nCard.defaultProps = defaultProps;\n\nexport default Card;\n","import React from 'react';\nimport { TEXT } from '@statics';\nimport './LabGoalsFooter.css'\n\nconst MissionStatement = () => {\n return (\n\n
\n
\n

{TEXT.LANDING_PAGE.MISSION_STATEMENT.LAB_GOALS}

\n
\n\n )\n}\n\nexport default MissionStatement;","import Grid from \"@mui/material/Grid\";\nimport React from \"react\";\nimport \"./About.css\";\nimport { TEXT } from \"@statics\";\nimport kennyMap from \"@statics/images/kenny-map.png\";\nimport Card from \"@components/Card\";\nimport Footer from \"@components/Footer\";\nimport MissionStatement from \"@components/LabGoalsFooter\";\n\ninterface AboutProps {}\n\nconst About: React.FC = (props) => {\n return (\n
\n
\n

About the Visual Cognition Lab

\n
\n
\n
\n

\n {TEXT.ABOUT_PAGE.MAIN.DESCRIPTION.P1}\n

\n
\n

{TEXT.ABOUT_PAGE.MAIN.VALUES.HEADER}

\n
    \n
  • {TEXT.ABOUT_PAGE.MAIN.VALUES.VALUE_1}
  • \n
  • {TEXT.ABOUT_PAGE.MAIN.VALUES.VALUE_2}
  • \n
  • {TEXT.ABOUT_PAGE.MAIN.VALUES.VALUE_3}
  • \n
\n
\n
\n

\n {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.HEADER}\n

\n

\n {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.SUBHEADER}\n

\n
    \n
  • {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.R1}
  • \n
  • {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.R2}
  • \n
  • {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.R3}
  • \n
  • {TEXT.ABOUT_PAGE.MAIN.RESPONSIBILITIES.R4}
  • \n
\n
\n
\n
\n

{TEXT.ABOUT_PAGE.GAIN_SECTION.HEADER}

\n
\n \n \n \n \n
\n
\n
\n
\n \"map\"\n
\n
\n

Contact Us

\n

\n We are located in the{\" \"}\n \n Department of Psychology\n {\" \"}\n at the{\" \"}\n \n University of British Columbia.\n \n

\n

\n Address
\n

\n {TEXT.LAB_INFO.ADDRESS_LINE_ONE}
\n {TEXT.LAB_INFO.ADDRESS_LINE_TWO}\n

\n

\n

\n Tel {TEXT.LAB_INFO.TEL}
\n Fax {TEXT.LAB_INFO.FAX}\n

\n

\n Contact\n

\n
    \n
  • \n Lab: {TEXT.LAB_INFO.EMAIL}\n
  • \n
  • \n Dr. Rensink: {TEXT.LAB_INFO.DRRENSINK_CONTACT}\n
  • \n
\n

\n Lab Hours
\n Weekdays: 9AM-5PM
\n Weekends: Closed\n

\n
\n
\n \n
\n );\n};\n\nexport default About;\n","import { useEffect, useState, useCallback } from 'react';\nimport './ProjectGallery2.css';\nimport { GALLERY_ITEM } from '@statics/projectsV2';\nimport { ImQuotesLeft, ImQuotesRight } from \"react-icons/im\";\nimport { IoIosArrowDropleft, IoIosArrowDropright } from \"react-icons/io\";\n\n\nconst AUTO_TIME = 5; // Seconds.\n\ninterface CarouselItemProps {\n active: boolean;\n side: string;\n data: GALLERY_ITEM;\n darkmode: boolean;\n}\n\nconst CarouselItem: React.FC = ({ data, active, side, darkmode }) => {\n\n switch (data.cardType) {\n case \"no-photo-test\": {\n return (\n
\n\n
\n
\n \n
\n

\n {\n data.description\n }\n

\n
\n \n
\n
\n
\n {data.name}\n
\n {\n \",\"\n }\n  \n
\n {data.position}\n
\n
\n
\n
\n );\n\n }\n default: {\n return (\n
\n
\n
\n {active && \"\"}\n
\n {\n active ? (\n
\n

\n {\n data.title\n }\n

\n

\n {\n data.description\n }\n

\n
\n ) : \"\"\n }\n
\n
\n );\n }\n }\n};\n\ninterface CarouselProp {\n title: string;\n darkmode: boolean;\n data: {\n img?: string;\n title?: string;\n description: string;\n cardType: string;\n name?: string; // only if the card is of type 'testimony'\n position?: string; // only if the card is of type 'testimony'}[];\n }[];\n}\nconst ProjectGallery2: React.FC = ({ darkmode, data, title }) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [touchStart, setTouchStart] = useState(0);\n const [touchEnd, setTouchEnd] = useState(0);\n const [windowSize, setWindowSize] = useState(window.innerWidth);\n\n const previous = useCallback(() => {\n currentIndex === 0\n ? setCurrentIndex(data.length - 1)\n : setCurrentIndex(currentIndex - 1);\n }, [currentIndex]);\n\n const next = useCallback(() => {\n currentIndex === data.length - 1\n ? setCurrentIndex(0)\n : setCurrentIndex(currentIndex + 1);\n }, [currentIndex]);\n\n const handleTouchStart = (event: React.TouchEvent) => {\n setTouchStart(event.touches[0].clientX);\n setTouchEnd(event.touches[0].clientX);\n };\n\n const handleTouchMove = (event: React.TouchEvent) => {\n setTouchEnd(event.touches[0].clientX);\n };\n\n const handleTouchEnd = () => {\n if (touchStart - touchEnd > 150) next();\n else if (touchEnd - touchStart > 150) previous();\n };\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') previous();\n else if (event.key === 'ArrowRight') next();\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [previous, next]);\n\n useEffect(() => {\n const interval = setInterval(() => {\n next();\n }, AUTO_TIME * 1000);\n\n return () => clearInterval(interval);\n }, [next]);\n\n useEffect(() => {\n // Function to update window size\n const updateWindowSize = () => {\n setWindowSize(window.innerWidth);\n console.log(window.innerWidth);\n };\n\n // Add event listener for window resize\n window.addEventListener('resize', updateWindowSize);\n\n // Initial window size\n updateWindowSize();\n\n // Clean up the event listener on component unmount\n return () => {\n window.removeEventListener('resize', updateWindowSize);\n };\n }, []); // Empty dependency array ensures that the effect runs only on mount and unmount\n\n return (\n \n
\n

\n {title}\n

\n
\n
\n {currentIndex != 0 ? data.length > 1 && windowSize >= 1024 && (\n
\n \n
\n ) :
}\n\n \n\n {currentIndex != data.length - 1 ? data.length > 1 && windowSize >= 1024 && (\n
\n \n
\n ) :
}\n
\n
\n {data.map((_, index: number) => {\n return (\n setCurrentIndex(index)}\n />\n );\n })}\n
\n\n \n );\n};\n\nexport default ProjectGallery2;","export default __webpack_public_path__ + \"static/media/1.96139ca0.jpg\";","export default __webpack_public_path__ + \"static/media/2.93061995.jpg\";","export default __webpack_public_path__ + \"static/media/3.fe042393.jpg\";","import React from \"react\";\nimport LandingPage from \"@components/LandingPage\";\nimport \"./Home.css\";\nimport { TEXT, ROUTES, CONSTANTS } from \"@statics\";\nimport About from \"../../components/About\";\nimport ProjectGallery2 from \"@components/ProjectGallery2/ProjectGallery2\";\nimport image1 from \"@statics/images/HomePage/1.jpg\";\nimport image2 from \"@statics/images/HomePage/2.jpg\";\nimport image3 from \"@statics/images/HomePage/3.jpg\";\n\n\n\nimport { useEffect } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\n\ninterface HomeProps { }\n\n// this is the structure of a state OBJ\ninterface HistoryStateOBJ {\n sourcePage: string;\n}\n\nconst Home: React.FC = (props) => {\n // Allows access to different object properties for the URL\n // - Can access location.state.sourcePage inorder to access information regarding if sent via a {useHistory}.push(..., sourcePage:...) method\n const location = useLocation();\n const history = useHistory();\n\n useEffect(() => {\n if (location.state) {\n // If the user were to be redirected to this URL using a {useHistory}.push(..., sourcePage:...) and it satisfies the condition than execute autoScroll function\n if (\n location.state.sourcePage === \"project-join-home-redirect-from-goButton\"\n ) {\n // autoscrolling if prior conditions are met\n document\n .getElementById(\"home-about-values-div\")!\n .scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }\n }, []);\n\n return (\n
\n \n
\n
\n

{TEXT.LANDING_PAGE.MISSION_STATEMENT.TITLE}

\n
\n
\n
\n

\n {TEXT.LANDING_PAGE.MISSION_STATEMENT.LAB_GOALS}\n

\n
\n
\n \n
\n
\n

{TEXT.LANDING_PAGE.CURRENT_PROJECTS.TITLE}

\n
\n
\n
\n {CONSTANTS.PROJECTS.map((project) => {\n const name = project.name;\n return (\n \n
\n \n

{name}

\n
\n
\n );\n })}\n
\n
\n \n
\n );\n};\n\nexport default Home;\n","import { ROUTES } from \"@statics\";\nimport \"./ProjectOverviewCard.css\";\n\nconst ProjectOverviewCard = ({ project }: any) => {\n\n const navigateToProject = (projectName: String) => {\n window.location.pathname = `${ROUTES.PROJECT.BASE}/${projectName}`\n\n }\n return (\n
\n \n
\n )\n}\n\nexport default ProjectOverviewCard;","import React from 'react'\nimport \"./ProjectOverview.css\";\n// import \"./Project.css\";\nimport ProjectOverviewCard from \"@components/ProjectOverviewCard/ProjectOverviewCard\";\nimport { CONSTANTS } from '@statics';\n\nconst ProjectOverview = () => {\n // const projects = useAppSelector(selectProjects);\n\n {/* TODO: refactor to fetch data from backend, currently hard-coded */}\n return (\n
\n
\n

All Projects

\n
\n
\n
\n {CONSTANTS.PROJECTS.map((project) => )}\n
\n
\n )\n}\n\nexport default ProjectOverview;\n","export default __webpack_public_path__ + \"static/media/correlation1.e86b0eeb.png\";","export default __webpack_public_path__ + \"static/media/correlation3.7ada3467.png\";","export default __webpack_public_path__ + \"static/media/correlation2.15054e58.png\";","export default __webpack_public_path__ + \"static/media/correlation4.66084fd5.png\";","export default __webpack_public_path__ + \"static/media/correlationSequence1.fa1f40f1.png\";","export default __webpack_public_path__ + \"static/media/correlationSequence2.c60f58db.png\";","export default __webpack_public_path__ + \"static/media/correlationSequence3.3b9ab03a.png\";","export default __webpack_public_path__ + \"static/media/correlationSequence4.c852882e.png\";","export default __webpack_public_path__ + \"static/media/novaImage1.7e96477d.png\";","export default __webpack_public_path__ + \"static/media/novaImage2.79f1bd6e.png\";","export default __webpack_public_path__ + \"static/media/novaImage3.9c4e82cf.png\";","export default __webpack_public_path__ + \"static/media/shiva1.b53f6fa9.png\";","export default __webpack_public_path__ + \"static/media/ideo1.1df29346.png\";","export default __webpack_public_path__ + \"static/media/ideo2.36ba3e0d.png\";","export default __webpack_public_path__ + \"static/media/it1.45aa0daa.png\";","export default __webpack_public_path__ + \"static/media/it2.6d8b3569.png\";","import correlationGallery1 from \"@statics/images/correlation/correlation1.png\";\nimport correlationGallery2 from \"@statics/images/correlation/correlation3.png\";\nimport correlationMainStream1 from \"@statics/images/correlation/correlation2.png\";\nimport correlationSequence1 from \"@statics/images/correlation/correlation4.png\";\nimport correlationSequence2 from \"@statics/images/correlation/correlationSequence1.png\";\nimport correlationSequence3 from \"@statics/images/correlation/correlationSequence2.png\";\nimport correlationSequence4 from \"@statics/images/correlation/correlationSequence3.png\";\nimport correlationSequence5 from \"@statics/images/correlation/correlationSequence4.png\";\nimport nova1 from \"@statics/images/nova/novaImage1.png\";\nimport nova2 from \"@statics/images/nova/novaImage2.png\";\nimport nova3 from \"@statics/images/nova/novaImage3.png\";\nimport shiva1 from \"@statics/images/shiva/shiva1.png\";\nimport shiva2 from \"@statics/images/shiva/shiva2.png\";\nimport ideo1 from \"@statics/images/ideo/ideo1.png\";\nimport ideo2 from \"@statics/images/ideo/ideo2.png\";\nimport it1 from \"@statics/images/it/it1.png\";\nimport it2 from \"@statics/images/it/it2.png\";\n\nexport interface GALLERY_ITEM {\n img?: string;\n title?: string;\n description: string;\n cardType: string;\n name?: string; // only if the card is of type 'testimony'\n position?: string; // only if the card is of type 'testimony'}[];\n}\n\nexport interface PROJECT {\n project_title: string;\n description: {\n first: React.ReactNode;\n second: React.ReactNode;\n emphasis?: string;\n };\n qa?: {\n q: string;\n a: string;\n }[];\n publications?: { name: string; citation: string; link: string }[];\n subpages?: PROJECT[];\n galleryList?: GALLERY_ITEM[];\n testimonials?: GALLERY_ITEM[];\n pastProjects?: { title: string; description: string }[];\n joinTeam?: { whatWeDo: string[] };\n}\n\nconst PROJECT_TEXT: PROJECT[] = [\n {\n project_title: \"Correlation\",\n description: {\n first: (\n \n The Correlation project studies the visual perception of{\" \"}\n \n correlation\n \n  in data visualizations. Data visualization is a graphical\n representation of a data set. Scatterplots are a simple and common\n example of visualizing data with two variables. In a scatter plot,\n data is presented in a graphic form by placing points on a cartesian\n (x-y) coordinate plane according to their values on each variable. For\n simple linear data, correlation in a scatter plot corresponds to the\n degree to which the points form a straight line. We use a classic\n methods from \n \n psychophysics\n {\" \"}\n to derive our measures – discrimination tasks using the staircase\n method to measure precision. Performance in this aspect is regular and\n well described by Weber and Fechner laws regardless of visual variable\n choice used to represent the data.\n \n ),\n second:\n \"Currently we are working on two projects to determine the perception of correlation. The Mainstream Correlation Team studies how manipulating different visual attributes within the scatterplots affect the way we perceive the information shown in the scatterplot, and whether we are able to see Weber and Fechner’s law hold true. The Sequencing Correlation Team studies how different timings for the display duration of the scatterplots or other graphs and symbols used to represent correlation impact its perception. And if Weber's law still holds in these conditions where the graphs are shown for only a brief moment of time.\",\n emphasis:\n \"The Perception of Correlation has been thought to be done through a slow top-down process, however, there is evidence that suggests it is actually done through a fast bottom-up process--a visual process. The Correlation Team focuses on researching and gathering more evidence to support this “new science of visual perception\",\n },\n qa: [\n {\n q: \"What is implicit cognition?\",\n a: \"Implicit cognition can be described as cognition that is beyond our conscious control. It can include a variety of different types of cognition: learning, memory, social, emotion, and many more. Given the unconscious nature of this area of study, there are no “direct” ways of studying implicit cognition. The Ideo project uses ideomotor effects to explore the inner-workings of implicit cognition. Ideomotor effects are actions that are not perceived as intentional, but seem to emerge with no identifiable source; often associated with a sense of involuntariness. They are unconscious movements that happen in response to knowledge or information that you may have come across in the past. A few applications of this ideomotor effect are the ouija board and the hand-held pendulum, which Gachou et al. (2012) and Olson et al. (2017) have explored. This project is currently conducting a study to explore implicit cognition and ideomotor effects: Ouija. The goal of this project is to test if a device based on the use of ideomotor effects can bypass explicit cognition and access implicit cognition.\",\n },\n ],\n publications: [\n {\n name: \"Invariance of Correlation Perception (2012)\",\n citation:\n \"Rensink RA (2012). Invariance of Correlation Perception. Journal of Vision, 2012;12(9):433. doi: 10.1167/12.9.433.\",\n link: \"https://jov.arvojournals.org/article.aspx?articleid=2141080\",\n },\n {\n name: \"The perception of correlation in scatterplots (2010)\",\n citation:\n \"Rensink RA, and Baldridge G (2010). The perception of correlation in scatterplots. Computer Graphics Forum, 29: 1203-1210.\",\n link: \"http://www2.psych.ubc.ca/~rensink/publications/abs.10.4.html\",\n },\n {\n name: \"On the Prospects for a Science of Visualization (2014)\",\n citation:\n \"Rensink RA (2014a). On the Prospects for a Science of Visualization. In W. Huang (Ed.) Handbook of Human Centric Visualization: Theories, Methodologies, and Case Studies. New York: Springer. pp. 147-175.\",\n link: \"http://www2.psych.ubc.ca/~rensink/publications/abs.14.1.html\",\n },\n ],\n subpages: [\n {\n project_title: \"Mainstream Correlation\",\n description: {\n first:\n \"We are studying how manipulating different visual attributes within the scatterplots affect the way we perceive the information shown in the scatterplot, and whether we are able to see Weber and Fechner’s law hold true. We are currently manipulating the dots within the scatterplot (the effect of size, shape, colour, opacity etc.), before moving onto manipulating the dot cloud (number of dots, scale, location etc.), and finally manipulating the frame of the scatter plot with different border thickness, location of axes and so on. \",\n second:\n \"We are currently manipulating the dots within the scatterplot (the effect of size, shape, colour, opacity etc.), before moving onto manipulating the dot cloud (number of dots, scale, location etc.), and finally manipulating the frame of the scatter plot with different border thickness, location of axes and so on. Scatter plots represent the variability in a data set with a single visual variable, position, but there are others (ie: size, color, texture, and brightness) which could be used instead. For example, consider the two ring strip-plots below. They represent the same data-set as the scatter plots above, but they use ring-size rather than y-position to represent variability in one of the variables.\",\n emphasis: \"\",\n },\n galleryList: [\n {\n img: correlationMainStream1,\n title: \"Figure 1.1\",\n description:\n \"Two ring plots where the y-value is represented by the ring size. High correlation (top) and low correlation (bottom)\",\n cardType: \"default\",\n },\n ],\n qa: [\n {\n q: \"What methods are used to derive the measures?\",\n a: \"We use two classic methods from psychophysics to derive our measures – discrimination tasks using the staircase method to measure precision, and a magnitude estimation task to measure accuracy. Performance in both respects is regular and well described by Weber and Fechner laws – a linear relationship for discrimination and a logarithmic curve for estimation – regardless of which visual variables are chosen to represent the data.\"\n },\n {\n q: \"What are we currently studying?\",\n a: \"Our working theory for these results is based on participants using the information entropy of the visualization to make their judgements. Currently we’re studying how different gamma levels impact the perception of correlation in black and white luminance strip plots, and evaluating the effects of mixed populations in scatter plots.\"\n }\n ]\n },\n {\n project_title: \"Sequence Correlation\",\n description: {\n first: (\n \n The Correlation Sequencing team is investigating the Perception of\n Correlation in scatter plots when shown only for a brief moment of\n time. We show participants to plots with a similar correlation\n level and try to reduce the difference between the correlation\n until we find the Just Noticeable Difference (JND for short).\n Traditionally, determining correlation in scatterplots has been a\n slow high-level cognitive process, like interpreting pictorial\n representations. However, there is evidence that scatterplot\n perception follows \n \n Weber’s law\n {\" \"}\n  which is usually associated with quick perceptual processes\n – a linear relationship for discrimination and a logarithmic curve\n for estimation. {\" \"}\n \n ),\n second:\n \"This project has been focused on replicating and expanding upon these foundational findings by running our experiments on a variety of graph designs. The “Sequencing” name came from the first condition we ran where the Scatterplots would be shown in a sequence, also known as the “Timing” condition. The two independent variables were the Base Correlation of the scatter plots (the intensity of the stimulus) and the duration the first scatter plot was shown for. The first graph was shown for only a brief moment of time to make sure it is being perceived by a visual process, which would be fast.\",\n emphasis: \"\",\n },\n galleryList: [\n {\n img: correlationSequence1,\n title: \"Figure 1.1\",\n description:\n \"Side-by-side sequencing experiment design showcasing the graph sequence. First the two side-by-side scatter plots are shown for 100/ 400/ 1600 ms, followed by a mask shown for 200 ms, followed by the blank screen that is shown indefinitely where the participant makes the decision.\",\n cardType: \"default\",\n },\n {\n img: correlationSequence2,\n title: \"Figure 1.2\",\n description:\n \"The results from the original Rensink RA, and Baldridge G (2010) paper. Weber’s Law is showcased on the graph on the left while the confidence rating for each display timing is on the right.\",\n cardType: \"default\",\n },\n {\n img: correlationSequence3,\n title: \"Figure 1.3\",\n description:\n \"Side-by-side sequencing experiment design showcasing the graph sequence. First the two side-by-side scatter plots are shown for 100/ 400/ 1600 ms, followed by a mask shown for 200 ms, followed by the blank screen that is shown indefinitely where the participant makes the decision.\",\n cardType: \"default\",\n },\n {\n img: correlationSequence4,\n title: \"Figure 1.4\",\n description:\n \"A scatter plot and strip plot used to compare correlation between the two graphs.\",\n cardType: \"default\",\n },\n {\n img: correlationSequence5,\n title: \"Figure 1.5\",\n description:\n \"The precision graph from the side-by-side experiment showcasing Weber's Law being followed. The JND precision is proportional to the intensity of the stimulus (correlation)\",\n cardType: \"default\",\n },\n ],\n qa: [\n {\n q: \"What methods are used to derive the measures ?\",\n a: \"We use two classic methods from psychophysics to derive our measures – discrimination tasks using the staircase method to measure precision, and a magnitude estimation task to measure accuracy. Performance in both respects is regular and well described by Weber and Fechner laws – a linear relationship for discrimination and a logarithmic curve for estimation – regardless of which visual variables are chosen to represent the data.\"\n },\n {\n q: \"What are we currently studying?\",\n a: \"Our working theory for these results is based on participants using the information entropy of the visualization to make their judgements. Currently we’re studying how different gamma levels impact the perception of correlation in black and white luminance strip plots, and evaluating the effects of mixed populations in scatter plots.\"\n }\n ]\n },\n ],\n galleryList: [\n {\n img: correlationGallery1,\n title: \"Figure 1.1\",\n description:\n \"An experiment design displaying side-by-side graphs. Initially, two scatter plots are shown for durations of 100, 400, and 1600 ms. Next, a mask is displayed for 200 ms, followed by an indefinite display of a blank screen where participants make decisions.\",\n // \"Two side-by-side scatter plots. The scatterplot on the left shows a high correlation while the one on the right shows a low correlation. In a scatter plot, data is presented in a graphic form by placing points on a cartesian (x-y) coordinate plane according to their values on each variable. For simple linear data, correlation in a scatter plot corresponds to the degree to which the points form a straight line. We use classic methods from psychophysics to derive our measures – discrimination tasks using the staircase method to measure precision. Performance in this aspect is regular and well described by Weber and Fechner laws regardless of visual variable choice used to represent the data.\",\n cardType: \"default\",\n }, {\n img: correlationGallery2,\n title: \"Figure 1.2\",\n description:\n \"Scatterplot for the mixed colour condition (left). Scatterplot with size 8mm dots for the size condition (right)\",\n cardType: \"default\",\n },\n ],\n testimonials: [\n {\n name: \"Jose Navarro\",\n position: \"Team Lead\",\n description:\n \"Being a member of the correlation team has provided me great experience not only as a developer and researcher, but also as a team member and team leader.\",\n cardType: \"no-photo-test\",\n },\n {\n name: \"Dusty Fox\",\n position: \"Co-pilot\",\n description:\n \"Working at the lab on the correlation project has been a really educational experience! I`ve learned so much about how labs operate in practice and being able to actively participate in research has been exciting.\",\n cardType: \"no-photo-test\",\n },\n {\n name: \"Aaron Wong\",\n position: \"Co-pilot\",\n description:\n \"Being on the correlation team is a very welcoming and enlightening experience. Everyone on the team is extremely friendly and patient and I would highly recommend anyone who wants to start their journey into research to start here.\",\n cardType: \"no-photo-test\",\n },\n {\n name: \"Richard Mao\",\n position: \"Co-pilot\",\n description:\n \"During my time on the team, I have gained valuable insights and experience into the world of research. It has helped me a lot in my pursuit of both academic and career endeavors.\",\n cardType: \"no-photo-test\",\n },\n ],\n pastProjects: [\n {\n title: \"VCL Web Framework\\n\",\n description:\n \"The online framework the Visual Cognition Lab uses to run their experiments was originally started by the correlation team and is meant to be a general use platform for all teams in the lab. We use a JavaScript library called jsPsych which facilitates experiment design and data collection. Currently, we continuously implement new experiments into the framework and update it with more quality of life features.\",\n },\n {\n title: \"Past Correlation Experiments\\n\",\n description:\n \"Every term, we complete new experiment implementations and data collection. We have completed over 10 different Correlation-related experiments from the original default condition and design, to showing the scatterplots one after the other, and using different symbols, colors and display settings.\",\n },\n ],\n joinTeam: {\n whatWeDo: [\n \"The Correlation project studies the visual perception of correlation in data visualizations. Data visualization is a graphical representation of a data set. Scatterplots are a simple and common example of visualizing data with two variables. In a scatter plot, data is presented in a graphic form by placing points on a cartesian (x-y) coordinate plane according to their values on each variable. For simple linear data, correlation in a scatter plot corresponds to the degree to which the points form a straight line. \",\n \"Currently we are working on two projects to determine the perception of correlation. The Mainstream Correlation Team studies how manipulating different visual attributes within the scatterplots affect the way we perceive the information shown in the scatterplot, and whether we are able to see Weber and Fechner’s law hold true. The Sequencing Correlation Team studies how different timings for the display duration of the scatterplots or other graphs and symbols used to represent correlation impact its perception. And if Weber's law still holds in these conditions where the graphs are shown for only a brief moment of time.\",\n ],\n },\n },\n {\n project_title: \"NOVA\",\n publications: [\n {\n name: \"Robust inattentional blindness (2005)\",\n citation:\n \"Rensink, R. A. (2005). Robust inattentional blindness. Journal of Vision, 5(8), 790: https://jov.arvojournals.org/article.aspx?articleid=2132583\",\n link: \"https://jov.arvojournals.org/article.aspx?articleid=2132583\",\n },\n ],\n galleryList: [\n {\n img: nova1,\n title: \"Figure 1.1\",\n description:\n \"The Money Business Illusion, colloquially referred to as the “gorilla video”, demonstrates multiple instances of the inattentional blindness phenomenon taking place. As described, participants are told to count how many times the basketball is passed between two groups of individuals (3 with black shirts, and 3 with white shirts). Video: https://www.youtube.com/watch?v=IGQmdoK_ZfY&ab_channel=DanielSimons\",\n cardType: \"default\",\n },\n {\n img: nova2,\n title: \"Figure 1.2\",\n description:\n \"The first, and most well-known instance is participants’ failure to notice the presence of a man in a gorilla suit walking across the screen, due to their attention being focused on the people passing the basketball to each other. \",\n cardType: \"default\",\n },\n {\n img: nova3,\n title: \"Figure 1.3\",\n description:\n \"The second instance of inattentional blindness in the video is the participants’ failure to notice the colour of the curtain in the background changing partway through. The third example of this phenomenon is the participants’ failure to notice that one of the featured people (wearing a black shirt) leaves the scene entirely.\",\n cardType: \"default\",\n },\n // {\n // img: correlationGallery1,\n // title: \"Figure 1.4\",\n // description:\n // \"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\",\n // cardType: \"default\",\n // },\n // {\n // img: correlationGallery1,\n // title: \"Figure 1.5\",\n // description:\n // \"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\",\n // cardType: \"default\",\n // },\n ],\n description: {\n first:\n \"The NOVA project studies the effects of Inattentional Blindness and cueing within a single paradigm. Inattentional Blindness is the phenomenon that occurs when something is plainly in the field of view but is not consciously percieved. This occurs the most when the viewer’s attention is focused intensely on something else in their field of view due to our limited capacity for attention being able to focus on a limited amount of things at the time. A famous example of this is the “Gorilla video” where the participants were asked to count the number of basketball tosses, and as a result they fail to see the person in a gorilla suit walk through the scene. Once the participant is informed about the gorilla, they are able to see it clearly the next time the video is watched. This means that Inattentional Blindness tasks can only be used once. The NOVA project, on the other hand, offers a robust way to test this phenomenon.\",\n second:\n \"The NOVA project also focuses on Cueing. Cueing occurs when the viewer's attention is intentionally re-focused to another object without them realizing that this cue happened. For example, if the viewer sees an arrow pointing to an object, they will likely shift their attention to that object even if they did not consciously perceive the arrow. Currently the NOVA project is looking at the differences in cueing effects when the viewers do not consciously perceive the cue versus when they do. Some of these conditions include more abstract symbols to test the boundaries of how much we know. The results from this project will hopefully help us understand more about the role of consciousness in visual perception.\",\n emphasis:\n \"Inattentional Blindness is the phenomenon that occurs when something is plainly in the field of view but is not consciously perceived.\",\n },\n qa: [\n {\n q: \"What is Inattentional Blindness?\",\n a: \"Inattentional Blindness is the failure to see the presence of an item when it is not attended (Rensink, R. A., 2005). This means that even when something is within a person’s field of view, they don’t perceive it because their attention is not directed at it.\",\n },\n {\n q: \"How do you study Inattentional Blindness\",\n a: \"Most previous research on inattentional blindness used methodologies that were not robust. A famous example of this is the `Gorilla video` where the participants are told to count the number of basketball tosses, and as a result they fail to see the gorilla walk through in plain sight. Once they are informed about the gorilla, they are able to see it clearly the next time the video is watched, so the video can only be used once to demonstrate inattentional blindness. However, The NOVA project's paradigm offers a way to robustly test this phenomenon. We have two important aspects in our paradigm, one being our technique, in which the apperance of a briefly-presented test stimulus appeared the moment observers attended to somewhere else. With this, participants are repeatedly shown the experiment, but still can only allocate little attention to the cue when it appears. The other aspect is cueing. Cueing occurs when the viewers attention is intentionally re-focused to another object without them realizing that this cue happened. A directional cue can direct attention after a few milliseconds from its appearance (Gibson & Bryant, 2005). When cues are reported unseen, it suggested that participants never experienced them at all.\",\n },\n {\n q: \"What responsibilities can I expect in the team?\",\n a: \"As a co-pilot, you will be trained to collect data by running participants throught the experiment while on Zoom meetings and scheduling time slots on UBC’s Human Subject Pool website. As a volunteer research assistant, you will be expected to take on more responsibilities in the form of data analysis and condition creation, which involve learning technical skills in Visual Studio Code and Photoshop. \",\n },\n ],\n testimonials: [\n {\n cardType: \"no-photo-test\",\n description:\n \"I joined NOVA midway through my fourth year, and by that point, it was easy to feel like I was playing catch up with gaining research experience. Fortunately for me, my first term as a Co-Pilot showed me just how irrational those worries were with how seamlessly my training went and how rewarding the process of learning new skills was. My teammates were welcoming and my project leader was patient and communicative with me throughout the training process. By the time the next term had come around, I felt so at home that I’ve continued working here for another full year.\",\n name: \"Tsubasa\",\n },\n ],\n joinTeam: {\n whatWeDo: [\n \"The NOVA team follows a weekly routine for collecting, analyzing and reporting about data. Every member of the team, from the project leader to the co-pilots, is trained expected to learn how to schedule meetings with participants through UBC’s Human Subject Pool website. Through HSP, meetings are scheduled with participants to run them through the experimental process for an hour, answering any questions or troubleshooting technical issues along the way. Once a week’s worth of data is collected, volunteers and research assistants analyze the data through Python on Microsoft Visual Studio Code. The analysis results are then reported to the principal investor and recorded in a shared document. Based on whether the analysis yields noteworthy results, the team may continue to run the current conditions or create a novel condition with a visual stimulus graphic.\",\n ],\n },\n pastProjects: [\n {\n title:\n \"Cueing Using Colour and Isoluminescence: Differences in Blindness Rates and Cueing Effects Between Seen and Unseen Cues\",\n description:\n \"Author: Ankita Guha Patra\\n\" +\n \"Sponsoring Research Assistant Tiffany Wu\\n\" +\n \"Supervisor: Dr. Ronald Rensink\\n\",\n },\n {\n title:\n \"Does Consciousness Matter? Noticeable Edits on Overlearned Cues and the Effect on Blindness Rates and Cueing Effects Between Seen and Unseen Cues\",\n description:\n \"Author: Isha Verma\\n\" +\n \"Sponsoring Research Assistant: Ying Zeng\\n\" +\n \"Supervisor: Dr. Ronald Rensink\\n\",\n },\n ],\n },\n {\n project_title: \"SHIVA\",\n description: {\n first: `When we say ‘mode of visual perception’ or ‘perceptual mode,’ we refer to the particular way in which a person makes sense of scenes presented before their eyes. In the SHIVA project, we refer to a perceptual mode as something which encompasses a specific group of equations that the brain uses to draw conclusions from information derived by the retina. We think that the brain’s process of choosing this mode could be automatic rather than consciously controlled. Whenever the brain changes its mode of perception, its specific process of drawing conclusions is also changed, and a person will perceive things differently.`,\n\n second:\n \"Work done in the UBC VCL has revealed the possibility that a person’s visual perceptual mode can be changed. The change is measured by the use of a visual search paradigm called visual search asymmetry. Thus far, it seems that our subjects are not willfully changing their mode of perception, but rather their perceptual mode changes because of specific external factors in their visual environment. Our subjects seem to be unaware of any perceptual mode change occurring, so it is likely a subconscious occurrence. \\n\\nThe SHIVA project is investigating factors which shift these visual perceptual modes. Some questions we ask are: What range of factors or external stimuli can affect these perceptual modes? To what degree are perceptual modes affected by these factors? Do some factors lose their effect on perceptual modes when certain other factors are present?\",\n emphasis: `The SHIVA project arose from an interest in how culture may have a significant effect on the mode of visual perception a person uses.`,\n },\n galleryList: [\n {\n img: shiva1,\n title: \"Figure 1.1\",\n description:\n \"Example of a cirlce target amongst bisected circle distractors (left) and a bisected circle target amongst circle distractors (right). \",\n cardType: \"default\",\n },\n {\n img: shiva2,\n title: \"Figure 1.2\",\n description:\n \"Example of a short line target amongst long line distractors (left) and a long line target amongst short line stimuli (right).\",\n cardType: \"default\",\n },\n ],\n publications: [\n {\n name: \"Asymmetries in visual search: An introduction (2001)\",\n citation:\n \"Wolfe, J. M. (2001). Asymmetries in visual search: An introduction. Perception & Psychophysics, 63(3), 381-389. doi:10.3758/BF03194406. https://search.bwh.harvard.edu/new/pubs/IntrotoSearchAsym.pdf\",\n link: \"https://search.bwh.harvard.edu/new/pubs/IntrotoSearchAsym.pdf\",\n },\n ],\n testimonials: [\n {\n name: \"Danny\",\n position: \"Volunteer\",\n description:\n \"When I entered the team as a first-year, I had limited knowledge about the research process, how it is conducted and what it means to be a responsible researcher. I joined the lab in hopes of getting exposure to research environments and being able to apply theories learned in class to the real world. Not only did SHIVA satisfy my interests, but it encouraged me to think critically about the research that I am producing. I learned new applications in R, discussed ideas with other researchers, and developed a better understanding of research. I highly recommend anyone to apply and not be apprehensive by a lack of experience\",\n cardType: \"no-photo-test\",\n },\n {\n name: \"Stephen\",\n position: \"Volunteer\",\n description:\n \"I joined the SHIVA team because I was looking for a topic that I would be interested in for my COGS 402. My experience has been extremely positive, the work environment is productive and friendly. Mistakes can happen, but they’re resolved kindly and effectively. I have learned a lot about the research process, from running participants to detailed data analysis with R, as well as soft skills such as communicating effectively.\",\n cardType: \"no-photo-test\",\n },\n ],\n pastProjects: [\n {\n title: \"Condition 54 No-Pretask\\n\",\n description:\n \"This condition was created to continue the experiment through an online environment but without the usual Navon pretask. Participants from both Japan and Canada partook in the investigation. Through the experiment, it was revealed that there were little differences between the average reaction times in Japanese and Canadian participants. However, participants found it more difficult to find long-line stimuli amongst short-line distractors than to locate short lines amongst long as the number of distractors increased. \\n\",\n },\n ],\n joinTeam: {\n whatWeDo: [\n \"In SHIVA, we examine factors that can shift a person’s perceptual modes. In other words, we are interested in factors that can affect how a person makes sense of their visual environment. We’re particularly interested in a person’s visual environment as well as their cultural background. To examine these factors, the participant’s visual environment is varied before and during visual search tasks. Afterwards, we collect and examine their cultural information (for more details, please check out our Q&A!). In our older tests, performing various pre-tasks before the main visual search task has seen various degrees of success in changing a person’s perceptual mode. More recently however, we have been examining how the transition to an online test environment may shift a person’s perceptual modes.\",\n ],\n },\n },\n {\n project_title: \"Ideo\",\n description: {\n first:\n \"What is the Ouija board? The Ouija board is used as a divination technique to find answers to questions. This is done by putting your hands on the planchette, asking the board a question, then letting the planchette move to the letters/words on the board. This can be explained by ideomotor effects. In this study we compare the differences between conscious and unconscious knowledge.\",\n second:\n \" Using the ouija board as a medium, we investigate whether the unconscious mind knows more than the conscious mind. By asking questions to participants and measuring accuracies across experimental modes, a deeper understanding of unconscious knowledge can be achieved.\",\n emphasis:\n \"Who is really behind the movements of the planchette? Can this phenomenon be explained by psychology?\",\n },\n qa: [\n {\n q: \"What is implicit cognition?\",\n a: \"Implicit cognition can be described as cognition that is beyond our conscious control. It can include a variety of different types of cognition: learning, memory, social, emotion, and many more. Given the unconscious nature of this area of study, there are no “direct” ways of studying implicit cognition. The Ideo project uses ideomotor effects to explore the inner-workings of implicit cognition. Ideomotor effects are actions that are not perceived as intentional, but seem to emerge with no identifiable source; often associated with a sense of involuntariness. They are unconscious movements that happen in response to knowledge or information that you may have come across in the past. A few applications of this ideomotor effect are the ouija board and the hand-held pendulum, which Gachou et al. (2012) and Olson et al. (2017) have explored. This project is currently conducting a study to explore implicit cognition and ideomotor effects: Ouija. The goal of this project is to test if a device based on the use of ideomotor effects can bypass explicit cognition and access implicit cognition.\",\n },\n {\n q: \"What are Ideomotor effects?\",\n a: \"Ideomotor effects are actions that are not perceived as intentional, but seem to emerge with no identifiable source; often associated with a sense of involuntariness. They are unconscious movements that happen in response to knowledge or information that you may have come across in the past. A few applications of this ideomotor effect are the ouija board and the hand-held pendulum, which Gachou et al. (2012) and Olson et al. (2017) have explored. This project is currently conducting a study to explore implicit cognition and ideomotor effects: Ouija. The goal of this project is to test if a device based on the use of ideomotor effects can bypass explicit cognition and access implicit cognition.\",\n },\n ],\n joinTeam: {\n whatWeDo: [\n \"The project's primary objective is to replicate the findings originally obtained by Gauchou et al. in their 2012 study. Additionally, we aim to explore the impact of introducing new sets of questions and implementing certain modifications to the experiment's design. Our research team is composed of dedicated research assistants, volunteers, and co-pilots, all working collaboratively to execute this investigation effectively. To facilitate coordination and progress tracking, we have scheduled weekly meetings where we discuss the developments and outcomes of the ongoing week.\",\n \"The study itself entails running participants through HSP in exchange for course credits, followed by meticulous data collection and comprehensive analysis of the gathered results. Each experimental session typically lasts between 45 to 60 minutes and is conducted in a face-to-face setting. Our analysis encompasses a diverse array of variables, categorized into various types, which will be distributed among team members over the course of the term for thorough examination and interpretation.\",\n ],\n },\n publications: [\n {\n name: \"Expression of nonconscious knowledge via ideomotor actions (2012)\",\n citation:\n \"Gauchou, H. L., Rensink, R. A., & Fels, S. (2012). Expression of nonconscious knowledge via ideomotor actions. Consciousness and Cognition, 21(2), 976-982. https://doi.org/10.1016/j.concog.2012.01.016\",\n link: \"https://www.sciencedirect.com/science/article/pii/S1053810012000402\",\n },\n {\n name: \"Adaptive control of ideomotor effect anticipations (2010)\",\n citation:\n \"Pfister, R., Kiesel, A., & Melcher, T. (2010). Adaptive control of ideomotor effect anticipations. Acta Psychologica, 135(3), 316-322. https://doi.org/10.1016/j.actpsy.2010.08.006\",\n link: \"https://www.sciencedirect.com/science/article/pii/S0001691810001800\",\n },\n ],\n galleryList: [\n {\n img: ideo1,\n title: \"Figure 1.1\",\n description:\n \"Example of a cirlce target amongst bisected circle distractors (left) and a bisected circle target amongst circle distractors (right).\",\n cardType: \"default\",\n },\n {\n img: ideo2,\n title: \"Figure 1.2\",\n description:\n \"Example of a cirlce target amongst bisected circle distractors (left) and a bisected circle target amongst circle distractors (right).\",\n cardType: \"default\",\n },\n ],\n testimonials: [\n {\n name: \"John Doe\",\n position: \"Volunteer\",\n description:\n \"VCL is an open door for those who wants to learn. From statistical analysis to running experiments, VCL is a great place to start a hands on experience in a lab. There is still much to be explored about our unconscious knowledge and it's a privilege to be able to study it with amazing people.\",\n cardType: \"no-photo-test\",\n },\n ],\n pastProjects: [\n {\n title:\n \"Project 1: Exploring the Influence of Fine Motor Warm-Up Activities on Ideomotor Movement:\",\n description:\n \"This research project was part of COGS 402 utilized the Swan Protocol and was conducted online during the COVID-19 pandemic. The Swan technique, developed by Bob Burns, serves as a tool to tap into unconscious knowledge by communicating with the hand, potentially eliciting unconscious movements that appear as though the hand possesses its own cognition. It's important to note that this concept is distinct from hypnosis, as hypnosis is not a component of our methodology.\",\n },\n {\n title: \"Project 2:\",\n description:\n 'Examining the Impact of Transliminality on Ideomotor Effects in Relation to Implicit Cognition: This research project was part of COGS 402 and utilized the Ouija method. The Hypothesis of this project was that \"Participants scoring higher on transliminality will exhibit greater accuracy during the Ouija phase compared to participants with lower scores.\" Transliminality reflects individual differences in the threshold at which unconscious processes or external stimuli enter into consciousness.',\n },\n ],\n },\n {\n project_title: \"Image Transitions\",\n description: {\n first:\n \"A metric is a standard measurement which assigns numbers to things, like rulers! Interestingly, humans also possess a unique internal metric system, separate from the standard metric system that we use — our visual system. We are able to estimate how far an object is, whether or not it is within our reach by just eyeballing. We are also able to see objects like our car as the same size no matter how far away it’s parked. So how is the metric of our perceptual space organized? How do we perceive size, depth, brightness etc? Is everything absolute or relative?\",\n second:\n \"We use a visual search paradigm (finding a target stimulus among distractors on a display) to answer this question. Here’s an example: In order to investigate whether we perceive relative size or physical size, we used a 2 x 2 design varying viewing distance and display size (100% size, 1x distance; 100% size, 2x distance; 50% size, 1x distance; 50% size, 2x distance). Think about it! What would the results look like if it is retinal vs. physical size?\",\n emphasis: \"\",\n },\n qa: [\n {\n q: \"What is the inspiration for the project?\",\n a: \"You probably realized that we have a powerful visual system. Even the car that is parked away from us looks very small, our brain knows this is about the same size as the car parked near us. This concept is called size constancy. We have the brain’s construction of the outside world including two cars (one far from us and one close to us). These constructions (or what we called as mental representation) are flexible because it accounts for changes that occur in the world.\",\n },\n {\n q: \"What are you studying and how does the inspiration above related to our study?\",\n a: \"We want to know how we perceive the size. Is it based on the item's physical size or relative size?\",\n },\n {\n q: \"How can you manipulate the physical or relative size of the object?\",\n a: \"We used visual search, in which the participants will detect whether a target stimulus is present among distractors on a display. In our experience, we use a longer line representing the target and other relatively shorter lines as the distractors. We have different conditions varying the physical size, the distance among lines, and the background of lines to see which one affects us to perceive the size.\",\n },\n ],\n publications: [\n {\n name: \"Visual search has no memory (1998)\",\n citation:\n \"Horowitz, T. S., & Wolfe, J. M. (1998). Visual search has no memory. Nature, 394(6693), 575-577. http://www.nature.com/nature/journal/v394/n6693/full/394575a0.html\",\n link: \"http://www.nature.com/nature/journal/v394/n6693/full/394575a0.html\",\n },\n {\n name: \"Effects of 2D geometric transformations on visual memory (2006)\",\n citation:\n \"Lam, H., Rensink, R. A., & Munzner, T. (2006, July). Effects of 2D geometric transformations on visual memory. In Proceedings of the 3rd symposium on Applied perception in graphics and visualization (pp. 119-126). ACM. http://dl.acm.org/citation.cfm?id=1140515 \",\n link: \"http://dl.acm.org/citation.cfm?id=1140515\",\n },\n {\n name: \"Perceptual invariance of nonlinear focus+ context transformations (2004)\",\n citation:\n \"Lau, K., Rensink, R. A., & Munzner, T. (2004, August). Perceptual invariance of nonlinear focus+ context transformations. In Proceedings of the 1st Symposium on Applied perception in graphics and visualization (pp. 65-72). ACM. http://www2.psych.ubc.ca/~rensink/publications/download/agvp-LRT.pdf\",\n link: \"http://www2.psych.ubc.ca/~rensink/publications/download/agvp-LRT.pdf \",\n },\n {\n name: \"The Invariance of Visual Search to Geometric Transformation (2004)\",\n citation:\n \"Rensink, R. (2004). The Invariance of Visual Search to Geometric Transformation. Journal of Vision, 4(8), 178. http://jov.arvojournals.org/article.aspx?articleid=2130823\",\n link: \"http://jov.arvojournals.org/article.aspx?articleid=2130823\",\n },\n ],\n galleryList: [\n {\n img: it1,\n title: \"Figure 1.1\",\n description: \"\",\n cardType: \"default\",\n },\n {\n img: it2,\n title: \"Figure 1.2\",\n description: \"\",\n cardType: \"default\",\n },\n ],\n joinTeam: {\n whatWeDo: [],\n },\n },\n {\n project_title: \"NCIS\",\n description: {\n first:\n \"Nautical Crime Investigation Services Corp. (NCIS) is a startup based in Vancouver. NCIS develops AI and hardware maritime defence technologies to detect and deter criminal activities at sea.\",\n second:\n \"Through its research and development process, NCIS embraces collaboration and partnerships between academia, industry, NGOs and government entities. We welcome applications from motivated students who are looking to apply their academic knowledge to finding real world solutions to this century’s number one problem in the oceans.\",\n },\n joinTeam: {\n whatWeDo: [\n \"We are currently recruiting for new members interested in joining this project. We have positions focusing on research, UX, and software development. If you feel that you would be a good fit, please take a look at the Get Involved section of our website for more information. Email us at vclmanager@gmail.com with your resume, a list of related academic courses you’ve taken, and a brief description of your interest in the project.\",\n ],\n },\n },\n {\n project_title: \"Coding Team\",\n description: {\n first: \"We are the dedicated coding team of the Visual Cognition Lab (VCL).\",\n second:\n \"Our primary mission is to develop and maintain the VCL website and its experiment framework, ensuring a seamless and efficient experience for all users :)\",\n },\n qa: [\n {\n q: \"Why do we need coding teams in the Visual Cognition Lab?\",\n a: \"The coding teams are here to support the whole lab! We are the IT admin and developers for website and lab researches.\"\n }\n ],\n subpages: [\n {\n project_title: \"Website Development\",\n description: {\n first:\n \"Our team is dedicated to creating and maintaining the VCL website with a strong focus on user experience and accessibility. We design and implement user-friendly interfaces that make navigation intuitive for all users, regardless of their technical expertise. To ensure that the website remains at the forefront of functionality and innovation, we continuously add new features and enhance existing ones. This ongoing development not only improves the user experience but also keeps the website relevant and efficient.\",\n second:\n \"In addition to design and implementation, we prioritize performance optimization, ensuring that the website loads quickly and operates smoothly. This includes optimizing code, managing resources effectively, and utilizing the latest technologies to deliver a seamless browsing experience. By focusing on these aspects, we provide a website that is not only aesthetically pleasing but also highly functional and efficient for all users.\",\n emphasis: \"\",\n },\n qa: [\n {\n q: \"What tech stack do you use in your team?\",\n a: \"For our website's frontend, we rely on the popular web framework React. The backend of our website is built using Express, a minimalist web framework for Node.js. To deploy our website we use services provided by Amazon Web Services (AWS).\"\n },\n {\n q: \"Besides developer, do you hire any other roles for the team?\",\n a: \"Yes! We also need good design and user interaction for our website! If you are interested in user interface design, welcome!\"\n }\n ]\n },\n {\n project_title: \"Experiment Framework Maintenance\",\n description: {\n first:\n \"We play a crucial role in maintaining and advancing the VCL experiment framework. Our team regularly implements new experimental conditions and quality of life improvements based on the specific requirements of the research teams. This involves close collaboration with researchers to understand their needs and integrate features that facilitate their work. By incorporating these enhancements, we ensure that the framework remains adaptable and effective for various experimental scenarios.\",\n second:\n \"To keep the framework up-to-date with the latest technological advancements, we perform regular system upgrades, incorporating cutting-edge methodologies and tools. Ensuring the stability and reliability of the experiment environment is a top priority, which we achieve by promptly identifying and resolving any bugs that arise. In addition to these technical responsibilities, we provide comprehensive user support, including troubleshooting assistance and guidance for users conducting experiments within the VCL framework. This ensures they have the necessary resources and support to achieve their research goals.\",\n emphasis: \"\",\n },\n qa: [\n {\n q: \"What stack does the experiment application use?\",\n a: \"We use JavaScript, Node.js and React to handle the runtime and front end elements. We use a JavaScript module called jsPsych to script the experiment logic and data. Since the VCL focuses on psychometrics from graphs, we also use d3 to dynamically render these graphs in the browser.\"\n },\n {\n q: \"What type of work does an Experiment Web Framework coding team member do?\",\n a: \"The Web Framework team works in a full stack environment, handling both front and back end duties depending on the type of task. Experiment Condition implementations is a common task handled by the team where we add new conditions to the existing design structures depending on the requests from the different research teams. Other tasks include the development of quality of life features and improvements, as well as continuous upgrades to the Framework’s features.\"\n }\n ]\n },\n ],\n joinTeam: {\n whatWeDo: [\n \"We are currently recruiting for new members interested in joining this project. We have positions focusing on research, UX, and software development. If you feel that you would be a good fit, please take a look at the Get Involved section of our website for more information. Email us at vclmanager@gmail.com with your resume, a list of related academic courses you’ve taken, and a brief description of your interest in the project.\",\n ],\n },\n },\n];\n\nexport default PROJECT_TEXT;\n","export default \"data:image/png;base64,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\"","import \"./ProjectV2Default.css\";\nimport { useState } from \"react\";\nimport { MdKeyboardDoubleArrowUp } from \"react-icons/md\";\nimport { RiDoubleQuotesL, RiDoubleQuotesR } from \"react-icons/ri\";\nimport PROJECT_TEXT, { PROJECT } from \"@statics/projectsV2\";\nimport { useHistory } from \"react-router-dom\";\nimport ProjectGallery2 from \"@components/ProjectGallery2/ProjectGallery2\";\n\ninterface PropOBJ {\n project_id: string;\n subPage:string;\n}\n\n\nconst ProjectV2Default = (props: PropOBJ) => {\n const { project_id, subPage} = props;\n const history = useHistory();\n\n let currentProject: PROJECT | undefined = PROJECT_TEXT.find(\n (element) => element.project_title.toLowerCase() == project_id.toLowerCase()\n );\n\n if (subPage != \"\") {\n currentProject = currentProject?.subpages?.find((subpage) => subpage.project_title.toLowerCase() === subPage.toLowerCase());\n }\n\n // error handling for projects that do not exist\n if (currentProject == undefined) {\n history.push(\"/404\");\n }\n\n return (\n
\n
\n
\n
\n

{currentProject?.project_title}

\n

\n

\n
\n
\n \n {currentProject?.description.first}\n
\n
\n\n
\n
\n {currentProject?.description.second}\n
\n
\n {currentProject?.description.emphasis && (\n
\n \n
\n {currentProject?.description.emphasis!}\n
\n \n
\n )}\n
\n
\n
\n {\n currentProject?.galleryList && \n }\n\n\n {currentProject?.qa && (\n
\n \n Q&A\n \n

\n

\n {currentProject?.qa?.map((qa, index) => {\n return (\n
\n

{qa.q}

\n
\n {qa.a}\n
\n
\n );\n })}\n
\n
\n )}\n
\n {\n window.scrollTo(0, 0);\n }}\n >\n
\n \n
\n

Back to Top

\n
\n \n \n );\n};\n\nexport default ProjectV2Default;\n","import './ProjectV2Publications.css';\nimport PROJECT_TEXT, { PROJECT } from \"@statics/projectsV2\";\nimport { useHistory } from 'react-router-dom';\nimport { FaExternalLinkAlt } from \"react-icons/fa\";\n\ninterface PropOBJ {\n project_id: string;\n}\n\nconst ProjectV2Publications = (props: PropOBJ) => {\n\n const { project_id } = props;\n\n const location = useHistory();\n\n const currentProject: PROJECT | undefined = PROJECT_TEXT.find(\n (element) => element.project_title.toLowerCase() == project_id.toLowerCase()\n );\n\n return (\n
\n
\n

\n Publications\n

\n
\n
\n {\n currentProject!.publications ? \n currentProject!.publications!.map((item, index) => {\n return (\n
\n

window.open(item.link)}>{item.name}

\n

\n {item.citation}\n

\n
\n );\n })\n :\n

No Publications

\n\n }\n
\n
\n )\n};\n\nexport default ProjectV2Publications;","import React from \"react\";\nimport EmailIcon from \"@mui/icons-material/Email\";\nimport PhoneIcon from \"@mui/icons-material/Phone\";\nimport LinkedInIcon from \"@mui/icons-material/LinkedIn\";\nimport \"./ProjectPeople.css\";\nimport dotenv from \"dotenv\";\n\ndotenv.config();\nconst IS_WIP = process.env.REACT_APP_WIP === \"development\";\n\ninterface PersonDetails {\n name: string;\n involvement: string;\n description: string;\n isAlumni: boolean; // if person is current member or alumni\n edit?: () => void;\n delete?: () => void;\n}\n\nexport const Person: React.FC = (props) => {\n return (\n
\n
\n

{props.name}

\n
\n {(() => {\n if (props.isAlumni) {\n return (\n <>\n Alumni\n \n );\n }\n })()}\n
\n
\n

\n {props.involvement}\n

\n

{props.description}

\n {IS_WIP && (\n
\n
\n {/*
\n \n \n {props.email}\n \n
*/}\n {/*
\n \n \n {props.phone}\n \n
\n
\n \n \n {props.linkedIn}\n \n
*/}\n
\n
\n )}\n
\n );\n};\n","import React, { useEffect } from \"react\";\nimport { Person } from \"@components/ProjectPeople/ProjectPeople\";\nimport { TEXT } from \"@statics\";\nimport \"./ProjectV2Team.css\";\nimport { useState } from \"react\";\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport axios from \"axios\";\nimport dotenv from \"dotenv\";\nimport { Alert, CircularProgress, Collapse } from \"@mui/material\";\nimport { Member } from \"@pages/ProjectV2/types\";\n\ninterface PropsOBJ {\n project: string;\n}\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\nconst ORDER_OF_POSITIONS = ['principal investigator', 'lab secondary', 'project lead', 'coding team lead', 'lab manager', 'assistant lab manager', 'social coordinator', 'workshop coordinator', 'project manager', 'lead developer', 'project secondary', 'research assistant (co-lead)', 'research assistant', 'co-pilot', 'volunteer', '402 student', '...'];\n\n\nconst ProjectTeamV2: React.FC = (props) => {\n\n const { project } = props;\n\n const [openAlumniCollapse, setOpenAlumniCollapse] = useState(false);\n\n // list of all non-alumni team members\n const [teamMembers, setTeamMembers] = useState>([]);\n // list of all alumni team members\n const [alumni, setAlumni] = useState>([]);\n\n const [callComplete, setCallComplete] = useState(false);\n const [resSuccess, setSuccess] = useState(false);\n\n const getMembers = async () => {\n await axios\n .get(`${baseURL}/api/members/${project}`)\n .then((response) => {\n setTeamMembers(filterByPosition(response.data.data, false));\n setAlumni(filterByPosition(response.data.data, true));\n setSuccess(true);\n })\n .catch((err) => {\n // do nothing with the error\n });\n setCallComplete(true);\n };\n\n useEffect(() => {\n getMembers();\n }, [])\n\n function filterByPosition(members: Member[], isAlumni: boolean) {\n\n // Convert all positions to lower case for case-insensitive comparison\n const lowerCasePositions = ORDER_OF_POSITIONS.map(position => position.toLowerCase());\n\n // First, filter and map members based on validity of their position and if their alumni status matches isAlumni\n const filteredAndMappedMembers = members.filter((item) => {\n return (item.isAlumni == isAlumni);\n });\n\n // Then, sort the results based on the order of positions\n const orderedMembers = filteredAndMappedMembers.sort((a, b) => {\n const posA = lowerCasePositions.indexOf(a.positions[0].position.toLowerCase());\n const posB = lowerCasePositions.indexOf(b.positions[0].position.toLowerCase());\n return posA - posB;\n });\n\n return orderedMembers;\n }\n\n return (\n
\n
\n
\n

Team Members

\n
\n
\n
\n
\n {callComplete ?\n (resSuccess ? (\n <>\n
\n {teamMembers.length > 0 ? (\n teamMembers.map((member, index) => {\n // Find the matching position object based on currentProject\n const matchingPosition = member.positions.find(\n (position) => position.project === project\n );\n\n // Use the matching position object to display the position name, \n // otherwise fallback to the first position\n const displayedPosition = matchingPosition?.position || member.positions[0].position;\n\n return (\n \n )\n })\n ) : (\n \n {TEXT.PROJECT_TEAM_PAGE.EMPTY_MEMBER_LIST}\n \n )\n }\n
\n
\n
\n

Alumni

\n
\n
\n \n {alumni.length > 0 ? (\n alumni.map((member, index) => {\n // Find the matching position object based on currentProject\n const matchingPosition = member.positions.find(\n (position) => position.project === project\n );\n\n // Use the matching position object to display the position name, \n // otherwise fallback to the first position\n const displayedPosition = matchingPosition?.position || member.positions[0].position;\n\n return ()\n })\n ) : (\n \n {TEXT.PROJECT_TEAM_PAGE.EMPTY_ALUMNI_LIST}\n \n )\n }\n \n
setOpenAlumniCollapse(!openAlumniCollapse)}>\n {openAlumniCollapse ? : }\n
\n
\n \n ) : (\n \n {TEXT.PROJECT_TEAM_PAGE.RESPONSE_ERROR}\n \n )\n ) : (\n \n )\n }\n
\n
\n );\n};\n\nexport default ProjectTeamV2;\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/compModel.f6f476e5.png\";","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import './ProjectJoinV2.css';\nimport { TEXT, ROUTES } from \"@statics\";\nimport PROJECT_TEXT, { PROJECT } from \"@statics/projectsV2\";\nimport visualAttention from '@statics/images/JoinTeam/visualAttention.png';\nimport compModel from '@statics/images/JoinTeam/compModel.png';\nimport appResearch from '@statics/images/JoinTeam/appliedResearch.png';\nimport dataVis from '@statics/images/JoinTeam/dataVis.png';\nimport js from '@statics/images/JoinTeam/JS.png';\nimport ProjectGallery2 from '@components/ProjectGallery2/ProjectGallery2';\nimport browser from \"@statics/images/JoinTeam/browser.png\"\nimport email from '@statics/images/JoinTeam/email.png';\nimport { MdKeyboardDoubleArrowUp } from \"react-icons/md\";\nimport { useHistory } from 'react-router-dom';\n\ninterface PropsOBJ {\n project_id: string;\n}\n\nconst ProjectV2Join = (props: PropsOBJ) => {\n const { project_id } = props;\n\n const history = useHistory();\n\n const currentProject: PROJECT | undefined = PROJECT_TEXT.find(\n (element) => element.project_title.toLowerCase() == project_id.toLowerCase()\n );\n\n return (\n
\n\n\n
\n

What We Do

\n {\n currentProject?.joinTeam?.whatWeDo.map((item, index) => {\n\n return (

{item}

)\n })\n }\n
\n
\n

You might like this if you enjoy...

\n
\n {\n [['JavaScript', js], ['Applied Research', appResearch], ['Data Visualization', dataVis], ['Limits of visual attention', visualAttention], ['Computational Modeling', compModel]].map((item, index) => {\n return (\n
\n \n
\n )\n })\n }\n
\n
\n \n

Past Projects

\n {\n currentProject?.pastProjects?.map((item, index) => {\n\n return (\n
\n

{item.title}

\n

\n {item.description}\n

\n
\n )\n })\n }\n
\n {\n currentProject!.testimonials &&\n\n
\n \n
\n }\n \n

Application Instructions

\n
\n
\n \n

01

\n
\n
\n

Head over to the Orientation page to see if our lab philosophy matches yours

\n \n
\n Go\n
\n
\n
\n
\n
\n \n

02

\n
\n
\n

Mail vclmanager@gmail.com with “VCL Co-Pilots” as subject, and include:

\n
    \n
  • \n   - Resume/CV\n
  • \n
  • \n   - List of relevant courses you have taken so far\n
  • \n
  • \n   - Research projects you’re interested in and why\n
  • \n
\n \n
\n Go\n
\n
\n
\n
\n \n
\n {\n window.scrollTo(0, 0);\n }}\n >\n
\n \n
\n

Back to Top

\n
\n \n \n )\n};\n\nexport default ProjectV2Join; ","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAlCAYAAADvLtGsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGKSURBVHgB7ZlNTsMwEIXfJA7rHiHcoFlQlsASiartBSg5QekJKCegOQGKOAD/+64rJHqEHCFLBKmHcVSk0qbLSk7kT7LijEd2XjzjSBNK3+cjMK5RYwh4urzojCl9mzMagPaDQw8NokpMppnOTDP90sJIjHINGv85lT6ESLZ4hj0ja0w18y2k0dozbKK2LMxp3O3MTDd9nT/LTCOtgml8HmVimkpYjmTyLO4elT4PLx8Je/oUe0Ty4ArqINJfyL3g53OXX1XOZIow0Jpamvhe7kPzZnxCWoB6InYitpwI46UXzHz9fcdMfewRs/7SXyaSGC0Jib5HdLPpYyKnLgdAtrq2Vv32poMRo1APwrV+e5dTlZhcgjSVSM1hI2SE0bBqqOoASIbd4wksRlLjBP93q6Tx35na4sTYihNjK06MrTgxtuLE2IoTYytOjK04MbbixNiKE2Mr26UmoqHUjxcgO+tmTOgxOKwaqyoChtrTj6ghTcsZWqD+5JDfHUr7xQCFClFnCrWIB1H+C2XygmeZ4zwfAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAhCAYAAABN2CLhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO7SURBVHgB1ZhNUhpBGIa/HjExO46gy1REmU2qgI1UCans8AQhJwieADwBeALJCXCXVMDCjVDJBiJaWYYjsCEmOjOd721oHAh/M4qQt0qZYbp7Hrq/v26i/1AC/yq11geSlJOCgrSiEiTaTkAcJF+/agbK9daelFTo4fce0gpJShlkqKAkuWlYVOKvtgLk0J4G1loTa/F45GWblqxK/eodfxT1PcA/1RubhqtNR/Is44Et7eqXb9dhWqLO6tdZnuVi//bc/WwAzWbRWf9zZ/KknwJcWE7jc+17hp5Y1cbPIM/wiSOdHO4Z/D3DHdE4aCgeNzv70dABr4NqtEZGnm0+S0+kav3HpnXTrTJomhk6DBtPxnaKo+2McZ0TsVCOyDlUNxxVyrWrBgakBQrjwyz5hWGYqWVYZiISOh/X1pg0SCK6W5DSMqWKJjKMARcFjghmO1YDZon32eIu/jZitie1N6YNloyZTQygHdSS1qPbeT9HVKUKa6LZfXFnTgOeCQ1hAIDzZZP/go9p5+XaZV4S5whS4exjMrptHphmZ1a/mdAQwBPRkCkkHVPvDWznrRI8nXxIRQjuzzFLrRpHiqNkdCc9b/+5oLX2Y6GMjiyslH3T9eygyuG4H89wCvcAfhPbzXkZwxM0hMgiSHJYlB1t55XaZWqevtWLa+XQ6IeQhhjsFdgXNLQf3Tm1DLsfWZQDlWbZOVKyTc49MFljY/A88gUNwc6F4Gyl1Yvn+XF2rlOyriJtwTbMkYl8yjc0bFNIcTL8rcyM2jkihE7JWhyBsg+pbXxB6+yllpp6zqQdVBdcSBjIpDpCoKYZZFk2Ka5tfCcrz9DjgOFMcFAJc+k7KBIGMqlug5oGWdYN7jfLeoKeBKyfJyM7RZeD9iUO3W0U+MiqeAWfG3oWsBYcFCUux+Fj1C6J6HZhtI0qyEbBPSSqwDyN5gXWQonLH1NrFICXL1ow9qyK91ySMjh33Xp4GscMWNIuaWC/CWGc3DOuKslf3fw8/aZCK2CeAe1QAPabECZpyFSETCPWz+ozEfopgLVGZjwzK7tOhLZ/Y6kWD6w1BI7sOgV8LDQ2lrP2aYvQKPikDcc/0G5gFDWT9mmLkhscG47KV3X2MaQh6H5hk76vwvwXNQ/RkHPassCbj1338wE0QpoqbJYMrOUCD+otmVbAIKPt8NmYFl8fB+hZ+OxiuSdMfYENkzdg2dgIdgLG7e2p/Xw9K/rJwxBG1v0jVkkoDZAx1dEjDvUC0kiRNFb2qFcaso2CDNd/AVwtnWA8fM0IAAAAAElFTkSuQmCC\"","import \"./ProjectRouter.css\";\nimport { Route, Redirect, Switch } from \"react-router-dom\";\nimport ProjectV2Default from \"@pages/ProjectV2/Pages/Default/ProjectV2Default\";\nimport ProjectV2Publications from \"../Pages/Publications/ProjectV2Publications\";\nimport ProjectV2Team from \"../Pages/Team/ProjectV2Team\";\nimport PROJECT_TEXT, { PROJECT } from \"@statics/projectsV2\";\nimport ProjectV2Join from \"../Pages/Join/ProjectV2Join\";\n\ninterface PropsOBJ {\n project_id: string;\n isPages: boolean;\n subpages: string[];\n}\n\nconst ProjectRouter = (props: PropsOBJ) => {\n const { project_id, isPages, subpages } = props;\n\n let currentProject: PROJECT | undefined = PROJECT_TEXT.find(\n (element) => element.project_title.toLowerCase() == project_id.toLowerCase()\n );\n\n if (!currentProject) {\n window.location.href = \"/errorPage\"\n }\n\n return (\n \n {PROJECT_TEXT.map((p, index) => {\n return (\n {\n return ;\n }}\n key={index}\n />\n )\n })}\n {\n if (!(currentProject!.joinTeam!.whatWeDo!.length > 0))\n window.location.href = '/errorPage'\n\n return ;\n }}\n />\n {\n return ;\n }}\n />\n {\n return ;\n }}\n />\n {subpages.map((subpage: string, index) => {\n return (\n {\n return \n }} \n key={index}/>\n );\n })}\n \n \n \n \n );\n};\n\nexport default ProjectRouter;\n","import { RouteComponentProps } from \"react-router-dom\";\nimport './ProjectV2Wrapper.css';\nimport ProjectRouter from '../ProjectRouter/ProjectRouter';\nimport { useState, useEffect } from 'react';\nimport { useAppDispatch } from \"@redux/hooks\";\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport { Collapse } from \"@mui/material\";\nimport { appActions } from \"@redux/slices/AppRedux\";\nimport PROJECT_TEXT from \"@statics/projectsV2\";\nimport { useLocation } from 'react-router-dom';\nimport { PROJECT } from \"@statics/projectsV2\";\nimport { set, sub } from \"date-fns\";\nimport ROUTES from \"@statics/routes\";\n\ninterface MatchParams {\n project_id: string;\n}\ninterface ProjectProps extends RouteComponentProps { }\n\ninterface SidebarLinkOBJ {\n pseudoTitle: string | null; // property we can use to perform methods and inequalities on \n displayedTitle: string; // property that will be displayed to the user\n hyperlink: string; // the link we want to redirect to\n display: boolean; // should this item be displayed?\n}\n\nconst ProjectV2Wrapper: React.FC = ({ match }) => {\n\n const [menuSize, setMenuSize] = useState(0);\n const [openMobileDropdown, setOpenMobileDropdown] = useState(false);\n const dispatch = useAppDispatch();\n\n const currentProject = PROJECT_TEXT.find((project) => project.project_title === match.params.project_id);\n\n if (!currentProject) {\n window.location.href = \"/errorPage\"\n }\n\n const subPages: Array = [];\n const [isSubpage, setIsSubpage] = useState(false);\n\n\n if (currentProject && currentProject.subpages) {\n currentProject.subpages.forEach((subpage) => {\n subPages.push(subpage.project_title);\n });\n }\n\n function handleSubpage() {\n if (subPages) {\n setIsSubpage(true);\n }\n }\n\n function handleResize() {\n if (window.innerWidth <= 700) {\n // mobile navbar\n setMenuSize(\n 132\n )\n } else {\n // global-nav-bar\n setMenuSize(\n 83.5\n )\n }\n\n }\n useEffect(() => {\n dispatch(appActions.setInProjectsPage(true));\n setMenuSize(document.getElementById(\"global-nav-bar\")!.offsetHeight)\n\n // handle if there are subpages\n handleSubpage();\n // handle initial resize on window depending on screen size\n handleResize();\n // Set up the event listener\n window.addEventListener('resize', handleResize);\n console.log(menuSize)\n\n // Clean up the event listener on component unmount\n return () => {\n window.removeEventListener('resize', handleResize);\n dispatch(appActions.setInProjectsPage(false));\n };\n }, []); // Empty dependency array ensures the effect runs only on mount and unmount\n\n\n\n\n const listOfLinks: SidebarLinkOBJ[] = [\n {\n pseudoTitle: null,\n displayedTitle: 'Home',\n hyperlink: `/projects/${match.params.project_id}/`,\n // subpages will be handled unqiuely at the render of these links\n display: true,\n },\n {\n pseudoTitle: 'join',\n displayedTitle: 'Join',\n hyperlink: `/projects/${match.params.project_id}/join`,\n display: currentProject!.joinTeam!.whatWeDo.length > 0\n },\n {\n pseudoTitle: 'team',\n displayedTitle: 'Team',\n hyperlink: `/projects/${match.params.project_id}/team`,\n display: true,\n },\n {\n pseudoTitle: 'publications',\n displayedTitle: 'Publications',\n hyperlink: `/projects/${match.params.project_id}/publications`,\n display: currentProject!.publications != undefined\n },\n ]\n\n function getLastPart(url: string): string | null {\n // Regex to match the last part of the URL\n const regex = /\\/projects\\/[^\\/]+\\/([^\\/]+)/;\n const match = url.match(regex);\n if (match) {\n return match[1];\n } else {\n return null;\n }\n }\n\n const location = useLocation();\n var lastPartURL = getLastPart(location.pathname)\n\n // Construct the full URL\n const fullUrl = `${window.location.origin}${location.pathname}${location.search}${location.hash}`;\n\n if (!(lastPartURL === \"join\" || lastPartURL === \"team\" || lastPartURL === \"publications\" || lastPartURL === null || location.pathname === \"/projects/Correlation/Mainstream Correlation\" || location.pathname === \"/projects/Correlation/Sequence Correlation\" || location.pathname === \"/projects/Coding Team/Website Development\" || location.pathname === \"/projects/Coding Team/Experiment Framework Maintenance\")) {\n window.location.href = \"/errorPage\";\n }\n\n const renderedLinks: any = listOfLinks.map((item: SidebarLinkOBJ, index: number) => {\n\n if (!item.display)\n return\n if (item.displayedTitle != \"Home\") {\n return (\n \n )\n } else {\n\n if (subPages) {\n return (\n
\n \n {\n subPages.map((subpageTitle: string, index1: number) => {\n return (\n \n );\n })\n }\n
\n )\n } else {\n return (\n \n )\n\n }\n }\n })\n\n return (\n
\n
\n
\n
\n
\n
\n

Now Viewing

\n

{match.params.project_id == 'Image Transitions' ? \"I.T.\" : match.params.project_id}

\n
\n
\n
\n {\n renderedLinks\n }\n
\n\n
\n
\n
\n
\n
{ setOpenMobileDropdown(!openMobileDropdown) }}>\n {match.params.project_id}\n {openMobileDropdown ? : }\n
\n \n {\n renderedLinks\n }\n \n\n
\n
\n \n
\n
\n
\n );\n}\n\nexport default ProjectV2Wrapper;","import React from 'react';\nimport './GetInvolvedSidebar.css';\nimport { useHistory } from 'react-router-dom';\n\ninterface propsOBJ {\n pRef: React.RefObject;\n labMemberRef: React.RefObject;\n coPilotRef: React.RefObject;\n dsCoPilotRef: React.RefObject;\n volunteerRef: React.RefObject;\n directedStudiesRef: React.RefObject;\n raRef: React.RefObject;\n ctRef: React.RefObject;\n customAutoScroll: (refOBJ: React.RefObject) => void;\n sidebarState: boolean;\n setbarState: (boolean: boolean) => void;\n}\n\nconst GetInvolvedSidebar = (props: propsOBJ) => {\n const history = useHistory();\n\n const { pRef, labMemberRef, coPilotRef, dsCoPilotRef, volunteerRef, directedStudiesRef, raRef, ctRef, customAutoScroll, sidebarState, setbarState } = props;\n\n return (\n\n \n )\n}\n\nexport default GetInvolvedSidebar;","export default __webpack_public_path__ + \"static/media/9.e57e331f.jpg\";","import React from 'react';\nimport './GetInvolved.css';\nimport { ROUTES } from '@statics';\nimport LabGoalsFooter from '@components/LabGoalsFooter';\nimport { Link } from 'react-router-dom';\nimport { useRef } from 'react'\nimport GetInvolvedSidebar from '@components/GetInvolvedSidebar';\nimport { useState, useEffect } from 'react'\nimport menuIcon from '@statics/images/menu-icon.png';\nimport ResearchIMG from '@statics/images/JoinTeam/9.jpg';\n\ninterface GetInvolvedProps { }\n\nconst GetInvolved: React.FC = props => {\n\n\tconst [sidebarState, setbarState] = useState(true)\n\tconst [menuSize, setMenuSize] = useState(132);\n\n\tconst pRef = useRef(null)\n\tconst labMemberRef = useRef(null)\n\tconst coPilotRef = useRef(null)\n\tconst dsCoPilotRef = useRef(null)\n\tconst volunteerRef = useRef(null)\n\tconst directedStudiesRef = useRef(null)\n\tconst raRef = useRef(null)\n\tconst ctRef = useRef(null)\n\n\tconst customAutoScroll = (refOBJ: React.RefObject) => {\n\t\tconst navHeight = document.getElementById('nav')!.clientHeight\n\t\tconst targetPosition = refOBJ.current!.offsetTop - navHeight\n\n\t\twindow.scrollTo({\n\t\t\ttop: targetPosition,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tfunction handleResize() {\n\t\tif (window.innerWidth <= 700) {\n\t\t\t// mobile navbar\n\t\t\tsetMenuSize(\n\t\t\t\t132\n\t\t\t)\n\t\t} else {\n\t\t\t// global-nav-bar\n\t\t\tsetMenuSize(\n\t\t\t\t83.5\n\t\t\t)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\t// Set up the event listener\n setMenuSize(document.getElementById(\"nav\")!.offsetHeight)\n\t\twindow.addEventListener('resize', handleResize);\n\t\tconsole.log(menuSize)\n\n\t\t// Clean up the event listener on component unmount\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', handleResize);\n\t\t};\n\t}, []); // Empty dependency array ensures the effect runs only on mount and unmount\n\n\n\tfunction applicationInstructions(position: string) {\n\t\treturn
\n\t\t\t See Application Instructions Here \n\t\t\t
    \n\t\t\t\t
  1. Take a look at our Orientation page to see if our lab philosophy matches yours and to get a rough idea on how our lab operates.
  2. \n\t\t\t\t
  3. Browse through our projects and see if there are any projects you’d like to be a part of.
  4. \n\t\t\t\t
  5. Send an e-mail to vclmanager@gmail.com with {position} in the subject line, and make sure to include the following information:
  6. \n\t\t\t\t
      \n\t\t\t\t\t
    • Your resume/CV
    • \n\t\t\t\t\t
    • A list of related courses you have taken so far
    • \n\t\t\t\t\t
    • The research projects you’re interested in and why you’re interested in them
    • \n\t\t\t\t
    \n\t\t\t
\n\t\t
\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\"Sidebar {\n\t\t\t\t\tdocument.getElementById('get-involved-sidebar')!.style.display = 'block'\n\t\t\t\t\tdocument.getElementById('info-icon')!.style.display = 'none'\n\t\t\t\t\tsetbarState(!sidebarState)\n\t\t\t\t}} />
\n\t\t\t\t
\n\t\t\t\t\n
\n
\n
\n

Join Our Team

\n
\n
\n

Interested in research? Good news, we’re always looking for new co-pilots.

\n

\n Co-Pilots sign a contract with the lab that lasts for a school term, with the possibility for renewal. Co-Pilots are assigned to a particular project team based on their interests but have the freedom to explore different projects.\n

\n

\n No background in research is needed, and co-pilots have the flexibility of helping out whenever they want!\n

\n
\n {
\n \n
}\n
\n\t\t\t\t\n\n
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Participant

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tSign up for any experiment being conducted at the Visual Cognition Lab through the VCL Subject Sign-up System.\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tSign up for experiments at: www.reservax.com/ubcviscog/\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Lab Member

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tPeople hold different roles within the Visual Cognition Lab, but every* member begins as a research \"Co-Pilot.\" From the Co-Pilot position, members may branch out as they wish\n\t\t\t\t\t\t\t\tor remain in Co-Pilot status. To read more about the Co-Pilot\n\t\t\t\t\t\t\t\trole/application and discover what the other lab positions hold, browse the navigation bar on the left or click one of the following links:\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t*Exceptions can be made for prospective Directed Studies students\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tNote that if you were previously a lab member but have been away for at least a term, you will need to go through the application process again.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Co-Pilot...

\n\t\t\t\t\t\t\t

To be a co-pilot, you don't need to have any background in research and you can help out whenever you want. Co-Pilots sign a contract with the lab\n\t\t\t\t\t\t\t\tthat lasts for a school term, with the possibility for renewal. Co-Pilots are assigned to a particular project team based on their interests, but have\n\t\t\t\t\t\t\t\tthe freedom to explore different projects. If you would like to join one of the project teams (listed here), make this known during your initial\n\t\t\t\t\t\t\t\tinterview. If the Co-Pilot position sparks your insterest, please see the \"Application Steps\" section below.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

Co-Pilot research activities include...

\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
  • Shadowing/observing the various elements of lab work (experiment running, data entry, analysis, etc.)
  • \n\t\t\t\t\t\t\t\t
  • Attending our lab meetings/project meetings
  • \n\t\t\t\t\t\t\t\t
  • Running experiments
  • \n\t\t\t\t\t\t\t\t
  • Analyzing data
  • \n\t\t\t\t\t\t\t\t
  • Debriefing participants
  • \n\t\t\t\t\t\t\t\t
  • Reviewing literature
  • \n\t\t\t\t\t\t\t\t
  • Making classroom announcements
  • \n\t\t\t\t\t\t\t\t
  • Helping us out get more \"media\" into our website (pictures, videos... you can participate either by filming/taking photos or starring in one!)
  • \n\t\t\t\t\t\t\t\t
  • ...And more!
  • \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{applicationInstructions(\"VCL Co-Pilots\")}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Data Science Co-Pilot...

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tWe are looking for a Co-pilot with a strong Data Science or Statistics background to join the percepttual Modes (SHIVA) project. The successful applicant\n\t\t\t\t\t\t\t\tdoes not need to have extensive prior experience in research projects, but should be able to demonstrate expertise in data science tasks. Other\n\t\t\t\t\t\t\t\tresponsibilities includes:\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
  • Attending project meetings/lab meetings
  • \n\t\t\t\t\t\t\t\t
  • Running experiments
  • \n\t\t\t\t\t\t\t\t
  • Analyzing data
  • \n\t\t\t\t\t\t\t\t
  • Reviewing literature
  • \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{applicationInstructions(\"Data Science Co-Pilots\")}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Volunteer...

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tVolunteers take priority over Co-Pilots in being trained in research activities and must dedicate a minimum of\n\t\t\t\t\t\t\t\t 9 hours per week to the lab. Volunteers must have signed a Volunteer Contract and submitted a letter of intent.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tVolunteers are members who have been Co-Pilots or Directed Studies students for a period of time and have then\n\t\t\t\t\t\t\t\tautonomous, take more initiative, and commit more time to the lab than Co-Pilots. The contract lasts a minimum of 1 school\n\t\t\t\t\t\t\t\tterm (3 months duing the winter session/2 months duing the summer session) and a maximum of 2 school terms. After that, a\n\t\t\t\t\t\t\t\tVolunteer can either renew the contract or go on to become an RA or Project Leader with recommendations from other lab members.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tA volunteer will be able to do everthing that a Co-Pilot can do, but will have priority in receiving training in research activities\n\t\t\t\t\t\t\t\tbecause thehy are committing to their project leader a set amount of hours. A Volunteer must commit at least 9 hours a week to\n\t\t\t\t\t\t\t\tagreed upon lab duties. A commitment of 9 hours a week is approximately the minimum amount of time needed to gain the skills that a\n\t\t\t\t\t\t\t\tresearch lab would expect from a seasoned volunteer.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t Details\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\tVolunteers are lab members who have been\n\t\t\t\t\t\t\t\t\t\t customAutoScroll(coPilotRef)}> Co-Pilots \n\t\t\t\t\t\t\t\t\t\tor\n\t\t\t\t\t\t\t\t\t\t customAutoScroll(directedStudiesRef)}> Directed Studies students \n\t\t\t\t\t\t\t\t\t\tfor a period of time and have then signed a Volunteer Contract making specific commitments to the lab.\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Directed Studies/COGS 402 Student...

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tDirected Studies take priority over Co-Pilots in being trained in research activities and must dedicate a minimum of 9 hours per week to the lab.\n\t\t\t\t\t\t\t\tIt is a good idea to apply for a Directed Studies position early - at least a term before the start of the course.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tA Directed Studies student will have the minimum rights that a Volunteer does, but will have priority in using lab resources (participants, computers,\n\t\t\t\t\t\t\t\tstatistical analysis advising, etc.) for research activities because they will have deadlline for submitting a final product to their course supervisor.\n\t\t\t\t\t\t\t\tA Directed Studies student must commit at least 9 hours a week to agreed upon lab duties.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tFor Directed Studies Students...\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tWe typically have THREE meetings:\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
  1. Beginning of the term, to go over the grading criteria in detail. The title says COGS402 but we apply these rough guidelines for other courses as well.
  2. \n\t\t\t\t\t\t\t\t
  3. Midpoint meeting, to cehck up on your progress. If things aren't going as planned, we still have time to change course so you have a decent amount of\n\t\t\t\t\t\t\t\t\tmaterial to cover on your term paper.
  4. \n\t\t\t\t\t\t\t\t
  5. Reviewing literature
  6. \n\t\t\t\t\t\t\t\t
  7. End of the term, for you to make your case on what grade you deserve (as awkward as this sounds!) This is so that we can capture the truth, and write down\n\t\t\t\t\t\t\t\t\tevidence when we send in the evaluation over to the instructor.
  8. \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{applicationInstructions(\"VCL Co-Pilots\")}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tPlease keep in mind that we typically prefer Directed Studies students to begin with a co-pilot position with our lab. However, exceptions can be made.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\tCOGS 402 FAQ!\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
  • Q: When should I apply to the VCL for my 402?
  • \n\t\t\t\t\t\t\t\t\t\t
  • A: It is recommended that you apply as a Co-Pilot a term before the start of your 402. That way, you are able to get acquainted with the lab environment and the ongoing research so that you can come up with your own research proposal.
  • \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
  • Q: Who can I contact for more help/information about 402 at the VCL?
  • \n\t\t\t\t\t\t\t\t\t\t
  • A: If you would like more information on how the 402 is conducted at the VCL, please email the lab manager at vclmanager@gmail.com. For general 402 inquiries please contact the instructor or program advisor.
  • \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
  • Q: Why is there a course this in the COGS program? / Why is this course required when I’m not planning on going into research?
  • \n\t\t\t\t\t\t\t\t\t\t
  • A:COGS 402 is designed to give students exposure to research before they graduate and provide them with the opportunity to learn invaluable skills outside of the classroom.
  • \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
  • Q: Do I have to come up with my own project, or can I join one?
  • \n\t\t\t\t\t\t\t\t\t\t
  • A:Students are expected to propose their own extension or focus within an existing project at the VCL or to propose a novel project.
  • \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
  • Q: Is it better to take 402 during the winter session or the summer?
  • \n\t\t\t\t\t\t\t\t\t\t
  • A:It’s all about personal preference, and there are advantages/disadvantages to both. However, it good to know that COGS 402 require 9 hours of lab per week so make sure your schedule can accommodate that.
  • \n\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved as a Research Assistant...

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tResearch Assistants (RAs)…\n\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
  • Are members of the lab officially hired to carry out experiments
  • \n\t\t\t\t\t\t\t\t\t
  • Take priority over Volunteers in using lab resources
  • \n\t\t\t\t\t\t\t\t\t
  • Must dedicate a minimum of 9 hours per week to lab
  • \n\t\t\t\t\t\t\t\t\t
  • Must be elected by senior RAs/Project Leaders and approved by Dr. Rensink
  • \n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tAn RA will be able to do everything that a Volunteer can do, but will be paid and will have priority in\n\t\t\t\t\t\t\t\tusing the lab’s resources. An RA must commit at least 9 hours a week to agreed upon lab duties. Most Project Leaders\n\t\t\t\t\t\t\t\thave RA status. Typically, RAs are elected by their Project Leaders but final decisions about who fills these roles must be\n\t\t\t\t\t\t\t\tapproved by Dr. Rensink.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t Details\n\t\t\t\t\t\t\t\t\t

After a\n\t\t\t\t\t\t\t\t\t\t customAutoScroll(volunteerRef)}> Volunteer \n\t\t\t\t\t\t\t\t\t\thas gained significant handle of the project in which they’re involved, they may be eligible to be an RA. An RA will be able to do everything that a Volunteer can do, but will be paid and will have priority in using the lab’s resources. An RA must commit at least 9 hours a week to agreed upon lab duties. Most Project Leaders have RA status. Typically, RAs are elected by their Project Leaders but final decisions about who fills these roles must be approved by Dr. Rensink.

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Get Involved in the Coding Team...

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tCoding team members…\n\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
  • Are volunteers that would like to develop their technical skills
  • \n\t\t\t\t\t\t\t\t\t
  • Can be involved in specific branches of technological maintenance of the lab including (but not limited to)
  • \n\t\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t\t
    • Website
    • \n\t\t\t\t\t\t\t\t\t\t
    • Coding Workshops
    • \n\t\t\t\t\t\t\t\t\t\t
    • Software
    • \n\t\t\t\t\t\t\t\t\t\t
    • Data Analysis Measures
    • \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\tApplication Instructions\n\t\t\t\t\t\t\t\t\t

If you are interested in an opportunity where you can develop your tech skills while getting involved in a research setting please send an email to vclmanager@gmail.com with your resume/CV.

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t
\n\t);\n};\n\nexport default GetInvolved;\n","export default \"data:image/png;base64,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\"","import React, { useState, useEffect } from 'react';\nimport './PageNav.css';\n\ninterface PageNavProps {\n items: string[];\n currentSelection: string;\n onItemSelected: (item: string) => void;\n width?: string;\n defaultColumns?: number;\n}\n\nconst PageNav: React.FC = ({ items, currentSelection, onItemSelected, width = '70%', defaultColumns = 7 }) => {\n const [columns, setColumns] = useState(getGridColumns(items.length, window.innerWidth, defaultColumns));\n\n useEffect(() => {\n const handleResize = () => {\n setColumns(getGridColumns(items.length, window.innerWidth, defaultColumns));\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [defaultColumns]);\n\n const gridStyle = {\n width: width,\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n };\n\n return (\n
\n {items.map((item, index) => {\n let displayedTitle:string = item;\n if (item == 'Image Transitions')\n displayedTitle = 'IT'\n return(\n
onItemSelected(item)}>\n
\n {displayedTitle}\n
\n
\n )})}\n
\n );\n};\n\nconst getGridColumns = (itemCount: number, width: number, defaultColumns: number) => {\n if (width <= 700) {\n if (itemCount > 5) {\n return 2\n } else {\n return 1\n }\n } else {\n return defaultColumns;\n }\n};\n\nexport default PageNav;","\nimport { useState, useEffect } from \"react\";\nimport \"./People.css\";\nimport axios from \"axios\";\nimport dotenv from \"dotenv\";\nimport { MdAccountCircle } from \"react-icons/md\";\nimport Alert from \"@mui/material/Alert\";\nimport TEXT from \"@statics/text\";\nimport { CircularProgress, Collapse } from \"@mui/material\";\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport PageNav from \"@components/PageNav/PageNav\";\nimport { Member } from \"@pages/ProjectV2/types\";\n\n\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\nconst IS_WIP = process.env.REACT_APP_WIP === \"development\";\n\nconst ORDER_OF_POSITIONS = ['principal investigator', 'lab secondary', 'project lead', 'coding team lead', 'lab manager', 'assistant lab manager', 'social coordinator', 'workshop coordinator', 'project manager', 'lead developer', 'project secondary', 'research assistant (co-lead)', 'research assistant', 'co-pilot', 'volunteer', '402 student', '...'];\n\n\nconst People = () => {\n const dummyList: Array = [\n \"Management\",\n \"Coding Team\",\n \"Correlation\",\n \"Ideo\",\n \"Image Transitions\",\n \"NCIS\",\n \"NOVA\",\n \"SHIVA\",\n ];\n\n // the page will be defaulted to bein on the first grid item\n const [currentProject, setCurrProject] = useState(dummyList[0]);\n\n const [currentList, setList] = useState>([]);\n\n const [resSuccess, setSuccess] = useState(false);\n\n const [callComplete, setCallComplete] = useState(true);\n\n\n // This is for styles, will highlight the first select nav-item for the user\n // Also, makes an api call to get all the lab's members \n useEffect(() => {\n getMembers();\n document\n .getElementById(dummyList[0].toLowerCase())!\n .classList.add(\"selected-item\");\n }, []);\n\n const getMembers = async () => {\n await axios\n .get(`${baseURL}/api/members`)\n .then((response) => {\n setList(response.data.data);\n setSuccess(true);\n })\n .catch((err) => {\n // do nothing with the error\n // console.log(err);\n });\n setCallComplete(false);\n // Height of content container is set to a preset value to ensure footer isn't right up against the\n // people page nav. This call ensures the height matches the correct height of the displayed data\n var element = document.getElementById('content-display-transition');\n if (element) {\n element.style.height = 'fit-content';\n }\n\n // Allows for the backend data to be displayed via a transition\n element = document.getElementById('member-list-transition');\n if (element) {\n element.style.opacity = '1';\n }\n };\n\n // filters members to ensure they match the current viewed project and their alumni status\n const filterMembers = (isAlumni: boolean) => {\n return (\n currentList\n .filter((item) => {\n if (currentProject == \"Management\") {\n return item.positions.some(\n (position) =>\n position.position === 'Lab Manager' ||\n position.position === 'Principal Investigator' ||\n position.position === 'Lab Secondary' ||\n position.position === 'Assistant Lab Manager' ||\n position.position === 'Social Coordinator' ||\n position.position === 'Workshop Coordinator'\n ) && item.isAlumni === isAlumni;\n }\n else {\n return item.positions.some(\n (position) => position.project === currentProject\n ) && item.isAlumni === isAlumni;\n }\n })\n )\n }\n\n function filterAndCreatePersonsByPosition(positions: string[], isAlumni: boolean) {\n\n // Convert all positions to lower case for case-insensitive comparison\n const lowerCasePositions = positions.map(position => position.toLowerCase());\n\n // First, filter members\n const filteredAndMappedMembers = filterMembers(isAlumni).filter((item) => {\n return item.positions.some(\n (position) => lowerCasePositions.includes(position.position.toLowerCase())\n );\n });\n\n // Then, sort the results based on the order of positions\n const orderedMembers = filteredAndMappedMembers.sort((a, b) => {\n const posA = lowerCasePositions.indexOf(a.positions[0].position.toLowerCase());\n const posB = lowerCasePositions.indexOf(b.positions[0].position.toLowerCase());\n return posA - posB;\n });\n\n return orderedMembers.map((item, index) => createSinglePerson(item, index));\n }\n\n\n const createSinglePerson = (item: Member, index: number) => {\n\n // Find the matching position object based on currentProject\n const matchingPosition = item.positions.find(\n (position) => position.project === currentProject\n );\n\n // Use the matching position object to display the position name, \n // otherwise fallback to the first position\n const displayedPosition = matchingPosition?.position || item.positions[0].position;\n\n return (\n
\n
\n \n
\n
\n
\n

\n {item.name.firstname + \" \" + item.name.lastname}\n

\n
\n
\n

{displayedPosition}

\n
\n
\n {item.blurb != '' && item.blurb}\n
\n
\n
\n )\n }\n\n const [openAlumniCollapse, setOpenAlumniCollapse] = useState(false);\n\n return (\n <>\n
\n
\n

OUR TEAM

\n

\n Meet the members of our lab and their respective teams\n

\n
\n {/*\n The items within the grid should be done dynamically, it should have inline styling for the number of items, instead of it being inside the css\n - An issue that comes with this is the that the nav bar width will become too wide and some titles will not fit within each grid component\n */}\n
\n {\n setCurrProject(item)\n }}\n width={\"70%\"}\n defaultColumns={8}\n />\n
\n
\n
\n {callComplete ? (\n \n ) : (resSuccess ? (\n <>\n {filterMembers(false).length > 0 ?\n (\n
\n {filterAndCreatePersonsByPosition(ORDER_OF_POSITIONS, false)}\n
\n ) : (\n \n {TEXT.PEOPLE_PAGE.EMPTY_MEMBER_LIST}\n \n )\n }\n
\n \n {filterMembers(true).length > 0 ?\n (\n
\n {filterAndCreatePersonsByPosition(ORDER_OF_POSITIONS, true)}\n
\n ) : (\n \n {TEXT.PEOPLE_PAGE.EMPTY_ALUMNI_LIST}\n \n )\n }\n
\n
setOpenAlumniCollapse(!openAlumniCollapse)}>\n {openAlumniCollapse ? 'Hide Alumni' : 'Show Alumni'}\n {openAlumniCollapse ? : }\n
\n \n ) : (\n \n {TEXT.PEOPLE_PAGE.RESPONSE_ERROR}\n \n ))}\n
\n
\n
\n \n );\n};\n\nexport default People;\n","interface Affiliations {\n CONTENT: {\n type: string;\n content: {\n title: string;\n href: string;\n pi?: string[];\n faculty?: string[];\n desc?: string;\n }[];\n }[];\n\n};\n\n\nconst AFFILIATIONS: Affiliations = {\n CONTENT: [\n {\n type: \"UBC Labs\",\n content: [\n {\n title: \"Brain and Attention Research (BAR) Lab\",\n href: \"https://barlab.psych.ubc.ca/\",\n pi: [\"Alan Kingstone\",]\n },\n {\n title: \"Imager Laboratory for Graphics, Visualization, and HCT\",\n href: \"https://www.cs.ubc.ca/labs/imager/imager.php\",\n faculty: [\"Robert Bridson\",\"Kellogg S. Booth\",\"Wolfgang Heidrich\", \"Karon MacLean\", \"Joanna McGrenere\", \"Tamara Munzner\", \"Dinesh Pai\", \"Ronald Rensink\", \"Alla Sheffer\", \"Michiel van de Panne\"]\n },\n {\n title: \"Memory and Cognition Lab\",\n href: \"https://memcoglab.psych.ubc.ca/\",\n pi: [\"Peter Graf\"]\n },\n {\n title: \"Sensory Perception and Interaction Research Group (SPIN)\",\n href: \"https://www.cs.ubc.ca/labs/spin/\",\n pi: [\"Karon MacLean\"]\n },\n {\n title: \"UBC Vision Lab\",\n href: \"https://visionlab.psych.ubc.ca/\",\n pi: [\"James T. Enns\"]\n },\n \n ]\n },\n {\n type: \"Other Universities\",\n content: [\n {\n title: \"Perception and Cognition Lab (Yale University)\",\n href: \"https://perception.yale.edu/\",\n pi: [\"Brian Scholl\",]\n },\n {\n title: \"Saiki Lab (Kyoto University)\",\n href: \"http://www.cv.jinkan.kyoto-u.ac.jp/site/\",\n pi: [\"Jun Saiki\"]\n },\n {\n title: \"Simons Lab (University of Illinois)\",\n href: \"http://www.simonslab.com/\",\n pi: [\"Daniel J. Simmons\"]\n },\n {\n title: \"Vision Sciences Lab (Harvard University)\",\n href: \"https://visionlab.harvard.edu/\",\n pi: [\"Ken Nakayama\", \"George Alvarez\", \"Yaoda Xu\", \"Patrick Cavanagh\"]\n },\n {\n title: \"Visual Attention Lab (Brigham and Women’s Hospital)\",\n href: \"https://search.bwh.harvard.edu/new/\",\n pi: [\"Jeremy Wolfe\", \"Todd Horowitz\"]\n },\n \n ]\n },\n {\n type: \"Affiliated Programs\",\n content: [\n {\n title: \"UBC Cognitive Systems Program (COGS)\",\n href: \"https://cogsys.ubc.ca/\",\n },\n {\n title: \"Media and Graphics Interdisciplinary Centre (MAGIC)\",\n href: \"https://www.magic.ubc.ca/\",\n },\n {\n title: \"Go Cognitive\",\n href: \"https://www.gocognitive.net/\",\n desc: \"FREE access to materials for students, educators, and researchers in cognitive psychology and cognitive neuroscience\"\n },\n {\n title: \"Vancouver Institute for Visual Analytics (VIVA)\",\n href: \"http://viva.sfu.ca/\",\n },\n {\n title: \"Andrew Wade VA Challenge Program (VA Challenge)\",\n href: \"https://andrewwade.ca/\",\n },\n \n ]\n },\n ]\n}\n\nexport default AFFILIATIONS;\n","\nimport { useState, useEffect} from \"react\";\nimport \"./Affiliations.css\"\nimport dotenv from \"dotenv\";\nimport AFFILIATIONS from \"@statics/affiliations\";\nimport { HiOutlineExternalLink } from \"react-icons/hi\";\nimport PageNav from \"@components/PageNav/PageNav\";\n\n\n\n\n\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\nconst IS_WIP = process.env.REACT_APP_WIP === \"development\";\n\ninterface Affiliation {\n type: string;\n content: {\n title: string;\n href: string;\n pi?: string[];\n faculty?: string[];\n desc?: string;\n }[];\n}\n\ninterface AffiliationContent {\n title: string;\n href: string;\n pi?: string[];\n faculty?: string[];\n desc?: string;\n}\n\n\n\nconst SingleAffiliation = (props: {data: AffiliationContent, index: number}) => {\n // This checks whether the user is browsing the website on a phone \n // This would help us render certain components differently\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 500);\n\n // This is there just to check if the user resizes the screen width on a device\n // it will mount the changes if the screen width changes\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 500);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const TitleWithLink = () => (\n \n

{props.data.title}

\n
\n );\n\n return (\n
\n
\n
\n \n
\n {props.data.pi &&\n
\n {\"PI: \" + props.data.pi.map((item:string) => item)}\n
\n }\n {props.data.faculty && \n
\n {\"Faculty: \" + props.data.faculty.map((item:string) => item)}\n
\n }\n
\n {!isMobile && (\n
\n \n \n \n
\n )}\n
\n )\n}\n\nconst Affiliations = () => {\n \n\n\n const [page,setPage] = useState(\"UBC Labs\");\n\n const navList: Array = [\n \"UBC Labs\",\n \"Other Universities\",\n \"Affiliated Programs\",\n ];\n\n const filteredAffiliations = AFFILIATIONS.CONTENT.filter((item: Affiliation) => item.type === page);\n\n return(\n <>\n
\n
\n

Affiliations

\n

Affiliated labs and programs

\n
\n setPage(item)}\n width={\"40%\"}\n defaultColumns={3} />\n
\n {filteredAffiliations[0].content.map((item: AffiliationContent, index: number) => \n \n )}\n
\n \n
\n \n );\n\n}\n\nexport default Affiliations;\n\n","import React from \"react\";\nimport './TimelineSearchbar.css';\nimport { SearchFilter } from '../../pages/Timeline/types';\n\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport { IconButton } from '@mui/material';\nimport {ReactComponent as SearchIcon} from '@statics/images/search-icon.svg';\nimport {useRef} from 'react'\n\ninterface TimelineSearchbarProps {\n setFilter: (obj: SearchFilter ) => void;\n filterBy: SearchFilter \n}\n\nconst TimelineSearchbar: React.FC = (props) => {\n\n const { setFilter, filterBy } = props;\n\n const textFieldRef = useRef(null);\n\n const handleKeyPress = (event:React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n\n setFilter({...filterBy, keyword: textFieldRef.current? textFieldRef.current.value : \"\"})\n }\n }\n\n\n return(\n
\n :not(style)': { m: 1 },\n }}\n noValidate\n autoComplete=\"off\"\n >\n e.target.value = \"\"}\n InputProps={{\n startAdornment: (\n \n \n setFilter({...filterBy, keyword: textFieldRef.current? textFieldRef.current.value : \"\"})}>\n \n \n \n
|
\n
\n \n ),\n }}\n />\n \n
\n );\n};\n\n\nexport default TimelineSearchbar;\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\nconst AuthorsFilter = ({\n authorSelected, setAuthorSelected,\n dummyData, \n setFilter, filterBy }: {\n authorSelected: string[],\n setAuthorSelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n }) => {\n\n const list = {\n 'name': 'Author',\n 'options': dummyData,\n };\n\n const handleChange = (event: SelectChangeEvent) => {\n const { target: { value } } = event;\n setAuthorSelected(\n typeof value === 'string' ? value.split(',') : value\n );\n\n setFilter({ ...filterBy, author: typeof value === 'string' ? value.split(',') : value })\n };\n\n return (\n \n {/*
\n {list.name}:\n
*/}\n
\n {\n // if (selected.length === dummyData.length) {\n // return 'All';\n // }\n // return selected.join(', ');\n return \"Authors\"\n }}\n sx={{ width: 120 }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n
\n
\n )\n}\n\nexport default AuthorsFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\nconst CategoriesFilter = ({categorySelected, setCategorySelected, dummyData, setFilter, filterBy}: {\n categorySelected: string[],\n setCategorySelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n}) => {\n const list = {\n 'name': 'Category', \n 'options': dummyData,\n };\n const handleChange = (event: SelectChangeEvent) => {\n const {\n target: { value },\n } = event;\n setCategorySelected(\n typeof value === 'string' ? value.split(',') : value,\n );\n setFilter({ ...filterBy, category: typeof value === 'string' ? value.split(',') : value })\n };\n\n return (\n \n {/*
\n {list.name}:\n
*/}\n
\n {\n // if (selected.length === dummyData.length) {\n // return 'All';\n // }\n // return selected.join(', ');\n return \"Categories\"\n }}\n sx={{ width: 120 }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n
\n
\n )\n}\n\nexport default CategoriesFilter\n","import React from 'react'\nimport { useRef } from 'react'\nimport './DateRangePicker.css'\nimport { SearchFilter, dateTuple } from \"@pages/Timeline/types\";\nimport { date } from 'yup';\n\ninterface PropsOBJ {\n dateRange: [dateTuple?, dateTuple?],\n setDateRange: (array: [dateTuple, dateTuple]) => void,\n filterBy: SearchFilter,\n setFilter: (obj: SearchFilter) => void,\n isVisible: boolean,\n setVisible: (boolean: boolean) => void,\n}\n\nconst DateRangePicker = (props: PropsOBJ) => {\n\n const { dateRange, setDateRange, filterBy, setFilter, isVisible, setVisible } = props;\n\n const initialDate = useRef(null);\n const targetDate = useRef(null);\n\n const handleChange = () => {\n\n // This is here for the case where the target date is before the initial date, this will switch the two values before setting values\n if (initialDate.current?.value && targetDate.current?.value && (new Date(targetDate.current?.value) < new Date(initialDate.current?.value))) {\n const initialBeforeSwitch = initialDate.current.value\n const targetBeforeSwitch = targetDate.current.value\n\n initialDate.current.value = targetBeforeSwitch;\n targetDate.current.value = initialBeforeSwitch;\n }\n\n setDateRange([\n ['initial', initialDate.current?.value ? initialDate.current.value : \"\"],\n ['target', targetDate.current?.value ? targetDate.current.value : \"\"]\n ])\n\n setFilter({\n ...filterBy, date: [\n ['initial', initialDate.current?.value ? initialDate.current.value : \"\"],\n ['target', targetDate.current?.value ? targetDate.current.value : \"\"]\n ]\n })\n }\n\n return (\n
\n
\n \n
\n
\n

\n to\n

\n
\n
\n \n
\n
{\n handleChange()\n // if (setVisible && isVisible) {\n // setVisible(false)\n // }\n setVisible(false)\n }}\n >\n Submit\n
\n
\n
\n
\n )\n}\n\nexport default DateRangePicker;\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter, dateTuple } from \"@pages/Timeline/types\";\nimport DateRangePicker from \"../../components/DateRangePicker/DateRangePicker\"\nimport { useRef, useState, useEffect } from 'react'\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\nconst DateFilter = ({ dateRange, setRange, setFilter, filterBy }: {\n dateRange: [dateTuple, dateTuple],\n setRange: (array: [dateTuple, dateTuple]) => void,\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n}) => {\n\n const [isVisible, setVisible] = useState(false)\n\n return (\n \n \"Date\"}\n displayEmpty\n sx={{ width: 120 }}\n open={isVisible}\n onOpen={() => setVisible(true)}\n onClose={() => setVisible(false)}\n >\n \n \n \n )\n}\n\nexport default DateFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\nconst ProjectsFilter = ({projectSelected, setProjectSelected, dummyData, \n setFilter, filterBy}: {\n projectSelected: string[],\n setProjectSelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n}) => {\n const list = {\n 'name': 'Project', \n 'options': dummyData,\n };\n const handleChange = (event: SelectChangeEvent) => {\n const {\n target: { value },\n } = event;\n setProjectSelected(\n typeof value === 'string' ? value.split(',') : value,\n );\n\n setFilter({ ...filterBy, project: typeof value === 'string' ? value.split(',') : value,})\n };\n\n return (\n \n {/*
\n {list.name}:\n
*/}\n
\n {\n // if (selected.length === dummyData.length) {\n // return 'All';\n // }\n // return selected.join(', ');\n return \"Projects\"\n }}\n sx={{ width: 120 }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n
\n
\n )\n}\n\nexport default ProjectsFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\nconst MobileAuthorsFilter = ({\n authorSelected, setAuthorSelected,\n dummyData,\n setFilter, filterBy }: {\n authorSelected: string[],\n setAuthorSelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n }) => {\n\n const list = {\n 'name': 'Author',\n 'options': dummyData,\n };\n const handleChange = (event: SelectChangeEvent) => {\n const { target: { value } } = event;\n setAuthorSelected(\n typeof value === 'string' ? value.split(',') : value\n );\n\n setFilter({ ...filterBy, author: typeof value === 'string' ? value.split(',') : value })\n };\n\n return (\n\n \n {\n return 'Author';\n }}\n sx={{ width: 490, color: '#7e7e7e', textAlign: 'left' }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n \n\n\n\n\n\n // \n\n // \n // \n // {open ? : }\n // \n\n // \n // {list.options.map((name) => (\n // \n // {name}\n // \n // ))}\n\n // \n // \n\n\n )\n}\n\nexport default MobileAuthorsFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\n\nconst MobileCategoriesFilter = ({ categorySelected, setCategorySelected, dummyData, setFilter, filterBy }: {\n categorySelected: string[],\n setCategorySelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n}) => {\n\n const list = {\n 'name': 'Category',\n 'options': dummyData,\n };\n\n const handleChange = (event: SelectChangeEvent) => {\n const {\n target: { value },\n } = event;\n setCategorySelected(\n typeof value === 'string' ? value.split(',') : value,\n );\n setFilter({ ...filterBy, category: typeof value === 'string' ? value.split(',') : value })\n };\n\n return (\n\n \n {\n return 'Category';\n }}\n sx={{ width: 490, color: '#7e7e7e', textAlign: 'left' }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n \n\n\n\n\n\n // \n\n // \n // \n // {open ? : }\n // \n\n // \n // {list.options.map((name) => (\n // \n // {name}\n // \n // ))}\n\n // \n // \n\n\n )\n}\n\nexport default MobileCategoriesFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\nimport DateRangePicker from \"../../components/DateRangePicker/DateRangePicker\"\nimport { dateTuple } from \"@pages/Timeline/types\";\nimport { useState } from 'react'\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\n\nconst MobileDateFilter = ({ dateSelected, setDateSelected, dummyData,\n setFilter, filterBy, dateRange, setRange }: {\n dateSelected: string,\n setDateSelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter,\n dateRange: [dateTuple, dateTuple],\n setRange: (array: [dateTuple, dateTuple]) => void\n }) => {\n\n const [isVisible, setVisible] = useState(false)\n\n const list = {\n 'name': 'Date',\n 'options': dummyData,\n };\n const handleChange = (event: SelectChangeEvent) => {\n setDateSelected(event.target.value);\n\n // setFilter({ ...filterBy, date: event.target.value })\n };\n\n return (\n\n \n \"Date\"}\n displayEmpty\n open={isVisible}\n onOpen={() => setVisible(true)}\n onClose={() => setVisible(false)}\n sx={{ width: 490, color: '#7e7e7e', textAlign: 'left' }}\n >\n\n {/* {list.options.map((name) => (\n \n {name}\n \n ))} */}\n \n \n \n\n\n )\n}\n\nexport default MobileDateFilter\n","import React from \"react\";\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select, { SelectChangeEvent } from '@mui/material/Select';\nimport { SearchFilter } from \"@pages/Timeline/types\";\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n },\n },\n};\n\n\nconst MobileProjectsFilter = ({ projectSelected, setProjectSelected, dummyData,\n setFilter, filterBy }: {\n projectSelected: string[],\n setProjectSelected: React.Dispatch>,\n dummyData: string[],\n setFilter: (obj: SearchFilter) => void,\n filterBy: SearchFilter\n }) => {\n\n const list = {\n 'name': 'Project',\n 'options': dummyData,\n };\n \n const handleChange = (event: SelectChangeEvent) => {\n const {\n target: { value },\n } = event;\n setProjectSelected(\n typeof value === 'string' ? value.split(',') : value,\n );\n\n setFilter({ ...filterBy, project: typeof value === 'string' ? value.split(',') : value, })\n };\n\n return (\n\n \n {\n return 'Project';\n }}\n sx={{ width: 490, color: '#7e7e7e', textAlign: 'left' }}\n >\n {list.options.map((name) => (\n \n {name}\n \n ))}\n \n \n )\n}\n\nexport default MobileProjectsFilter\n","import * as React from 'react';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Collapse from '@mui/material/Collapse';\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\nimport { SearchFilter } from \"@pages/Timeline/types\";\nimport { dateTuple } from '@pages/Timeline/types';\n\nimport MobileAuthorsFilter from '@components/FilterDropdown/MobileAuthorsFilter';\nimport MobileCategoriesFilter from '@components/FilterDropdown/MobileCategoriesFilter';\nimport MobileDateFilter from '@components/FilterDropdown/MobileDateFilter';\nimport MobileProjectsFilter from '@components/FilterDropdown/MobileProjectsFilter';\n\ninterface PropsOBJ {\n setFilter: (obj: SearchFilter) => void;\n filterBy: SearchFilter;\n dateRange: [dateTuple, dateTuple];\n setRange: (array:[dateTuple, dateTuple]) => void;\n}\n\nconst MobileFilterDropdownContainer = (props: PropsOBJ) => {\n\n // Destrcuturing the props\n const { setFilter, filterBy, dateRange, setRange } = props;\n\n const dummyDataForProject = ['Correlation', 'NOVA', 'SHIVA', 'IDEO', 'Project'];\n const dummyDataForCategory = ['Website', 'Meeting', 'Workshop'];\n const dummyDataForDate = ['All', 'Last day', 'Last month', 'Last year'];\n const dummyDataForAuthor = ['Samanshiang Chiang', 'Michael Rotman', 'John Doe', 'Jane Doe'];\n\n const [projectSelected, setProjectSelected] = React.useState(dummyDataForProject);\n const [categorySelected, setCategorySelected] = React.useState(dummyDataForCategory);\n const [dateSelected, setDateSelected] = React.useState(dummyDataForDate[0]);\n const [authorSelected, setAuthorSelected] = React.useState(dummyDataForAuthor);\n\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n return (\n
\n \n \n \n {open ? : }\n \n \n\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n \n
\n );\n }\n\n export default MobileFilterDropdownContainer\n","import React from 'react';\nimport './TimelineFilter.css';\nimport { useState } from 'react';\nimport { useEffect } from 'react';\nimport { SearchFilter, dateTuple } from './types';\n\nimport { Button, MenuItem } from \"@mui/material\";\nimport AuthorsFilter from '@components/FilterDropdown/AuthorsFilter';\nimport CategoriesFilter from '@components/FilterDropdown/CategoriesFilter';\nimport DateFilter from '@components/FilterDropdown/DateFilter';\nimport ProjectsFilter from '@components/FilterDropdown/ProjectsFilter';\nimport { useHistory } from \"react-router-dom\";\nimport { selectAuth, selectIsLoggedIn } from '@redux/slices/AuthRedux';\nimport { useAppSelector } from '@redux/hooks';\n\n\n\nimport MobileFilterDropdownContainer from '@components/FilterDropdown/MobileFilterDropdown';\n\ninterface PropsOBJ {\n setFilter: (obj: SearchFilter) => void;\n filterBy: SearchFilter;\n dynamicProjects: Array;\n dynamicAuthors: Array;\n dynamicCategories: Array;\n}\n\nconst TimelineFilterContainer = (props: PropsOBJ) => {\n\n // Destrcuturing the props\n const { setFilter, filterBy, dynamicProjects, dynamicAuthors, dynamicCategories } = props;\n\n const dummyDataForProject = dynamicProjects;\n const dummyDataForCategory = dynamicCategories;\n const dummyDataForAuthor = dynamicAuthors;\n\n\n // const [projectSelected, setProjectSelected] = React.useState(['All']);\n // const [categorySelected, setCategorySelected] = React.useState(['All']);\n // const [dateSelected, setDateSelected] = React.useState('Last Month');\n // const [authorSelected, setAuthorSelected] = React.useState(['All']);\n const [projectSelected, setProjectSelected] = React.useState(filterBy.project);\n const [categorySelected, setCategorySelected] = React.useState(filterBy.category);\n const [dateRange, setRange] = React.useState<[dateTuple, dateTuple]>([['initial', \"\"], ['target', \"\"]]);\n const [authorSelected, setAuthorSelected] = React.useState(filterBy.author);\n\n\n useEffect(() => {\n setProjectSelected(dynamicProjects)\n setCategorySelected(dynamicCategories)\n setAuthorSelected(dynamicAuthors)\n }, [dynamicProjects, dynamicAuthors, dynamicCategories])\n\n const [isMobile, setMobile] = useState(false);\n\n useEffect(() => {\n if (window.innerWidth <= 1000) {\n setMobile(true);\n } else {\n setMobile(false);\n }\n\n const updateMedia = () => {\n if (window.innerWidth <= 1000) {\n setMobile(true);\n } else {\n setMobile(false);\n }\n };\n window.addEventListener('resize', updateMedia);\n return () => window.removeEventListener('resize', updateMedia);\n }, []);\n const history = useHistory();\n\n const handleAddEntry = () => {\n history.push('/timeline/add');\n }\n\n const isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n return (\n
\n {isMobile ? (\n\n
\n\n ) : (\n
\n
\n \n \n \n \n \n \n \n
\n
\n {isLoggedIn &&\n
\n \n Add New Entry\n \n
\n }\n
\n
\n )}\n
)\n}\nexport default TimelineFilterContainer;\n","import React, { useState } from \"react\";\nimport moment from \"moment\";\nimport { NAV, TEXT, CONSTANTS, ROUTES } from '@statics';\nimport { Link } from 'react-router-dom';\nimport BorderColorIcon from '@mui/icons-material/BorderColor';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport './TimelineCommitBlock.css';\nimport { useHistory } from \"react-router-dom\";\n\ninterface TimelineCommitBlockProps {\n _id: string;\n author: string;\n project: string;\n date: Date;\n title: String;\n descriptions: Array;\n hyperlinks: Array;\n contributors: Array;\n updatedTime: string;\n isLoggedIn: boolean;\n categories: Array;\n onClickDelete: () => void\n}\n\nconst TimelineCommitBlock: React.FC = (props) => {\n const [expand, setExpand] = useState(false);\n\n return (\n
setExpand(!expand)}>\n {expand ? ExpandedTimelineContent(props) : ClosedTimelineContent(props)}\n
\n );\n};\n\n\n\nconst ExpandedTimelineContent: React.FC = (props) => {\n\n const { _id, author, title, date, project, descriptions, hyperlinks, contributors, updatedTime, categories, onClickDelete, isLoggedIn } = props;\n\n const history = useHistory();\n\n\n let colorOfProject = '#848484';\n CONSTANTS.PROJECTS.forEach(element => {\n if (project.toLowerCase() === element.name.toLowerCase()) {\n colorOfProject = element.color;\n }\n });\n return (\n
\n

\n {author} added {title} to

{project}
\n

\n\n {isLoggedIn ?\n
\n { history.push(`/timeline/edit/${_id}`) }} />\n
\n \n
\n :\n
\n }\n\n

{moment(date).format('MMMM DD, YYYY')}

\n
\n\n {categories.map((category, i) => (\n
\n {category}\n
\n ))}\n
\n
\n {descriptions}\n
\n {hyperlinks.length > 0 && <>

Reference/Image Hyperlinks:

\n
\n {hyperlinks.map((link, i) => (\n
\n {/* \n {link}\n */}\n \n {link}\n \n
\n
\n ))}\n
}\n
\n

Contributors:

\n
\n {contributors.length > 0 ? contributors.map((contr, i) => (\n

\n {contr}  \n

\n )) :

No contributors for this timeline

}\n
\n

{updatedTime}

\n
\n );\n}\n\nconst ClosedTimelineContent: React.FC = (props) => {\n\n const { _id, author, title, date, project, categories, onClickDelete, isLoggedIn } = props;\n\n const history = useHistory();\n\n\n let colorOfProject = '#848484';\n // assuming all valid project props are the same as CONSTANTS.PROJECTS listed\n CONSTANTS.PROJECTS.forEach(element => {\n if (project.toLowerCase() === element.name.toLowerCase()) {\n colorOfProject = element.color;\n }\n });\n return (\n
\n

\n {author} added {title} to

{project}
\n

\n\n\n\n {isLoggedIn ?\n
\n { history.push(`/timeline/edit/${_id}`) }} />\n\n
\n \n
\n :\n
\n }\n\n\n

{moment(date).format('MMMM DD, YYYY')}

\n
\n {categories.map((category, i) => (\n
\n {category}\n
\n ))}\n
\n
\n );\n}\n\nexport default TimelineCommitBlock;\n","import DialogTitle from \"@mui/material/DialogTitle\";\nimport Dialog from \"@mui/material/Dialog\";\nimport './ConfirmationWindow.css';\nimport { DialogContentText } from \"@mui/material\";\nimport * as React from \"react\";\nimport Button from \"@mui/material/Button\";\nexport interface SimpleDialogProps {\n open: boolean;\n onClose: () => void;\n deleteSnapshot: ()=> Promise;\n}\n\nfunction ConfirmationDailog({open, onClose, deleteSnapshot}: SimpleDialogProps) {\n // This state variable indicates if the snapshot selected is deleted successfully, which can be used to controll the ending of the dialog associated and error message.\n // if the snapshot clicked is deleted,deleteSucces = true.\n const [deleteSuccess, setDeleteSuccess] = React.useState(true);\n const handleClose = () => {\n onClose();\n setDeleteSuccess(true);\n };\n \n return (\n \n Are you sure to delete the snapshot?\n {!deleteSuccess ? (\n error: fail to delete\n ) : null}\n {\n deleteSnapshot()\n .then(()=>{\n setDeleteSuccess(true);\n handleClose();\n }\n ).catch((err)=>{\n setDeleteSuccess(false);\n })\n }}\n >\n Yes\n \n \n \n );\n }\n\n export default ConfirmationDailog;\n","import React from \"react\";\nimport \"./Timeline.css\";\nimport { SearchFilter } from \"./types\";\nimport TimelineSearchbar from \"@components/TimelineSearchbar\";\nimport TimelineFilter from \"./TimelineFilter\";\nimport TimelineCommitBlock from \"@components/TimelineCommitBlock\";\nimport { TEXT, CONSTANTS } from \"@statics\";\nimport { useState, useEffect } from \"react\";\nimport axios from \"axios\";\nimport { useAppSelector } from \"@redux/hooks\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\nimport ConfirmationDailog from \"@components/ConfirmationWindow\";\nimport Alert from \"@mui/material/Alert\";\nimport { Pagination } from \"@mui/material\";\n\n\nrequire('dotenv').config();\n\nconst baseURL = process.env.REACT_APP_API_URL;\n\ninterface TimelineProps {\n defaultFilter: SearchFilter;\n dynamicProjects: Array;\n dynamicAuthors: Array;\n dynamicCategories: Array;\n}\n\n/**\n * Paste one or more documents here\n */\nconst Timeline: React.FC = (props) => {\n const { defaultFilter, dynamicProjects, dynamicAuthors, dynamicCategories } =\n props;\n\n // the response from the server will be a list of objects, and the structure of a single obj is CommitOBJ\n interface SnapshotOBJ {\n _id: string;\n author: string;\n title: string;\n project: string;\n date: Date;\n categories: Array;\n descriptions: Array;\n hyperlinks: Array;\n contributors: Array;\n updatedTime: string;\n }\n\n const isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n // An array of all timineline history that will be set by retrieveCommitOBJs()\n // If there are any errors in the retrieveCommitOBJs() than an empty array will be set as the display\n const [commitsArray, setCommitArray] = useState([]);\n\n // If the reuqest for the list of timelines is successful then success = true,\n // else success = false with \"success\" defaulted to true\n const [success, setSuccess] = useState(true);\n\n // This state variable indicate whether the pop up dialog window opens or not when a timeline(snapshot) is deleted\n // If user click the delete icon on the top right of each timeline box, then openDialog = true,\n // If user close the pop up window, then openDialog = false.\n // It is set to false by default\n const [openDialog, setOpenDialog] = useState(false);\n // This state variable tracks which timeline item the user is about to delete by that timeline item's id\n // Once user click the delete icon on the top right of each timeline box, then idToDelete = the id of timeline user is deleting\n const [idToDelete, setIdToDelete] = useState(\"\");\n\n // handle the close and open of dialog opened when delete the delete icon on the top right of each timeline box is clicked\n const handleClose = () => {\n setOpenDialog(false);\n };\n const handleClickOpen = () => {\n setOpenDialog(true);\n };\n\n const deleteCommit = async (_id: string) => {\n return axios\n .delete(`${baseURL}/api/snapshots/${_id}`)\n .then((response) => {\n if (response.status != 200) {\n throw new Error(\"did not delete it successfully\");\n }\n let i = commitsArray.findIndex((snapshot: SnapshotOBJ) => {\n return snapshot._id == _id;\n });\n const tempArray = commitsArray.slice();\n tempArray.splice(i, 1);\n setCommitArray(tempArray);\n return Promise.resolve(true);\n })\n .catch((err) => {\n return Promise.reject();\n });\n };\n\n useEffect(() => {\n setFilter(defaultFilter);\n }, [dynamicProjects, dynamicAuthors, dynamicCategories]);\n\n const [filterBy, setFilter] = useState(props.defaultFilter);\n\n const [projectFilterList, setProjectFilterList] = useState([]);\n\n const [page, setPage] = useState(1);\n\n const [itemsPerPage, setItemsPerPage] = useState(5);\n\n const [totalPages, setTotalPages] = useState(0);\n\n useEffect(() => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }, [page]);\n\n\n // creates a http request\n const objCommitHTTPS = async () => {\n /* \n Structure of a snapshot object from the retrieved list\n { author: \"...\" {string}\n categories: ['...'] {string[]}\n contributors: ['...'] {string[]}\n date: \"...\" {date}\n descriptions: ['...'] {string[]}\n hyperlinks: ['...'] {string[]}\n project: \"...\" {string}\n title: \"...\" {string}\n } \n */\n await axios\n .get(`${baseURL}/api/snapshots`)\n .then((response) => {\n // list for the commitsArray useState\n var commitList = response.data.data.map((item: SnapshotOBJ) => (\n {\n _id: item._id,\n author: item.author,\n categories: item.categories,\n title: item.title,\n project: item.project,\n date: item.date,\n descriptions: item.descriptions,\n hyperlinks: item.hyperlinks,\n contributors: item.contributors,\n updatedTime: item.updatedTime,\n }));\n console.log(commitList)\n setCommitArray([...commitList]);\n })\n .catch((err) => {\n setSuccess(false);\n });\n };\n\n const filterList = (list: SnapshotOBJ[], filterOBJ: SearchFilter) => {\n let listFilter: SnapshotOBJ[] = list;\n\n const { keyword, date, ...restFilters } = filterOBJ;\n\n if (keyword && keyword !== \"\") {\n const lowercaseKeyword = keyword.toLowerCase();\n listFilter = listFilter.filter((item: SnapshotOBJ) =>\n Object.values(item).some((value) =>\n Array.isArray(value)\n ? value.some((element) =>\n element.toLowerCase().includes(lowercaseKeyword)\n )\n : typeof value === \"string\" &&\n value.toLowerCase().includes(lowercaseKeyword)\n )\n );\n }\n\n if (date[0][1] != \"\") {\n const initialDate = new Date(date[0][1]);\n\n listFilter = listFilter.filter((item: SnapshotOBJ) => {\n const itemDate = new Date(item.date);\n return itemDate >= initialDate;\n });\n }\n\n if (date[1][1] != \"\") {\n const targetDate = new Date(date[1][1]);\n\n listFilter = listFilter.filter((item: SnapshotOBJ) => {\n const itemDate = new Date(item.date);\n return itemDate <= targetDate;\n });\n }\n\n Object.entries(restFilters).forEach(([key, value]) => {\n if (typeof value !== \"string\") {\n if (key === \"project\") {\n listFilter = listFilter.filter((item) =>\n value.includes(item.project)\n );\n }\n if (key === \"category\") {\n listFilter = listFilter.filter((item) =>\n item.categories.some((element) => value.includes(element))\n );\n }\n if (key === \"author\") {\n listFilter = listFilter.filter((item) => value.includes(item.author));\n }\n }\n });\n\n const totalItems = listFilter.length;\n\n const newTotalPages = Math.ceil(totalItems / itemsPerPage);\n\n const paginatedList = listFilter.slice((page - 1) * itemsPerPage, page * itemsPerPage);\n\n if (totalPages != newTotalPages) {\n setTotalPages(newTotalPages);\n }\n let prj: string;\n\n return (\n <>\n
    \n {paginatedList.length > 0 ? paginatedList.map((commit: SnapshotOBJ, i) => {\n\n\n CONSTANTS.PROJECTS.some(\n (item) => item.name.toLowerCase() == commit.project.toLowerCase()\n )\n ? prj = commit.project.toLowerCase()\n : prj = \"others\"\n\n\n return (\n
  • \n \n {\n setIdToDelete(commit._id);\n handleClickOpen();\n }}\n />\n
  • \n );\n }) :

    No Timelines to display

    }\n
\n \n );\n };\n\n // The functions within the useEffect will only be called when the user mounts on to the page\n // so once at the very start of the user entering the Timeline page\n useEffect(() => {\n objCommitHTTPS();\n }, []);\n\n let prjs: any[] = [];\n\n return (\n
\n
\n

{TEXT.TIMELINE_PAGE.TITLE}

\n
\n
\n

{TEXT.TIMELINE_PAGE.SUBHEADER}

\n
\n \n \n
\n
\n {\n success ?\n filterList(commitsArray, filterBy) : {TEXT.TIMELINE_PAGE.ERROR_MESSAGE}\n }\n
\n
\n
\n {\n setPage(newPage);\n\n }\n }\n />\n
\n {\n return deleteCommit(idToDelete);\n }}\n />\n\n
\n /** \n * filter list actualy stires the number of blocks that are rendered\n * have to use filter list to calculate the number of items that are rendered and \n * change the pagination values according to that\n * Add the pagination in the const filterList function, so that the function itself handles the rendering \n * of the pagination object as well\n * Since we have to use the objects that are dynamically changed in that list\n * */\n );\n};\n\nexport { Timeline };\n","import { Timeline } from \"./Timeline\";\nimport { useState, useEffect } from \"react\";\nimport { SearchFilter, SnapshotOBJ, ProjectOBJ } from \"./types\";\nimport axios from \"axios\";\n\nconst DefaultTimeline = () => {\n const baseURL = process.env.REACT_APP_API_URL;\n\n // These will be the arrays that will contain dynamically generated list for optinos in the Timeline filter\n const [dynamicProjects, setDProjects] = useState>([]);\n const [dynamicAuthors, setDAuthors] = useState>([]);\n const [dynamicCategories, setDCategories] = useState>([]);\n\n useEffect(() => {\n getProjectCommit();\n }, []);\n\n // const [projectFilterList, setProjectFilterList] = useState([]);\n const getProjectCommit = async () => {\n await axios\n .get(`${baseURL}/api/snapshots`)\n .then((response) => {\n if (response.status != 200) {\n throw new Error(response.data.message);\n }\n const projects: Array = response.data.data;\n\n const dummyProjects: Array = [];\n const dummyCategories: Array = [];\n const dummyAuthors: Array = [];\n\n projects.map((item: SnapshotOBJ, index: number) => {\n if (!dummyProjects.includes(item.project))\n dummyProjects.push(item.project);\n\n item.categories.map((item2, index) => {\n if (!dummyCategories.includes(item2)) dummyCategories.push(item2);\n });\n\n if (!dummyAuthors.includes(item.author)) {\n dummyAuthors.push(item.author);\n }\n });\n\n setDAuthors(dummyAuthors);\n setDProjects(dummyProjects);\n setDCategories(dummyCategories);\n })\n .catch((err) => {\n //do nothing\n });\n };\n\n // This defines the default filter settings that the Timeline filter will start off on\n const timeLineDefaultFilter: SearchFilter = {\n project: dynamicProjects,\n category: dynamicCategories,\n date: [\n [\"initial\", \"\"],\n [\"target\", \"\"],\n ],\n author: dynamicAuthors,\n keyword: \"\",\n };\n return (\n \n );\n};\n\nexport { DefaultTimeline };\n","export default __webpack_public_path__ + \"static/media/Group 5.2f17072d.png\";","import Group5 from '@statics/images/Group 5.png'\nimport './ErrorPage.css';\n\nconst ErrorPage = () => {\n\n return (\n
\n \n
\n

404 Error

\n

Hmm... We can’t seem to find this page.

\n
window.location.href = \"/\"}>Take me home!
\n
\n
\n )\n}\n\nexport default ErrorPage;","import './ResourceCards.css';\nimport { useHistory } from 'react-router-dom';\n\ninterface PropsOBJ {\n title: string;\n link: string;\n}\n\nconst ResourceCards = (props:PropsOBJ) => {\n\n const {title, link} = props;\n const history = useHistory();\n\n return (\n
{\n history.push(link);\n }}>\n {title}\n
\n )\n};\n\nexport default ResourceCards;","import React from 'react';\nimport './Resources.css';\nimport RESOURCES from '@statics/resources';\nimport ResourceCards from './Cards/ResourceCards';\nimport ROUTES from '@statics/routes';\n\nconst Resources = () => {\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t

All Resources

\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t{\n\t\t\t\t\tRESOURCES.map((item, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default Resources;","import './AddEditResource.css';\nimport { IoCloseSharp } from \"react-icons/io5\";\nimport { useState, useMemo } from 'react';\nimport * as yup from 'yup';\nimport { useFormik } from 'formik';\nimport { MenuItem, TextField } from '@mui/material';\nimport { TEXT } from '@statics';\nimport { ResourceRequestBody } from '@entities/Resource';\n\nconst AddResource: React.FC<{ isVisible: boolean, setVisible: (bool: boolean) => void, resourceCategory: string, subcategories: string[] | undefined, \n message: string, handleSubmit: (reqBody: ResourceRequestBody) => Promise }> = ({ isVisible, setVisible, resourceCategory, subcategories, message, handleSubmit }) => {\n\n // Determines the color of the post-submission message, true == green, false == red\n const [submitSuccessful, setSubmitSuccessful] = useState(false);\n \n const schema = useMemo(\n () =>\n yup.object({\n title: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.TITLE_EMPTY_ERROR),\n description: yup\n .string(),\n category: yup.object().shape({\n main: yup\n .string()\n .required(),\n sub: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.CATEGORY_EMPTY_ERROR),\n }).required(),\n author: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.AUTHOR_EMPTY_ERROR),\n resource_link: yup\n .string()\n .matches(\n /(https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z]{2,}(\\.[a-zA-Z]{2,})(\\.[a-zA-Z]{2,})?\\/[a-zA-Z0-9]{2,}|((https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z]{2,}(\\.[a-zA-Z]{2,})(\\.[a-zA-Z]{2,})?)|(https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z0-9]{2,}\\.[a-zA-Z0-9]{2,}\\.[a-zA-Z0-9]{2,}(\\.[a-zA-Z0-9]{2,})?/,\n TEXT.RESOURCE_PAGE.INVALID_URL_LINK_ERROR\n )\n .required(TEXT.RESOURCE_PAGE.LINK_EMPTY_ERROR),\n }),\n []\n );\n \n const form = useFormik({\n initialValues: {\n title: '',\n description: '',\n category: {\n main: resourceCategory,\n sub: subcategories ? '' : (new Date().getFullYear().toString()),\n },\n author: '',\n resource_link: '',\n },\n validationSchema: schema,\n onSubmit: async (values) => {\n const submitResults = await handleSubmit(values);\n if (submitResults) {\n form.resetForm();\n setSubmitSuccessful(submitResults);\n }\n },\n });\n\n return (\n
\n
\n
\n {\n setVisible(false);\n }} />\n
\n
\n

Add Resource

\n
\n
\n
\n

Title

\n \n
\n
\n

Description

\n \n
\n { subcategories &&
\n

Category

\n \n {subcategories.map((cat, index) => (\n {cat}\n ))}\n \n
}\n
\n

Author(s)

\n \n
\n
\n

Link to Resource

\n \n
\n \n
\n {message &&

{message}

}\n
\n
\n )\n};\n\nexport default AddResource;","import axios from 'axios';\nimport dotenv from 'dotenv';\nimport type { BaseResponse } from './types';\nimport { Resource, ResourceRequestBody } from '@entities/Resource';\n\ndotenv.config();\nconst baseURL = process.env.REACT_APP_API_URL;\n\ninterface ResourcesResponse extends BaseResponse {\n data?: Resource[][];\n}\n\ninterface ResourceResponse extends BaseResponse {\n data?: Resource;\n}\n\nexport const createResource = async (reqBody: ResourceRequestBody): Promise => {\n try {\n const res = await axios.post(`${baseURL}/api/resources`,\n reqBody,\n );\n return res.data as ResourceResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}\n\nexport const getAllResourcesInCategory = async (category: string): Promise => {\n try {\n const res = await axios.get(`${baseURL}/api/resources/${category}`);\n return res.data as ResourcesResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}\n\nexport const getResourceById = async (id: string): Promise => {\n try {\n const res = await axios.get(`${baseURL}/api/resources/${id}`);\n return res.data as ResourceResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}\n\nexport const updateResource = async (reqBody: ResourceRequestBody, id: string): Promise => {\n try {\n const res = await axios.patch(`${baseURL}/api/resources/${id}`,\n reqBody,\n );\n return res.data as ResourceResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}\n\nexport const deleteResource = async (id: string): Promise => {\n try {\n const res = await axios.delete(`${baseURL}/api/resources/${id}`);\n return res.data as BaseResponse;\n } catch (err: any) {\n return err.response.data as BaseResponse;\n }\n}","import DeleteIcon from '@mui/icons-material/Delete';\nimport { Resource } from '@entities/Resource';\nimport { useAppSelector } from '@redux/hooks';\nimport { selectAuth } from '@redux/slices/AuthRedux';\nimport styles from \"./ResourceEntry.module.css\"\nimport BorderColorIcon from '@mui/icons-material/BorderColor';\nimport { FcStackOfPhotos } from \"react-icons/fc\";\n\ninterface ResourceProps {\n resource: Resource,\n deleteResource: (resourceId: string) => void,\n editResource: (resource: Resource) => void,\n}\n\nexport const ResourceEntry: React.FC = (props) => {\n const {resource, deleteResource, editResource} = props;\n const { username, permissions } = useAppSelector(selectAuth);\n\n // TODO: change after implementing file storage\n const imageSrc = '';\n\n return (\n
\n
\n {imageSrc ? (\n \n ) : (\n \n )}\n
\n
\n
\n \n {resource.title}\n \n
\n {(permissions === \"admin\" || resource.owner.username === username) && \n
editResource(resource)}>\n \n
\n }\n {(permissions === \"admin\" || resource.owner.username === username) && \n
deleteResource(resource._id)}>\n \n
\n }\n
\n
\n
\n {resource.author}\n
\n

\n {resource.description}\n

\n
\n
\n )\n}\n","import './AddEditResource.css';\nimport { IoCloseSharp } from \"react-icons/io5\";\nimport { useMemo } from 'react';\nimport * as yup from 'yup';\nimport { useFormik } from 'formik';\nimport { MenuItem, TextField } from '@mui/material';\nimport { TEXT } from '@statics';\nimport { Resource, ResourceRequestBody } from '@entities/Resource';\n\ninterface EditResourcesProps {\n isVisible: boolean,\n setVisible: (bool: boolean) => void,\n subcategories: string[] | undefined,\n message: string,\n handleSubmit: (reqBody: ResourceRequestBody, id: string) => Promise,\n resource: Resource,\n}\n\nconst EditResource: React.FC = (props) => {\n\n const { isVisible, setVisible, subcategories, message, handleSubmit, resource } = props;\n \n const schema = useMemo(\n () =>\n yup.object({\n title: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.TITLE_EMPTY_ERROR),\n description: yup\n .string(),\n category: yup.object().shape({\n main: yup\n .string()\n .required(),\n sub: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.CATEGORY_EMPTY_ERROR),\n }).required(),\n author: yup\n .string()\n .required(TEXT.RESOURCE_PAGE.AUTHOR_EMPTY_ERROR),\n resource_link: yup\n .string()\n .matches(\n /(https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z]{2,}(\\.[a-zA-Z]{2,})(\\.[a-zA-Z]{2,})?\\/[a-zA-Z0-9]{2,}|((https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z]{2,}(\\.[a-zA-Z]{2,})(\\.[a-zA-Z]{2,})?)|(https:\\/\\/www\\.|http:\\/\\/www\\.|https:\\/\\/|http:\\/\\/)?[a-zA-Z0-9]{2,}\\.[a-zA-Z0-9]{2,}\\.[a-zA-Z0-9]{2,}(\\.[a-zA-Z0-9]{2,})?/,\n TEXT.RESOURCE_PAGE.INVALID_URL_LINK_ERROR\n )\n .required(TEXT.RESOURCE_PAGE.LINK_EMPTY_ERROR),\n }),\n []\n );\n \n const form = useFormik({\n initialValues: {\n title: resource.title,\n description: resource.description,\n category: {\n main: resource.category.main,\n sub: resource.category.sub,\n },\n author: resource.author,\n resource_link: resource.resource_link,\n },\n validationSchema: schema,\n onSubmit: async (values) => {\n const submitResults = await handleSubmit(values, resource._id);\n if (submitResults) {\n setVisible(false);\n }\n },\n }); \n\n return (\n
\n
\n
\n {\n setVisible(false);\n }} />\n
\n
\n

Edit Resource

\n
\n
\n
\n

Title

\n \n
\n
\n

Description

\n \n
\n { subcategories &&
\n

Category

\n \n {subcategories.map((cat, index) => (\n {cat}\n ))}\n \n
}\n
\n

Author(s)

\n \n
\n
\n

Link to Resource

\n \n
\n \n
\n {message &&

{message}

}\n
\n
\n )\n};\n\nexport default EditResource;","import './ResourcePage.css'\nimport { RouteComponentProps } from \"react-router-dom\";\nimport RESOURCES from '@statics/resources';\nimport { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport AddResource from './AddEditResource/AddResource';\nimport { createResource, deleteResource, getAllResourcesInCategory, updateResource } from '@services/adapters/resourceAdapter';\nimport { Resource, ResourceRequestBody } from '@entities/Resource';\nimport { Button, CircularProgress, Dialog, DialogTitle } from \"@mui/material\";\nimport { TEXT } from '@statics';\nimport Alert from \"@mui/material/Alert\";\nimport { useAppSelector } from '@redux/hooks';\nimport { selectIsLoggedIn } from '@redux/slices/AuthRedux';\nimport { ResourceEntry } from '@components/Resources/ResourceEntry';\nimport EditResource from './AddEditResource/EditResource';\n\ninterface MatchParams {\n resource_id: string;\n}\n\ninterface ProjectProps extends RouteComponentProps { }\nconst ResourcePage: React.FC = ({ match }) => {\n\n const history = useHistory();\n const isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n const currentResource = RESOURCES.find((resource) => resource.name === match.params.resource_id);\n\n if (!currentResource)\n window.location.href = '/errorPage';\n\n // If the request for the list of resources is successful then success = true,\n // else success = false with \"success\" defaulted to true\n const [success, setSuccess] = useState(true);\n\n // List of subcategories for the current category\n const [categoryHeaders, setCategoryHeaders] = useState([]);\n const [resources, setResources] = useState(null);\n const [navHeight, setNavHeight] = useState(0);\n const [isAddMenuVisible, setAddMenuVisible] = useState(false);\n\n const handleGetAllResourcesInCategory = (category: string) => {\n getAllResourcesInCategory(category)\n .then((res) => {\n if (res.data) {\n var newCategoryHeaderArr: string[] = [];\n res.data.forEach((subCatArr) => {\n newCategoryHeaderArr.push(subCatArr[0].category.sub);\n });\n setCategoryHeaders(newCategoryHeaderArr);\n setResources(res.data);\n } else {\n console.log(res.error);\n }\n })\n .catch(() => {\n setSuccess(false);\n console.error('Error: resourceService.ts getAllResourcesInCategory call');\n })\n }\n\n // Message that will be displayed after attempting to create a new resource, either error message or success message\n const [message, setMessage] = useState('');\n\n // Message that will be displayed in the delete resource dialogs, either error or success depending on deletion call\n const [dialogMessage, setDialogMessage] = useState('');\n const [openDeleteDialog, setOpenDeleteDialog] = useState(false);\n\n // stores the id of the resource to delete when the resource deletion process starts\n const [resourceToDelete, setResourceToDelete] = useState('');\n\n // stores the id of the resource being edited when edit resource menu is open\n const [resourceToEdit, setResourceToEdit] = useState();\n const [isEditMenuVisible, setIsEditMenuVisible] = useState(false);\n\n const handleCreateResource = async (reqBody: ResourceRequestBody): Promise => {\n try {\n const res = await createResource(reqBody)\n if (res.error) {\n setMessage(res.message);\n return false;\n } else {\n if (resources) {\n var resourceAddedToSubCategory = false;\n for (var i = 0; i < resources.length; i++) {\n if (resources[i][0].category.sub === res.data?.category.sub) {\n resources[i].unshift(res.data);\n resourceAddedToSubCategory = true;\n break;\n }\n }\n if (!resourceAddedToSubCategory && res.data) {\n resources.push([res.data]);\n setCategoryHeaders([...categoryHeaders, res.data.category.sub]);\n }\n setMessage(res.message);\n return true;\n }\n return false;\n }\n } catch {\n setMessage(\"Something went wrong while trying to create the new resource\");\n return false;\n }\n }\n\n const handleEditResource = async (reqBody: ResourceRequestBody, id: string): Promise => {\n try {\n const res = await updateResource(reqBody, id)\n if (res.error) {\n setMessage(res.message);\n return false;\n } else {\n handleGetAllResourcesInCategory(match.params.resource_id);\n return true;\n }\n } catch {\n setMessage(\"Something went wrong while trying to edit resource\");\n return false;\n }\n }\n\n const initDeleteResourceProcess = (resourceId: string) => {\n setDialogMessage('');\n setOpenDeleteDialog(true);\n setResourceToDelete(resourceId);\n }\n\n const handleDeleteDialogClose = () => {\n setOpenDeleteDialog(false);\n setResourceToDelete('');\n }\n\n const handleDeleteResource = () => {\n if (resourceToDelete) {\n deleteResource(resourceToDelete)\n .then((res) => {\n if (res.error) {\n setDialogMessage(res.message);\n console.log(res.error);\n } else {\n setDialogMessage(res.message);\n handleGetAllResourcesInCategory(match.params.resource_id);\n }\n })\n .catch((err) => {\n console.log(err);\n })\n }\n }\n\n const openEditResource = (resource: Resource) => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n setIsEditMenuVisible(true);\n setMessage('');\n setResourceToEdit(resource);\n }\n\n useEffect(() => {\n // error handling for pages that do not exist yet\n if (currentResource === undefined) {\n // throw new Error('Resource not found');\n history.push('/errorPage');\n }\n\n // to keep track of the height of the navbar\n if (window.innerWidth <= 700) {\n setNavHeight(document.getElementById(\"mobile-navbar-container\")!.offsetHeight);\n } else {\n setNavHeight(document.getElementById(\"nav\")!.offsetHeight);\n }\n }, []); // Empty dependency array ensures that the effect runs only once on mount\n\n\n // updates resources state when switching to viewing a different resource category, i.e. switching from viewing COGS 402 resources to Skills Workshops resources\n useEffect(() => {\n handleGetAllResourcesInCategory(match.params.resource_id);\n }, [match])\n\n return (\n <>\n {currentResource && isAddMenuVisible && \n \n }\n {currentResource && isEditMenuVisible && resourceToEdit &&\n \n }\n \n {dialogMessage || 'Are you sure you want to delete this resource?'}\n {!dialogMessage && \n
\n \n \n
\n }\n \n
\n
\n
\n

\n {currentResource?.page_title}\n

\n
\n {success &&\n
\n {\n categoryHeaders.map((title, index) => {\n return (\n
\n
{\n window.scrollTo({\n top: document.getElementById(`resource-content-single-render-${title}`)?.offsetTop,\n behavior: 'smooth'\n });\n }}\n >\n {title}\n
\n
\n );\n })\n }\n
\n }\n
\n
\n {success ? \n (resources ? \n (resources.length !== 0 ? \n (resources.map((resourcesOfSubCat, index) => {\n return (\n <>\n
\n

\n {resourcesOfSubCat[0].category.sub}\n

\n
\n
\n {\n resourcesOfSubCat.map((resource, index) => {\n return (\n \n )\n })\n }\n
\n \n )\n })) : (\n \n {TEXT.RESOURCE_PAGE.EMPTY_DISPLAY_LIST}\n \n )\n ) : (\n \n )\n ) : (\n \n {TEXT.RESOURCE_PAGE.RESPONSE_ERROR}\n \n )\n }\n
\n {success && isLoggedIn &&\n
{\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n setAddMenuVisible(true);\n setMessage('');\n }}>\n Add New Resource\n
\n }\n
\n \n );\n};\n\nexport default ResourcePage;","import { useEffect, useState } from \"react\";\nimport Divider from \"@mui/material/Divider\";\nimport styles from \"./EditProfile.module.css\";\nimport Grid from \"@mui/material/Grid\";\n\nconst EditProfile = () => {\n\tconst [width, setWidth] = useState(window.innerWidth);\n\tconst breakpoint = 700;\n\n\tuseEffect(() => {\n\t\tconst handleWindowResize = () => {\n\t\t\tsetWidth(window.innerWidth);\n\t\t};\n\t\twindow.addEventListener(\"resize\", handleWindowResize);\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{/* prevents heading from being covered during mobile view */}\n\t\t\t\t\t{width < breakpoint ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t)}\n\t\t\t\t\t

Update your personal details

\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

First Name

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Last Name

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Project

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Position

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Biography

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

Change your password

\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\tNOTE: * = mandatory field\n\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\tCurrent password*\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\tNew password*\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\tConfirm new password*\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\nexport default EditProfile;\n","import { TimelineInfo } from '@pages/Timeline/types';\n\nimport styles from './TitleInput.module.css';\n\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void\n timeline: TimelineInfo;\n}\n\nconst TitleInput = ({timeline, setTimeline}:PropsOBJ) => {\n\n\n return (\n
\n

\n {setTimeline({...timeline, title:String(res.target.value)})}}>\n
\n )\n}\n\nexport default TitleInput","import styles from './DateInput.module.css'\nimport { useEffect, useState } from 'react'\nimport { TimelineInfo } from '@pages/Timeline/types';\n\n\ninterface PropsOBJ {\n setTimeline: (input: TimelineInfo) => void\n timeline: TimelineInfo;\n}\n\nconst DateInput = ({ timeline, setTimeline }: PropsOBJ) => {\n\n let months = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\",\n \"September\", \"October\", \"November\", \"December\"\n ]\n\n let days = [\n 1, 2, 3, 4, 5, 6, 7, 8, 9,\n 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,\n 30, 31\n ]\n\n let years = [\n timeline.date.getFullYear() - 4, timeline.date.getFullYear() - 3, timeline.date.getFullYear() - 2, timeline.date.getFullYear() - 1, timeline.date.getFullYear(), timeline.date.getFullYear() + 1, timeline.date.getFullYear() + 2, timeline.date.getFullYear() + 3, timeline.date.getFullYear() + 4\n ]\n\n return (\n
\n

\n\n
\n {\n const newIndex = months.findIndex((item) => item === res.target.value);\n setTimeline({...timeline, date:new Date(timeline.date.getFullYear(), newIndex, timeline.date.getDate())})\n }}\n >\n \n {months.map((month, index) => (\n \n ))}\n \n\n \n\n \n
\n
\n )\n}\n\nexport default DateInput","import { TimelineInfo } from '@pages/Timeline/types';\nimport styles from './ProjectInput.module.css';\nimport { useState, Component, useEffect } from \"react\";\n\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void\n timeline: TimelineInfo;\n}\nconst ProjectInput = ({timeline, setTimeline}:PropsOBJ) => {\n const projects = ['Coding Team','Correlation','IDEO','Image Transitions','NCIS', 'SHIVA', 'NOVA']\n const [active, setActive] = useState(timeline.project);\n\n const toggleProject = (project: any) => {\n setActive(project);\n }\n\n useEffect(() => {\n toggleProject(timeline.project)\n }, [timeline])\n\n return (\n
\n
\n
\n {projects.map((item, index)=> (\n \n ))}\n
\n
\n )\n};\n\nexport default ProjectInput","import { TimelineInfo } from '@pages/Timeline/types';\nimport styles from './CategoryInput.module.css';\n\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void;\n selectedCategories: string[];\n toggleCategory:(input:string) => void;\n timeline:TimelineInfo;\n}\n\nconst CategoryInput = ({ selectedCategories, toggleCategory }: PropsOBJ) => {\n const categories = ['Workshops','Conditions','Meetings','Guest Speaker','Hiring', 'Resources', 'Progress', 'Dev/Code', 'Analysis', 'Other'];\n\n return (\n
\n
\n
\n {categories.map((category, index) => (\n \n ))}\n
\n
\n );\n}\n\nexport default CategoryInput;\n","import { TimelineInfo } from '@pages/Timeline/types';\n\nimport styles from './ContributorInput.module.css';\nimport { useState } from \"react\";\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void\n timeline: TimelineInfo;\n}\nconst ContributorInput = ({timeline, setTimeline}:PropsOBJ) => {\n var tags = timeline.contributors\n\n const addTag = () => {\n let tag = (document.getElementById(\"contributorInput\") as HTMLInputElement).value;\n if (tag ==\"\")\n return\n tags = [...tags, tag];\n (document.getElementById(\"contributorInput\") as HTMLInputElement).value = \"\";\n setTimeline({...timeline, contributors:tags})\n console.log(tag)\n }\n\n const removeTag = (index: number) => {\n tags = tags.filter((el, i) => i !== index);\n setTimeline({...timeline, contributors:tags})\n }\n\n return (\n
{ e.preventDefault(); }}>\n

\n \n \n
\n { tags.map((tag, index) => (\n
\n {tag}\n removeTag(index)}>×\n
\n ))}\n
\n
\n )\n}\n\nexport default ContributorInput","import { TimelineInfo } from '@pages/Timeline/types';\n\nimport styles from './HyperlinkInput.module.css';\nimport { useEffect, useState } from \"react\";\n\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void\n timeline: TimelineInfo;\n}\n\nconst HyperlinkInput = ({timeline, setTimeline}:PropsOBJ) => {\n var tags = timeline.hyperlinks\n\n const addTag = () => {\n let tag = (document.getElementById(\"hyperlinkInput\") as HTMLInputElement).value;\n if (tag ==\"\")\n return\n tags = [...tags, tag];\n (document.getElementById(\"hyperlinkInput\") as HTMLInputElement).value = \"\";\n setTimeline({...timeline, hyperlinks:tags})\n }\n\n const removeTag = (index: number) => {\n tags = tags.filter((el, i) => i !== index);\n setTimeline({...timeline, hyperlinks:tags})\n }\n\n return (\n
{ e.preventDefault(); }}>\n

\n \n \n
\n { tags.map((tag, index) => (\n
\n {tag}\n removeTag(index)}>×\n
\n ))}\n
\n
\n )\n}\n\nexport default HyperlinkInput","import { TimelineInfo } from '@pages/Timeline/types';\n\nimport styles from './DescriptionInput.module.css';\n\ninterface PropsOBJ {\n setTimeline:(input:TimelineInfo) => void\n timeline: TimelineInfo;\n}\nconst DescriptionInput = ({timeline, setTimeline}:PropsOBJ) => {\n return (\n
\n

\n \n
\n )\n}\n\nexport default DescriptionInput","import { Props } from 'react-burger-menu';\nimport styles from './Controls.module.css';\n\ninterface PropsOBJ {\n // fundamentally (without specific implementation, edit and add use the same return statements)\n save:() => any;\n}\n\nconst Controls = ({save}:PropsOBJ) => {\n const clearForm = () => {\n window.location.href = \"/timeline\";\n }\n \n return (\n
\n \n \n
\n )\n }\n \n export default Controls","import axios from 'axios';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styles from './AddTimelineEntry.module.css';\nimport { useSelector } from 'react-redux';\nimport TitleInput from '@components/EditTimeline/TitleInput/TitleInput';\nimport DateInput from '@components/EditTimeline/DateInput/DateInput';\nimport ProjectInput from '@components/EditTimeline/ProjectInput/ProjectInput';\nimport CategoryInput from '@components/EditTimeline/CategoryInput/CategoryInput';\nimport ContributorInput from '@components/EditTimeline/ContributorInput/ContributorInput';\nimport HyperlinkInput from '@components/EditTimeline/HyperlinkInput/HyperlinkInput';\nimport DescriptionInput from '@components/EditTimeline/DescriptionInput/DescriptionInput';\nimport Controls from '@components/EditTimeline/Controls/Controls';\nimport { MdErrorOutline } from \"react-icons/md\";\nimport { TimelineInfo } from '../types';\n\ninterface TimelineProps { }\n\n\nconst baseURL = process.env.REACT_APP_API_URL;\nconst AddTimelineEntry: React.FC = (props) => {\n\n\n const [timeline, setTimeline] = useState({ title: \"\", descriptions: \"\", date: new Date(), project: \"\", author: \"\", categories: [], contributors: [], hyperlinks: [] });\n const history = useHistory();\n const [showError, setError] = useState(false);\n const [currentCategories, setCategories] = useState([])\n const [finished, setFinished] = useState(false);\n\n // gets the currently logged in User's authentication details\n const currUser = useSelector((state: any) => state.auth);\n\n useEffect(() => {\n try {\n if (!currUser.isLoggedIn)\n throw Error(\"Inable to access this page because you do not have proper credentials\")\n\n } catch (err: unknown) {\n history.push(\"/\")\n }\n }, [])\n\n const toggleCategory = (category: string): void => {\n if (currentCategories.includes(category)) {\n setCategories(currentCategories.filter((c) => c != category))\n document.getElementById(category)!.style.backgroundColor = '#DEE3EA';\n document.getElementById(category)!.style.color = '#1C426D';\n } else {\n setCategories([...currentCategories, category])\n document.getElementById(category)!.style.backgroundColor = '#1C426D';\n document.getElementById(category)!.style.color = '#DEE3EA';\n }\n };\n\n function isEmpty(value:string) {\n return (value == null || (typeof value === \"string\" && value.trim().length === 0));\n }\n \n function replaceSlashes(inputString:string) {\n return inputString.replace(/\\//g, '-'); \n }\n\n function incrementDateByOneDay(date:string) {\n // Create a new Date object to avoid mutating the original date\n let newDate = new Date(date);\n // Increment the day by 1\n newDate.setDate(newDate.getDate() + 1);\n return newDate.toISOString();\n}\n\n\n const add = async () => {\n \n setError(false);\n\n if (isEmpty(timeline.title) || isEmpty(timeline.project) || (currentCategories.length <= 0) || isEmpty(timeline.descriptions)) {\n setError(true)\n return\n }\n\n await axios({\n method: \"post\",\n url: `/api/snapshots`,\n data: {\n author: currUser.username,\n title: timeline.title,\n project: timeline.project,\n categories: currentCategories,\n descriptions: timeline.descriptions,\n hyperlinks: timeline.hyperlinks,\n contributors: timeline.contributors,\n date:(timeline.date).toISOString()\n },\n }).then((res) => {\n setError(false);\n setFinished(true);\n }).catch(err => {\n console.log(err)\n setError(true)\n })\n\n }\n\n return (\n
\n
\n
\n

Add New Timeline Entry

\n
\n {!finished &&

NOTE: * = mandatory field

}\n
\n {!finished ?
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n \n
\n \n
: \n
\n

Entry Complete!

\n
window.location.href ='/timeline'}>\n Make another entry\n
\n
window.location.href ='/'}>\n Return to home\n
\n
\n }\n
\n \n
\n WARNING: An error occured. Please try again.\n
\n
\n
\n
\n //
)\n )\n}\n\nexport default AddTimelineEntry","import axios from 'axios';\nimport { useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport styles from './EditTimelineEntry.module.css';\nimport { useSelector } from 'react-redux';\nimport { useAppDispatch } from '@redux/hooks';\nimport { appActions } from '@redux/slices/AppRedux';\nimport TitleInput from '@components/EditTimeline/TitleInput/TitleInput';\nimport DateInput from '@components/EditTimeline/DateInput/DateInput';\nimport ProjectInput from '@components/EditTimeline/ProjectInput/ProjectInput';\nimport CategoryInput from '@components/EditTimeline/CategoryInput/CategoryInput';\nimport ContributorInput from '@components/EditTimeline/ContributorInput/ContributorInput';\nimport HyperlinkInput from '@components/EditTimeline/HyperlinkInput/HyperlinkInput';\nimport DescriptionInput from '@components/EditTimeline/DescriptionInput/DescriptionInput';\nimport Controls from '@components/EditTimeline/Controls/Controls';\nimport { MdErrorOutline } from 'react-icons/md';\nimport { TimelineInfo } from '../types';\n\ntype TimelineParams = {\n timeline_id: string;\n};\n\ninterface TimelineProps { }\n\n\n\nconst EditTimelineEntry: React.FC = (props) => {\n const dispatch = useAppDispatch();\n const [showError, setError] = useState(false);\n\n const [timeline, setTimeline] = useState({ title: \"\", descriptions: \"\", date: new Date(), project: \"\", author: \"\", categories: [], contributors: [], hyperlinks: [] });\n\n const [currentCategories, setCategories] = useState([])\n\n const history = useHistory();\n\n // gets the currently logged in User's username\n const currUser = useSelector((state: any) => state.auth.username);\n\n let { timeline_id } = useParams();\n\n useEffect(() => {\n axios.get(`/api/snapshots/${timeline_id}`).then((res) => {\n const { title, descriptions, date, project, author, categories, contributors, hyperlinks } = res.data.data;\n setCategories(categories)\n setTimeline({\n title,\n descriptions,\n project,\n date:new Date(date),\n author,\n categories,\n contributors,\n hyperlinks\n })\n }).catch((err) => {\n window.location.href = '/errorPage';\n // console.log(err)\n })\n }, []);\n\n const toggleCategory = (category: string): void => {\n if (currentCategories.includes(category)) {\n setCategories(currentCategories.filter((c) => c != category))\n document.getElementById(category)!.style.backgroundColor = '#DEE3EA';\n document.getElementById(category)!.style.color = '#1C426D';\n } else {\n setCategories([...currentCategories, category])\n document.getElementById(category)!.style.backgroundColor = '#1C426D';\n document.getElementById(category)!.style.color = '#DEE3EA';\n }\n };\n\n function isEmpty(value: string) {\n return (value == null || (typeof value === \"string\" && value.trim().length === 0));\n }\n\n\n const save = async () => {\n\n setError(false)\n\n if (isEmpty(timeline.title) || isEmpty(timeline.project) || (currentCategories.length <= 0) || isEmpty(timeline.descriptions)) {\n setError(true)\n return\n }\n\n await axios({\n method: 'put',\n url: `/api/snapshots/${timeline_id}`,\n data: {\n title: timeline.title,\n descriptions: timeline.descriptions,\n date: timeline.date.toISOString(),\n project: timeline.project,\n author: currUser,\n categories: currentCategories,\n contributors: timeline.contributors,\n hyperlinks: timeline.hyperlinks,\n },\n }).then(() => {\n history.push(\"/timeline\");\n }).catch(err => {\n setError(true);\n dispatch(appActions.setAlert(err.message));\n })\n }\n\n return (\n
\n
\n
\n

Edit Timeline Entry

\n
\n

NOTE: * = mandatory field

\n
\n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n\n
\n
\n \n
\n WARNING: An error occured. Please try again.\n
\n
\n
\n
\n )\n}\n\nexport default EditTimelineEntry","import { Switch, Route, Redirect } from \"react-router-dom\";\nimport ROUTES from \"@statics/routes\";\nimport Home from \"@pages/Home\";\nimport ProjectOverview from \"@pages/ProjectV2/Pages/ProjectOverview/ProjectOverview\";\nimport ProjectV2Wrapper from \"@pages/ProjectV2/Wrapper/ProjectV2Wrapper\";\nimport GetInvolved from \"@pages/GetInvolved/GetInvolved\";\nimport People from \"@pages/People/People\";\nimport Affiliations from \"@pages/Affiliations/Affiliations\";\nimport { DefaultTimeline } from \"@pages/Timeline\";\nimport ErrorPage from \"@pages/404ErrorPage/ErrorPage\";\nimport Resources from \"@pages/Resources\";\nimport ResourcePage from \"@pages/Resources/Page/ResourcePage\";\nimport EditProfile from \"@pages/EditProfile\";\nimport AddTimelineEntry from \"@pages/Timeline/AddTimelineEntry/AddTimelineEntry\";\nimport EditTimelineEntry from \"@pages/Timeline/EditTimelineEntry/EditTimelineEntry\";\nimport { useAppSelector } from \"@redux/hooks\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\nimport { useEffect, useState } from \"react\";\n\nrequire(\"dotenv\").config();\n\nconst AppSwitch = () => {\n\t// redux variable that keeps track if the user is logged in or not\n\tconst isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{isLoggedIn ? : }\n\t\t\t\n\n\t\t\t\n\t\t\t\t{isLoggedIn ? : }\n\t\t\t\n\n\t\t\t\n\t\t\t\t{isLoggedIn ? : }\n\t\t\t\n\n\t\t\t\n\t\t\t\t{isLoggedIn ? : }\n\t\t\t\n\n\t\t\t\n\t\t\t\t{isLoggedIn ? :\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\n\n\t\t\t{/* The ResourcePage component has special props. I can't render it like the other routes */}\n\t\t\t{isLoggedIn ? (\n\t\t\t\t\n\t\t\t) : }\n\n\t\t\t{/* Catch-all */}\n\t\t\t\n\t\t\n\t);\n};\n\nexport default AppSwitch;\n","import React from 'react';\nimport { useAppSelector, useAppDispatch } from '@redux/hooks';\nimport Modal from '@mui/material/Modal';\nimport {\n ValidModalKey,\n selectModal,\n appActions,\n} from '@redux/slices/AppRedux';\nimport './Modal.css';\n\ninterface ModalWrapperProps {\n modalKey: ValidModalKey;\n name: string;\n children: React.ReactElement;\n disableDefaultClose?: boolean;\n}\n\nexport interface ModalInjectedProps {\n modalData?: Object;\n handleClose: () => void;\n}\n\nconst ModalWrapper: React.FC = (props) => {\n const dispatch = useAppDispatch();\n const modal = useAppSelector(selectModal(props.modalKey));\n\n const handleClose = () => {\n dispatch(appActions.closeModal({ key: props.modalKey }));\n };\n\n const injectedProps: ModalInjectedProps = {\n modalData: modal?.data,\n handleClose,\n };\n\n return (\n {} : handleClose}>\n
\n {React.cloneElement(props.children, injectedProps)}\n
\n \n );\n};\n\nexport default ModalWrapper;\n","import { Button } from \"@mui/material\";\nimport classNames from \"classnames\";\nimport \"./Button.css\";\n\ninterface ButtonProps {\n children?: React.ReactNode;\n className?: string;\n [rest: string]: any;\n}\n\nconst GenericButton: React.FC = (props) => {\n const { className, children, ...rest } = props;\n\n const classes = classNames(\"button-root\", className);\n\n return (\n \n );\n};\n\nexport default GenericButton;\n","import React from 'react';\nimport { useFormik } from 'formik';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport PersonIcon from '@mui/icons-material/Person';\nimport LockIcon from '@mui/icons-material/Lock';\nimport * as yup from 'yup';\nimport Button from '@components/generics/Button';\nimport { TEXT } from '@statics';\nimport './LoginForm.css';\nimport makeStyles from '@mui/material/styles/makeStyles';\nimport { createTheme } from '@mui/material/styles';\n\ninterface LoginFormProps {\n onSubmit: (username: string, password: string) => void;\n disabled?: boolean;\n}\n\n\n\nconst LoginForm: React.FC = (props) => {\n const schema = React.useMemo(\n () =>\n yup.object({\n username: yup\n .string()\n .required(TEXT.LOGIN.USERNAME_EMPTY_ERROR),\n\n password: yup\n .string()\n .required(TEXT.LOGIN.PASSWORD_EMPTY_ERROR),\n }),\n []\n );\n\n const form = useFormik({\n initialValues: {\n username: '',\n password: '',\n },\n validationSchema: schema,\n onSubmit: (values) => {\n props.onSubmit(values.username, values.password);\n },\n });\n\n\n return (\n
\n
\n Username\n
\n \n \n \n ),\n className: \"login-form-field-mui\",\n }}\n value={form.values.username}\n onChange={form.handleChange}\n onBlur={form.handleBlur}\n error={Boolean(form.touched.username) && Boolean(form.errors.username)}\n helperText={(form.touched.username && form.errors.username) || \" \"}\n className=\"login-form-field\"\n />\n
\n Password\n
\n \n \n \n ),\n className: \"login-form-field-mui\"\n }}\n value={form.values.password}\n onChange={form.handleChange}\n onBlur={form.handleBlur}\n error={Boolean(form.touched.password) && Boolean(form.errors.password)}\n helperText={(form.touched.password && form.errors.password) || \" \"}\n type=\"password\"\n className=\"login-form-field\"\n />\n \n {TEXT.LOGIN.TITLE}\n \n \n );\n};\n\nexport default LoginForm;\n","import React, { useState } from 'react';\nimport { selectIsLoggingIn } from '@redux/slices/AuthRedux';\nimport { useAppDispatch, useAppSelector } from '@redux/hooks';\nimport Modal, { ModalInjectedProps } from '@components/generics/Modal';\nimport { CONSTANTS, TEXT } from '@statics';\nimport { useHandleLogin } from '@services/authService';\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\nimport CloseIcon from '@mui/icons-material/Close';\nimport LoginForm from './LoginForm';\nimport './LoginView.css';\nimport { IconButton } from '@mui/material';\nimport { appActions } from '@redux/slices/AppRedux';\n\ntype LoginViewProps = Partial;\n\nconst LoginView: React.FC = (props) => {\n const { handleClose } = props;\n const isLoggingIn = useAppSelector(selectIsLoggingIn);\n\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 500);\n\n const { handleLogin, error, success } = useHandleLogin();\n\n const handleUserLogin = (user: string, pwd: string) => handleLogin(user, pwd);\n\n const dispatch = useAppDispatch();\n\n // Implememt this function when Sign Up Modal is done\n const handleOpenSignUpModal = () => {\n dispatch(\n appActions.openModal({\n key: CONSTANTS.MODALS.SIGNUP,\n })\n )\n\n handleClose && handleClose();\n };\n\n // This closes the model as soon as the authentication is done\n React.useEffect(() => {\n if (success) {\n handleClose && handleClose();\n }\n }, [handleClose, success]);\n\n // This is there just to check if the user resizes the screen width on a device\n // it will mount the changes if the screen width changes\n React.useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 500);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n}, []);\n\n return (\n <>\n
\n
\n {!isMobile &&

{TEXT.LOGIN.TITLE}

}\n \n \n \n
\n
\n
\n {isMobile &&

{TEXT.LOGIN.TITLE}

}\n \n
\n
\n \"UBC\n
UBC Visual Cognition Lab
\n
\n {error &&

{`Error: ${error}`}

}\n
\n
\n
\n {TEXT.LOGIN.CREATE_ACCOUNT}{TEXT.LOGIN.CREATE_ACCOUNT_LINK}\n
\n \n );\n};\n\nexport const LoginModal = () => {\n return (\n \n \n \n );\n};\n\nexport default LoginView;\n\n\n","import React, { useState } from 'react';\nimport { useFormik } from 'formik';\nimport TextField from '@mui/material/TextField';\nimport * as yup from 'yup';\nimport Button from '@components/generics/Button';\nimport { CONSTANTS, TEXT } from '@statics';\nimport './SignUpForm.css';\nimport '../SignUpView.css';\nimport { Alert, Divider, FormControl, FormHelperText, MenuItem, Select } from '@mui/material';\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\nimport axios from 'axios';\n\n\n// MOdify this once the back-end implementation is done\n\ninterface SignUpFinalFormProps {\n disabled?: boolean;\n handleOpenLoginModal: () => void;\n}\n\n\ninterface SignUpForm {\n firstname: string;\n lastname: string;\n project: string;\n position: string;\n username: string;\n password: string;\n token: string;\n}\n\nconst SignUpFinalForm: React.FC = (props) => {\n\n const { handleOpenLoginModal } = props;\n\n const [schemaError, setSchemaError] = useState(false);\n const [usernameError, setUsernameError] = useState(false);\n const [tokenError, setTokenError] = useState(false);\n const [otherError, setError] = useState(false);\n\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 500);\n\n React.useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 500);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n\n const schema = React.useMemo(\n () =>\n yup.object({\n firstname: yup\n .string()\n .required(TEXT.SIGNUP.FIRSTNAME_EMPTY_ERROR),\n lastname: yup\n .string()\n .required(TEXT.SIGNUP.LASTNAME_EMPTY_ERROR),\n project: yup\n .string()\n .required(TEXT.SIGNUP.PROJECT_EMPTY_ERROR),\n position: yup\n .string()\n .required(TEXT.SIGNUP.POSITION_EMPTY_ERROR),\n username: yup\n .string()\n .required(TEXT.SIGNUP.USERNAME_EMPTY_ERROR),\n password: yup\n .string()\n .required(TEXT.SIGNUP.PASSWORD_EMPTY_ERROR),\n token: yup\n .string()\n .required(TEXT.SIGNUP.TOKEN_EMPTY_ERROR),\n }),\n []\n );\n\n const form = useFormik({\n initialValues: {\n firstname: '',\n lastname: '',\n project: '',\n position: '',\n username: '',\n password: '',\n token: '',\n }\n ,\n validationSchema: schema,\n onSubmit: (values) => {\n\n },\n });\n function capitalizeWordsWithCoPilot(str: string) {\n if (str === 'co-pilot') {\n return ('Co-pilot')\n } else {\n return str.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())\n }\n }\n\n\n const handleSignup = async () => {\n\n setSchemaError(false)\n setUsernameError(false);\n setTokenError(false);\n setError(false);\n await axios({\n method: 'post',\n url: '/api/users/create',\n data: {\n firstname: form.values.firstname,\n lastname: form.values.lastname,\n project: form.values.project,\n position: capitalizeWordsWithCoPilot(form.values.position),\n username: form.values.username,\n password: form.values.password,\n token: form.values.token,\n tokenKey: form.values.position,\n }\n }).then((__) => {\n handleOpenLoginModal();\n }).catch((err) => {\n // there can be 3 different error codes:\n // - AUTH001: means that the given USERNAME is actually still in use\n // - AUTH002: means that the given REGISTER CODE is incorrect\n // - AUTH003: means that the given SCHEMA is incorrect\n // - AUTH004: Some OTHER error\n if (err.response.data.errCode == 'AUTH001') {\n setUsernameError(true);\n } else if (err.response.data.errCode == 'AUTH002') {\n setTokenError(true);\n } else if (err.response.data.errCode == 'AUTH003') {\n setSchemaError(true)\n } else {\n setError(true);\n }\n })\n }\n\n return (\n
\n
\n
\n
\n {isMobile &&

{TEXT.SIGNUP.TITLE}

}\n
\n First Name\n
\n \n
\n Last Name\n
\n \n
\n \n
\n Project\n
\n \n {CONSTANTS.PROJECTS.map((item) => (\n {item.name}\n ))}\n \n {(form.touched.project && form.errors.project) || \" \"}\n
\n \n
\n Position\n
\n \n {CONSTANTS.POSITIONS.map((item) => {\n if (item.value != 'project-lead')\n return (\n {item.name}\n )\n })}\n \n {(form.touched.position && form.errors.position) || \" \"}\n
\n
\n
\n
\n \"UBC\n
UBC Visual Cognition Lab
\n
\n
\n \n
\n
\n
\n
\n Username\n
\n \n
\n Password\n
\n \n
\n
\n
\n Sign-up Token\n
\n \n \n {TEXT.COMMON.SIGNUP}\n \n {\n (otherError || usernameError || tokenError || schemaError) &&\n <>\n
    \n {usernameError &&
  • Try new username
  • }\n {tokenError &&
  • Faulty Token
  • }\n {schemaError &&
  • One or more fields are empty
  • }\n {otherError &&
  • CONNECTION ERROR
  • }\n
\n \n }\n
\n
\n
\n \n \n NOTICE: Please ask your project lead for token.\n \n
\n )\n\n}\n\nexport default SignUpFinalForm;","import React, { useState } from 'react';\nimport { selectIsLoggingIn } from '@redux/slices/AuthRedux';\nimport { useAppDispatch, useAppSelector } from '@redux/hooks';\nimport Modal, { ModalInjectedProps } from '@components/generics/Modal';\nimport { CONSTANTS, TEXT } from '@statics';\nimport { useHandleLogin } from '@services/authService';\nimport VCLIcon from \"@statics/images/vcl-logo-2023.png\";\nimport CloseIcon from '@mui/icons-material/Close';\nimport './SignUpView.css';\nimport { Alert, Divider, IconButton } from '@mui/material';\nimport SignUpFinalForm from './SignUpFinalForm/SignUpForm';\nimport { appActions } from '@redux/slices/AppRedux';\n\ntype SignUpViewProps = Partial;\n\nconst SignUpView: React.FC = (props) => {\n const { handleClose } = props;\n const isLoggingIn = useAppSelector(selectIsLoggingIn);\n\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 500);\n\n /* Modify the code below after the backend implementation is done to create a User\n *\n **/\n\n const { handleLogin, error, success } = useHandleLogin();\n\n const handleUserLogin = (user: string, pwd: string) => handleLogin(user, pwd);\n\n const dispatch = useAppDispatch();\n\n // Implememt this function when Sign Up Modal is done\n const handleOpenLoginModal = () => {\n dispatch(\n appActions.openModal({\n key: CONSTANTS.MODALS.LOGIN,\n })\n )\n\n handleClose && handleClose();\n };\n\n\n React.useEffect(() => {\n if (success) {\n handleClose && handleClose();\n }\n }, [handleClose, success]);\n\n // This is there just to check if the user resizes the screen width on a device\n // it will mount the changes if the screen width changes\n React.useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 500);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n}, []);\n\n return (\n <>\n
\n
\n {!isMobile &&

{TEXT.SIGNUP.TITLE}

}\n \n \n \n
\n {/* Modify the handleLogin to handleSignup when backend implementation is done */}\n \n
\n
\n {TEXT.SIGNUP.LOGIN_ACCOUNT}{TEXT.SIGNUP.LOGIN_ACCOUNT_LINK}\n
\n \n );\n};\n\nexport const SignUpModal = () => {\n return (\n \n \n \n );\n};\n\nexport default SignUpView;","import { LoginModal } from '@components/LoginView';\nimport { SignUpModal } from '@components/SignUpView/SignUpView';\n\nconst Modals = () => {\n return (\n <>\n \n \n \n );\n};\n\nexport default Modals;","import React from 'react';\nimport { TEXT, NAV, ROUTES } from '@statics';\nimport GenericLink from '@components/generics/Link';\nimport './Footer.css'\nimport { useAppDispatch, useAppSelector } from \"@redux/hooks\";\nimport { selectIsLoggedIn } from \"@redux/slices/AuthRedux\";\nimport constants from \"@statics/constants\";\n\nconst Footer = () => {\n const isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n const projects = [{\n name: \"Coding Team\"\n }, {\n name: \"Correlation\"\n }, {\n name: \"Ideo\"\n }, {\n name: \"Image Transitions\"\n }, {\n name: \"NCIS\"\n }, {\n name: \"NOVA\"\n }, {\n name: \"SHIVA\"\n }]\n\n return (\n\n
\n
\n
\n\n
\n
\n {'UBC\n
\n
\n
  • {TEXT.LAB_INFO.TEL_TEXT + ':'} {TEXT.LAB_INFO.TEL}
  • \n
  • {TEXT.LAB_INFO.FAX_TEXT + ':'} {TEXT.LAB_INFO.FAX}
  • \n
  • {TEXT.LAB_INFO.LAB_TEXT + ':'} {TEXT.LAB_INFO.EMAIL}
  • \n
  • {TEXT.LAB_INFO.DR_RENSINK + ':'} {TEXT.LAB_INFO.DRRENSINK_CONTACT}
  • \n
    \n
    \n\n
    \n
    \n

    {TEXT.PAGE_TITLES.NAVIGATE}

    \n {NAV.map(({ TITLE, REF }) => {\n // return (\n //
  • \n // \n //
  • \n // )\n if (isLoggedIn) {\n if (TITLE == \"Resources\") {\n return (
  • \n \n
  • )\n } else if (TITLE == \"Timeline\") {\n return (
  • \n \n
  • )\n } else {\n return(
  • \n \n
  • )\n }\n } else {\n if (TITLE == \"Resources\") {\n return (<>)\n } else if (TITLE == \"Timeline\") {\n return (<>)\n } else {\n return(
  • \n \n
  • )\n }\n }\n })}\n
    \n
    \n

    {TEXT.PAGE_TITLES.PROJECTS}

    \n {projects.map((project, i) => {\n return (\n
  • \n \n {project.name}\n \n
  • \n )\n })}\n\n
    \n
    \n
    \n
    \n
  • UBC Visual Cognition Lab {TEXT.LAB_INFO.CAMPUS}
  • \n
    \n
    \n\n )\n}\n\nexport default Footer;","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n}\n","import React from \"react\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport Navbar from \"@components/Navbar\";\nimport { useHandleCheckAuth } from \"@services/authService\";\nimport { useHandleGetAllProjects } from \"@services/projectService\";\nimport Switch from \"./Switch\";\nimport Modals from \"./Modals\";\nimport Footer from \"@components/Footer\";\nimport ScrollToTop from \"./ScrollToTop\";\nimport \"./App.css\";\n\nfunction App() {\n useHandleCheckAuth();\n useHandleGetAllProjects();\n\n return (\n
    \n \n \n \n \n \n
    \n \n
    \n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { store } from '@redux/store';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport axios from 'axios';\n\n// without this HTTPS requests using axios will not automatically have cookies attached to them\naxios.defaults.baseURL = process.env.REACT_APP_API_URL;\naxios.defaults.withCredentials = true;\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mainContent\":\"EditProfile_mainContent__bUFRo\",\"blueBtn\":\"EditProfile_blueBtn__aFr4k\",\"greyBtn\":\"EditProfile_greyBtn__3Lcae\",\"readonly\":\"EditProfile_readonly__1e05U\",\"profilePicture\":\"EditProfile_profilePicture__1hb-r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"resourceEntryContainer\":\"ResourceEntry_resourceEntryContainer__uoG2A\",\"imageContainer\":\"ResourceEntry_imageContainer__1hkDP\",\"contentContainer\":\"ResourceEntry_contentContainer__1waGB\",\"authorContainer\":\"ResourceEntry_authorContainer__sGxwl\",\"titleContainer\":\"ResourceEntry_titleContainer__3sVJn\",\"iconsContainer\":\"ResourceEntry_iconsContainer__3b0X9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loginMenu\":\"ProfileDropdown_loginMenu__2_6Zu\",\"profileDropdownItem\":\"ProfileDropdown_profileDropdownItem__2NqqV\",\"dropdownLink\":\"ProfileDropdown_dropdownLink__f5Tdj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputForm\":\"DateInput_inputForm__3hfvm\",\"container\":\"DateInput_container__3usyp\",\"selectMonth\":\"DateInput_selectMonth__2y6TA\",\"selectDay\":\"DateInput_selectDay__1UptE\",\"selectYear\":\"DateInput_selectYear__35Ngx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputForm\":\"ContributorInput_inputForm__1OJDA\",\"tagBox\":\"ContributorInput_tagBox__3y07C\",\"tagItem\":\"ContributorInput_tagItem__26Or4\",\"close\":\"ContributorInput_close__1UUmv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputForm\":\"HyperlinkInput_inputForm__3Y0ft\",\"tagBox\":\"HyperlinkInput_tagBox__3srQb\",\"tagItem\":\"HyperlinkInput_tagItem__1U1LH\",\"close\":\"HyperlinkInput_close__2EGIz\"};"],"sourceRoot":""}