{"version":3,"sources":["assets/AMP-TAP-Logo-horz-ko.svg","components/molecules/Facility.jsx","components/molecules/Capability.jsx","components/molecules/Technique.jsx","components/atoms/Text.jsx","components/atoms/Paragraph.jsx","components/atoms/List.jsx","components/atoms/ListItem.jsx","components/atoms/Blockquote.jsx","components/atoms/Code.jsx","components/atoms/LinkInline.jsx","components/molecules/Content.jsx","assets/TAP-bullet-square-gold-solid.svg","assets/TAP-bullet-circle-gray-solid.svg","assets/TAP-bullet-circle-gray-outline.svg","assets/CATN2-logo-white.png","assets/AMP-TAP-home-page-hdr-bg.jpg","assets/background-laser.jpg","assets/AMP-TAP-Logo-horz.svg","assets/CATN2-logo-blue.png","assets/AMP-TAP-home-page-ftr-bg.jpg","components/atoms/ImageLink.jsx","components/atoms/Image.jsx","components/atoms/ImageCaption.jsx","components/atoms/Resource.jsx","components/atoms/Subhead.jsx","components/molecules/GalleryImages.jsx","components/views/Error.jsx","components/organisms/ErrorBoundary.jsx","components/views/Dialog.jsx","components/molecules/HomePageContent.jsx","components/atoms/Input.jsx","components/molecules/HomePageForm.jsx","context/ContentContext.js","components/atoms/HeaderMenuItemResponsive.jsx","components/atoms/HeaderMenuItem.jsx","components/atoms/HeaderNavButton.jsx","components/organisms/HomePageHeader.jsx","components/atoms/HomePageCard.jsx","components/molecules/HomePageHeroNavMsg.jsx","components/organisms/HomePageHeroNav.jsx","components/views/Loading.jsx","components/molecules/ParallaxImage.jsx","components/views/HomePage.jsx","components/atoms/StageCard.jsx","components/atoms/DisciplineNavButton.jsx","components/molecules/DisciplineCollection.jsx","components/molecules/DisciplineStage.jsx","components/organisms/DisciplineStagesWrapper.jsx","components/organisms/DisciplineMainMessage.jsx","components/organisms/DisciplineHeader.jsx","components/views/Discipline.jsx","hooks/useScrollPosition.js","hooks/useResizeObserver.js","utils/molecules-index.js","components/molecules/FocusEntry.jsx","components/atoms/ResearchNavButton.jsx","components/organisms/Focus.jsx","components/organisms/Concentration.jsx","components/organisms/Collection.jsx","components/organisms/StageMainMessage.jsx","components/views/Stage.jsx","components/views/Footer.jsx","services/XhrService.js","services/ContentProviderService.js","App.jsx","serviceWorker.js","index.js","utils/component-support.js","components/atoms/Students.jsx","components/molecules/StudentGroup.jsx","components/atoms/SubheadCaption.jsx","components/molecules/Person.jsx","components/atoms/Heading.jsx","components/atoms/LinkBlock.jsx","components/atoms/SubSectionHeading.jsx"],"names":["module","exports","useStyles","makeStyles","theme","moleculeSubsectionWrapper","paddingTop","paddingBottom","marginBottom","overflow","clear","moleculeSubsection","borderLeft","paddingLeft","Facility","content","isFocusEntry","displayName","description","capabilities","primaryImage","galleryImages","truckRamp","classes","imageType","className","map","capability","key","sys","id","Capability","expert","expertPerson","Technique","activeThrustId","associatedLink","thrustDescription","thrustRef","useRef","useEffect","current","scrollIntoView","behavior","ref","text","display","textAlign","color","props","isWhite","fontSize","lineHeight","fontWeight","marksArray","includes","fontStyle","textDecorationLine","decoration","breakpoints","up","Text","marks","mark","type","filter","join","variant","paragraph","boxSizing","isListItem","isHomePage","Paragraph","isBiography","isPositionMessageKludge","Typography","orderedList","marginTop","width","unorderedList","listStyleType","backgroundImage","bulletGoldSolid","backgroundPosition","backgroundSize","backgroundRepeat","bulletGraySolid","bulletGrayOutline","List","listType","listItem","ListItem","blockquote","Blockquote","code","Code","linkInline","textDecoration","LinkInline","data","Link","href","uri","value","Content","node","i","component","nodeType","Divider","Subhead","float","margin","minWidth","minHeight","maxWidth","portrait","height","objectFit","galleryImage","Image","imageClass","image","mediaUrl","mediaAltText","ariaLabel","src","alt","title","aria-label","position","background","imageUrl","border","dims","h","orientation","w","styleProps","isPortrait","imageCaption","ImageCaption","Resource","resourceType","Fragment","ImageLink","style","LinkBlock","url","linkDisplay","subhead","padding","isPerson","galleryWrapper","imageWrapper","GalleryImages","container","Math","random","errorWrapper","flexGrow","justifyContent","alignItems","error","flexDirection","heading","body","buttonWrapper","Error","isRedirect","errorMsg","handleRedirect","useHistory","location","pathname","to","Button","onClick","ErrorBoundary","setState","state","errorInfo","this","children","React","Component","Dialog","ariaContent","isOpen","handleCloseDialog","buttonText","open","onClose","aria-labelledby","aria-describedby","DialogTitle","DialogContent","DialogContentText","DialogActions","content1Wrapper","isHeaderContent","content1","content2Wrapper","title1","title2","HomePageContent","headline","Input","name","label","errors","handleChange","Grid","item","xs","TextField","fullWidth","Boolean","helperText","onChange","fieldSet","HomePageForm","submitForm","initialFormValues","firstName","lastName","email","useState","formData","setFormData","validationErrors","setValidationErrors","ev","target","onSubmit","preventDefault","temp","test","Object","values","every","x","isValid","spacing","md","size","ContentContext","createContext","Provider","Consumer","menuItem","palette","primary","main","backgroundColor","secondary","menuItemActive","subMenuItem","info","HeaderMenuItemResponsive","forwardRef","menuItemUrl","activeDisciplineUrlName","activeRespvMenuItem","handleResponsiveMenuClose","handleResponsiveSubMenuOpen","menuItemUrlName","menuItemDisplayName","isMenuOpen","setIsMenuOpen","useContext","renderStandardMenuItem","MenuItem","RouterLink","toUpperCase","renderSubMenu","getDisciplineStageNames","entry","subMenuItemUrl","urlSlug","menuItemText","HeaderMenuItem","handleMenuClose","root","grow","button","marginLeft","buttonActive","buttonLogin","HeaderNavButton","btnUrl","btnUrlName","btnDisplayName","isDisciplineBtn","getDisciplineDisplayName","anchorEl","setAnchorEl","menuId","renderDisciplineBtn","event","currentTarget","Menu","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","keepMounted","renderStandardBtn","header","logoLink","logo","altLogoLink","altLogo","sectionDesktop","sectionResponsive","popoverPaper","down","maxHeight","top","left","closeMenuItem","borderBottom","close","ForwardRouterLink","innerRef","HomePageHeader","disciplineUrlName","headerNavItems","getDisciplineNames","push","referenceName","order","responsiveMoreAnchorEl","setResponsiveMoreAnchorEl","setActiveRespvMenuItem","isResponsiveMenuOpen","respvMenuItem","renderResponsiveMenu","PaperProps","PopoverClasses","paper","Close","htmlColor","closeIcon","AppBar","elevation","Toolbar","disableGutters","catn2LogoWhite","IconButton","aria-controls","aria-haspopup","MoreVert","imgWrapper","cardPosition","isResponsive","cursor","transition","imgAndBorderWrapper","hoverBorder","borderWidth","isResponsiveXs","borderStyle","borderColor","activeDispUrlName","dispUrlName","dispImg","HomePageCard","handleClick","handleMouseEnter","handleMouseLeave","onMouseEnter","onMouseLeave","dispHeroMsgWrapper","transform","dispHeroMsgTitleWrapper","flex","marginRight","dispHeroMsgTitle","activeDispDisplayName","dispDisplayName","dispHeroMsgContent","HomePageHeroNavMsg","message","statement","heroNavWrapper","dispCardsWrapperWrapper","dispCardsWrapper","dispHeroMsgGradientBox","isResponsiveSm","isResponsiveMd","HomePageHeroNav","useMediaQuery","dispUrlNamesArray","d","activeDispIndex","setActiveDispIndex","isMouseEntered","setIsMouseEntered","loop","clearInterval","setInterval","indexOf","displayImage","getSiloPrimaryImageUrl","getSiloPositioningStatement","dispBg","loadingViewWrapper","loadingContentWrapper","Loading","CircularProgress","parallax","ht","img","backgroundPositionX","backgroundPositionY","parallaxOffset","ParallaxImage","docHeight","setDocHeight","screenHeight","setScreenHeight","yOffset","setYOffset","setParallaxOffset","parallaxShift","document","clientHeight","window","innerHeight","pageYOffset","addEventListener","removeEventListener","headerBg","HomePage","history","homePage","setHomePage","isLoading","setIsLoading","isError","setIsError","setErrorMsg","setIsRedirect","isDialogOpen","setIsDialogOpen","initAsync","a","getHomePageAsync","response","console","log","renderProblem","renderSignUpSuccessDialog","renderHomePage","homeContent1Headline","homeContent1","discipline","homeContent2Headline","homeContent2","heroImg2","stageCard","isOverviewPage","stageName","isTestMetrol","isLargeDesktop","StageCard","stageDisplayName","stageUrlName","buttonPath1","isActive","buttonPath2","DisciplineNavButton","collectionId","collectionDisplayName","concentrationId","concentrationDisplayName","pathPosition","pathCount","slugify","collectionWrapper","flexShrink","flexBasis","disciplineNavButtonWrapper","DisciplineCollection","currentCollection","stage","activeConcentrationId","concentrations","concentrationUrlName","collectionPathPos","stageWrapper","collection","collNameWrapper","collName","stageCardResponsive","bodyResponsive","flexWrap","collectionResponsive","collectionNameResponsive","DisciplineStage","useTheme","isSm","collections","getCollectionsForStage","activeFromStageDisplayName","getStageDisplayName","fromStageUrlName","stageWrapperRef","paths","getPaths","renderStageSm","columnNums","column","coll","path","count","sm","max","renderStageMd","stagesFlexWrapper","stagesWrapper","DisciplineStagesWrapper","messageWrap","DisciplineMainMessage","heroImage","DisciplineHeader","setImageUrl","getDisciplineHeroImageUrl","init","Container","catn2LogoBlue","activeItems","activeDiscipline","textTransform","Discipline","disciplineParam","match","params","positioningStatement","pageInfo","disciplineSilo","setDisciplineSilo","setDisciplineUrlName","stages","setStages","source","axios","CancelToken","getDisciplineAsync","getStagesAsync","cancel","positioningHeadline","renderDiscipline","isBrowser","getScrollPosition","element","useWindow","y","getBoundingClientRect","scrollX","scrollY","useResizeObserver","nodeCurrent","setNodeCurrent","observeTarget","resizeObserver","ResizeObserver","entries","observe","unobserve","molecules","require","default","focusEntryContainer","borderTop","focusEntryHeight","focusEntry","focusEntryHeading","FocusEntry","headingText","focusEntryHeadingRef","focusEntryHeadingDimensions","setFocusEntryHeadingDimensions","offsetWidth","offsetHeight","Molecule","researchButton","ResearchNavButton","thrust","isDesktop","handleScroll","direction","focusWrapper","focusNameWrapper","divider","focusName","focusDescription","focusContactWrapper","focusElement","researchButtonsWrapper","researchButtonsHeading","Focus","focus","contact","facultyLeads","engineeringLeads","techniques","facilities","setActiveThrustId","allThrusts","getAllResearchThrusts","person","Person","isContact","facultyLead","engineeringLead","facility","technique","concentrationWrapper","wrapperBaseHeight","concentrationClicker","concentrationName","borderRight","Concentration","concentration","isConcentrationOpen","focuses","headingRef","wrapperRef","setIsOpen","headingWidth","setHeadingWidth","contentRect","setTimeout","block","inline","collectionClicker","collectionName","collectionIntro","isFirstCollection","contactText","Collection","collectionIndex","isCollectionOpen","isIntroNotEmpty","StageMainMessage","stageContainer","overflowX","backToTopBox","visibility","stageNavBottom","bottom","right","boxShadow","zIndex","Stage","stageParam","stageNavRef","setStageNavBottom","activeCollectionId","setActiveCollectionId","setActiveConcentrationId","stgs","effect","deps","wait","throttleTimeout","callBack","currPos","prevPos","useLayoutEffect","useScrollPosition","handleChangeConcentration","collId","concId","emptySectionDialog","renderStage","stageNamesObj","getStageNames","reduce","obj","stagePosInfo","getStagesPositioningInfo","Tooltip","placement","Navigation","footer","alignContent","alignSelf","bgImg","legalWrapper","miceType","link","Footer","copyright","Date","getFullYear","AmpApiUrl","runtimeSettings","config","ajaxTimeout","axiosConfig","headers","Pragma","Expires","crossDomain","getHeaders","resolveApiPath","defaults","timeout","interceptors","use","Promise","reject","cancelToken","get","disciplineSilos","disciplineNames","stageNames","fetchHomePageAsync","length","xhr","fetchListsAsync","fetchDisciplineAsync","refName","setCollectionsByStageAsync","setPaths","setStagesAsync","_","sortBy","disciplines","discUrl","filterCollections","disciplineDisplayName","collectionsByStage","pathManager","pageInfoPaths","forEach","p","getSilo","s","search","newCollections","ContentProviderService","silo","finalStageNames","pgInfo","stagesPositioningHeadline","stagesPositioningStatement","siteWrapper","site","siteContent","App","CssBaseline","exact","hostname","createMuiTheme","lg","xl","overrides","MuiButton","borderRadius","contained","containedPrimary","outlined","textPrimary","MuiDialogTitle","MuiDivider","MuiMenu","list","MuiOutlinedInput","MuiPaper","rounded","MuiTypography","h3","typography","fontFamily","responsiveFontSizes","ReactDOM","render","StrictMode","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","buildFullName","fullName","middleNameInitial","degree","buildCommaSeparatedString","arr","string","trim","str","RegExp","split","toString","toLowerCase","replace","c","charAt","arr1","lead","research","arr2","convertStudentsToList","studentGroups","group","students","studentsArray","student","studentsString","Students","StudentGroup","studentGroup","researchUrl","subheadCaption","SubheadCaption","personDetails","emailAddress","phone","biography","sunyPolyFacultyStaffPage","publicationsUrl","Heading","isEmail","bio","bioSegment","SubSectionHeading","linkBlock","hrefUrl","subSectionHeading"],"mappings":"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","file":"static/js/main.226aecf7.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/AMP-TAP-Logo-horz-ko.0aebdedb.svg\";","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Capability from \"../molecules/Capability\";\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport Content from \"../molecules/Content\";\r\nimport Heading from \"../atoms/Heading\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport Subhead from \"../atoms/Subhead\";\r\nimport SubSectionHeading from \"../atoms/SubSectionHeading\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n // **These styles MUST be matching for Person, Facility & Capability components\r\n moleculeSubsectionWrapper: {\r\n paddingTop: 10,\r\n paddingBottom: 0,\r\n marginBottom: 30, // set to 0 by focusEntryContainer:last-child or moleculeSubsection:last-child\r\n overflow: \"hidden\",\r\n clear: \"left\",\r\n \"& > div:last-child\": {\r\n paddingBottom: 0,\r\n marginBottom: 0,\r\n },\r\n },\r\n moleculeSubsection: {\r\n borderLeft: \"solid .5px #eba900\",\r\n paddingLeft: 20,\r\n paddingBottom: 30, // set to 0 by moleculeSubsectionWrapper:last-child\r\n overflow: \"hidden\",\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst Facility = ({ content, isFocusEntry = false }) => {\r\n const {\r\n displayName,\r\n // facilityType,\r\n description,\r\n capabilities,\r\n primaryImage,\r\n galleryImages,\r\n truckRamp,\r\n } = content;\r\n\r\n const classes = useStyles();\r\n\r\n // console.log(\"Facility\", isFocusEntry, displayName);\r\n\r\n return (\r\n <>\r\n {displayName &&\r\n (isFocusEntry ? (\r\n \r\n ) : (\r\n \r\n ))}\r\n {description && }\r\n {primaryImage && (\r\n \r\n )}\r\n {galleryImages && }\r\n {truckRamp && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n {capabilities && (\r\n
\r\n \r\n {capabilities.map((capability) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Facility;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport Person from \"../molecules/Person\";\r\nimport Content from \"../molecules/Content\";\r\nimport Heading from \"../atoms/Heading\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport SubSectionHeading from \"../atoms/SubSectionHeading\";\r\nimport Subhead from \"../atoms/Subhead\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n // **These styles MUST be matching for Person, Facility & Capability components\r\n moleculeSubsectionWrapper: {\r\n paddingTop: 10,\r\n paddingBottom: 0,\r\n marginBottom: 30, // set to 0 by focusEntryContainer:last-child or moleculeSubsection:last-child\r\n overflow: \"hidden\",\r\n clear: \"left\",\r\n \"& > div:last-child\": {\r\n paddingBottom: 0,\r\n },\r\n },\r\n moleculeSubsection: {\r\n borderLeft: \"solid .5px #eba900\",\r\n paddingLeft: 20,\r\n paddingBottom: 30, // set to 0 by moleculeSubsectionWrapper:last-child\r\n overflow: \"hidden\",\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst Capability = ({ content, isFocusEntry = false }) => {\r\n const {\r\n displayName,\r\n // type,\r\n description,\r\n expert,\r\n primaryImage,\r\n galleryImages,\r\n } = content;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {displayName &&\r\n (isFocusEntry ? (\r\n \r\n ) : (\r\n \r\n ))}\r\n {primaryImage && (\r\n \r\n )}\r\n {description && }\r\n {galleryImages && }\r\n {expert && (\r\n
\r\n \r\n {expert.map((expertPerson) => (\r\n \r\n \r\n
\r\n ))}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Capability;\r\n","import React, { useEffect, useRef } from \"react\";\r\n\r\nimport GalleryImages from \"./GalleryImages\";\r\nimport Content from \"./Content\";\r\nimport Heading from \"../atoms/Heading\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport Subhead from \"../atoms/Subhead\";\r\n\r\nconst Technique = ({ isFocusEntry, content, activeThrustId = null }) => {\r\n const {\r\n sys,\r\n // entityType,\r\n // type,\r\n associatedLink,\r\n primaryImage,\r\n galleryImages,\r\n displayName,\r\n thrustDescription,\r\n } = content;\r\n\r\n const thrustRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (activeThrustId === sys.id) {\r\n thrustRef.current.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }, [activeThrustId, sys.id]);\r\n\r\n return (\r\n
\r\n {displayName &&\r\n (isFocusEntry ? (\r\n \r\n ) : (\r\n \r\n ))}\r\n {primaryImage && (\r\n \r\n )}\r\n {thrustDescription && }\r\n {associatedLink && (\r\n \r\n )}\r\n {galleryImages && }\r\n
\r\n );\r\n};\r\n\r\nexport default Technique;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\n// possible marks: bold, italic, underline, code\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n text: {\r\n display: \"inline\",\r\n textAlign: \"left\",\r\n color: (props) => (props.isWhite ? \"#fff\" : \"inherit\"),\r\n fontSize: \"1.1rem\",\r\n lineHeight: 1.65,\r\n // fontSize: (props) => (props.isWhite ? \"1.2rem\" : \"inherit\"),\r\n fontWeight: (props) => (props.marksArray.includes(\"bold\") ? 700 : 300),\r\n fontStyle: (props) =>\r\n props.marksArray.includes(\"italic\") ? \"italic\" : \"normal\",\r\n textDecorationLine: (props) => props.decoration || \"none\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"1.3rem\",\r\n lineHeight: 1.5,\r\n },\r\n },\r\n}));\r\n\r\nconst Text = ({ text, marks, isWhite }) => {\r\n const marksArray = marks.map((mark) => mark.type);\r\n const decoration = marksArray\r\n .filter((mark) => [\"underline\", \"line-through\", \"overline\"].includes(mark))\r\n .join(\" \");\r\n const styleProps = { marksArray, decoration, isWhite };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n\r\nexport default Text;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paragraph: {\r\n boxSizing: \"border-box\",\r\n // Aligns text with top of images\r\n paddingTop: (props) => (props.isListItem ? 0 : props.isHomePage ? 0 : 5),\r\n marginBottom: (props) => (props.isListItem ? 5 : props.isHomePage ? 0 : 15),\r\n // clear: (props) => (props.isBiography ? \"both\" : \"none\"),\r\n },\r\n}));\r\n\r\nconst Paragraph = ({\r\n content,\r\n isListItem = false,\r\n isWhite = false,\r\n isHomePage = false,\r\n isBiography = false,\r\n //TODO: THIS IS TEMP LOGIC UNTIL POSITIONING STATEMENT IS CHANGED FROM RICH TEXT TO PLAIN TEXT IN CONTENTFUL\r\n isPositionMessageKludge = false,\r\n}) => {\r\n const styleProps = { isListItem, isHomePage, isBiography };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Paragraph;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport bulletGoldSolid from \"../../assets/TAP-bullet-square-gold-solid.svg\";\r\nimport bulletGraySolid from \"../../assets/TAP-bullet-circle-gray-solid.svg\";\r\nimport bulletGrayOutline from \"../../assets/TAP-bullet-circle-gray-outline.svg\";\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n orderedList: {\r\n boxSizing: \"border-box\",\r\n paddingLeft: 2,\r\n marginTop: 3,\r\n width: \"auto\",\r\n overflow: \"hidden\",\r\n },\r\n unorderedList: {\r\n boxSizing: \"border-box\",\r\n paddingLeft: 2,\r\n marginTop: 3,\r\n listStyleType: \"none\",\r\n width: \"auto\",\r\n overflow: \"hidden\",\r\n \"& li\": {\r\n backgroundImage: `url(${bulletGoldSolid})`,\r\n backgroundPosition: \"0px 12px\",\r\n backgroundSize: \"6px 6px\",\r\n backgroundRepeat: \"no-repeat\",\r\n paddingLeft: 18,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n backgroundPosition: \"0px 13px\",\r\n },\r\n },\r\n \"& li li\": {\r\n backgroundImage: `url(${bulletGraySolid})`,\r\n },\r\n \"& li li li\": {\r\n backgroundImage: `url(${bulletGrayOutline})`,\r\n },\r\n },\r\n}));\r\n\r\nconst List = ({ content, listType }) => {\r\n const classes = useStyles();\r\n\r\n if (listType === \"orderedList\") {\r\n return (\r\n
    \r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default List;\r\n","import React from \"react\";\r\n// import { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n listItem: {\r\n textAlign: \"left\",\r\n },\r\n}));\r\n\r\nconst ListItem = ({ content }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n};\r\n\r\nexport default ListItem;\r\n","import React from \"react\";\r\n// import { Link } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n blockquote: {\r\n boxSizing: \"border-box\",\r\n },\r\n}));\r\n\r\nconst Blockquote = ({ content }) => {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default Blockquote;\r\n","import React from \"react\";\r\n// import { Link } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n code: {\r\n boxSizing: \"border-box\",\r\n },\r\n}));\r\n\r\nconst Code = ({ content }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Code;\r\n","import React from \"react\";\r\nimport { Link } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n linkInline: {\r\n textDecoration: \"underline\",\r\n },\r\n}));\r\n\r\nconst LinkInline = ({ content, data }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n {content[0].value}\r\n \r\n );\r\n};\r\n\r\nexport default LinkInline;\r\n","import React from \"react\";\r\nimport { Divider } from \"@material-ui/core\";\r\n\r\nimport Text from \"../atoms/Text\";\r\nimport Paragraph from \"../atoms/Paragraph\";\r\nimport List from \"../atoms/List\";\r\nimport ListItem from \"../atoms/ListItem\";\r\nimport Blockquote from \"../atoms/Blockquote\";\r\nimport Code from \"../atoms/Code\";\r\nimport LinkInline from \"../atoms/LinkInline\";\r\nimport Subhead from \"../atoms/Subhead\";\r\n\r\n// recursive component\r\nconst Content = ({\r\n content,\r\n isBiography = false,\r\n isListItem = false,\r\n isWhite = false,\r\n isHomePage = false,\r\n //TODO: THIS IS TEMP LOGIC UNTIL POSITIONING STATEMENT IS CHANGED FROM RICH TEXT TO PLAIN TEXT IN CONTENTFUL\r\n isPositionMessageKludge = false,\r\n}) => {\r\n return (\r\n <>\r\n {content.map((node, i) => {\r\n let component = null;\r\n const { nodeType, content, data } = node;\r\n\r\n switch (nodeType) {\r\n case \"paragraph\":\r\n component = (\r\n \r\n );\r\n break;\r\n case \"ordered-list\":\r\n component = (\r\n \r\n );\r\n break;\r\n case \"unordered-list\":\r\n component = (\r\n \r\n );\r\n break;\r\n case \"list-item\":\r\n component = ;\r\n break;\r\n case \"blockquote\":\r\n component =
    ;\r\n break;\r\n case \"code\":\r\n component = ;\r\n break;\r\n case \"hyperlink\":\r\n component = ;\r\n break;\r\n // base cases ---------------------------------------------------------\r\n case \"hr\":\r\n component = ;\r\n break;\r\n case \"text\":\r\n component = isPositionMessageKludge ? (\r\n \r\n ) : (\r\n \r\n );\r\n break;\r\n default:\r\n component = null;\r\n }\r\n\r\n return component;\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default Content;\r\n","module.exports = __webpack_public_path__ + \"static/media/TAP-bullet-square-gold-solid.ca4ea5d7.svg\";","module.exports = __webpack_public_path__ + \"static/media/TAP-bullet-circle-gray-solid.212a0297.svg\";","module.exports = __webpack_public_path__ + \"static/media/TAP-bullet-circle-gray-outline.3036f6f3.svg\";","module.exports = __webpack_public_path__ + \"static/media/CATN2-logo-white.fed84ee5.png\";","module.exports = __webpack_public_path__ + \"static/media/AMP-TAP-home-page-hdr-bg.5f8aec86.jpg\";","module.exports = __webpack_public_path__ + \"static/media/background-laser.1cca93f7.jpg\";","module.exports = __webpack_public_path__ + \"static/media/AMP-TAP-Logo-horz.3829a30d.svg\";","module.exports = __webpack_public_path__ + \"static/media/CATN2-logo-blue.58340d99.png\";","module.exports = __webpack_public_path__ + \"static/media/AMP-TAP-home-page-ftr-bg.32c1f1ce.jpg\";","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n primaryImage: {\r\n display: \"block\",\r\n float: \"none\",\r\n margin: \"0 20px 15px 0\",\r\n paddingTop: \".7rem\",\r\n minWidth: 100,\r\n minHeight: 100,\r\n maxWidth: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n float: \"left\",\r\n },\r\n },\r\n portrait: {\r\n display: \"block\",\r\n float: \"none\",\r\n height: 200,\r\n maxWidth: \"100%\",\r\n objectFit: \"cover\",\r\n margin: \"0 20px 15px 0\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n float: \"left\",\r\n },\r\n },\r\n galleryImage: {\r\n margin: \"0 15px 15px 0\",\r\n maxWidth: \"100%\",\r\n },\r\n}));\r\n\r\nconst Image = ({ image, imageType }) => {\r\n const classes = useStyles();\r\n\r\n let imageClass;\r\n\r\n switch (imageType) {\r\n case \"portrait\":\r\n imageClass = classes.portrait;\r\n break;\r\n case \"primaryImage\":\r\n imageClass = classes.primaryImage;\r\n break;\r\n case \"galleryImage\":\r\n imageClass = classes.galleryImage;\r\n break;\r\n default:\r\n imageClass = classes.primaryImage;\r\n break;\r\n }\r\n\r\n const { mediaUrl, mediaAltText, ariaLabel } = image;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Image;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n portrait: {\r\n position: \"relative\",\r\n display: \"block\",\r\n float: \"none\",\r\n width: 160,\r\n height: 200,\r\n background: \"#eee\",\r\n backgroundImage: (props) => `url(${props.imageUrl})`,\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"50% 50%\",\r\n backgroundRepeat: \"no-repeat\",\r\n border: \".5px solid rgba(0,0,0,0.2)\",\r\n margin: \"0 20px 15px 0\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n float: \"left\",\r\n },\r\n },\r\n primaryImage: {\r\n display: \"block\",\r\n float: \"none\",\r\n margin: \"14px 30px 0px 0\",\r\n // paddingTop: \".7rem\",\r\n border: \".5px solid rgba(0,0,0,0.2)\",\r\n // width: (props) => props.dims.w,\r\n height: (props) => props.dims.h,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n float: \"left\",\r\n },\r\n },\r\n galleryImage: {\r\n margin: \"0 15px 0px 0\",\r\n // maxWidth: \"100%\",\r\n // width: (props) => props.dims.w,\r\n height: (props) => props.dims.h,\r\n border: \".5px solid rgba(0,0,0,0.2)\",\r\n },\r\n}));\r\n\r\nconst Image = ({ image, imageType }) => {\r\n //TODO: Better way to handle this\r\n const dims =\r\n image.orientation === \"square\"\r\n ? { w: 200, h: 200 }\r\n : image.orientation === \"portrait\"\r\n ? { w: 160, h: 200 }\r\n : { w: 300, h: 200 };\r\n const styleProps = {\r\n imageUrl: image.mediaUrl,\r\n dims,\r\n };\r\n // console.log(\"Image\", styleProps);\r\n const classes = useStyles(styleProps);\r\n\r\n //In this case, \"portrait\" is not about orientation. It's an image that is literally the portrait of a person.\r\n const isPortrait = imageType === \"portrait\";\r\n\r\n const { mediaUrl, mediaAltText, ariaLabel } = image;\r\n\r\n return isPortrait ? (\r\n \r\n ) : (\r\n <>\r\n {/* {image.orientation} */}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Image;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n imageCaption: {\r\n // fontWeight: 700,\r\n boxSizing: \"border-box\",\r\n width: (props) => props.width,\r\n },\r\n}));\r\n\r\nconst ImageCaption = ({ text, orientation }) => {\r\n const width =\r\n orientation === \"square\" ? 200 : orientation === \"portrait\" ? 160 : 300;\r\n const styleProps = { width };\r\n const classes = useStyles(styleProps);\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n\r\nexport default ImageCaption;\r\n","import React from \"react\";\r\n\r\nimport ImageLink from \"./ImageLink\";\r\nimport Image from \"./Image\";\r\nimport ImageCaption from \"./ImageCaption\";\r\nimport LinkBlock from \"./LinkBlock\";\r\n\r\nconst Resource = ({ content, imageType }) => {\r\n const resourceType = content.resourceType;\r\n\r\n let component;\r\n\r\n if (\r\n resourceType.includes(\"Media Item\") &&\r\n resourceType.includes(\"Hyperlink\")\r\n ) {\r\n component = (\r\n \r\n \r\n {content.displayName && }\r\n \r\n );\r\n } else if (resourceType.includes(\"Media Item\")) {\r\n component = (\r\n
    \r\n \r\n {content.displayName && (\r\n \r\n )}\r\n
    \r\n );\r\n } else\r\n component = (\r\n \r\n );\r\n\r\n return component;\r\n};\r\n\r\nexport default Resource;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n subhead: {\r\n fontWeight: 700,\r\n fontSize: \"1.15rem\",\r\n padding: (props) =>\r\n props.isPerson ? \".4rem 0 .17rem 0\" : \".4rem 0 .28rem 0\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"1.35rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst Subhead = ({ content, isPerson = false }) => {\r\n const styleProps = { isPerson };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n\r\nexport default Subhead;\r\n","import React from \"react\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport { Grid } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n galleryWrapper: {\r\n paddingTop: 15,\r\n minWidth: \"0%\",\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n },\r\n imageWrapper: {\r\n display: \"block\",\r\n float: \"left\",\r\n minWidth: \"0%\",\r\n maxWidth: \"100%\",\r\n },\r\n});\r\n\r\nconst GalleryImages = ({ galleryImages }) => {\r\n const classes = useStyles();\r\n // const colWidths = Math.floor(12 / galleryImages.length);\r\n\r\n return (\r\n <>\r\n \r\n {galleryImages &&\r\n galleryImages.map((image, i) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default GalleryImages;\r\n","import React from \"react\";\r\nimport { Redirect, useHistory } from \"react-router-dom\";\r\nimport { Typography, Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n errorWrapper: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n error: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n maxWidth: 600,\r\n },\r\n heading: {\r\n textAlign: \"center\",\r\n marginBottom: 20,\r\n },\r\n body: {\r\n textAlign: \"center\",\r\n marginBottom: 50,\r\n },\r\n buttonWrapper: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n}));\r\n\r\nconst Error = ({ isRedirect, errorMsg, handleRedirect }) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const isHomePage = history.location.pathname === \"/\";\r\n\r\n return isRedirect ? (\r\n \r\n ) : (\r\n
    \r\n
    \r\n \r\n So sorry...\r\n \r\n \r\n {errorMsg}\r\n \r\n {isHomePage ? (\r\n \r\n Please try again later.\r\n \r\n ) : (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Error;\r\n","import React from \"react\";\r\nimport Error from \"../views/Error\";\r\n\r\nclass ErrorBoundary extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n error: null,\r\n errorInfo: null,\r\n isRedirect: false,\r\n // errorMsg: [\"There has been an error.\", \"This page doesn't exist.\"],\r\n };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n this.setState({ ...this.state, error, errorInfo });\r\n }\r\n\r\n handleRedirect = () => {\r\n this.setState(\r\n {\r\n ...this.state,\r\n error: null,\r\n errorInfo: null,\r\n isRedirect: true,\r\n },\r\n () => this.setState({ isRedirect: false })\r\n );\r\n };\r\n\r\n render() {\r\n if (this.state.error) {\r\n return (\r\n \r\n );\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default ErrorBoundary;\r\n","import React from \"react\";\r\nimport {\r\n Dialog as MuiDialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n Button,\r\n} from \"@material-ui/core\";\r\n\r\nconst Dialog = ({\r\n title,\r\n content,\r\n ariaContent,\r\n isOpen,\r\n handleCloseDialog,\r\n buttonText = null,\r\n}) => {\r\n return (\r\n \r\n {title}\r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Dialog;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content1Wrapper: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: (props) =>\r\n props.isHeaderContent ? \"70px 20px 100px\" : \"90px 20px\",\r\n },\r\n content1: {\r\n maxWidth: 600,\r\n },\r\n content2Wrapper: {\r\n maxWidth: 600,\r\n margin: \"100px auto\",\r\n },\r\n title1: {\r\n color: (props) => (props.isHeaderContent ? \"#fff\" : \"inherit\"),\r\n textAlign: \"center\",\r\n fontWeight: 300,\r\n marginBottom: 20,\r\n },\r\n title2: {\r\n textAlign: \"center\",\r\n fontWeight: 300,\r\n },\r\n content: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nconst HomePageContent = ({ headline, content, isHeaderContent }) => {\r\n const styleProps = { isHeaderContent };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {headline}\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default HomePageContent;\r\n","import React from \"react\";\r\nimport { Grid, TextField } from \"@material-ui/core\";\r\n\r\nconst Input = ({ name, label, type, errors, value, handleChange }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Input;\r\n","import React, { useState } from \"react\";\r\nimport { Grid, Typography, Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport Content from \"../molecules/Content\";\r\nimport Input from \"../atoms/Input\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content1Wrapper: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: (props) =>\r\n props.isHeaderContent ? \"70px 20px 100px\" : \"90px 20px\",\r\n },\r\n content1: {\r\n maxWidth: 600,\r\n },\r\n content2Wrapper: {\r\n maxWidth: 600,\r\n margin: \"100px auto\",\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n fontWeight: 300,\r\n marginBottom: 20,\r\n },\r\n content: {\r\n textAlign: \"center\",\r\n },\r\n fieldSet: {\r\n marginBottom: 16,\r\n },\r\n buttonWrapper: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n },\r\n}));\r\n\r\nconst HomePageForm = ({ headline, content, submitForm }) => {\r\n const styleProps = {};\r\n const classes = useStyles(styleProps);\r\n\r\n const initialFormValues = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n };\r\n\r\n const [formData, setFormData] = useState(initialFormValues);\r\n const [validationErrors, setValidationErrors] = useState({\r\n initialFormValues,\r\n });\r\n\r\n const isValid = () => {\r\n let temp = {};\r\n temp.firstName = formData.firstName ? \"\" : \"Required field\";\r\n temp.lastName = formData.lastName ? \"\" : \"Required field\";\r\n temp.email = /.+@.+\\..+/.test(formData.email) ? \"\" : \"Valid email required\";\r\n setValidationErrors({ ...temp });\r\n\r\n return Object.values(temp).every((x) => x === \"\");\r\n };\r\n\r\n const handleChange = (ev) => {\r\n const { name, value } = ev.target;\r\n setFormData({\r\n ...formData,\r\n [name]: value,\r\n });\r\n };\r\n\r\n const handleSubmit = (ev) => {\r\n ev.preventDefault();\r\n\r\n if (isValid()) {\r\n submitForm(formData);\r\n setFormData(initialFormValues);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {headline}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n SIGN UP\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default HomePageForm;\r\n","import React, { createContext } from \"react\";\r\n\r\nexport const ContentContext = createContext({});\r\n\r\nexport const ContentContextProvider = ContentContext.Provider;\r\n\r\nexport const ContentContextConsumer = ContentContext.Consumer;\r\n\r\nexport const withContentContexttHOC = Component => props => (\r\n \r\n {state => }\r\n \r\n);","import React, { useState, useEffect, useContext } from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { MenuItem } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n menuItem: {\r\n color: theme.palette.primary.main,\r\n backgroundColor: \"#fff\",\r\n \"&:hover, &:active, &:focus\": {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n },\r\n menuItemActive: {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.secondary.main,\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n subMenuItem: {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.info.main,\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n paddingLeft: 30,\r\n },\r\n}));\r\n\r\n// TODO: Do we need to memoize this for performance? -- not sure\r\n// Uses forwardRef to pass the ref from MUI's Menu component to MenuItem\r\nconst HeaderMenuItemResponsive = React.forwardRef((props, ref) => {\r\n const classes = useStyles();\r\n const {\r\n activeDisciplineUrlName,\r\n activeRespvMenuItem,\r\n handleResponsiveMenuClose,\r\n handleResponsiveSubMenuOpen,\r\n menuItemUrlName,\r\n menuItemDisplayName,\r\n } = props;\r\n\r\n const [isMenuOpen, setIsMenuOpen] = useState(null);\r\n\r\n const content = useContext(ContentContext);\r\n\r\n const handleMenuOpen = () => {\r\n setIsMenuOpen(true);\r\n handleResponsiveSubMenuOpen(menuItemUrlName);\r\n };\r\n\r\n useEffect(() => {\r\n if (activeRespvMenuItem) {\r\n setIsMenuOpen(activeRespvMenuItem === menuItemUrlName);\r\n }\r\n }, [activeRespvMenuItem, menuItemUrlName]);\r\n\r\n let menuItemUrl;\r\n if (![\"about\", \"login\"].includes(menuItemUrlName)) {\r\n menuItemUrl = `/discipline/${menuItemUrlName}`;\r\n } else {\r\n // TODO: Change this when about/login are functional\r\n menuItemUrl = `/discipline/${activeDisciplineUrlName}`;\r\n // menuItemUrl = `/${menuItemUrlName}`;\r\n }\r\n\r\n let renderStandardMenuItem = (\r\n \r\n {menuItemDisplayName.toUpperCase()}\r\n \r\n );\r\n\r\n const renderSubMenu = (\r\n <>\r\n \r\n OVERVIEW\r\n \r\n {/* {content.getStageNames().map((entry, i) => { */}\r\n {content.getDisciplineStageNames(menuItemUrlName).map((entry, i) => {\r\n const subMenuItemUrl = menuItemUrl + \"/\" + entry.urlSlug;\r\n return (\r\n \r\n {entry.displayName.toUpperCase()}\r\n \r\n );\r\n })}\r\n \r\n );\r\n\r\n if (![\"about\", \"login\"].includes(menuItemUrlName)) {\r\n return isMenuOpen ? (\r\n <>\r\n {renderStandardMenuItem}\r\n {renderSubMenu}\r\n \r\n ) : (\r\n \r\n {menuItemDisplayName.toUpperCase()}\r\n \r\n );\r\n } else {\r\n return renderStandardMenuItem;\r\n }\r\n});\r\n\r\nexport default HeaderMenuItemResponsive;\r\n","import React from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { MenuItem } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n menuItem: {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.info.main,\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n menuItemActive: {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.primary.main,\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n menuItemText: {\r\n fontSize: \"0.875rem\",\r\n },\r\n}));\r\n\r\n// TODO: Do we need to memoize this for performance? -- not sure\r\n// Uses forwardRef to pass the ref from MUI's Menu component to MenuItem\r\nconst HeaderMenuItem = React.forwardRef((props, ref) => {\r\n const { handleMenuClose, menuItemDisplayName, menuItemUrl } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {menuItemDisplayName.toUpperCase()}\r\n \r\n );\r\n});\r\n\r\nexport default HeaderMenuItem;\r\n","import React, { useState, useContext } from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { Menu, MenuItem, Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport HeaderMenuItem from \"./HeaderMenuItem\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n button: {\r\n color: (props) => (props.isHomePage ? \"#fff\" : theme.palette.primary.main),\r\n marginLeft: 10,\r\n backgroundColor: (props) =>\r\n props.isMenuOpen ? theme.palette.secondary.main : \"transparent\",\r\n \"&:focus\": {\r\n backgroundColor: (props) =>\r\n props.isMenuOpen ? theme.palette.secondary.main : \"transparent\",\r\n color: (props) =>\r\n props.isHomePage\r\n ? \"#fff\"\r\n : props.isMenuOpen\r\n ? \"#fff\"\r\n : theme.palette.primary.main,\r\n },\r\n },\r\n buttonActive: {\r\n marginLeft: 10,\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n buttonLogin: {\r\n minWidth: 32,\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.info.main,\r\n marginLeft: 18,\r\n },\r\n menuItem: {\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.info.main,\r\n \"&:hover, &:active\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n menuItemText: {\r\n fontSize: \"0.875rem\",\r\n },\r\n}));\r\n\r\nconst HeaderNavButton = ({\r\n activeDisciplineUrlName,\r\n btnUrlName,\r\n btnDisplayName,\r\n isHomePage,\r\n}) => {\r\n const content = useContext(ContentContext);\r\n\r\n // prettier-ignore\r\n let isDisciplineBtn = false, btnUrl, color, variant;\r\n if (content.getDisciplineDisplayName(btnUrlName) !== \"\") {\r\n isDisciplineBtn = true;\r\n btnUrl = `/discipline/${btnUrlName}`;\r\n color = \"primary\";\r\n variant = \"text\";\r\n } else if (btnUrlName === \"about\") {\r\n btnUrl = \"/\";\r\n color = \"primary\";\r\n variant = \"text\";\r\n } else {\r\n btnUrl = \"/\";\r\n color = \"default\";\r\n variant = \"contained\";\r\n }\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const isMenuOpen = Boolean(anchorEl);\r\n\r\n const styleProps = { isHomePage, isMenuOpen };\r\n const classes = useStyles(styleProps);\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleMenuOpen = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const menuId = `${btnUrlName}-menu`;\r\n const renderDisciplineBtn = (\r\n
    \r\n \r\n {btnDisplayName.toUpperCase()}\r\n \r\n \r\n \r\n {[\r\n \"Nanoelectronics\",\r\n \"Microsystems\",\r\n \"Nanobioscience\",\r\n \"Clean Energy\",\r\n ].includes(btnDisplayName)\r\n ? \"OVERVIEW\"\r\n : btnDisplayName.toUpperCase()}\r\n \r\n {/* {content.getStageNames().map((entry, i) => { */}\r\n {content.getDisciplineStageNames(btnUrlName).map((entry, i) => {\r\n const menuItemUrl = btnUrl + \"/\" + entry.urlSlug;\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
    \r\n );\r\n\r\n const renderStandardBtn = (\r\n
    \r\n {}}\r\n color={color}\r\n variant={variant}\r\n className={\r\n btnUrlName === \"login\"\r\n ? classes.buttonLogin\r\n : activeDisciplineUrlName === btnUrlName\r\n ? classes.buttonActive\r\n : classes.button\r\n }\r\n >\r\n {btnDisplayName.toUpperCase()}\r\n \r\n
    \r\n );\r\n\r\n return isDisciplineBtn ? renderDisciplineBtn : renderStandardBtn;\r\n};\r\n\r\nexport default HeaderNavButton;\r\n","import React, { useState, useContext } from \"react\";\r\nimport {\r\n AppBar,\r\n IconButton,\r\n Link,\r\n Menu,\r\n MenuItem,\r\n Toolbar,\r\n} from \"@material-ui/core\";\r\nimport HeaderMenuItemResponsive from \"../atoms/HeaderMenuItemResponsive\";\r\nimport HeaderNavButton from \"../atoms/HeaderNavButton\";\r\nimport logo from \"../../assets/AMP-TAP-Logo-horz-ko.svg\";\r\nimport catn2LogoWhite from \"../../assets/CATN2-logo-white.png\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { MoreVert, Close } from \"@material-ui/icons\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n backgroundColor: \"transparent\",\r\n justifyContent: \"center\",\r\n padding: \"10px 20px 0\",\r\n marginTop: 10,\r\n marginBottom: 0,\r\n },\r\n logoLink: {\r\n flexGrow: 0,\r\n },\r\n logo: {\r\n height: 50,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: 60,\r\n },\r\n transition: \"height 0.5s\",\r\n },\r\n altLogoLink: {\r\n flexGrow: 1,\r\n marginLeft: 20,\r\n },\r\n altLogo: {\r\n height: 50,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: 60,\r\n },\r\n transition: \"height 0.5s\",\r\n },\r\n sectionDesktop: {\r\n display: \"none\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"flex\",\r\n },\r\n },\r\n sectionResponsive: {\r\n display: \"flex\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n popoverPaper: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n width: \"100%\",\r\n maxWidth: \"unset\",\r\n maxHeight: \"unset\",\r\n top: \"0 !important\",\r\n left: \"0 !important\",\r\n },\r\n },\r\n closeMenuItem: {\r\n backgroundColor: \"#fff\",\r\n borderBottom: \"1.5px solid #f5f5f5\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n justifyContent: \"flex-end\",\r\n },\r\n close: {\r\n color: \"#c0c0c0\",\r\n },\r\n}));\r\n\r\n// Forwards ref from MUI Link component to react-router Link\r\nconst ForwardRouterLink = React.forwardRef((props, ref) => (\r\n \r\n));\r\n\r\nconst HomePageHeader = ({ disciplineUrlName }) => {\r\n const content = useContext(ContentContext);\r\n\r\n const headerNavItems = content.getDisciplineNames();\r\n content ??\r\n headerNavItems.push({\r\n referenceName: \"about\",\r\n displayName: \"About\",\r\n urlSlug: \"about\",\r\n order: 5,\r\n });\r\n // TODO: add back in when login is functional\r\n // headerNavNames.login = \"Login\";\r\n\r\n const [responsiveMoreAnchorEl, setResponsiveMoreAnchorEl] = useState(null);\r\n const [activeRespvMenuItem, setActiveRespvMenuItem] = useState(null);\r\n const isResponsiveMenuOpen = Boolean(responsiveMoreAnchorEl);\r\n\r\n const styleProps = { disciplineUrlName };\r\n const classes = useStyles(styleProps);\r\n\r\n const handleResponsiveMenuClose = () => {\r\n setResponsiveMoreAnchorEl(null);\r\n };\r\n\r\n const handleResponsiveMenuOpen = (event) => {\r\n setResponsiveMoreAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleResponsiveSubMenuOpen = (respvMenuItem) => {\r\n setActiveRespvMenuItem(respvMenuItem);\r\n };\r\n\r\n const responsiveMenuId = \"menu-responsive\";\r\n const renderResponsiveMenu = (\r\n \r\n \r\n \r\n \r\n {headerNavItems.map((entry, i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \"AMP\r\n \r\n \r\n \"CATN2\"\r\n \r\n
    \r\n {headerNavItems.map((entry, i) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n {renderResponsiveMenu}\r\n \r\n );\r\n};\r\n\r\nexport default HomePageHeader;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n imgWrapper: {\r\n display: \"block\",\r\n float: \"left\",\r\n width: \"25%\",\r\n height: \"auto\",\r\n padding: 0,\r\n margin: (props) =>\r\n props.cardPosition % 2 !== 0\r\n ? 0\r\n : props.isResponsive\r\n ? \"-15px 0 0\"\r\n : \"-25px 0 0\",\r\n cursor: \"pointer\",\r\n transition: \"height 0.5s, margin 0.5s\",\r\n },\r\n imgAndBorderWrapper: {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"auto\",\r\n },\r\n hoverBorder: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n borderWidth: (props) =>\r\n props.isResponsiveXs ? 3 : props.isResponsive ? 5 : 8,\r\n borderStyle: \"solid\",\r\n borderColor: (props) =>\r\n props.activeDispUrlName === props.dispUrlName ? \"#fcaf25\" : \"transparent\",\r\n transition: \"border-color 1.5s\",\r\n backgroundColor: \"transparent\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n },\r\n dispImg: {\r\n display: \"block\",\r\n width: \"100%\",\r\n height: (props) => (props.isResponsiveXs ? 137 : \"auto\"),\r\n objectFit: (props) => (props.isResponsiveXs ? \"cover\" : \"fill\"),\r\n },\r\n}));\r\n\r\nconst HomePageCard = ({\r\n dispUrlName,\r\n activeDispUrlName,\r\n dispImg,\r\n cardPosition,\r\n isResponsive,\r\n isResponsiveXs,\r\n handleClick,\r\n handleMouseEnter,\r\n handleMouseLeave,\r\n}) => {\r\n const styleProps = {\r\n dispImg,\r\n cardPosition,\r\n dispUrlName,\r\n activeDispUrlName,\r\n isResponsive,\r\n isResponsiveXs,\r\n };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n handleClick(dispUrlName)}\r\n onMouseEnter={() => handleMouseEnter(dispUrlName)}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n
    \r\n
    \r\n {dispImg && (\r\n \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default HomePageCard;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dispHeroMsgWrapper: {\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n width: \"100%\",\r\n maxWidth: 960,\r\n display: \"flex\",\r\n flexDirection: (props) => (props.isResponsive ? \"column\" : \"row\"),\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"0 20px\",\r\n transform: \"translate(-50%, -50%)\",\r\n },\r\n dispHeroMsgTitleWrapper: {\r\n display: \"flex\",\r\n alignItems: \"stretch\",\r\n flex: \"0 0 auto\",\r\n marginRight: (props) => (props.isResponsive ? 0 : 15),\r\n },\r\n dispHeroMsgTitle: {\r\n color: (props) =>\r\n props.activeDispDisplayName === props.dispDisplayName\r\n ? \"#fff\"\r\n : \"transparent\",\r\n margin: (props) => (props.isResponsive ? \"-5px 0 10px 0\" : \"-10px 0 0 0\"),\r\n transition: \"color 2s\",\r\n },\r\n dispHeroMsgContent: {\r\n flex: \"1 1 auto\",\r\n width: \"100%\",\r\n color: (props) =>\r\n props.activeDispDisplayName === props.dispDisplayName\r\n ? \"#fff\"\r\n : \"transparent\",\r\n borderLeft: (props) =>\r\n props.activeDispDisplayName !== props.dispDisplayName ||\r\n props.isResponsive\r\n ? \"2px solid transparent\"\r\n : \"2px solid #fff\",\r\n transition: \"color 2.5s, border-left 2.5s\",\r\n paddingLeft: (props) => (props.isResponsive ? 0 : 15),\r\n },\r\n}));\r\n\r\nconst HomePageHeroNavMsg = ({\r\n activeDispDisplayName,\r\n dispDisplayName,\r\n message,\r\n isResponsive,\r\n}) => {\r\n const styleProps = { activeDispDisplayName, dispDisplayName, isResponsive };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {dispDisplayName}\r\n \r\n
    \r\n
    \r\n {message && (\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default HomePageHeroNavMsg;\r\n","import React, { useEffect, useState, useContext } from \"react\";\r\nimport HomePageCard from \"../atoms/HomePageCard\";\r\nimport HomePageHeroNavMsg from \"../molecules/HomePageHeroNavMsg\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n heroNavWrapper: {\r\n width: \"100%\",\r\n height: \"auto\",\r\n backgroundImage:\r\n \"linear-gradient(transparent 0%, transparent 30%, #fcaf25 30%, #fcaf25 100%)\",\r\n padding: 0,\r\n marginTop: -300,\r\n },\r\n dispCardsWrapperWrapper: {\r\n float: \"left\",\r\n width: \"100%\",\r\n },\r\n dispCardsWrapper: {\r\n width: \"100%\",\r\n height: (props) => (props.isResponsiveXs ? 152 : \"auto\"),\r\n maxWidth: 1050,\r\n backgroundImage:\r\n \"linear-gradient(transparent 0%, transparent 30%, #fcaf25 30%, #fcaf25 100%)\",\r\n margin: \"0 auto\",\r\n paddingTop: (props) => (props.isResponsive ? 15 : 25),\r\n overflow: \"hidden\",\r\n },\r\n dispHeroMsgGradientBox: {\r\n float: \"left\",\r\n position: \"relative\",\r\n backgroundImage: \"linear-gradient(#fcaf25, #e89723)\",\r\n width: \"100%\",\r\n // The Hero Nav message box must be a fixed height so it doesn't\r\n // bounce up and down during animation between disciplines\r\n height: (props) =>\r\n props.isResponsiveSm\r\n ? 500\r\n : props.isResponsive\r\n ? 420\r\n : props.isResponsiveMd\r\n ? 260\r\n : 360,\r\n },\r\n}));\r\n\r\nconst HomePageHeroNav = ({ handleClick }) => {\r\n const isResponsiveMd = useMediaQuery(\"(min-width:960px)\");\r\n const isResponsive = useMediaQuery(\"(max-width:730px)\");\r\n const isResponsiveSm = useMediaQuery(\"(max-width:480px)\");\r\n const isResponsiveXs = useMediaQuery(\"(max-width:380px)\");\r\n const styleProps = {\r\n isResponsive,\r\n isResponsiveXs,\r\n isResponsiveSm,\r\n isResponsiveMd,\r\n };\r\n const classes = useStyles(styleProps);\r\n const interval = 8000;\r\n\r\n const content = useContext(ContentContext);\r\n\r\n const dispUrlNamesArray = content.getDisciplineNames().map((d) => d.urlSlug);\r\n const [activeDispIndex, setActiveDispIndex] = useState(0);\r\n const [isMouseEntered, setIsMouseEntered] = useState(false);\r\n\r\n // Hero Nav animation\r\n useEffect(() => {\r\n let loop;\r\n if (!isMouseEntered) {\r\n loop = setInterval(() => {\r\n setActiveDispIndex((activeDispIndex + 1) % 4);\r\n }, interval);\r\n } else {\r\n clearInterval(loop);\r\n }\r\n return () => clearInterval(loop);\r\n }, [activeDispIndex, isMouseEntered]);\r\n\r\n // Hero Nav animation - user interruption resets animation loop\r\n const handleMouseEnter = (dispUrlName) => {\r\n setIsMouseEntered(true);\r\n setActiveDispIndex(dispUrlNamesArray.indexOf(dispUrlName));\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setIsMouseEntered(false);\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {dispUrlNamesArray.map((name, i) => {\r\n const imageUrl = content.getSiloPrimaryImageUrl(name);\r\n const statement = content.getSiloPositioningStatement(name);\r\n const displayImage = { name, imageUrl, statement };\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n {dispUrlNamesArray.map((name, i) => {\r\n const imageUrl = content.getSiloPrimaryImageUrl(name);\r\n const statement = content.getSiloPositioningStatement(name);\r\n const displayImage = { name, imageUrl, statement };\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default HomePageHeroNav;\r\n","import React from \"react\";\r\nimport { CircularProgress } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n loadingViewWrapper: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n },\r\n loadingContentWrapper: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n}));\r\n\r\nconst Loading = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n parallax: {\r\n width: \"100%\",\r\n height: (props) => props.ht,\r\n backgroundColor: theme.palette.primary.main,\r\n backgroundImage: (props) => `url(${props.img})`,\r\n backgroundPositionX: \"center\",\r\n backgroundPositionY: (props) => props.parallaxOffset,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n margin: 0,\r\n },\r\n}));\r\n\r\n// TODO: Add logic so the scrolling starts when element comes into view\r\n// rather than starting at the top of the full page\r\nconst ParallaxImage = ({ img, ht }) => {\r\n const [docHeight, setDocHeight] = useState(0);\r\n const [screenHeight, setScreenHeight] = useState(0);\r\n const [yOffset, setYOffset] = useState(0);\r\n const [parallaxOffset, setParallaxOffset] = useState(0);\r\n\r\n const parallaxShift = () => {\r\n setDocHeight(document.body.clientHeight);\r\n setScreenHeight(window.innerHeight);\r\n setYOffset(window.pageYOffset);\r\n setParallaxOffset(yOffset / (docHeight - screenHeight));\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"scroll\", parallaxShift);\r\n return () => {\r\n window.removeEventListener(\"scroll\", parallaxShift);\r\n };\r\n });\r\n\r\n const styleProps = { img, ht, parallaxOffset: `${parallaxOffset * 100}%` };\r\n const classes = useStyles(styleProps);\r\n\r\n return
    ;\r\n};\r\n\r\nexport default ParallaxImage;\r\n","import React, { useEffect, useState, useContext } from \"react\";\r\nimport Dialog from \"./Dialog\";\r\nimport Error from \"./Error\";\r\nimport HomePageContent from \"../molecules/HomePageContent\";\r\nimport HomePageForm from \"../molecules/HomePageForm\";\r\nimport HomePageHeader from \"../organisms/HomePageHeader\";\r\nimport HomePageHeroNav from \"../organisms/HomePageHeroNav\";\r\nimport Loading from \"./Loading\";\r\nimport ParallaxImage from \"../molecules/ParallaxImage\";\r\nimport headerBg from \"../../assets/AMP-TAP-home-page-hdr-bg.jpg\";\r\nimport heroImg2 from \"../../assets/background-laser.jpg\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n backgroundColor: theme.palette.primary.main,\r\n backgroundImage: `url(${headerBg})`,\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n margin: 0,\r\n paddingBottom: 300,\r\n },\r\n content1Wrapper: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"70px 20px 100px\",\r\n },\r\n content2Wrapper: {\r\n maxWidth: 600,\r\n margin: \"100px auto\",\r\n },\r\n title1: {\r\n color: \"#fff\",\r\n textAlign: \"center\",\r\n fontWeight: 300,\r\n marginBottom: 20,\r\n },\r\n title2: {\r\n textAlign: \"center\",\r\n fontWeight: 300,\r\n },\r\n content: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nfunction HomePage() {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const [homePage, setHomePage] = useState(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isError, setIsError] = useState(false);\r\n const [errorMsg, setErrorMsg] = useState(\"\");\r\n const [isRedirect, setIsRedirect] = useState(false);\r\n const [isDialogOpen, setIsDialogOpen] = useState(false);\r\n\r\n const content = useContext(ContentContext);\r\n\r\n useEffect(() => {\r\n const initAsync = async () => {\r\n try {\r\n const response = await content.getHomePageAsync();\r\n setIsLoading(false);\r\n setHomePage(response);\r\n } catch (err) {\r\n setIsLoading(false);\r\n setIsError(true);\r\n setErrorMsg(\"There was a problem loading the page.\");\r\n console.log(\"Unsuccessful ajax call msg: \", err);\r\n }\r\n };\r\n setIsLoading(true);\r\n initAsync();\r\n\r\n return () => {\r\n setIsRedirect(false);\r\n setIsError(false);\r\n setErrorMsg(\"\");\r\n };\r\n }, [content]);\r\n\r\n const handleRedirect = () => {\r\n setIsRedirect(true);\r\n };\r\n\r\n const handleDisciplineClick = (discipline) => {\r\n history.push(`/discipline/${discipline}`);\r\n };\r\n\r\n let renderProblem = null;\r\n if (isLoading) {\r\n renderProblem = ;\r\n }\r\n if (isError) {\r\n renderProblem = (\r\n \r\n );\r\n }\r\n\r\n // TODO: Convert when API is wired for this\r\n const submitForm = (formData) => {\r\n // console.log(\"[HomePage] formData: \", formData);\r\n setIsDialogOpen(true);\r\n };\r\n\r\n const handleCloseDialog = () => {\r\n setIsDialogOpen(false);\r\n };\r\n\r\n const renderSignUpSuccessDialog = (\r\n \r\n );\r\n\r\n // TODO: Convert form section to API-supplied values when ready\r\n const homePageFormHeadline = \"Upgrade Your In-box\";\r\n const homePageFormContent = [\r\n {\r\n nodeType: \"paragraph\",\r\n data: {},\r\n content: [\r\n {\r\n nodeType: \"text\",\r\n data: {},\r\n value:\r\n \"Keep up to date with current and future events news and research. Sign up now to receive amazing information delivered straight to you!\",\r\n marks: [],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n let renderHomePage =
    Nothing
    ;\r\n if (homePage) {\r\n renderHomePage = (\r\n <>\r\n {renderSignUpSuccessDialog}\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return renderProblem || renderHomePage;\r\n}\r\n\r\nexport default HomePage;\r\n","import React from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n stageCard: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"stretch\",\r\n flex: 1,\r\n height: \"100%\",\r\n minWidth: 0,\r\n minHeight: 0,\r\n backgroundColor: \"#184b9f\",\r\n padding: \"8px 20px\",\r\n \"&:hover\": {\r\n cursor: (props) => (props.isOverviewPage ? \"pointer\" : \"auto\"),\r\n },\r\n },\r\n stageName: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n flex: 1,\r\n minWidth: 0,\r\n minHeight: 0,\r\n fontSize: \"2rem\",\r\n color: \"rgba(255,255,255,1)\",\r\n textAlign: \"center\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n fontSize: (props) =>\r\n !props.isTestMetrol || props.isLargeDesktop ? \"2rem\" : \"1.7rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst StageCard = ({\r\n stageDisplayName,\r\n disciplineUrlName,\r\n stageUrlName,\r\n isOverviewPage,\r\n}) => {\r\n const isLargeDesktop = useMediaQuery(\"(min-width:1280px)\");\r\n const styleProps = { isOverviewPage, isLargeDesktop };\r\n styleProps.isTestMetrol = [\r\n \"Test/Metrology\",\r\n \"Specialized Test/Metrology\",\r\n ].includes(stageDisplayName);\r\n const classes = useStyles(styleProps);\r\n\r\n const history = useHistory();\r\n\r\n const handleClick = () => {\r\n history.push(`/discipline/${disciplineUrlName}/${stageUrlName}`);\r\n };\r\n\r\n return (\r\n {}}\r\n >\r\n \r\n {stageDisplayName}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StageCard;\r\n","import React from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport { slugify } from \"../../utils/component-support\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n buttonPath1: {\r\n backgroundColor: (props) =>\r\n props.isOverviewPage\r\n ? \"#d5d6d5\"\r\n : props.isActive\r\n ? theme.palette.secondary.main\r\n : \"#d5d6d5\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"#fff\",\r\n },\r\n color: (props) =>\r\n props.isOverviewPage\r\n ? \"rgba(0,0,0,1)\"\r\n : props.isActive\r\n ? \"#fff\"\r\n : \"rgba(0,0,0,1)\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n minWidth: 0,\r\n minHeight: 0,\r\n },\r\n buttonPath2: {\r\n backgroundColor: (props) =>\r\n props.isOverviewPage\r\n ? \"#d5d6d5\"\r\n : props.isActive\r\n ? theme.palette.secondary.main\r\n : \"#d5d6d5\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"#fff\",\r\n },\r\n color: (props) =>\r\n props.isOverviewPage\r\n ? \"rgba(0,0,0,1)\"\r\n : props.isActive\r\n ? \"#fff\"\r\n : \"rgba(0,0,0,1)\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n minWidth: 0,\r\n minHeight: 0,\r\n },\r\n}));\r\n\r\nconst DisciplineNavButton = ({\r\n disciplineUrlName,\r\n stageUrlName,\r\n collectionId,\r\n collectionDisplayName,\r\n concentrationId,\r\n concentrationDisplayName,\r\n pathPosition,\r\n pathCount,\r\n isActive,\r\n isOverviewPage,\r\n}) => {\r\n const styleProps = { isActive, isOverviewPage };\r\n const classes = useStyles(styleProps);\r\n const history = useHistory();\r\n\r\n const handleClick = () => {\r\n history.push(\r\n `/discipline/${disciplineUrlName}/${stageUrlName}/${slugify(\r\n collectionDisplayName\r\n )}/${collectionId}/${slugify(\r\n concentrationDisplayName\r\n )}/${concentrationId}`\r\n );\r\n };\r\n\r\n return (\r\n \r\n {concentrationDisplayName}\r\n \r\n );\r\n};\r\n\r\nexport default DisciplineNavButton;\r\n","import React from \"react\";\r\nimport { Grid } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport DisciplineNavButton from \"../atoms/DisciplineNavButton\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n collectionWrapper: {\r\n // backgroundColor: \"blue\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"stretch\",\r\n margin: 0,\r\n padding: 0,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: \"auto\",\r\n },\r\n disciplineNavButtonWrapper: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"stretch\",\r\n },\r\n}));\r\n\r\nconst DisciplineCollection = (props) => {\r\n const {\r\n currentCollection,\r\n pathCount,\r\n disciplineUrlName,\r\n stage,\r\n activeConcentrationId,\r\n isOverviewPage,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {currentCollection.concentrations &&\r\n currentCollection.concentrations.map((item, i) => {\r\n return (\r\n 2 ? 12 : 6}\r\n className={classes.disciplineNavButtonWrapper}\r\n >\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default DisciplineCollection;\r\n","import React, { useRef, useEffect, useContext } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { Grid, Typography } from \"@material-ui/core\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport StageCard from \"../atoms/StageCard\";\r\nimport DisciplineCollection from \"./DisciplineCollection\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n stageWrapper: {\r\n display: \"block\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n margin: \"0 0 10px 0\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: (props) => (props.isOverviewPage ? \"100%\" : \"calc(100% + 16px)\"),\r\n margin: (props) =>\r\n props.isOverviewPage ? \"0 0 20px -8px\" : \"0 0 30px -8px\",\r\n },\r\n },\r\n\r\n // ********************************\r\n // DESKTOP\r\n // ********************************\r\n header: {\r\n display: \"flex\",\r\n alignItems: \"stretch\",\r\n marginBottom: 2,\r\n },\r\n stageCard: {\r\n display: \"flex\",\r\n flex: 1,\r\n alignItems: \"stretch\",\r\n margin: 0,\r\n },\r\n collection: {\r\n display: \"flex\",\r\n alignItems: \"stretch\",\r\n flex: 1,\r\n margin: 0,\r\n },\r\n collNameWrapper: {\r\n flex: 1,\r\n justifyContent: \"center\",\r\n margin: 0,\r\n },\r\n collName: {\r\n fontSize: \"1.25rem\",\r\n fontWeight: 700,\r\n textAlign: \"center\",\r\n },\r\n body: {\r\n display: \"flex\",\r\n flex: 1,\r\n alignItems: \"stretch\",\r\n width: \"100%\",\r\n },\r\n\r\n // ********************************\r\n // RESPONSIVE\r\n // ********************************\r\n stageCardResponsive: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n },\r\n bodyResponsive: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"stretch\",\r\n width: \"calc(100% + 16px)\",\r\n margin: \"0 -8px 40px -8px\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n flexWrap: \"nowrap\",\r\n },\r\n },\r\n collectionResponsive: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n width: \"100%\",\r\n marginTop: 10,\r\n paddingBottom: \"0 !important\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: \"50%\",\r\n padding: \"4px !important\",\r\n },\r\n },\r\n collectionNameResponsive: {\r\n fontSize: \"1.25rem\",\r\n fontWeight: 700,\r\n textAlign: \"center\",\r\n padding: \"0 15px\",\r\n },\r\n}));\r\n\r\nconst DisciplineStage = ({\r\n disciplineUrlName,\r\n stage,\r\n activeConcentrationId,\r\n isOverviewPage,\r\n}) => {\r\n const theme = useTheme();\r\n const isSm = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const classes = useStyles({ isOverviewPage });\r\n const content = useContext(ContentContext);\r\n const stageDisplayName = stage.displayName;\r\n const collections = content.getCollectionsForStage(\r\n disciplineUrlName,\r\n stage.urlSlug\r\n );\r\n const history = useHistory();\r\n // Get name of stage from previous page\r\n const activeFromStageDisplayName = content.getStageDisplayName(\r\n history.location.fromStageUrlName\r\n );\r\n\r\n // Sets a ref used for scrolling to the open concentration\r\n const stageWrapperRef = useRef(null);\r\n const paths = content.getPaths(disciplineUrlName);\r\n\r\n // console.log(\"DisciplineStage\", stage);\r\n\r\n // Scrolls page to stageWrapper if coming from Stage component\r\n useEffect(() => {\r\n if (\r\n activeFromStageDisplayName === stageDisplayName &&\r\n stageWrapperRef.current\r\n ) {\r\n stageWrapperRef.current.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }, [activeFromStageDisplayName, stageDisplayName]);\r\n\r\n const renderStageSm = (\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {\r\n // Mapping by column number to produce path 'lanes' in layout\r\n // TODO: Test/Metrology only has single path. This means different\r\n // stages have to be able to express different path counts.\r\n // Kludgy solution, revisit and improve.\r\n paths &&\r\n paths.columnNums.map((column, i) => {\r\n const coll = collections\r\n ? collections.filter(\r\n (coll) => coll.path[0].position === column\r\n )[0]\r\n : null;\r\n // console.log(\"collection\", coll);\r\n if (coll) {\r\n // console.log(\"renderStageSm\",coll);\r\n const pathCount =\r\n coll.displayName === \"Standard\" ||\r\n coll.displayName === \"Specialized\"\r\n ? 1\r\n : paths.count;\r\n return (\r\n \r\n \r\n {coll.displayName}\r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n })\r\n }\r\n \r\n
    \r\n );\r\n\r\n const renderStageMd = (\r\n
    \r\n {\r\n // prettier-ignore\r\n \r\n {/* Blank above stage card */}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n // Mapping by column number to produce path 'lanes' in layout\r\n // TODO: Test/Metrology only has single path. This means different stages have to be able to express different path counts. Kludgy solution, revisit and improve.\r\n paths && paths.columnNums.map((column, i) => {\r\n const coll = collections ? collections.filter((coll) => coll.path[0].position === column)[0] : null;\r\n if (coll) {\r\n const pathCount = coll.displayName === \"Standard\" || coll.displayName === \"Specialized\" ? 1 : paths.count;\r\n return (\r\n // prettier-ignore\r\n \r\n \r\n {coll.displayName}\r\n \r\n \r\n )\r\n } else {\r\n return null;\r\n }\r\n })\r\n }\r\n \r\n
    \r\n }\r\n {\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n // Mapping by column number to produce path 'lanes' in layout\r\n paths &&\r\n paths.columnNums.map((column, i) => {\r\n const coll = collections\r\n ? collections.filter(\r\n (coll) => coll.path[0].position === column\r\n )[0]\r\n : null;\r\n if (coll) {\r\n const pathCount =\r\n coll.displayName === \"Standard\" ||\r\n coll.displayName === \"Specialized\"\r\n ? 1\r\n : paths.count;\r\n return (\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n })\r\n }\r\n \r\n \r\n }\r\n
    \r\n );\r\n\r\n return isSm ? renderStageSm : renderStageMd;\r\n};\r\n\r\nexport default DisciplineStage;\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport DisciplineStage from \"../molecules/DisciplineStage\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n stagesFlexWrapper: {\r\n display: \"flex\",\r\n alignItems: \"stretch\",\r\n marginBottom: 30,\r\n minWidth: 0,\r\n minHeight: 0,\r\n },\r\n stagesWrapper: {\r\n marginBottom: 30,\r\n minWidth: 0,\r\n minHeight: 0,\r\n },\r\n}));\r\n\r\nconst DisciplineStagesWrapper = ({ disciplineUrlName }) => {\r\n const classes = useStyles();\r\n const content = useContext(ContentContext);\r\n\r\n return (\r\n
    \r\n {/* {content.getStageNames().map((stage, i) => { */}\r\n {content.getDisciplineStageNames(disciplineUrlName).map((stage, i) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n );\r\n};\r\n\r\nexport default DisciplineStagesWrapper;\r\n","import React from \"react\";\r\nimport { Grid, Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n messageWrap: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n marginBottom: 30,\r\n [theme.breakpoints.up(\"md\")]: {\r\n marginBottom: 40,\r\n },\r\n },\r\n}));\r\n\r\nconst DisciplineMainMessage = ({ headline, content }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n {headline}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DisciplineMainMessage;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport {\r\n Container,\r\n AppBar,\r\n Toolbar,\r\n Link,\r\n Menu,\r\n MenuItem,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport { MoreVert, Close } from \"@material-ui/icons\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport logo from \"../../assets/AMP-TAP-Logo-horz.svg\";\r\nimport HeaderNavButton from \"../atoms/HeaderNavButton\";\r\nimport HeaderMenuItemResponsive from \"../atoms/HeaderMenuItemResponsive\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport catn2LogoBlue from \"../../assets/CATN2-logo-blue.png\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n backgroundColor: \"rgba(255,255,255,1)\",\r\n justifyContent: \"center\",\r\n height: 95,\r\n padding: \"10px 0\",\r\n marginBottom: 0,\r\n },\r\n logoLink: {\r\n flexGrow: 0,\r\n },\r\n logo: {\r\n height: 50,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: 60,\r\n },\r\n transition: \"height 0.5s\",\r\n },\r\n altLogoLink: {\r\n flexGrow: 1,\r\n marginLeft: 20,\r\n },\r\n altLogo: {\r\n height: 50,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: 60,\r\n },\r\n transition: \"height 0.5s\",\r\n },\r\n heroImage: {\r\n width: \"100%\",\r\n height: 150,\r\n backgroundColor: theme.palette.primary.main,\r\n backgroundImage: (props) => {\r\n return `url(${props.imageUrl})`;\r\n },\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"50% 60%\",\r\n },\r\n sectionDesktop: {\r\n display: \"none\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"flex\",\r\n },\r\n },\r\n sectionResponsive: {\r\n display: \"flex\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n popoverPaper: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n width: \"100%\",\r\n maxWidth: \"unset\",\r\n maxHeight: \"unset\",\r\n top: \"0 !important\",\r\n left: \"0 !important\",\r\n },\r\n },\r\n closeMenuItem: {\r\n backgroundColor: \"#fff\",\r\n borderBottom: \"1.5px solid #f5f5f5\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n justifyContent: \"flex-end\",\r\n },\r\n close: {\r\n color: \"#c0c0c0\",\r\n },\r\n}));\r\n\r\n// Forwards ref from MUI Link component to react-router Link\r\nconst ForwardRouterLink = React.forwardRef((props, ref) => (\r\n \r\n));\r\n\r\nconst DisciplineHeader = ({ disciplineUrlName }) => {\r\n const content = useContext(ContentContext);\r\n\r\n const headerNavItems = content.getDisciplineNames();\r\n content ??\r\n headerNavItems.push({\r\n referenceName: \"about\",\r\n displayName: \"About\",\r\n urlSlug: \"about\",\r\n order: 5,\r\n });\r\n // TODO: add back in when login is functional\r\n // headerNavNames.login = \"Login\";\r\n\r\n const [responsiveMoreAnchorEl, setResponsiveMoreAnchorEl] = useState(null);\r\n const [activeRespvMenuItem, setActiveRespvMenuItem] = useState(null);\r\n const [imageUrl, setImageUrl] = useState();\r\n const isResponsiveMenuOpen = Boolean(responsiveMoreAnchorEl);\r\n\r\n const styleProps = { imageUrl };\r\n const classes = useStyles(styleProps);\r\n\r\n useEffect(() => {\r\n const init = async () => {\r\n try {\r\n const url = await content.getDisciplineHeroImageUrl(disciplineUrlName);\r\n // console.log(\"DisciplineHeader\", url);\r\n setImageUrl(url);\r\n } catch (ex) {}\r\n };\r\n init();\r\n return () => {};\r\n });\r\n\r\n const handleResponsiveMenuClose = () => {\r\n setResponsiveMoreAnchorEl(null);\r\n };\r\n\r\n const handleResponsiveMenuOpen = (event) => {\r\n setResponsiveMoreAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleResponsiveSubMenuOpen = (respvMenuItem) => {\r\n setActiveRespvMenuItem(respvMenuItem);\r\n };\r\n\r\n const responsiveMenuId = \"menu-responsive\";\r\n const renderResponsiveMenu = (\r\n \r\n \r\n \r\n \r\n {headerNavItems.map((entry, i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \"AMP\r\n \r\n \r\n \r\n \r\n
    \r\n {headerNavItems.map((entry, i) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {renderResponsiveMenu}\r\n \r\n );\r\n};\r\n\r\nexport default DisciplineHeader;\r\n","import React, { useEffect, useState, useContext } from \"react\";\r\n// import { useHistory } from \"react-router-dom\";\r\nimport axios from \"axios\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport DisciplineStagesWrapper from \"../organisms/DisciplineStagesWrapper\";\r\nimport DisciplineMainMessage from \"../organisms/DisciplineMainMessage\";\r\n// import Content from \"../molecules/Content\";\r\nimport DisciplineHeader from \"../organisms/DisciplineHeader\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport Loading from \"./Loading\";\r\nimport Error from \"./Error\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n position: \"relative\",\r\n padding: \"80px 20px 30px\",\r\n backgroundColor: \"#fff\",\r\n },\r\n activeItems: {\r\n position: \"absolute\",\r\n top: -25,\r\n backgroundColor: \"transparent\",\r\n },\r\n activeDiscipline: {\r\n display: \"inline-block\",\r\n textTransform: \"uppercase\",\r\n fontWeight: 500,\r\n fontSize: \"1.5rem\",\r\n backgroundColor: theme.palette.secondary.main,\r\n color: theme.palette.primary.main,\r\n padding: \"8px 12px\",\r\n margin: \"0 15px 0 0\",\r\n },\r\n}));\r\n\r\nconst Discipline = (props) => {\r\n const classes = useStyles();\r\n // const history = useHistory();\r\n\r\n const disciplineParam = props.match.params.disciplineParam;\r\n // const fromStageUrlName = history.location.fromStageUrlName;\r\n\r\n const [disciplineSilo, setDisciplineSilo] = useState({\r\n discipline: { positioningStatement: { content: [] } },\r\n pageInfo: {},\r\n });\r\n const [disciplineUrlName, setDisciplineUrlName] = useState(\"\");\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isError, setIsError] = useState(false);\r\n const [errorMsg, setErrorMsg] = useState(\"\");\r\n const [isRedirect, setIsRedirect] = useState(false);\r\n const [stages, setStages] = useState();\r\n\r\n const content = useContext(ContentContext);\r\n\r\n useEffect(() => {\r\n //TODO: Implement cancelToken in refactored code\r\n const source = axios.CancelToken.source();\r\n // const cancelToken = { cancelToken: source.token };\r\n // setDiscipline(disciplineParam, cancelToken);\r\n const init = async () => {\r\n try {\r\n setDisciplineUrlName(disciplineParam);\r\n setDisciplineSilo(await content.getDisciplineAsync(disciplineParam));\r\n setStages(await content.getStagesAsync(disciplineParam));\r\n setIsLoading(false);\r\n setIsError(false);\r\n } catch (ex) {\r\n setIsLoading(false);\r\n setIsError(true);\r\n setErrorMsg(\"There was a problem loading the page.\");\r\n console.log(\"Discipline\", ex);\r\n }\r\n };\r\n init();\r\n return () => {\r\n // Cancels ongoing request if component unmounts\r\n source.cancel();\r\n setIsRedirect(false);\r\n setIsError(false);\r\n setErrorMsg(\"\");\r\n };\r\n }, [content, disciplineParam]);\r\n\r\n const handleRedirect = () => {\r\n setIsRedirect(true);\r\n };\r\n\r\n // TODO: These should be a method in the content service that returns both values\r\n const headline = disciplineSilo.discipline.positioningHeadline;\r\n const statement = disciplineSilo.discipline.positioningStatement.content;\r\n\r\n let renderProblem = null;\r\n if (isLoading) {\r\n renderProblem = ;\r\n }\r\n if (isError) {\r\n renderProblem = (\r\n \r\n );\r\n }\r\n\r\n let renderDiscipline = null;\r\n\r\n if (stages) {\r\n renderDiscipline = (\r\n <>\r\n \r\n \r\n {disciplineUrlName && (\r\n
    \r\n

    \r\n {content.getDisciplineDisplayName(disciplineUrlName)}\r\n

    \r\n
    \r\n )}\r\n \r\n \r\n
    \r\n \r\n );\r\n }\r\n\r\n return renderProblem || renderDiscipline;\r\n};\r\n\r\nexport default Discipline;\r\n","/**\r\n * Original source for hook:\r\n * @see https://dev.to/n8tb1t/tracking-scroll-position-with-react-hooks-3bbj\r\n *\r\n * Newer version: GitHub repo (uses TypeScript):\r\n * @see https://github.com/n8tb1t/use-scroll-position\r\n */\r\n\r\nimport { useRef, useLayoutEffect } from \"react\";\r\n\r\n// Confirm the window is defined\r\nconst isBrowser = typeof window !== `undefined`;\r\n\r\nfunction getScrollPosition({ element, useWindow }) {\r\n if (!isBrowser) return { x: 0, y: 0 };\r\n const target = element ? element.current : document.body;\r\n const position = target.getBoundingClientRect();\r\n return useWindow\r\n ? { x: window.scrollX, y: window.scrollY }\r\n : // : { x: position.left, y: position.top };\r\n position;\r\n}\r\n\r\nexport function useScrollPosition(effect, deps, element, useWindow, wait) {\r\n const position = useRef(getScrollPosition({ useWindow }));\r\n let throttleTimeout = null;\r\n\r\n const callBack = () => {\r\n const currPos = getScrollPosition({ element, useWindow });\r\n effect({ prevPos: position.current, currPos });\r\n position.current = currPos;\r\n throttleTimeout = null;\r\n };\r\n\r\n useLayoutEffect(() => {\r\n const handleScroll = () => {\r\n if (wait) {\r\n if (throttleTimeout === null) {\r\n throttleTimeout = setTimeout(callBack, wait);\r\n }\r\n } else {\r\n callBack();\r\n }\r\n };\r\n window.addEventListener(\"scroll\", handleScroll);\r\n return () => window.removeEventListener(\"scroll\", handleScroll);\r\n }, deps);\r\n}\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useResizeObserver = (ref) => {\r\n const [nodeCurrent, setNodeCurrent] = useState(null);\r\n useEffect(() => {\r\n const observeTarget = ref.current;\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n setNodeCurrent(entries[0]);\r\n });\r\n resizeObserver.observe(observeTarget);\r\n return () => {\r\n resizeObserver.unobserve(observeTarget);\r\n };\r\n }, [ref]);\r\n return nodeCurrent;\r\n};\r\n","let molecules = {};\r\n\r\nmolecules[\"Person\"] = require(\"../components/molecules/Person\").default;\r\nmolecules[\"Person\"] = require(\"../components/molecules/Person\").default;\r\nmolecules[\"Facility\"] = require(\"../components/molecules/Facility\").default;\r\nmolecules[\"Technique\"] = require(\"../components/molecules/Technique\").default;\r\nmolecules[\"Capability\"] = require(\"../components/molecules/Capability\").default;\r\n\r\nexport default molecules;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport molecules from \"../../utils/molecules-index\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n focusEntryContainer: {\r\n padding: \"20px 0 0 0\",\r\n marginBottom: 40,\r\n width: \"100%\",\r\n position: \"relative\",\r\n borderTop: \"30px solid #eba900\",\r\n borderLeft: \"none\",\r\n minHeight: 30,\r\n clear: \"left\",\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n [theme.breakpoints.up(\"sm\")]: {\r\n padding: 0,\r\n width: \"100%\",\r\n position: \"relative\",\r\n borderTop: \"none\",\r\n borderLeft: \"30px solid #eba900\",\r\n minHeight: (props) => props.focusEntryHeight + 24 || 0,\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n },\r\n focusEntry: {\r\n padding: 0,\r\n overflow: \"hidden\",\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n [theme.breakpoints.up(\"sm\")]: {\r\n padding: \"0 0 0 20px\",\r\n },\r\n },\r\n focusEntryHeading: {\r\n textTransform: \"uppercase\",\r\n fontWeight: 500,\r\n color: \"#fff\",\r\n background: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n marginTop: -30,\r\n padding: \"3px 0 4px 12px\",\r\n transformOrigin: \"initial\",\r\n transform: \"initial\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n top: 10,\r\n left: 0,\r\n marginTop: 0,\r\n padding: \"3px 0 4px 8px\",\r\n transformOrigin: \"0 0\",\r\n transform: \"rotate(90deg)\",\r\n },\r\n },\r\n}));\r\n\r\nconst FocusEntry = ({\r\n component,\r\n content,\r\n headingText,\r\n activeThrustId = null,\r\n}) => {\r\n // Sets a ref on the FocusEntry name so the element\r\n // can be set to a min height of FocusEntry name's length\r\n const focusEntryHeadingRef = useRef(null);\r\n\r\n const [\r\n focusEntryHeadingDimensions,\r\n setFocusEntryHeadingDimensions,\r\n ] = useState(null);\r\n\r\n useEffect(() => {\r\n if (focusEntryHeadingRef.current) {\r\n setFocusEntryHeadingDimensions({\r\n width: focusEntryHeadingRef.current.offsetWidth,\r\n height: focusEntryHeadingRef.current.offsetHeight,\r\n });\r\n }\r\n }, [focusEntryHeadingRef]);\r\n\r\n const styleProps = {};\r\n if (focusEntryHeadingDimensions)\r\n styleProps.focusEntryHeight = focusEntryHeadingDimensions.width;\r\n const classes = useStyles(styleProps);\r\n\r\n // Focus entry child component is dynamically rendered\r\n const Molecule = molecules[component];\r\n\r\n return (\r\n
    \r\n \r\n {headingText}\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default FocusEntry;\r\n","import React from \"react\";\r\nimport { Grid, Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n researchButton: {\r\n display: \"flex\",\r\n flex: 0.9,\r\n justifyContent: \"flex-start\",\r\n alignItems: \"flex-start\",\r\n lineHeight: 1.4,\r\n // minHeight: 40,\r\n // padding: \"5px 12px\",\r\n // margin: \"0 10px 10px 0\",\r\n backgroundColor: (props) =>\r\n props.isActive ? theme.palette.secondary.main : \"#fff\",\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n borderColor: (props) =>\r\n props.isActive ? theme.palette.secondary.main : \"#184b9f\",\r\n },\r\n}));\r\n\r\nconst ResearchNavButton = ({ thrust, isDesktop, handleScroll, i }) => {\r\n const classes = useStyles();\r\n\r\n const handleClick = () => {\r\n handleScroll(thrust.id);\r\n };\r\n\r\n return (\r\n \r\n \r\n {thrust.displayName ? thrust.displayName : `Research Thrust ${i + 1}`}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ResearchNavButton;\r\n","import React, { useState } from \"react\";\r\nimport { Typography, Divider } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nimport { getAllResearchThrusts } from \"../../utils/component-support\";\r\nimport Content from \"../molecules/Content\";\r\nimport FocusEntry from \"../molecules/FocusEntry\";\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport Person from \"../molecules/Person\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport ResearchNavButton from \"../atoms/ResearchNavButton\";\r\nimport Subhead from \"../atoms/Subhead\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n focusWrapper: {\r\n backgroundColor: \"#fff\",\r\n overflow: \"hidden\",\r\n paddingTop: 20,\r\n marginBottom: 20,\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n \"& > div:first-child\": {\r\n marginTop: 0,\r\n },\r\n },\r\n focusNameWrapper: {\r\n margin: \"0 0 25px 0\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n margin: \"0 0 25px 20px\",\r\n },\r\n },\r\n divider: {\r\n borderColor: \"#184b9f\",\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 20,\r\n marginLeft: 0,\r\n },\r\n focusName: {\r\n display: \"block\",\r\n fontSize: \"1.75rem\",\r\n color: \"rgba(0,0,0,0.87)\",\r\n paddingBottom: 6,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"2.1rem\",\r\n },\r\n },\r\n focusDescription: {\r\n paddingTop: 5,\r\n },\r\n focusContactWrapper: {\r\n paddingLeft: 0,\r\n marginBottom: 20,\r\n clear: \"left\",\r\n overflow: \"hidden\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n paddingLeft: 20,\r\n },\r\n },\r\n focusElement: {\r\n paddingLeft: 0,\r\n clear: \"left\",\r\n // [theme.breakpoints.up(\"sm\")]: {\r\n // paddingLeft: 20,\r\n // },\r\n },\r\n researchButtonsWrapper: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // flexWrap: \"wrap\",\r\n marginBottom: 50,\r\n paddingTop: 20,\r\n },\r\n researchButtonsHeading: {\r\n fontWeight: 700,\r\n width: \"100%\",\r\n marginBottom: 7,\r\n fontSize: \"1.25rem\",\r\n },\r\n}));\r\n\r\nconst Focus = ({ focus }) => {\r\n const {\r\n displayName,\r\n description,\r\n contact,\r\n facultyLeads,\r\n engineeringLeads,\r\n capabilities,\r\n techniques,\r\n facilities,\r\n primaryImage,\r\n galleryImages,\r\n truckRamp,\r\n } = focus;\r\n\r\n const classes = useStyles();\r\n const isDesktop = useMediaQuery((theme) => theme.breakpoints.up(\"sm\"));\r\n\r\n const [activeThrustId, setActiveThrustId] = useState(null);\r\n\r\n const handleScroll = (id) => {\r\n setActiveThrustId(id);\r\n };\r\n\r\n // If no research thrusts then return empty array - not \"null\"\r\n // because the function could potentially return an empty array\r\n const allThrusts = facultyLeads ? getAllResearchThrusts(facultyLeads) : [];\r\n\r\n return (\r\n
    \r\n {/* Focus Name, Research Nav, Focus Description */}\r\n {displayName && (\r\n
    \r\n \r\n {displayName}\r\n \r\n \r\n\r\n {/* Research Thrusts button navigation */}\r\n {allThrusts[0] && (\r\n
    \r\n \r\n Jump to Research Thrust\r\n \r\n {allThrusts.map((thrust, i) => (\r\n \r\n ))}\r\n
    \r\n )}\r\n\r\n {/* Primary Image */}\r\n {primaryImage && (\r\n
    \r\n \r\n
    \r\n )}\r\n\r\n {/* Focus Description */}\r\n {description && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )}\r\n\r\n {/* Gallery Images */}\r\n {galleryImages && (\r\n
    \r\n \r\n
    \r\n )}\r\n\r\n {/* Contact: handled differently than other Person components */}\r\n {contact && (\r\n <>\r\n {contact.map((person) => (\r\n
    \r\n \r\n
    \r\n ))}\r\n \r\n )}\r\n\r\n {/* Truck Ramp */}\r\n {truckRamp && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n\r\n {/* Molecules - styled with a left gold border with heading text */}\r\n {facultyLeads &&\r\n facultyLeads.map((facultyLead) => (\r\n \r\n ))}\r\n {engineeringLeads &&\r\n engineeringLeads.map((engineeringLead) => (\r\n \r\n ))}\r\n {facilities &&\r\n facilities.map((facility) => (\r\n \r\n ))}\r\n {techniques &&\r\n techniques.map((technique) => (\r\n \r\n ))}\r\n {capabilities &&\r\n capabilities.map((capability) => (\r\n \r\n ))}\r\n
    \r\n );\r\n};\r\n\r\nexport default Focus;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport { useResizeObserver } from \"../../hooks/useResizeObserver\";\r\nimport Focus from \"./Focus\";\r\nimport Content from \"../molecules/Content\";\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport Subhead from \"../atoms/Subhead\";\r\nimport Resource from \"../atoms/Resource\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n concentrationWrapper: {\r\n position: \"relative\",\r\n width: \"100%\",\r\n minHeight: 38,\r\n backgroundColor: \"transparent\",\r\n borderLeft: \"none\",\r\n marginTop: 0,\r\n marginBottom: 10,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n minHeight: (props) => (props.isOpen ? props.wrapperBaseHeight + 50 : 38),\r\n borderLeft: (props) =>\r\n props.isOpen ? `38px solid ${theme.palette.primary.main}` : \"none\",\r\n },\r\n },\r\n concentrationClicker: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: 38,\r\n cursor: \"pointer\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n left: (props) => (props.isOpen ? -38 : 0),\r\n width: (props) => (props.isOpen ? 38 : \"100%\"),\r\n height: (props) => (props.isOpen ? \"100%\" : 38),\r\n minHeight: (props) => (props.isOpen ? props.wrapperBaseHeight + 50 : 38),\r\n },\r\n },\r\n concentrationName: {\r\n display: \"inline-block\",\r\n position: \"relative\",\r\n textTransform: \"uppercase\",\r\n fontWeight: 500,\r\n lineHeight: 1.57,\r\n color: \"#fff\",\r\n width: \"100%\",\r\n backgroundColor: (props) =>\r\n props.isOpen ? theme.palette.primary.main : \"#5d86c4\",\r\n padding: \"7px 15px 6px 38px\",\r\n transformOrigin: \"initial\",\r\n transform: \"initial\",\r\n \"&::before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n top: (props) => (props.isOpen ? 13 : 13),\r\n left: (props) => (props.isOpen ? 14 : 16),\r\n width: 0,\r\n height: 0,\r\n marginRight: 10,\r\n borderTop: (props) =>\r\n !props.isOpen\r\n ? \"6px solid transparent\"\r\n : props.isDesktop\r\n ? \"6px solid transparent\"\r\n : \"10px solid #fff\",\r\n borderBottom: (props) =>\r\n !props.isOpen\r\n ? \"6px solid transparent\"\r\n : props.isDesktop\r\n ? \"6px solid transparent\"\r\n : \"none\",\r\n borderLeft: (props) =>\r\n !props.isOpen\r\n ? \"10px solid #fff\"\r\n : props.isDesktop\r\n ? \"none\"\r\n : \"6px solid transparent\",\r\n borderRight: (props) =>\r\n !props.isOpen\r\n ? \"none\"\r\n : props.isDesktop\r\n ? \"10px solid #fff\"\r\n : \"6px solid transparent\",\r\n },\r\n [theme.breakpoints.up(\"sm\")]: {\r\n position: (props) => (props.isOpen ? \"absolute\" : \"relative\"),\r\n top: (props) => (props.isOpen ? 10 : 0),\r\n left: (props) => (props.isOpen ? 0 : 0),\r\n padding: (props) =>\r\n props.isOpen ? \"7px 15px 6px 24px\" : \"7px 15px 6px 38px\",\r\n transformOrigin: (props) => (props.isOpen ? \"0 0\" : \"initial\"),\r\n transform: (props) => (props.isOpen ? \"rotate(90deg)\" : \"rotate(0deg)\"),\r\n \"&::before\": {\r\n top: (props) => (props.isOpen ? 13 : 13),\r\n left: (props) => (props.isOpen ? 2 : 15),\r\n },\r\n width: (props) => (props.isOpen ? \"auto\" : \"100%\"),\r\n },\r\n },\r\n}));\r\n\r\nconst Concentration = ({\r\n collectionId,\r\n concentration,\r\n isConcentrationOpen,\r\n handleChange,\r\n}) => {\r\n const {\r\n displayName,\r\n focuses,\r\n primaryImage,\r\n galleryImages,\r\n truckRamp,\r\n } = concentration;\r\n\r\n // Sets a ref on the Concentration heading so that when it's\r\n // open its minimum height can be set using the heading width\r\n const headingRef = useRef(null);\r\n const nodeCurrent = useResizeObserver(headingRef);\r\n\r\n // Sets a ref used for scrolling to the open concentration\r\n const wrapperRef = useRef(null);\r\n\r\n const isDesktop = useMediaQuery(\"(min-width:600px)\");\r\n\r\n // Set initial state\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [headingWidth, setHeadingWidth] = useState(null);\r\n\r\n useEffect(() => {\r\n setIsOpen(isConcentrationOpen);\r\n }, [isConcentrationOpen]);\r\n\r\n useEffect(() => {\r\n if (nodeCurrent) {\r\n setHeadingWidth(nodeCurrent.contentRect.width);\r\n }\r\n }, [nodeCurrent]);\r\n\r\n // Scroll to open concentration - IE doesn't support smooth scrolling\r\n // Had to add a delay - for some reason first render wasn't scrolling enough\r\n useEffect(() => {\r\n if (isOpen && wrapperRef.current) {\r\n const scrollDelayed = () =>\r\n setTimeout(() => {\r\n wrapperRef.current.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"start\",\r\n inline: \"nearest\",\r\n });\r\n }, 200);\r\n scrollDelayed();\r\n }\r\n }, [isOpen]);\r\n\r\n // Props for styling\r\n const styleProps = { isDesktop };\r\n if (headingWidth) {\r\n styleProps.wrapperBaseHeight = headingWidth;\r\n }\r\n styleProps.isOpen = isOpen;\r\n const classes = useStyles(styleProps);\r\n\r\n // Methods\r\n const handleClick = () => {\r\n if (isOpen) {\r\n handleChange(collectionId, null);\r\n setIsOpen(false);\r\n } else {\r\n handleChange(collectionId, concentration.sys.id);\r\n setIsOpen(true);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {displayName && (\r\n \r\n {displayName}\r\n \r\n )}\r\n
    \r\n {isOpen ? (\r\n <>\r\n {/* TODO: Discuss if Concentration should have these */}\r\n {primaryImage && }\r\n {galleryImages && }\r\n {truckRamp && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n {focuses &&\r\n focuses.map((focus) => )}\r\n \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nexport default Concentration;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useResizeObserver } from \"../../hooks/useResizeObserver\";\r\n\r\nimport Concentration from \"./Concentration\";\r\nimport Content from \"../molecules/Content\";\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport Person from \"../molecules/Person\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport Subhead from \"../atoms/Subhead\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n collectionWrapper: {\r\n position: \"relative\",\r\n width: \"100%\",\r\n minHeight: 38,\r\n backgroundColor: \"transparent\",\r\n borderLeft: \"none\",\r\n marginTop: 0,\r\n // cursor: \"pointer\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n minHeight: (props) => (props.isOpen ? props.wrapperBaseHeight + 50 : 38),\r\n borderLeft: (props) =>\r\n props.isOpen ? `38px solid ${theme.palette.info.main}` : \"none\",\r\n },\r\n },\r\n collectionClicker: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: 38,\r\n cursor: \"pointer\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n left: (props) => (props.isOpen ? -38 : 0),\r\n width: (props) => (props.isOpen ? 38 : \"100%\"),\r\n height: (props) => (props.isOpen ? \"100%\" : 38),\r\n minHeight: (props) => (props.isOpen ? props.wrapperBaseHeight + 50 : 38),\r\n },\r\n },\r\n collectionName: {\r\n display: \"inline-block\",\r\n position: \"relative\",\r\n textTransform: \"uppercase\",\r\n fontWeight: 500,\r\n color: \"#fff\",\r\n width: \"100%\",\r\n backgroundColor: theme.palette.info.main,\r\n marginBottom: 10,\r\n padding: \"7px 0 6px 38px\",\r\n transformOrigin: \"initial\",\r\n transform: \"initial\",\r\n \"&::before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n top: (props) => (props.isOpen ? 14 : 13),\r\n left: (props) => (props.isOpen ? 14 : 16),\r\n width: 0,\r\n height: 0,\r\n marginRight: 10,\r\n borderTop: (props) =>\r\n !props.isOpen\r\n ? \"6px solid transparent\"\r\n : props.isDesktop\r\n ? \"6px solid transparent\"\r\n : \"10px solid #fff\",\r\n borderBottom: (props) =>\r\n !props.isOpen\r\n ? \"6px solid transparent\"\r\n : props.isDesktop\r\n ? \"6px solid transparent\"\r\n : \"none\",\r\n borderLeft: (props) =>\r\n !props.isOpen\r\n ? \"10px solid #fff\"\r\n : props.isDesktop\r\n ? \"none\"\r\n : \"6px solid transparent\",\r\n borderRight: (props) =>\r\n !props.isOpen\r\n ? \"none\"\r\n : props.isDesktop\r\n ? \"10px solid #fff\"\r\n : \"6px solid transparent\",\r\n },\r\n [theme.breakpoints.up(\"sm\")]: {\r\n position: (props) => (props.isOpen ? \"absolute\" : \"relative\"),\r\n top: (props) => (props.isOpen ? 10 : \"auto\"),\r\n left: (props) => (props.isOpen ? 0 : \"auto\"),\r\n padding: (props) =>\r\n props.isOpen ? \"7px 15px 6px 24px\" : \"7px 15px 6px 38px\",\r\n transformOrigin: (props) => (props.isOpen ? \"0 0\" : \"initial\"),\r\n transform: (props) => (props.isOpen ? \"rotate(90deg)\" : \"rotate(0deg)\"),\r\n \"&::before\": {\r\n top: (props) => (props.isOpen ? 12 : 13),\r\n left: (props) => (props.isOpen ? 2 : 16),\r\n },\r\n width: (props) => (props.isOpen ? \"auto\" : \"100%\"),\r\n },\r\n },\r\n collectionIntro: {\r\n // Need to leave this syntax or breakpoint padding (below) will override\r\n padding: (props) => (props.isFirstCollection ? \"10px 0 0 0\" : \"10px 0 0 0\"),\r\n marginBottom: 30,\r\n overflow: \"hidden\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n padding: (props) =>\r\n props.isFirstCollection ? \"0 0 0 20px\" : \"20px 0 0 20px\",\r\n },\r\n },\r\n contactText: {\r\n paddingTop: 10,\r\n },\r\n}));\r\n\r\nconst Collection = ({\r\n collectionIndex,\r\n collection,\r\n activeConcentrationId,\r\n isCollectionOpen,\r\n handleChange,\r\n}) => {\r\n const {\r\n displayName,\r\n positioningStatement,\r\n description,\r\n contact,\r\n concentrations,\r\n primaryImage,\r\n galleryImages,\r\n truckRamp,\r\n } = collection;\r\n\r\n // console.log(\"Collection\", \"activeConcentrationId\", activeConcentrationId);\r\n\r\n // Sets a ref on the Collection heading so the vertical header bar\r\n // can be set to a min height of Collection heading width\r\n const headingRef = useRef(null);\r\n const nodeCurrent = useResizeObserver(headingRef);\r\n\r\n const isDesktop = useMediaQuery(\"(min-width:600px)\");\r\n\r\n // Set initial state\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [headingWidth, setHeadingWidth] = useState(null);\r\n\r\n // Needs to run on every rerender so the correct collection wrapper height is set\r\n useEffect(() => {\r\n setIsOpen(isCollectionOpen);\r\n }, [isCollectionOpen]);\r\n\r\n useEffect(() => {\r\n if (nodeCurrent) {\r\n setHeadingWidth(nodeCurrent.contentRect.width);\r\n }\r\n }, [nodeCurrent]);\r\n\r\n const styleProps = { isDesktop };\r\n if (headingWidth) {\r\n styleProps.wrapperBaseHeight = headingWidth;\r\n }\r\n styleProps.isOpen = isOpen;\r\n\r\n if (collectionIndex === 0) {\r\n styleProps.isFirstCollection = true;\r\n }\r\n\r\n const classes = useStyles(styleProps);\r\n\r\n let isIntroNotEmpty = true;\r\n if (\r\n !positioningStatement &&\r\n !primaryImage &&\r\n !description &&\r\n !galleryImages &&\r\n !contact\r\n ) {\r\n isIntroNotEmpty = false;\r\n }\r\n\r\n const handleClick = () => {\r\n // console.log(\r\n // \"Collection\",\r\n // \"handleClick\",\r\n // isCollectionOpen,\r\n // collection.concentrations[0].sys.id\r\n // );\r\n if (isCollectionOpen) {\r\n // handleChange(null, collection.concentrations[0].sys.id);\r\n handleChange(null, null);\r\n } else if (collection.concentrations) {\r\n // handleChange(collection.sys.id, collection.concentrations[0].sys.id);\r\n handleChange(collection.sys.id, null);\r\n } else {\r\n handleChange(collection.sys.id, null);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {displayName && (\r\n \r\n {displayName}\r\n \r\n )}\r\n
    \r\n {isOpen && (\r\n <>\r\n {isIntroNotEmpty && (\r\n
    \r\n {positioningStatement && (\r\n \r\n )}\r\n {primaryImage && (\r\n \r\n )}\r\n {description && }\r\n {galleryImages && }\r\n <>\r\n {contact &&\r\n contact.map((person) => (\r\n \r\n ))}\r\n \r\n {truckRamp && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n
    \r\n )}\r\n <>\r\n {concentrations &&\r\n concentrations.map((concentration) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default Collection;\r\n","import React from \"react\";\r\nimport { Grid, Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Content from \"../molecules/Content\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n messageWrap: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n // marginBottom: 30,\r\n // [theme.breakpoints.up(\"md\")]: {\r\n // marginBottom: 40,\r\n // },\r\n margin: 0,\r\n },\r\n}));\r\n\r\nconst StageMainMessage = ({ info }) => {\r\n const classes = useStyles();\r\n return (\r\n info && (\r\n \r\n {/* */}\r\n \r\n \r\n {info.headline}\r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n )\r\n );\r\n};\r\n\r\nexport default StageMainMessage;\r\n","import React, { useState, useEffect, useContext, useRef } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"axios\";\r\nimport { Container, Tooltip } from \"@material-ui/core\";\r\nimport { Navigation } from \"@material-ui/icons\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useScrollPosition } from \"../../hooks/useScrollPosition\";\r\nimport DisciplineStage from \"../molecules/DisciplineStage\";\r\nimport Collection from \"../organisms/Collection\";\r\nimport { ContentContext } from \"../../context/ContentContext\";\r\nimport DisciplineHeader from \"../organisms/DisciplineHeader\";\r\nimport Loading from \"./Loading\";\r\nimport Error from \"./Error\";\r\nimport Dialog from \"./Dialog\";\r\nimport StageMainMessage from \"../organisms/StageMainMessage\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n stageContainer: {\r\n position: \"relative\",\r\n flexGrow: 1,\r\n padding: \"0 20px 30px\",\r\n backgroundColor: \"transparent\",\r\n marginTop: -25,\r\n },\r\n activeItems: {\r\n backgroundColor: \"transparent\",\r\n marginBottom: 30,\r\n },\r\n activeDiscipline: {\r\n display: \"inline-block\",\r\n textTransform: \"uppercase\",\r\n fontWeight: 500,\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n overflowX: \"hidden\",\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.primary.main,\r\n margin: \"0 15px 2px 0\",\r\n padding: \"8px 12px\",\r\n cursor: \"pointer\",\r\n \"&:hover, &:active, &:focus\": {\r\n color: theme.palette.primary.main,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n textAlign: \"left\",\r\n width: \"auto\",\r\n },\r\n },\r\n backToTopBox: {\r\n display: \"flex\",\r\n visibility: (props) => (props.stageNavBottom >= 0 ? \"hidden\" : \"visible\"),\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n position: \"fixed\",\r\n bottom: 10,\r\n right: 10,\r\n width: 30,\r\n height: 30,\r\n backgroundColor: theme.palette.primary.main,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n boxShadow: \"4px 4px 8px rgba(0,0,0,0.5)\",\r\n zIndex: 1200,\r\n cursor: \"pointer\",\r\n },\r\n}));\r\n\r\nconst Stage = (props) => {\r\n const history = useHistory();\r\n\r\n const {\r\n disciplineParam,\r\n stageParam,\r\n collectionId,\r\n concentrationId,\r\n } = props.match.params;\r\n\r\n // console.log(\"Stage\", \"concentrationId\", concentrationId);\r\n\r\n const content = useContext(ContentContext);\r\n\r\n const stageDisplayName = content.getStageDisplayName(stageParam);\r\n\r\n let stageNavRef = useRef(null);\r\n const [stageNavBottom, setStageNavBottom] = useState(0);\r\n const styleProps = { stageNavBottom };\r\n const classes = useStyles(styleProps);\r\n\r\n const [activeCollectionId, setActiveCollectionId] = useState(null);\r\n const [activeConcentrationId, setActiveConcentrationId] = useState(null);\r\n const [isDialogOpen, setIsDialogOpen] = useState(false);\r\n\r\n const [stages, setStages] = useState({ stgs: [] });\r\n // const [disciplineSilo, setDisciplineSilo] = useState({});\r\n const [disciplineUrlName, setDisciplineUrlName] = useState(\"\");\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isError, setIsError] = useState(false);\r\n const [errorMsg, setErrorMsg] = useState(\"\");\r\n const [isRedirect, setIsRedirect] = useState(false);\r\n\r\n useEffect(() => {\r\n //TODO: Include cancelToken in refactored logic\r\n const source = axios.CancelToken.source();\r\n // const cancelToken = { cancelToken: source.token };\r\n\r\n // if (disciplineParam && disciplineParam !== disciplineUrlName) {\r\n // setDiscipline(disciplineParam, cancelToken);\r\n // }\r\n if (collectionId) {\r\n setActiveCollectionId(collectionId);\r\n }\r\n // console.log(\"Stage\", \"useEffect\", \"concentrationId\", concentrationId);\r\n if (concentrationId) {\r\n // console.log(\"Stage\", \"aaa\");\r\n setActiveConcentrationId(concentrationId);\r\n }\r\n const init = async () => {\r\n setDisciplineUrlName(disciplineParam);\r\n try {\r\n setStages(await content.getStagesAsync(disciplineParam));\r\n setIsLoading(false);\r\n setIsError(false);\r\n } catch (ex) {\r\n setIsLoading(false);\r\n setIsError(true);\r\n setErrorMsg(\"There was a problem loading the page.\");\r\n // console.log(\"Stage\", ex);\r\n }\r\n };\r\n init();\r\n return () => {\r\n // Cancels ongoing request if component unmounts\r\n source.cancel();\r\n setIsRedirect(false);\r\n setIsError(false);\r\n setErrorMsg(\"\");\r\n };\r\n }, [collectionId, concentrationId, content, disciplineParam, stages]);\r\n\r\n // Set bottom position of Stage Nav\r\n useScrollPosition(\r\n ({ currPos }) => {\r\n setStageNavBottom(currPos.bottom);\r\n },\r\n [],\r\n stageNavRef,\r\n false,\r\n 300\r\n );\r\n\r\n const handleRedirect = () => {\r\n setIsRedirect(true);\r\n };\r\n\r\n const handleChangeConcentration = (collId, concId) => {\r\n // console.log(\"Stage\", \"handleChangeConcentration\", \"concId\", concId);\r\n if (collId === null) {\r\n setActiveCollectionId(null);\r\n setActiveConcentrationId(null);\r\n } else if (concId) {\r\n setActiveCollectionId(collId);\r\n setActiveConcentrationId(concId);\r\n } else if (collId && concId === null) {\r\n setActiveCollectionId(collId);\r\n setActiveConcentrationId(null);\r\n } else {\r\n setIsDialogOpen(true);\r\n }\r\n };\r\n\r\n const handleClickDiscipline = () => {\r\n history.push({\r\n pathname: `/discipline/${disciplineUrlName}`,\r\n fromStageUrlName: stageParam,\r\n });\r\n };\r\n\r\n const handleCloseDialog = () => {\r\n setIsDialogOpen(false);\r\n };\r\n\r\n const handleBackToTop = () => {\r\n stageNavRef.current.scrollIntoView({ behavior: \"smooth\" });\r\n };\r\n\r\n const emptySectionDialog = (\r\n \r\n );\r\n\r\n let renderProblem = null;\r\n if (isLoading) {\r\n renderProblem = ;\r\n }\r\n if (isError) {\r\n renderProblem = (\r\n \r\n );\r\n }\r\n\r\n let renderStage = null;\r\n if (stages) {\r\n const stageNames = content.getStageNames();\r\n const stageNamesObj = stageNames.reduce((obj, stage) => {\r\n obj[stage.displayName] = stage;\r\n return obj;\r\n }, {});\r\n\r\n const stagePosInfo = content.getStagesPositioningInfo(disciplineUrlName);\r\n\r\n // console.log(\"Stage\", \"stagePosInfo\", stagePosInfo);\r\n\r\n renderStage = (\r\n
    \r\n {emptySectionDialog}\r\n \r\n \r\n {disciplineUrlName && (\r\n
    \r\n \r\n {content.getDisciplineDisplayName(disciplineUrlName)}\r\n \r\n
    \r\n )}\r\n {stagePosInfo && }\r\n
    \r\n {stages.stgs[stageDisplayName] && (\r\n \r\n )}\r\n
    \r\n <>\r\n {stages.stgs[stageDisplayName] &&\r\n stages.stgs[stageDisplayName].map((collection, i) => {\r\n // console.log(\r\n // \"Stage\",\r\n // \"activeConcentrationId\",\r\n // activeConcentrationId\r\n // );\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n return renderProblem || renderStage;\r\n};\r\n\r\nexport default Stage;\r\n","import React from \"react\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { AppBar, Typography, Link } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport logo from \"../../assets/AMP-TAP-Logo-horz-ko.svg\";\r\nimport bgImg from \"../../assets/AMP-TAP-home-page-ftr-bg.jpg\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n footer: {\r\n // flexGrow: 0,\r\n // flexShrink: 0,\r\n flex: \"0 0 auto\",\r\n display: \"flex\",\r\n textAlign: \"center\",\r\n justifyContent: \"center\",\r\n alignContent: \"center\",\r\n minHeight: 160,\r\n alignSelf: \"flex-end\",\r\n backgroundColor: theme.palette.primary.main,\r\n backgroundImage: `url(${bgImg})`,\r\n borderTop: `10px solid ${theme.palette.secondary.main}`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n marginTop: \"auto\",\r\n marginBottom: 0,\r\n padding: \"80px 20px\",\r\n },\r\n legalWrapper: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n logoLink: {\r\n marginBottom: 20,\r\n },\r\n logo: {\r\n height: 60,\r\n [theme.breakpoints.up(\"md\")]: {\r\n height: 75,\r\n },\r\n transition: \"height 0.5s\",\r\n },\r\n miceType: {\r\n display: \"inline-block\",\r\n fontSize: \".9em\",\r\n color: \"#fff\",\r\n margin: \"0 0 10px\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"block\",\r\n margin: \"0 10px\",\r\n },\r\n },\r\n link: {\r\n display: \"inline-block\",\r\n fontSize: \".9em\",\r\n color: \"#fff\",\r\n margin: \"0 0 10px\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n display: \"block\",\r\n margin: \"0 10px\",\r\n },\r\n },\r\n}));\r\n\r\n// Forwards ref from MUI Link component to react-router Link\r\nconst ForwardRouterLink = React.forwardRef((props, ref) => (\r\n \r\n));\r\n\r\nconst Footer = () => {\r\n const classes = useStyles();\r\n const copyright = `© 2020-${new Date().getFullYear()}, Research Foundation for the State University of New York`;\r\n return (\r\n \r\n \r\n \"AMP\r\n \r\n\r\n
    \r\n \r\n {copyright}\r\n \r\n\r\n \r\n Privacy Policy\r\n \r\n\r\n \r\n Terms & Conditions\r\n \r\n\r\n \r\n Site Map\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import axios from \"axios\";\r\nconst { AmpApiUrl } = window.runtimeSettings;\r\n\r\nlet config = {\r\n ajaxTimeout: 25000,\r\n};\r\n\r\nexport let axiosConfig = {\r\n headers: {\r\n \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\r\n Pragma: \"no-cache\",\r\n Expires: \"0\",\r\n crossDomain: false,\r\n },\r\n};\r\n\r\nconst getHeaders = (headers) => ({\r\n headers: {\r\n ...headers,\r\n ...axiosConfig.headers,\r\n },\r\n});\r\n\r\nexport function setConfig(newConfig) {\r\n config = newConfig;\r\n}\r\n\r\naxios.defaults.timeout = config.ajaxTimeout;\r\naxios.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n return Promise.reject(error.response);\r\n }\r\n);\r\n\r\nexport function resolveApiPath(path) {\r\n if (path.indexOf(\"http\") === -1) {\r\n return AmpApiUrl + path;\r\n }\r\n return path;\r\n}\r\n\r\n// For running API locally\r\n// export function resolveApiPath(path) {\r\n// return path;\r\n// }\r\n\r\n// prettier-ignore\r\nexport default {\r\n addRequestHeader(headerKey, headerValue) {\r\n axiosConfig.headers[headerKey] = headerValue;\r\n },\r\n removeRequestHeader(headerKey) {\r\n delete axiosConfig.headers[headerKey];\r\n },\r\n post(path, data, headers = {}, cancelToken = null) {\r\n return axios.post(resolveApiPath(path), data, getHeaders(headers), cancelToken);\r\n },\r\n put(path, data, headers = {}, cancelToken = null) {\r\n return axios.put(resolveApiPath(path), data, getHeaders(headers), cancelToken);\r\n },\r\n get(path, headers = {}, cancelToken = null) {\r\n return axios.get(resolveApiPath(path), getHeaders(headers), cancelToken);\r\n },\r\n del(path, headers = {}, cancelToken = null) {\r\n return axios.delete(resolveApiPath(path), getHeaders(headers), cancelToken);\r\n },\r\n request(instanceOptions, requestOptions) {\r\n const instance = axios.create(instanceOptions);\r\n return instance.request(requestOptions);\r\n },\r\n};\r\n","import xhr from \"./XhrService\";\r\nimport { slugify } from \"../utils/component-support\";\r\nimport _ from \"lodash\"\r\n\r\n//TODO: ERROR TRAPPING AND LOGGING\r\n\r\nlet homePage = [];\r\nlet disciplineSilos = [];\r\nlet disciplineNames = [];\r\nlet stageNames = [];\r\n\r\nconst fetchHomePageAsync = async () => {\r\n if (homePage.length === 0) {\r\n const response = await xhr.get(\"/Tap/HomePage\");\r\n homePage = response.data.data;\r\n }\r\n await fetchListsAsync()\r\n}\r\n\r\nconst fetchDisciplineAsync = async (disciplineUrlName) => {\r\n await fetchListsAsync()\r\n if (!(disciplineUrlName in disciplineSilos)) {\r\n const refName = disciplineNames.filter(d => d.urlSlug === disciplineUrlName)[0].referenceName;\r\n const response = await xhr.get(`/Tap/DisciplinePage/${refName}`);\r\n disciplineSilos[disciplineUrlName] = response.data.data;\r\n }\r\n await setCollectionsByStageAsync(disciplineUrlName);\r\n setPaths(disciplineUrlName);\r\n await setStagesAsync(disciplineUrlName);\r\n}\r\n\r\nconst fetchListsAsync = async () => {\r\n // if (disciplineNames.length === 0) {\r\n // const response = await xhr.get(`/Tap/Lists`);\r\n // disciplineNames = _.sortBy(response.data.data.disciplines, 'order');\r\n // }\r\n // if (stageNames.length === 0) {\r\n // const response = await xhr.get(`/Tap/Lists`);\r\n // stageNames = _.sortBy(response.data.data.stages, 'order');\r\n // }\r\n if (disciplineNames.length === 0 || stageNames.length === 0) {\r\n const response = await xhr.get(`/Tap/Lists`);\r\n disciplineNames = _.sortBy(response.data.data.disciplines, 'order');\r\n stageNames = _.sortBy(response.data.data.stages, 'order');\r\n }\r\n}\r\n\r\nconst setStagesAsync = async (discUrl) => {\r\n await fetchListsAsync()\r\n const stgs = [];\r\n stageNames.map(stage =>\r\n stgs[stage.displayName] = filterCollections(disciplineSilos[discUrl].discipline.collections, stage.displayName)\r\n );\r\n const disciplineDisplayName = disciplineSilos[discUrl].displayName;\r\n const disciplineUrlName = slugify(disciplineDisplayName);\r\n disciplineSilos[discUrl][\"discipline\"][\"stages\"] = { stgs, disciplineDisplayName, disciplineUrlName };\r\n};\r\n\r\nconst setCollectionsByStageAsync = async (disciplineUrlName) => {\r\n await fetchListsAsync();\r\n const collectionsByStage = [];\r\n // eslint-disable-next-line\r\n stageNames.map(stage => {\r\n collectionsByStage[stage.urlSlug] = filterCollections(disciplineSilos[disciplineUrlName].discipline.collections, stage.displayName);\r\n });\r\n disciplineSilos[disciplineUrlName][\"discipline\"][\"collectionsByStage\"] = collectionsByStage;\r\n}\r\n\r\nconst setPaths = (disciplineUrlName) => {\r\n const pathManager = {\r\n paths: [],\r\n count: 0,\r\n columnNums: []\r\n };\r\n if (disciplineSilos[disciplineUrlName]) {\r\n const pageInfoPaths = _.sortBy(disciplineSilos[disciplineUrlName].pageInfo.paths, \"position\");\r\n pathManager.count = pageInfoPaths.length;\r\n pageInfoPaths.forEach(p => {\r\n pathManager.columnNums.push(p.position);\r\n pathManager.paths.push(p.displayName);\r\n });\r\n disciplineSilos[disciplineUrlName][\"discipline\"][\"paths\"] = pathManager;\r\n }\r\n}\r\n\r\nconst getSilo = (disciplineUrlName) => {\r\n return homePage[\"contentSilos\"].filter(s => s.displayName === getDisciplineDisplayName(disciplineUrlName))[0];\r\n}\r\n\r\nconst getDisciplineDisplayName = (disciplineUrlName) => {\r\n const search = disciplineNames.filter(d => d.urlSlug === disciplineUrlName);\r\n return search.length > 0 ? search[0].displayName : \"\";\r\n}\r\n\r\nconst getStageDisplayName = (stageUrlName) => {\r\n const search = stageNames.filter(d => d.urlSlug === stageUrlName);\r\n return search.length > 0 ? search[0].displayName : \"\";\r\n}\r\n\r\nconst filterCollections = (collections, stageDisplayName) => {\r\n // If no collections exist return null\r\n let newCollections =\r\n collections\r\n ? collections.filter((collection) => {\r\n return collection.stage && (collection.stage.displayName === stageDisplayName);\r\n })\r\n : null;\r\n // If the filtered collection is empty return null\r\n if (newCollections) {\r\n return newCollections[0] ? newCollections : null;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\n\r\nconst ContentProviderService = {\r\n getHomePageAsync: async () => {\r\n await fetchHomePageAsync();\r\n return homePage;\r\n },\r\n getDisciplineAsync: async (disciplineUrlName) => {\r\n await fetchDisciplineAsync(disciplineUrlName);\r\n return disciplineSilos[disciplineUrlName];\r\n },\r\n getStagesAsync: async (disciplineUrlName) => {\r\n if (!disciplineSilos[disciplineUrlName]) {\r\n await fetchDisciplineAsync(disciplineUrlName);\r\n }\r\n return disciplineSilos[disciplineUrlName] ? disciplineSilos[disciplineUrlName][\"discipline\"][\"stages\"] : [];\r\n },\r\n getCollectionsForStage: (disciplineUrlName, stageUrlName) => {\r\n return disciplineSilos[disciplineUrlName] ? disciplineSilos[disciplineUrlName][\"discipline\"][\"collectionsByStage\"][stageUrlName] : [];\r\n },\r\n getPaths: (disciplineUrlName) => {\r\n return disciplineSilos[disciplineUrlName] ? disciplineSilos[disciplineUrlName][\"discipline\"][\"paths\"] : null;\r\n },\r\n getSiloPrimaryImageUrl: (disciplineUrlName) => {\r\n const silo = getSilo(disciplineUrlName);\r\n return silo && silo[\"primaryImage\"] ? silo[\"primaryImage\"][\"mediaUrl\"] : \"\";\r\n },\r\n getSiloPositioningStatement: (disciplineUrlName) => {\r\n const silo = getSilo(disciplineUrlName);\r\n return silo ? silo[\"alternatePositioningStatement\"] : \"\";\r\n },\r\n getDisciplineDisplayName: (disciplineUrlName) => {\r\n return getDisciplineDisplayName(disciplineUrlName);\r\n },\r\n getDisciplineNames: () => {\r\n return disciplineNames;\r\n },\r\n getStageDisplayName: (stageUrlName) => {\r\n return getStageDisplayName(stageUrlName);\r\n },\r\n // TODO: !!! Kludge. The proper approach is to dynamically determine this based on the stage having no data\r\n getDisciplineStageNames: (disciplineUrlName) => {\r\n // console.log(\"getDisciplineStageNames\", disciplineUrlName);\r\n let finalStageNames = [];\r\n if (disciplineUrlName === \"nanoelectronics\") {\r\n stageNames.forEach((stage, i) => {\r\n const doPush = stage.referenceName !== \"specializedTestMetrology\";\r\n doPush && finalStageNames.push(stage);\r\n });\r\n }\r\n else {\r\n finalStageNames = stageNames;\r\n }\r\n return finalStageNames;\r\n },\r\n getStageNames: () => {\r\n return stageNames;\r\n },\r\n getStagesPositioningInfo: (disciplineUrlName) => {\r\n if (disciplineSilos[disciplineUrlName]) {\r\n const pgInfo = disciplineSilos[disciplineUrlName].pageInfo;\r\n const positioningInfo = { headline: pgInfo.stagesPositioningHeadline, description: pgInfo.stagesPositioningStatement.content };\r\n return positioningInfo;\r\n } else {\r\n return null;\r\n }\r\n },\r\n getDisciplineHeroImageUrl: async (disciplineUrlName) => {\r\n await fetchHomePageAsync();\r\n const silo = getSilo(disciplineUrlName);\r\n return silo && silo[\"heroImage\"] ? silo[\"heroImage\"][\"mediaUrl\"] : \"\";\r\n },\r\n};\r\n\r\nexport default ContentProviderService;","import React from \"react\";\r\nimport {\r\n BrowserRouter as Router,\r\n Route,\r\n Switch,\r\n Redirect,\r\n} from \"react-router-dom\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { CssBaseline } from \"@material-ui/core\";\r\n\r\nimport ErrorBoundary from \"./components/organisms/ErrorBoundary\";\r\nimport HomePage from \"./components/views/HomePage\";\r\nimport Discipline from \"./components/views/Discipline\";\r\nimport Stage from \"./components/views/Stage\";\r\nimport Footer from \"./components/views/Footer\";\r\nimport ContentProviderService from \"./services/ContentProviderService\";\r\nimport { ContentContext } from \"./context/ContentContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n // siteWrapper & siteContent needed for sticky footer in ie11\r\n siteWrapper: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n site: {\r\n display: \"flex\",\r\n flex: 1,\r\n flexDirection: \"column\",\r\n minHeight: \"100vh\",\r\n },\r\n siteContent: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: \"auto\",\r\n },\r\n}));\r\n\r\nconst App = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import \"react-app-polyfill/ie9\";\r\nimport \"react-app-polyfill/stable\";\r\n\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport ResizeObserver from \"resize-observer-polyfill\";\r\nimport {\r\n MuiThemeProvider,\r\n createMuiTheme,\r\n responsiveFontSizes,\r\n} from \"@material-ui/core\";\r\n\r\nimport \"./index.css\";\r\nimport App from \"./App\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\n\r\nwindow.ResizeObserver = ResizeObserver;\r\n\r\nlet theme = createMuiTheme({\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 1020,\r\n lg: 1280,\r\n xl: 1920,\r\n },\r\n },\r\n palette: {\r\n primary: {\r\n main: \"#184b9f\",\r\n },\r\n secondary: {\r\n main: \"#eba900\",\r\n },\r\n info: {\r\n main: \"#939393\",\r\n },\r\n background: {\r\n default: \"#fff\",\r\n },\r\n },\r\n overrides: {\r\n MuiButton: {\r\n root: {\r\n borderRadius: 0,\r\n \"&:hover, &:active, &:focus\": {\r\n backgroundColor: \"#eba900\",\r\n },\r\n },\r\n contained: {\r\n boxShadow: \"none\",\r\n \"&:hover\": {\r\n backgroundColor: \"#eba900\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n containedPrimary: {\r\n boxShadow: \"none\",\r\n \"&:hover\": {\r\n backgroundColor: \"#eba900\",\r\n boxShadow: \"none\",\r\n },\r\n },\r\n label: {\r\n textTransform: \"none\",\r\n },\r\n outlined: {\r\n color: \"#184b9f\",\r\n borderColor: \"#184b9f\",\r\n \"&:hover, &:active, &:focus\": {\r\n borderColor: \"#eba900\",\r\n },\r\n padding: \"1px 15px\",\r\n },\r\n text: {\r\n backgroundColor: \"transparent\",\r\n transition: \"background-color .2s, color .2s\",\r\n \"&:hover, &:active, &:focus\": {\r\n color: \"#fff\",\r\n backgroundColor: \"#eba900\",\r\n },\r\n },\r\n textPrimary: {\r\n backgroundColor: \"transparent\",\r\n transition: \"background-color .2s, color .2s\",\r\n \"&:hover, &:active, &:focus\": {\r\n color: \"#fff\",\r\n backgroundColor: \"#eba900\",\r\n },\r\n },\r\n },\r\n MuiDialogTitle: {\r\n root: {\r\n color: \"#184b9f\",\r\n fontSize: \"1.5em\",\r\n },\r\n },\r\n MuiDivider: {\r\n root: {\r\n margin: \"20px 0\",\r\n },\r\n },\r\n MuiMenu: {\r\n list: {\r\n padding: 0,\r\n },\r\n paper: {\r\n backgroundColor: \"#939393\",\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n root: {\r\n borderRadius: 0,\r\n },\r\n },\r\n MuiPaper: {\r\n root: {\r\n padding: \"10px 0 10px\",\r\n marginBottom: 30,\r\n },\r\n rounded: {\r\n borderRadius: 0,\r\n },\r\n },\r\n MuiTypography: {\r\n h3: {\r\n fontWeight: 300,\r\n },\r\n },\r\n },\r\n typography: {\r\n fontFamily: [\r\n '\"Open Sans\"',\r\n \"-apple-system\",\r\n \"BlinkMacSystemFont\",\r\n '\"Segoe UI\"',\r\n \"Roboto\",\r\n '\"Helvetica Neue\"',\r\n \"Arial\",\r\n \"sans-serif\",\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(\",\"),\r\n },\r\n});\r\n\r\ntheme = responsiveFontSizes(theme);\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","import _ from \"lodash\"\r\n\r\n\r\nexport const buildFullName = (person) => {\r\n let fullName;\r\n if (person) {\r\n const { firstName, middleNameInitial, lastName, degree } = person;\r\n\r\n fullName =\r\n (firstName ? firstName : \"\") +\r\n (middleNameInitial ? \" \" + middleNameInitial : \"\") +\r\n (lastName ? \" \" + lastName : \"\") +\r\n (degree ? \", \" + degree : \"\");\r\n }\r\n\r\n return fullName;\r\n};\r\n\r\nexport const buildCommaSeparatedString = (arr) => {\r\n let string = \"\";\r\n\r\n arr.forEach((item, i) => {\r\n if (i === 0) {\r\n string += item;\r\n } else {\r\n string += \", \" + item;\r\n }\r\n });\r\n\r\n return string.trim();\r\n};\r\n\r\nexport const pluralizeHeading = (arr, str) => {\r\n return `${str}${str.endsWith(\"S\") ? \"\" : arr.length === 1 ? \"\" : \"S\"}`;\r\n};\r\n\r\nexport const slugify = (str) => {\r\n const a =\r\n \"àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;\";\r\n const b =\r\n \"aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------\";\r\n const p = new RegExp(a.split(\"\").join(\"|\"), \"g\");\r\n\r\n return (\r\n str &&\r\n str\r\n .toString()\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\") // Replace spaces with -\r\n .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters\r\n .replace(/&/g, \"-and-\") // Replace & with 'and'\r\n .replace(/[^\\w-]+/g, \"\") // Remove all non-word characters\r\n .replace(/--+/g, \"-\") // Replace multiple - with single -\r\n .replace(/^-+/, \"\") // Trim - from start of text\r\n .replace(/-+$/, \"\")\r\n ); // Trim - from end of text\r\n};\r\n\r\n// Returns an array of objects { displayName, id } for all\r\n// Research Thrusts for a given facultyLeads entity under a focus.\r\nexport const getAllResearchThrusts = (facultyLeads) => {\r\n return facultyLeads.reduce((arr1, lead) => {\r\n if (lead.research) {\r\n arr1.push(\r\n ...lead.research.reduce((arr2, thrust) => {\r\n arr2.push({\r\n displayName: thrust.displayName,\r\n id: thrust.sys.id,\r\n });\r\n return arr2;\r\n }, [])\r\n );\r\n }\r\n const finalArray = _.sortBy(arr1, \"displayName\");\r\n return finalArray;\r\n }, []);\r\n};\r\n\r\n// Transforms the \"students\" array from an array of\r\n// Person entities to an array which contains a string\r\n// of the students' full names in a format consumable\r\n// by the Content component:\r\nexport const convertStudentsToList = (studentGroups) => {\r\n studentGroups.forEach((group) => {\r\n if (group.students) {\r\n const studentsArray = group.students.map((student) =>\r\n buildFullName(student)\r\n );\r\n const studentsString = buildCommaSeparatedString(studentsArray);\r\n // Must be in a shape that the Content component understands\r\n group.students = [{ nodeType: \"text\", value: studentsString, marks: [] }];\r\n }\r\n });\r\n};\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport {\r\n buildFullName,\r\n buildCommaSeparatedString,\r\n} from \"../../utils/component-support\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n students: {\r\n boxSizing: \"border-box\",\r\n marginBottom: (props) => (props.isListItem ? 5 : 15),\r\n },\r\n}));\r\n\r\nconst Students = ({ content, isListItem = false }) => {\r\n const styleProps = { isListItem };\r\n const classes = useStyles(styleProps);\r\n\r\n return (\r\n \r\n {buildCommaSeparatedString(\r\n content.map((person) => buildFullName(person))\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Students;\r\n","import React from \"react\";\r\n\r\nimport Content from \"../molecules/Content\";\r\nimport GalleryImages from \"../molecules/GalleryImages\";\r\nimport LinkBlock from \"../atoms/LinkBlock\";\r\nimport Students from \"../atoms/Students\";\r\nimport Resource from \"../atoms/Resource\";\r\n\r\nconst StudentGroup = ({ studentGroup }) => {\r\n const {\r\n // entityType,\r\n // type,\r\n researchUrl,\r\n students,\r\n primaryImage,\r\n galleryImages,\r\n description,\r\n } = studentGroup;\r\n\r\n return (\r\n <>\r\n {description && }\r\n {researchUrl && }\r\n {students && }\r\n {primaryImage && (\r\n \r\n )}\r\n {galleryImages && }\r\n \r\n );\r\n};\r\n\r\nexport default StudentGroup;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n subheadCaption: {\r\n boxSizing: \"border-box\",\r\n fontStyle: \"italic\",\r\n marginBottom: 5,\r\n },\r\n}));\r\n\r\nconst SubheadCaption = ({ content }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n\r\nexport default SubheadCaption;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport {\r\n buildFullName,\r\n convertStudentsToList,\r\n} from \"../../utils/component-support\";\r\nimport GalleryImages from \"./GalleryImages\";\r\nimport Content from \"./Content\";\r\nimport Facility from \"./Facility\";\r\nimport StudentGroup from \"./StudentGroup\";\r\nimport Technique from \"./Technique\";\r\nimport Resource from \"../atoms/Resource\";\r\nimport Heading from \"../atoms/Heading\";\r\nimport LinkBlock from \"../atoms/LinkBlock\";\r\nimport Subhead from \"../atoms/Subhead\";\r\nimport SubheadCaption from \"../atoms/SubheadCaption\";\r\nimport SubSectionHeading from \"../atoms/SubSectionHeading\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n personDetails: {\r\n marginBottom: 30,\r\n marginTop: (props) =>\r\n props.isContact && !props.isFocusEntry ? 30 : \"inherit\",\r\n overflow: \"hidden\",\r\n clear: \"left\",\r\n },\r\n contactText: {\r\n paddingTop: 10,\r\n paddingLeft: 0,\r\n },\r\n\r\n // **These styles MUST be matching for Person, Facility & Capability components\r\n moleculeSubsectionWrapper: {\r\n paddingTop: 10,\r\n paddingBottom: 0,\r\n marginBottom: 30, // set to 0 by focusEntryContainer:last-child or moleculeSubsection:last-child\r\n overflow: \"hidden\",\r\n clear: \"left\",\r\n \"& > div:last-child\": {\r\n paddingBottom: 0,\r\n },\r\n },\r\n moleculeSubsection: {\r\n borderLeft: \"solid .5px #eba900\",\r\n paddingLeft: 20,\r\n paddingBottom: 30, // set to 0 by moleculeSubsectionWrapper:last-child\r\n overflow: \"hidden\",\r\n \"& > div:last-child\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst Person = ({\r\n activeThrustId,\r\n content,\r\n isContact = false,\r\n isFocusEntry = false,\r\n}) => {\r\n const {\r\n primaryImage,\r\n emailAddress,\r\n phone,\r\n position,\r\n biography,\r\n galleryImages,\r\n sunyPolyFacultyStaffPage,\r\n publicationsUrl,\r\n facilities,\r\n research,\r\n studentGroups,\r\n } = content;\r\n\r\n const styleProps = { isContact, isFocusEntry };\r\n\r\n const classes = useStyles(styleProps);\r\n\r\n const fullName = buildFullName(content);\r\n\r\n // Transforms studentGroups.students to a string of comma-separated names\r\n if (studentGroups) {\r\n convertStudentsToList(studentGroups);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n {isContact && }\r\n {primaryImage && (\r\n \r\n )}\r\n {/* {isContact && (\r\n \r\n Contact:\r\n \r\n )} */}\r\n {fullName &&\r\n (isFocusEntry ? (\r\n \r\n ) : (\r\n \r\n ))}\r\n {position && }\r\n {emailAddress && }\r\n {phone && }\r\n {biography &&\r\n biography.map((bio) => (\r\n \r\n ))}\r\n {(sunyPolyFacultyStaffPage || publicationsUrl) && (\r\n <>\r\n \r\n {sunyPolyFacultyStaffPage && (\r\n \r\n )}\r\n {publicationsUrl && }\r\n \r\n )}\r\n {galleryImages && }\r\n
    \r\n\r\n {facilities && (\r\n
    \r\n \r\n {facilities.map((facility) => (\r\n
    \r\n \r\n
    \r\n ))}\r\n
    \r\n )}\r\n\r\n {research && (\r\n
    \r\n \r\n {research.map((technique, i) => {\r\n return (\r\n \r\n \r\n
    \r\n );\r\n })}\r\n \r\n )}\r\n\r\n {studentGroups && (\r\n
    \r\n \r\n {studentGroups.map((studentGroup) => (\r\n \r\n \r\n
    \r\n ))}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Person;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n heading: {\r\n fontWeight: 700,\r\n fontSize: \"1.45rem\",\r\n padding: \"0 0 .17rem 0\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"1.6rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst Heading = ({ content }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n\r\nexport default Heading;\r\n","import React from \"react\";\r\nimport { Link } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n linkBlock: {\r\n display: \"block\",\r\n marginBottom: 10,\r\n textDecoration: \"underline\",\r\n fontSize: \"0.875rem\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"1rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst LinkBlock = ({ content, isEmail = false, linkDisplay = null }) => {\r\n const classes = useStyles();\r\n\r\n const hrefUrl = isEmail ? `mailto: ${content}` : content;\r\n\r\n return (\r\n \r\n {linkDisplay ? linkDisplay : content}\r\n \r\n );\r\n};\r\n\r\nexport default LinkBlock;\r\n","import React from \"react\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n subSectionHeading: {\r\n boxSizing: \"border-box\",\r\n color: theme.palette.secondary.main,\r\n fontSize: \"1.15rem\",\r\n fontWeight: 700,\r\n marginBottom: 10,\r\n paddingTop: 10,\r\n clear: \"left\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n fontSize: \"1.35rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst SubSectionHeading = ({ content }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n\r\nexport default SubSectionHeading;\r\n"],"sourceRoot":""}