{"version":3,"sources":["webpack://cep-gatsby-starter-code/./src/components/InnovatorsFilter/index.js","webpack://cep-gatsby-starter-code/./src/templates/Students.js","webpack://cep-gatsby-starter-code/./src/components/Card/JudgeCard.js","webpack://cep-gatsby-starter-code/./src/components/Card/MentorCard.js","webpack://cep-gatsby-starter-code/./src/utils/formatters.js","webpack://cep-gatsby-starter-code/./src/components/Card/StudentCard.js","webpack://cep-gatsby-starter-code/./src/utils/resource-helper.js"],"names":["isOnPage","location","pageSlug","RegExp","test","pathname","GetYearsFromUrl","all","queryString","search","yearsArray","years","split","map","Number","error","baseUrl","yearsInFilter","pagesInFilter","name","slug","useState","dropdownOpen","setDropdownOpen","className","onClick","state","length","toString","GetFilterLabel","classNames","year","i","key","newYearsArray","array","item","includes","filter","c","result","push","addOrRemoveYear","path","join","navigate","disableScrollUpdate","HandleYearClick","page","Link","to","replace","toLowerCase","data","setFilter","allResources","students","edges","reduce","acc","curr","node","getRawResources","filteredResources","res","participations","some","participation","slice","list","setList","loadMore","setLoadMore","hasMore","setHasMore","useEffect","currentLength","nextResults","isMore","title","filename","id","size","offset","renderResources","prefix","judge","Image","cardImage","jobTitle","shortDescription","mentor","normalize","strArray","resultArray","TypeError","match","shift","component","str","parts","urlJoin","args","Array","from","isArray","GetUrl","student","useLocation","studentAward","award","replaceAll","firstName","middleName","lastName","tag","ideaName","aboutIdea","challengeMotivation","favoriteInvention","dreamOcupation","type","resources","index","accIndex","Math","floor","undefined","resRow","renderRowOfResources"],"mappings":"6LAMMA,EAAW,SAACC,EAAUC,GAE1B,OADkB,IAAIC,OAAJ,IAAgBD,EAAhB,OACDE,KAAKH,EAASI,WAG3BC,EAAkB,SAACL,GACvB,IAAMM,EAAMC,QAAkBP,EAASQ,QACnCC,EAAa,GACjB,IACEA,EAAaH,EAAII,MAAMC,MAAM,KAAKC,IAAIC,QACtC,MAAOC,GACPL,EAAa,GAEf,OAAOA,GAgBHM,EAAU,4CACVC,EAAgB,CACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,MAERC,EAAgB,CACpB,CAAEC,KAAM,UAAWC,KAASJ,EAAL,YACvB,CAAEG,KAAM,YAAaC,KAASJ,EAAL,cACzB,CAAEG,KAAM,sBAAuBC,KAASJ,EAAL,wBACnC,CAAEG,KAAM,oBAAqBC,KAASJ,EAAL,uBACjC,CAAEG,KAAM,kBAAmBC,KAASJ,EAAL,4BAC/B,CAAEG,KAAM,UAAWC,KAASJ,EAAL,YACvB,CAAEG,KAAM,SAAUC,KAASJ,EAAL,YAoFxB,IAjFyB,SAAC,GAAkB,IAAhBf,EAAe,EAAfA,SAC1B,GAAwCoB,cAAS,MAA1CC,EAAP,KAAqBC,EAArB,KA8BA,OACE,uBAAKC,UAAU,qBACb,uBAAKA,UAAU,0BACb,uBACEA,UAAU,8BACVC,QAAS,kBAlCiBF,GAAgB,SAACG,GAAD,OAAYA,OAgBvC,SAACzB,GACtB,IAAMS,EAAaJ,EAAgBL,GACnC,OAA0B,IAAtBS,EAAWiB,OACN,MAEmB,IAAtBjB,EAAWiB,OACNjB,EAAW,GAAGkB,WAEXlB,EAAW,GAAGkB,WAAxB,OAAwClB,EAAWiB,OAAS,GAA5D,IAYGE,CAAe5B,IAElB,uBACEuB,UAAWM,IACT,iCACAR,GAAgB,yCAGlB,0BACGL,EAAcJ,KAAI,SAACkB,EAAMC,GAAP,OACjB,sBACEC,IAAKD,EACLP,QAAS,kBA9CC,SAACM,EAAM9B,GAC7B,IACMiC,EAlCc,SAACC,EAAOC,GAE9B,GADeD,EAAME,SAASD,GAE5B,OAAOD,EAAMG,QAAO,SAACC,GACnB,OAAOA,IAAMH,KAGf,IAAMI,EAASL,EAEf,OADAK,EAAOC,KAAKL,GACLI,EAyBeE,CADHpC,EAAgBL,GACe8B,GAC5CY,EAAOT,EAAc,GACpBjC,EAASI,SADH,UACqB6B,EAAcU,KAAK,KADxC,GAEN3C,EAASI,SAChBkB,GAAgB,IAChBsB,cAASF,EAAM,CACbjB,MAAO,CACLoB,qBAAqB,KAqCEC,CAAgBhB,EAAM9B,IACrCuB,UAAWM,IACTxB,EAAgBL,GAAUoC,SAASN,IAAS,gBAG7CA,SAMVb,EAAcL,KAAI,SAACmC,EAAMhB,GAAP,OACjB,gBAAC,EAAAiB,KAAD,CACEhB,IAAKD,EACLN,MAAO,CAAEoB,qBAAqB,GAC9BI,GAAE,IAAMF,EAAK5B,KAAOnB,EAASQ,OAC7Be,UAAWM,IACT,0BADmB,2BAEQkB,EAAK7B,KAC7BgC,QAAQ,IAAK,KACbC,cACHpD,EAASC,EAAU+C,EAAK5B,OAAS,oCAGlC4B,EAAK7B,Y,uJCoDhB,UAvJyB,SAAC,GAAwB,IAAtBkC,EAAqB,EAArBA,KAAMpD,EAAe,EAAfA,SAChC,GAA4BoB,cAAS,MAA9BiB,EAAP,KAAegB,EAAf,KACMC,EARgB,SAACF,GAAD,OACtBA,EAAKG,SAASC,MAAMC,QAAO,SAACC,EAAKC,GAE/B,OADAD,EAAIlB,KAAKmB,EAAKC,MACPF,IACN,IAIkBG,CAAgBT,GAC/BU,EAAoBzB,EACtBiB,EAAajB,QAAO,SAAC0B,GAAD,OAClBA,EAAIC,eAAeC,MAAK,SAACC,GAAD,OACtB7B,EAAOD,SAAS8B,EAAcpC,YAGlCwB,EAEJ,GAAwBlC,eAAS,OAC5B0C,EAAkBK,MAAM,EAFN,MAChBC,EAAP,KAAaC,EAAb,KAGA,GAAgCjD,eAAS,GAAlCkD,EAAP,KAAiBC,EAAjB,KACA,GAA8BnD,cAC5B0C,EAAkBpC,OANG,IAKhB8C,EAAP,KAAgBC,EAAhB,KAyCA,OAjCAC,gBAAU,WACR,IAAMpE,EAAMC,QAAkBP,EAASQ,QACnCC,EAAa,KACjB,IACEA,EAAaH,EAAII,MAAMC,MAAM,KAAKC,IAAIC,QACtC,MAAOC,GACPL,EAAa,KAEf4C,EAAU5C,KACT,CAACT,EAASQ,UAEbkE,gBAAU,WACRL,GAAQ,OAAIP,EAAkBK,MAAM,EAzBf,QA0BpB,CAACL,EAAkBpC,UAEtBgD,gBAAU,WACR,GAAIJ,GAAYE,EAAS,CACvB,IAAMG,EAAgBP,EAAK1C,OAErBkD,EADSD,EAAgBb,EAAkBpC,OAE7CoC,EAAkBK,MAAMQ,EAAeA,EAjCxB,IAkCf,GACJN,EAAQ,GAAD,eAAKD,IAAL,OAAcQ,KACrBL,GAAY,MAEb,CAACD,EAAUE,KAGdE,gBAAU,WACR,IAAMG,EAAST,EAAK1C,OAASoC,EAAkBpC,OAC/C+C,EAAWI,KACV,CAACT,IAGF,gBAAC,IAAD,CAAQU,MAAM,WAAWvD,UAAU,oBACjC,uBAAKA,UAAU,kBACb,uBAAKA,UAAU,gDACf,uBAAKA,UAAU,8BAEb,sBAAIA,UAAU,eACZ,sBAAIA,UAAU,cACZ,gBAAC,EAAAyB,KAAD,CAAMC,GAAG,+CAAT,qBAIF,sBAAI1B,UAAU,qBAAd,kCAEF,sBAAIA,UAAU,cAAd,iCACA,gBAAC,IAAD,CACEwD,SAAS,oCACTxD,UAAU,iBAKhB,gBAAC,IAAD,CAASyD,GAAG,cACV,gBAAC,KAAD,KACE,gBAAC,KAAD,KACE,gBAAC,KAAD,CAAQC,KAAM,EAAGC,OAAQ,EAAG3D,UAAU,QACpC,sBAAIA,UAAU,qBAAd,8MAGA,gDACA,sBAAIA,UAAU,qBAAd,+PAYR,gBAAC,IAAD,KACE,gBAAC,KAAD,KACE,gBAAC,IAAD,CAAkBvB,SAAUA,MAGhC,gBAAC,KAAD,MAAYmF,QAAgB,WAAYf,IACxC,gBAAC,KAAD,CAAW7C,UAAU,QACnB,uBAAKA,UAAU,iCACZiD,GACC,gBAAC,IAAD,CAAQhD,QAxFK,WACrB+C,GAAY,IAuF6BhD,UAAU,aAA3C,kB,oGClGZ,EArBkB,SAAC,GAAe,IARH6D,EAAQlE,EAQlBmE,EAAY,EAAZA,MACnB,OACE,uBAAK9D,UAAU,2CACb,uBAAKA,UAAU,uBACb,gBAAC+D,EAAA,EAAD,CAAOP,SAAUM,EAAME,aAEzB,uBAAKhE,UAAU,yBACb,2BAfuB6D,EAeIC,EAAMD,OAfFlE,EAeUmE,EAAMnE,KAdjDkE,EACQA,EAAV,IAAoBlE,EAEbA,IAYH,qBAAGK,UAAU,aAAa8D,EAAMG,UAChC,yBAAIH,EAAMI,kBACV,gBAAC,EAAAzC,KAAD,CACEC,GAAE,qDAAuDoC,EAAMlE,KAC/DI,UAAU,qBAFZ,mBCWR,EArBmB,SAAC,GAAgB,IARL6D,EAAQlE,EAQjBwE,EAAa,EAAbA,OACpB,OACE,uBAAKnE,UAAU,2CACb,uBAAKA,UAAU,uBACb,gBAAC+D,EAAA,EAAD,CAAOP,SAAUW,EAAOH,aAE1B,uBAAKhE,UAAU,yBACb,2BAfuB6D,EAeIM,EAAON,OAfHlE,EAeWwE,EAAOxE,KAdnDkE,EACQA,EAAV,IAAoBlE,EAEbA,IAYH,qBAAGK,UAAU,aAAamE,EAAOF,UACjC,yBAAIE,EAAOD,kBACX,gBAAC,EAAAzC,KAAD,CACEC,GAAE,sDAAwDyC,EAAOvE,KACjEI,UAAU,qBAFZ,mB,UCtBR,SAASoE,EAAUC,GACjB,IAAMC,EAAc,GACpB,GAAwB,IAApBD,EAASlE,OACX,MAAO,GAGT,GAA2B,iBAAhBkE,EAAS,GAClB,MAAM,IAAIE,UAAU,kCAAoCF,EAAS,IAI/DA,EAAS,GAAGG,MAAM,iBAAmBH,EAASlE,OAAS,IACzDkE,EAAS,GAAKA,EAASI,QAAUJ,EAAS,IAIxCA,EAAS,GAAGG,MAAM,gBACpBH,EAAS,GAAKA,EAAS,GAAG1C,QAAQ,gBAAiB,UAEnD0C,EAAS,GAAKA,EAAS,GAAG1C,QAAQ,gBAAiB,SAGrD,IAAK,IAAInB,EAAI,EAAGA,EAAI6D,EAASlE,OAAQK,IAAK,CACxC,IAAIkE,EAAYL,EAAS7D,GAEzB,GAAyB,iBAAdkE,EACT,MAAM,IAAIH,UAAU,kCAAoCG,GAGxC,KAAdA,IAIAlE,EAAI,IAENkE,EAAYA,EAAU/C,QAAQ,SAAU,KAIxC+C,EAFElE,EAAI6D,EAASlE,OAAS,EAEZuE,EAAU/C,QAAQ,SAAU,IAG5B+C,EAAU/C,QAAQ,SAAU,KAG1C2C,EAAYrD,KAAKyD,IAGnB,IAAIC,EAAML,EAAYlD,KAAK,KAOrBwD,GAHND,EAAMA,EAAIhD,QAAQ,kBAAmB,OAGnBvC,MAAM,KAGxB,OAFAuF,EAAMC,EAAMH,SAAWG,EAAMzE,OAAS,EAAI,IAAM,IAAMyE,EAAMxD,KAAK,KAa5D,IAAMyD,EAAU,WAAc,IAAD,uBAATC,EAAS,yBAATA,EAAS,gBAClC,IAAMF,EAAQG,MAAMC,KAAKD,MAAME,QAAQH,EAAK,IAAMA,EAAK,GAAKA,GAC5D,OAAOV,EAAUQ,ICtDbM,EAAS,SAACC,GACd,IAAMtG,GAAWuG,mBAAcvG,SACzBW,EAAU,6CAIhB,GAHqB,IAAIb,OAAJ,MACZa,EADY,gFAGJZ,KAAKC,GACpB,OAAOgG,EAAQhG,EAAUsG,EAAQvF,MAEnC,IACE,IAAMyF,EAAeF,EAAQ1C,eAAe,GAAG6C,MAAM1D,cACrD,OAAOiD,EAAQrF,EAAsB6F,EAdvBzD,cAAc2D,WAAW,IAAK,KAA9C,IAcsDJ,EAAQvF,MAC5D,SACA,OAAOiF,EAAQrF,EAAS,kBAAmB2F,EAAQvF,QAoCvD,EAhCoB,SAAC,GAAiB,IAAD,UA3BhB4F,EAAWC,EAAYC,EA2BrBP,EAAc,EAAdA,QACrB,OACE,uBAAKnF,UAAcmF,EAAQQ,IAAb,4CACZ,uBAAK3F,UAAU,uBACZ,UAAAmF,EAAQnB,iBAAR,SAAoB,GACnB,gBAACD,EAAA,EAAD,CAAOP,SAAU2B,EAAQnB,YAEzB,gBAACD,EAAA,EAAD,CAAOP,SAAS,0BAKpB,uBAAKxD,UAAU,yBACb,uBAAKA,UAAU,OAAOmF,EAAQQ,KAC9B,2BAzCaH,EA0CEL,EAAQK,UA1CCC,EA0CUN,EAAQM,WA1CNC,EA0CkBP,EAAQO,SAzC7DD,EACAD,EADU,IACGC,EADH,IACiBC,EAC3BF,EAFU,IAEGE,IAyCd,sBAAI1F,UAAU,aAAamF,EAAQS,UACnC,qBAAG5F,UAAU,gBAAgBmF,EAAQU,YACpC,UAAAV,EAAQU,iBAAR,eAAoB,MAApB,UACCV,EAAQW,2BADT,aACC,EAA8B,MAD/B,UAECX,EAAQY,yBAFT,aAEC,EAA4B,MAF7B,UAGCZ,EAAQa,sBAHT,aAGC,EAAyB,KACvB,gBAAC,EAAAvE,KAAD,CAAMC,GAAIwD,EAAOC,GAAUnF,UAAU,qBAArC,mB,UCDC4D,EAAkB,SAACqC,EAAMC,GAAP,OAC7BA,GAAaA,EAAU/F,OAAS,EAC9B,gCACG+F,EACEhE,QAAO,SAACC,EAAKC,EAAM+D,GAClB,IAAMC,EAAWC,KAAKC,MAAMH,EAAQ,GAMpC,YALsBI,IAAlBpE,EAAIiE,GACNjE,EAAIiE,GAAY,CAAChE,GAEjBD,EAAIiE,GAAUnF,KAAKmB,GAEdD,IACN,IACF9C,KAAI,SAACmH,GAAD,OAAYC,EAAqBR,EAAMO,OAGhD,uBAAKxG,UAAU,UACb,sBAAIA,UAAU,UAAd,kIAOAyG,EAAuB,SAACR,EAAMC,GAClC,OACE,gBAAC,KAAD,CAAKzF,IAAKyF,EAAU,GAAGV,WAAaU,EAAU,GAAGvG,KAAOuG,EAAU,GAAGtG,MAClEsG,EAAU7G,KAAI,SAACmD,EAAK2D,GAAN,OACb,gBAAC,KAAD,CAAQzC,KAAM,EAAGjD,IAAK+B,EAAIgD,WAAahD,EAAI7C,KAAOwG,GACtC,YAATF,GAAsB,gBAAC,EAAD,CAAY9B,OAAQ3B,IACjC,aAATyD,GAAuB,gBAAC,EAAD,CAAad,QAAS3C,IACpC,WAATyD,GAAqB,gBAAC,EAAD,CAAWnC,MAAOtB","file":"component---src-templates-students-js-0cdb70684ecd1c017f2e.js","sourcesContent":["import classNames from 'classnames';\nimport { Link, navigate } from 'gatsby';\nimport * as queryString from 'query-string';\nimport React, { useState } from 'react';\nimport './styles.scss';\n\nconst isOnPage = (location, pageSlug) => {\n const pageRegex = new RegExp(`\\/${pageSlug}\\/?$`);\n return pageRegex.test(location.pathname);\n};\n\nconst GetYearsFromUrl = (location) => {\n const all = queryString.parse(location.search);\n var yearsArray = [];\n try {\n yearsArray = all.years.split(' ').map(Number);\n } catch (error) {\n yearsArray = [];\n }\n return yearsArray;\n};\n\nconst addOrRemoveYear = (array, item) => {\n const exists = array.includes(item);\n if (exists) {\n return array.filter((c) => {\n return c !== item;\n });\n } else {\n const result = array;\n result.push(item);\n return result;\n }\n};\n\nconst baseUrl = 'annual-challenge/finalists-mentors-judges';\nconst yearsInFilter = [\n 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012,\n 2011, 2010, 2009,\n];\nconst pagesInFilter = [\n { name: 'Winners', slug: `${baseUrl}/winners` },\n { name: 'Finalists', slug: `${baseUrl}/finalists` },\n { name: 'State Merit Winners', slug: `${baseUrl}/state-merit-winners` },\n { name: 'Honorable Mention', slug: `${baseUrl}/honorable-mentions` },\n { name: 'Improving Lives', slug: `${baseUrl}/improving-lives-winners` },\n { name: 'Mentors', slug: `${baseUrl}/mentors` },\n { name: 'Judges', slug: `${baseUrl}/judges` },\n];\n\nconst InnovatorsFilter = ({ location }) => {\n const [dropdownOpen, setDropdownOpen] = useState(null);\n const handleDropdownClick = () => setDropdownOpen((state) => !state);\n\n const HandleYearClick = (year, location) => {\n const yearsArray = GetYearsFromUrl(location);\n const newYearsArray = addOrRemoveYear(yearsArray, year);\n const path = newYearsArray[0]\n ? `${location.pathname}?years=${newYearsArray.join('+')}`\n : `${location.pathname}`;\n setDropdownOpen(false);\n navigate(path, {\n state: {\n disableScrollUpdate: true,\n },\n });\n };\n\n const GetFilterLabel = (location) => {\n const yearsArray = GetYearsFromUrl(location);\n if (yearsArray.length === 0) {\n return 'All';\n } else {\n if (yearsArray.length === 1) {\n return yearsArray[0].toString();\n } else {\n return `${yearsArray[0].toString()} (+${yearsArray.length - 1})`;\n }\n }\n };\n\n return (\n
\n
\n handleDropdownClick()}\n >\n {GetFilterLabel(location)}\n
\n \n \n
\n \n {pagesInFilter.map((page, i) => (\n \n {page.name}\n \n ))}\n \n );\n};\n\nexport default InnovatorsFilter;\n","import { graphql, Link } from 'gatsby';\nimport * as queryString from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport Button from '../components/Button';\nimport { Column, Container, Row } from '../components/Grid';\nimport Image from '../components/Image';\nimport InnovatorsFilter from '../components/InnovatorsFilter';\nimport Layout from '../components/Layout';\nimport Section from '../components/Section';\nimport { renderResources } from '../utils/resource-helper';\n\n/**\n * Extracts the resources from the data object and flattens it to an\n * array of resources (objects).\n *\n * @param {Object} data GraphQL query response\n *\n * @returns {Array} An array of resources (objects)\n */\nconst getRawResources = (data) =>\n data.students.edges.reduce((acc, curr) => {\n acc.push(curr.node);\n return acc;\n }, []);\n\nconst StudentsTemplate = ({ data, location }) => {\n const [filter, setFilter] = useState(null);\n const allResources = getRawResources(data);\n const filteredResources = filter\n ? allResources.filter((res) =>\n res.participations.some((participation) =>\n filter.includes(participation.year)\n )\n )\n : allResources;\n const increaseNumber = 24;\n const [list, setList] = useState([\n ...filteredResources.slice(0, increaseNumber),\n ]);\n const [loadMore, setLoadMore] = useState(false);\n const [hasMore, setHasMore] = useState(\n filteredResources.length > increaseNumber\n );\n\n const handleLoadMore = () => {\n setLoadMore(true);\n };\n\n useEffect(() => {\n const all = queryString.parse(location.search);\n var yearsArray = null;\n try {\n yearsArray = all.years.split(' ').map(Number);\n } catch (error) {\n yearsArray = null;\n }\n setFilter(yearsArray);\n }, [location.search]);\n\n useEffect(() => {\n setList([...filteredResources.slice(0, increaseNumber)]);\n }, [filteredResources.length]);\n\n useEffect(() => {\n if (loadMore && hasMore) {\n const currentLength = list.length;\n const isMore = currentLength < filteredResources.length;\n const nextResults = isMore\n ? filteredResources.slice(currentLength, currentLength + increaseNumber)\n : [];\n setList([...list, ...nextResults]);\n setLoadMore(false);\n }\n }, [loadMore, hasMore]);\n\n //Check if there is more\n useEffect(() => {\n const isMore = list.length < filteredResources.length;\n setHasMore(isMore);\n }, [list]);\n\n return (\n \n
\n
\n
\n {/* Breadcrumbs */}\n
    \n
  • \n \n Annual Challenge\n \n
  • \n
  • Finalists, Mentors and Judges
  • \n
\n

Finalists, Mentors and Judges

\n \n
\n
\n {/* Finalists, Mentors and Judges Intro */}\n
\n \n \n \n

\n The 2024 3M Young Scientist Challenge Finalists and State Merit Winners have been announced! Use the tabs below to check out their big ideas and explore all finalists, winners, and 3M Scientist mentors!\n

\n

Today’s Innovators

\n

\n Get to know the diverse personalities of students, 3M Mentors,\n and others who have contributed their unique talents to the 3M\n Young Scientist Challenge. Use the tabs below to explore\n exciting ideas and inspirations from previous years’ challenges.\n

\n
\n
\n
\n
\n\n {/* Filter */}\n
\n \n \n \n
\n {renderResources('students', list)}\n \n
\n {hasMore && (\n \n )}\n
\n
\n
\n );\n};\n\nexport const data = graphql`\n query StudentsQuery($award: String!) {\n students: allStudentsYaml(\n filter: { participations: { elemMatch: { award: { regex: $award } } } }\n sort: {\n order: [DESC, ASC, ASC]\n fields: [participations___year, firstName, lastName]\n }\n ) {\n edges {\n node {\n cardImage\n firstName\n id\n lastName\n tag\n flag\n middleName\n ideaName\n aboutIdea\n challengeMotivation\n favoriteInvention\n dreamOcupation\n participations {\n award\n year\n }\n slug\n }\n }\n }\n }\n`;\n\nexport default StudentsTemplate;\n","import { Link } from 'gatsby';\nimport React from 'react';\nimport Image from '../Image';\nimport './styles.scss';\n\nconst GetFullNameWithPrefix = (prefix, name) => {\n if (prefix) {\n return `${prefix} ${name}`;\n } else {\n return name;\n }\n};\n\nconst JudgeCard = ({ judge }) => {\n return (\n
\n
\n \n
\n
\n

{GetFullNameWithPrefix(judge.prefix, judge.name)}

\n

{judge.jobTitle}

\n

{judge.shortDescription}

\n \n Learn More >\n \n
\n
\n );\n};\n\nexport default JudgeCard;\n","import { Link } from 'gatsby';\nimport React from 'react';\nimport Image from '../Image';\nimport './styles.scss';\n\nconst GetFullNameWithPrefix = (prefix, name) => {\n if (prefix) {\n return `${prefix} ${name}`;\n } else {\n return name;\n }\n};\n\nconst MentorCard = ({ mentor }) => {\n return (\n
\n
\n \n
\n
\n

{GetFullNameWithPrefix(mentor.prefix, mentor.name)}

\n

{mentor.jobTitle}

\n

{mentor.shortDescription}

\n \n Learn More >\n \n
\n
\n );\n};\n\nexport default MentorCard;\n","/* eslint-disable */\nfunction normalize(strArray) {\n const resultArray = [];\n if (strArray.length === 0) {\n return '';\n }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n strArray[0] = strArray.shift() + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (let i = 0; i < strArray.length; i++) {\n let component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') {\n continue;\n }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n }\n\n let str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n const parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?' : '') + parts.join('&');\n\n return str;\n}\n\n/**\n * Joins the given strings and returns a valid URL\n *\n * @param {Array.} args Strings that will be joined\n *\n * @returns {String} A valid URL\n *\n */\nexport const urlJoin = (...args) => {\n const parts = Array.from(Array.isArray(args[0]) ? args[0] : args);\n return normalize(parts);\n};\n","/* eslint-disable */\nimport { useLocation } from '@reach/router';\nimport { Link } from 'gatsby';\nimport React from 'react';\nimport { urlJoin } from '../../utils/formatters';\nimport Image from '../Image';\nimport './styles.scss';\n\nconst GetFullName = (firstName, middleName, lastName) => {\n return middleName\n ? `${firstName} ${middleName} ${lastName}`\n : `${firstName} ${lastName}`;\n};\n\nconst SlugifyAward = (award) => {\n return `${award.toLowerCase().replaceAll(' ', '-')}s`;\n};\n\nconst GetUrl = (student) => {\n const pathname = useLocation().pathname;\n const baseUrl = '/annual-challenge/finalists-mentors-judges';\n const winnersRegex = new RegExp(\n `^\\/?${baseUrl}\\/finalists|winners|state-merit-winners|honorable-mentions|improving-lives\\/?$`\n );\n if (winnersRegex.test(pathname)) {\n return urlJoin(pathname, student.slug);\n }\n try {\n const studentAward = student.participations[0].award.toLowerCase();\n return urlJoin(baseUrl, SlugifyAward(studentAward), student.slug);\n } catch {\n return urlJoin(baseUrl, 'improving-lives', student.slug);\n }\n};\n\nconst StudentCard = ({ student }) => {\n return (\n
\n
\n {student.cardImage?.[0] ? (\n \n ) : (\n \n )}\n\n {/**
{student.flag}
**/}\n
\n
\n
{student.tag}
\n

\n {GetFullName(student.firstName, student.middleName, student.lastName)}\n

\n

{student.ideaName}

\n

{student.aboutIdea}

\n {student.aboutIdea?.[0] &&\n student.challengeMotivation?.[0] &&\n student.favoriteInvention?.[0] &&\n student.dreamOcupation?.[0] && (\n \n Learn More >\n \n )}\n
\n
\n );\n};\n\nexport default StudentCard;\n","import React from 'react';\nimport { JudgeCard, MentorCard, StudentCard } from '../components/Card';\nimport { Column, Row } from '../components/Grid';\n\nconst deslugify = (slug) => {\n let splitSlug = slug.split('-');\n let camelCased = '';\n\n for (let i = 1; i < splitSlug.length; i++) {\n splitSlug[i] = splitSlug[i].charAt(0).toUpperCase() + splitSlug[i].slice(1);\n }\n\n camelCased = splitSlug.join('');\n return camelCased;\n};\n\n/**\n * Extracts the resources from the data object and flattens it to an\n * array of resources (objects).\n *\n * @param {Object} data GraphQL query response\n *\n * @returns {Array} An array of resources (objects)\n */\nexport const getRawResources = (data) =>\n data.allResourcesJson.edges.reduce((acc, curr) => {\n acc.push(curr.node);\n return acc;\n }, []);\n\n/**\n * Extracts the resources from the data object and modifies it into\n * an object with keys generated from the resource slug value. So a\n * resource with a slug value of \"slug-name\" will have a key of\n * \"slugName\". This is best used to destructure the resources you\n * want from the query.\n *\n * @param {Object} data GraphQL query response\n *\n * @returns {Object} An object with camel case keys generated from\n * the slug property of a resource.\n */\nexport const getKeyedResources = (data) =>\n getRawResources(data).reduce((acc, curr) => {\n acc[deslugify(curr.slug)] = curr;\n return acc;\n }, {});\n\n/**\n * Renders all the cards with the correct number of rows\n *\n * @param {String} type Can be 'mentors', 'students', or 'judges'\n * @param {Object} resources The Graphl query response containing\n * the mentors, students, judges\n *\n * @returns {Object} The HTML to render the data\n */\nexport const renderResources = (type, resources) =>\n resources && resources.length > 0 ? (\n <>\n {resources\n .reduce((acc, curr, index) => {\n const accIndex = Math.floor(index / 3);\n if (acc[accIndex] === undefined) {\n acc[accIndex] = [curr];\n } else {\n acc[accIndex].push(curr);\n }\n return acc;\n }, [])\n .map((resRow) => renderRowOfResources(type, resRow))}\n \n ) : (\n
\n

\n Currently, there are no results for your selection. Use the year and\n category filters above to search for another selection.\n

\n
\n );\n\nconst renderRowOfResources = (type, resources) => {\n return (\n \n {resources.map((res, index) => (\n \n {type === 'mentors' && }\n {type === 'students' && }\n {type === 'judges' && }\n \n ))}\n \n );\n};\n"],"sourceRoot":""}