{"version":3,"sources":["webpack://gatsby-tailwind/./node_modules/@heroicons/react/solid/esm/ChevronRightIcon.js","webpack://gatsby-tailwind/./node_modules/@heroicons/react/solid/esm/InformationCircleIcon.js","webpack://gatsby-tailwind/./src/components/alerts/infobox.jsx","webpack://gatsby-tailwind/./src/components/headers/header1.jsx","webpack://gatsby-tailwind/./node_modules/@heroicons/react/solid/esm/ExclamationIcon.js","webpack://gatsby-tailwind/./src/components/alerts/warningbox.jsx","webpack://gatsby-tailwind/./src/components/race-template/positionChart.jsx","webpack://gatsby-tailwind/./src/components/charts/avgTimingsBar.jsx","webpack://gatsby-tailwind/./src/components/race-template/driverLapTimes.jsx","webpack://gatsby-tailwind/./src/components/race-template/constructorLapTimes.jsx","webpack://gatsby-tailwind/./node_modules/@heroicons/react/outline/esm/ExternalLinkIcon.js","webpack://gatsby-tailwind/./src/components/race-template/highlightVideos.jsx","webpack://gatsby-tailwind/./src/components/race-template/raceNotes.jsx","webpack://gatsby-tailwind/./src/components/race-template/raceResultsTable.jsx","webpack://gatsby-tailwind/./src/types/pitstopsByRaceidListType.js","webpack://gatsby-tailwind/./src/components/race-template/pitStopTable.jsx","webpack://gatsby-tailwind/./src/components/race-template/pitstopTimes.jsx","webpack://gatsby-tailwind/./node_modules/@heroicons/react/outline/esm/QuestionMarkCircleIcon.js","webpack://gatsby-tailwind/./src/components/race-template/pirelliStats.jsx","webpack://gatsby-tailwind/./node_modules/@heroicons/react/solid/esm/ChevronLeftIcon.js","webpack://gatsby-tailwind/./src/hooks/useRaceHistory.js","webpack://gatsby-tailwind/./src/components/race-template/raceHeader.jsx","webpack://gatsby-tailwind/./src/templates/race-template.jsx","webpack://gatsby-tailwind/./src/types/conAvgPitstopsByRaceidListType.js","webpack://gatsby-tailwind/./src/types/constructorType.js","webpack://gatsby-tailwind/./src/types/driverType.js","webpack://gatsby-tailwind/./src/types/raceType.js","webpack://gatsby-tailwind/./src/types/allDriAlltimeStatsListType.js","webpack://gatsby-tailwind/./src/types/allDriAlltimeStatsPreparedListType.js","webpack://gatsby-tailwind/./src/types/allRacesType.js","webpack://gatsby-tailwind/./src/types/circuitType.js","webpack://gatsby-tailwind/./src/types/conAvgLapt70PType.js","webpack://gatsby-tailwind/./src/types/conAvgLaptType.js","webpack://gatsby-tailwind/./src/types/driAvgLapt70PType.js","webpack://gatsby-tailwind/./src/types/driAvgLaptType.js","webpack://gatsby-tailwind/./src/types/driverMapType.js","webpack://gatsby-tailwind/./src/types/driverStandingsType.js","webpack://gatsby-tailwind/./src/types/lapTimesType.js","webpack://gatsby-tailwind/./src/types/raceResultsType.js","webpack://gatsby-tailwind/./src/types/seasonDriverMainConsType.js","webpack://gatsby-tailwind/./src/types/teamStandingsType.js"],"names":["ForwardRef","props","svgRef","Object","assign","xmlns","viewBox","fill","ref","fillRule","d","clipRule","Infobox","text","link","className","aria-hidden","href","defaultProps","Header1","children","dataId","data-id","title","getColor","obj","getTeamColor","constructor_name","tooltip","style","background","serie","color","id","laptimesByRaceidList","driverMap","resultsByRaceidList","laps","map","l","lap","data","arr","relevantLaps","drivers","boxStartIdx","Math","max","r","parseInt","grid","forEach","res","push","driverByDriverid","driverDisplayName","display","driverid","constructor","y","x","curr","includes","index","findIndex","e","position","i","length","nextLapEntry","getChartData","count","amount","step","last","round","getLaps","height","margin","top","right","bottom","left","colors","lineWidth","activeLineWidth","inactiveLineWidth","inactiveOpacity","pointSize","activePointSize","inactivePointSize","pointColor","theme","pointBorderWidth","activePointBorderWidth","pointBorderColor","from","axisTop","tickSize","tickPadding","tickRotation","legend","legendPosition","legendOffset","axisRight","axisBottom","axisLeft","getAria","AvgTimingsBar","times","desc","annotations","sort","a","b","time","onlyTimes","t","chartMinTime","min","toFixed","key","repeat","layout","minValue","keys","indexBy","padding","valueScale","type","indexScale","borderColor","modifiers","labelSkipWidth","labelSkipHeight","labelTextColor","animate","motionStiffness","motionDamping","role","ariaLabel","barAriaLabel","AVG","MEDIAN","TOP70","driAvgLaptsByRaceidList","driAvgLapt70PsByRaceidList","avgTimes","displayName","parseFloat","avglaptimes","medianTimes","medianlaptimes","top70Times","relevantLapCount","tabs","tabId","tabName","component","defaultTabId","conAvgLaptsByRaceidList","conAvgLapt70PsByRaceidList","constructorTeamByConstructorid","name","mediumTimes","strokeWidth","stroke","strokeLinecap","strokeLinejoin","HighlightLink","HighlightVideos","highlightObject","highlightlinks","JSON","parse","err","console","warn","qualifyingHighlights","sprintHighlights","raceHighlights","NoteLink","hostname","URL","maxWidth","target","rel","RaceNotes","notesArray","racenotes","note","refs","scope","resultid","fastestlap","points","statusByStatusid","finishTime","fastestlapspeed","fastestlaptime","forename","surname","number","teamName","status","PropTypes","nodeId","driverType","milliseconds","stop","isRequired","NO_FILL","FILL","SortedHeaderRenderer","column","isSorted","isSortedDesc","render","headerClasses","showAt","pitstopsByRaceidList","seasondrivermainconsByYearList","columns","useMemo","Header","accessor","Cell","value","driverId","useTable","useSortBy","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","headerGroup","getHeaderGroupProps","headers","getHeaderProps","getSortByToggleProps","row","getRowProps","cells","cell","getCellProps","conAvgPitstopsByRaceidList","conTimes","avgpittimes","arrayWithValues","TyreLogo","num","cx","cy","TyreSelection","startcompound","compoundarr","grandPrix","year","tyres","Array","tyreNum","sentence","tyreArr","tyreSelection","tyre","join","getDesc","TyreRegulations","eoscamperlimitfront","eoscamperlimitrear","minstartingpressurefront","minstartingpressurerear","getBlockColor","CharacteristicsBlock","blocks","_","pirellisource","traction","braking","lateral","tyrestress","trackevolution","asphaltgrip","asphaltabrasion","downforce","seasonMap","Map","useStaticQuery","postgres","allSeasons","nodes","season","set","getPreviousAndNextRaceLink","raceid","ret","previous","next","has","error","racesByYearList","get","idx","raceSlug","linkClasses","disabledButtonClasses","RaceNavigationButtons","useRaceHistory","Link","to","disabled","ChevronRightIcon","pageTitle","aria-label","raceByRaceid","seasonByYear","circuitByCircuitid","url","date","country","location","curcuit","circuitref","getDriverMap","description","one","meta","find","keywords","content","metaTags","dateLocal","window","Date","toLocaleDateString","noMarginSides","noMarginBottom","noMarginTop","dateTime","constructorType","poles","second","thirds","toptens","undertens","wins","json","raceType","circuitid","circuitstatByCircuitid","firstrace","lastrace","racecount","racecountrank","mostconstructorpodiums","mostcostructorwins","mostdriverpodiums","mostdriverstarts","mostdriverwins","constructorid"],"mappings":"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","file":"component---src-templates-race-template-jsx-97ecc00aa55e75ce411a.js","sourcesContent":["import * as React from \"react\";\n\nfunction ChevronRightIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\",\n clipRule: \"evenodd\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(ChevronRightIcon);\nexport default ForwardRef;","import * as React from \"react\";\n\nfunction InformationCircleIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\",\n clipRule: \"evenodd\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(InformationCircleIcon);\nexport default ForwardRef;","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { InformationCircleIcon } from '@heroicons/react/solid';\n\nconst Infobox = ({ text, link }) => (\n
\n
\n
\n \n
\n
\n

{text}

\n {link && (\n

\n \n Details \n \n

\n )}\n
\n
\n
\n);\n\nInfobox.propTypes = {\n text: PropTypes.string.isRequired,\n link: PropTypes.string,\n};\n\nInfobox.defaultProps = {\n link: null,\n};\n\nexport default Infobox;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst Header1 = ({ children, dataId }) => (\n \n {children}\n \n);\n\nHeader1.propTypes = {\n children: PropTypes.node.isRequired,\n dataId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nHeader1.defaultProps = {\n dataId: null,\n};\n\nexport default Header1;\n","import * as React from \"react\";\n\nfunction ExclamationIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\",\n clipRule: \"evenodd\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(ExclamationIcon);\nexport default ForwardRef;","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { ExclamationIcon } from '@heroicons/react/solid';\n\nconst Warningbox = ({ text, title }) => (\n
\n
\n
\n \n
\n
\n

{title}

\n
\n

{text}

\n
\n
\n
\n
\n);\n\nWarningbox.propTypes = {\n text: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nexport default Warningbox;\n","import React from 'react';\nimport { ResponsiveBump } from '@nivo/bump';\nimport PropTypes from 'prop-types';\nimport { driverMapType, lapTimesType, raceResultsType } from '../../types';\nimport getTeamColor from '../../util/f1TeamColors';\n\nfunction getLaps(count, amount) {\n let laps = [0, 1];\n const step = count / amount;\n\n for (let i = 1; i < amount; i += 1) {\n const last = laps[laps.length - 1];\n laps.push(last + step);\n }\n\n laps = laps.map((l) => Math.round(l));\n\n // add one before last lap for lapped drivers\n if (!laps.includes(count - 1)) {\n laps.push(count - 1);\n }\n\n // add last lap\n if (!laps.includes(count)) {\n laps.push(count);\n }\n\n return laps;\n}\n\nfunction getChartData(arr, relevantLaps, driverMap, resultsByRaceidList) {\n const drivers = [];\n const data = [];\n\n const highestGrid = Math.max(\n ...resultsByRaceidList.map((r) => parseInt(r.grid))\n );\n let boxStartIdx = highestGrid;\n\n // add starting position as lap 0\n resultsByRaceidList.forEach((res) => {\n drivers.push(res.driverByDriverid.driverDisplayName);\n\n const display = res.driverByDriverid.driverDisplayName;\n const { driverid } = res.driverByDriverid;\n let { grid } = res;\n\n if (parseInt(grid) === 0) {\n boxStartIdx += 1;\n grid = boxStartIdx;\n }\n\n data.push({\n id: display,\n constructor_name: driverMap[driverid].constructor,\n data: [{ y: parseInt(grid), x: 0 }],\n });\n });\n\n arr.forEach((curr) => {\n const { driverDisplayName } = curr.driverByDriverid;\n\n if (!relevantLaps.includes(parseInt(curr.lap))) return;\n\n const index = data.findIndex((e) => e.id === driverDisplayName);\n data[index].data.push({ y: curr.position, x: curr.lap });\n });\n\n // set last pos of retired drivers to null\n // otherwise e. g. first one crashes halfway -> chart still same pos because no data update\n for (let i = 0; i < data.length; i += 1) {\n if (data[i].data.length < relevantLaps.length) {\n const nextLapEntry = relevantLaps[data[i].data.length];\n if (nextLapEntry) {\n data[i].data.push({\n y: null,\n x: nextLapEntry,\n });\n }\n }\n }\n\n return data;\n}\n\nfunction getColor(obj) {\n return getTeamColor(obj.constructor_name);\n}\n\nfunction tooltip(obj) {\n return (\n
\n \n {`${obj.serie.id} (${obj.serie.constructor_name})`}\n
\n );\n}\n\nconst PositionChart = ({\n laptimesByRaceidList,\n driverMap,\n resultsByRaceidList,\n}) => {\n const laps = laptimesByRaceidList.map((l) => l.lap);\n const relevantLaps = getLaps(Math.max(...laps), 12);\n\n const data = getChartData(\n laptimesByRaceidList,\n relevantLaps,\n driverMap,\n resultsByRaceidList\n );\n\n return (\n
\n \n
\n );\n};\n\nPositionChart.propTypes = {\n laptimesByRaceidList: lapTimesType.isRequired,\n driverMap: driverMapType.isRequired,\n resultsByRaceidList: PropTypes.arrayOf(raceResultsType).isRequired,\n};\n\nexport default PositionChart;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { ResponsiveBar } from '@nivo/bar';\nimport getTeamColor from '../../util/f1TeamColors';\n\nfunction getColor(obj) {\n return getTeamColor(obj.data.constructor);\n}\n\nfunction getAria(obj) {\n return obj.data.tooltip;\n}\n\nconst AvgTimingsBar = ({ times, desc, annotations, title }) => {\n const data = times.sort((a, b) => a.time - b.time);\n\n const onlyTimes = times.map((t) => t.time);\n const chartMinTime = Math.min(...onlyTimes).toFixed(0) - 1;\n\n function tooltip(obj) {\n return (\n
\n \n {obj.data.tooltip}\n
\n );\n }\n\n return (\n
\n
\n {annotations.map((a, i) => (\n

{`${'*'.repeat(i + 1)} ${a}`}

\n ))}\n
\n
\n
\n \n
\n
{title}
\n
\n
\n );\n};\n\nAvgTimingsBar.propTypes = {\n times: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n time: PropTypes.number.isRequired,\n tooltip: PropTypes.string.isRequired,\n constructor: PropTypes.string.isRequired,\n })\n ).isRequired,\n desc: PropTypes.string.isRequired,\n annotations: PropTypes.arrayOf(PropTypes.string),\n title: PropTypes.string.isRequired,\n};\n\nAvgTimingsBar.defaultProps = {\n annotations: [],\n};\n\nexport default AvgTimingsBar;\n","import React from 'react';\nimport { driAvgLapt70PType, driAvgLaptType, driverMapType } from '../../types';\nimport TabsContainer from '../tabsContainer';\nimport AvgTimingsBar from '../charts/avgTimingsBar';\n\nconst AVG = 'Average Lap Times';\nconst MEDIAN = 'Median Lap Times';\nconst TOP70 = 'Average Top 70% Laps';\n\nconst DriverLapTimes = ({\n driAvgLaptsByRaceidList,\n driAvgLapt70PsByRaceidList,\n driverMap,\n}) => {\n const avgTimes = driAvgLaptsByRaceidList.map((time) => ({\n id: driverMap[time.driverid].displayName,\n time: parseFloat(time.avglaptimes),\n tooltip: `${driverMap[time.driverid].displayName} (${\n driverMap[time.driverid].constructor\n }): ${time.avglaptimes} seconds`,\n constructor: driverMap[time.driverid].constructor,\n }));\n\n const medianTimes = driAvgLaptsByRaceidList.map((time) => ({\n id: driverMap[time.driverid].displayName,\n time: parseFloat(time.medianlaptimes),\n tooltip: `${driverMap[time.driverid].displayName} (${\n driverMap[time.driverid].constructor\n }): ${time.medianlaptimes} seconds`,\n constructor: driverMap[time.driverid].constructor,\n }));\n\n const top70Times = driAvgLapt70PsByRaceidList.map((time) => ({\n id: driverMap[time.driverid].displayName,\n time: parseFloat(time.avglaptimes),\n tooltip: `${driverMap[time.driverid].displayName} (${\n driverMap[time.driverid].constructor\n }): ${time.avglaptimes} seconds`,\n constructor: driverMap[time.driverid].constructor,\n }));\n\n const relevantLapCount =\n driAvgLapt70PsByRaceidList &&\n driAvgLapt70PsByRaceidList[0] &&\n driAvgLapt70PsByRaceidList[0].relevantLapCount\n ? driAvgLapt70PsByRaceidList[0].relevantLapCount\n : '?';\n\n const tabs = [\n {\n tabId: 1,\n tabName: AVG,\n component: (\n \n ),\n },\n {\n tabId: 2,\n tabName: MEDIAN,\n component: (\n \n ),\n },\n {\n tabId: 3,\n tabName: TOP70,\n component: (\n \n ),\n },\n ];\n\n return ;\n};\n\nDriverLapTimes.propTypes = {\n driAvgLapt70PsByRaceidList: driAvgLapt70PType.isRequired,\n driAvgLaptsByRaceidList: driAvgLaptType.isRequired,\n driverMap: driverMapType.isRequired,\n};\n\nexport default DriverLapTimes;\n","import React from 'react';\nimport { conAvgLapt70PType, conAvgLaptType } from '../../types';\nimport TabsContainer from '../tabsContainer';\nimport AvgTimingsBar from '../charts/avgTimingsBar';\n\nconst AVG = 'Average Lap Times';\nconst MEDIAN = 'Median Lap Times';\nconst TOP70 = 'Average Top 70% Laps';\n\nconst ConstructorLapTimes = ({\n conAvgLaptsByRaceidList,\n conAvgLapt70PsByRaceidList,\n}) => {\n const avgTimes = conAvgLaptsByRaceidList.map((time) => ({\n id: time.constructorTeamByConstructorid.name,\n time: parseFloat(time.avglaptimes),\n tooltip: `${time.constructorTeamByConstructorid.name}: ${time.avglaptimes} seconds`,\n constructor: time.constructorTeamByConstructorid.name,\n }));\n\n const mediumTimes = conAvgLaptsByRaceidList.map((time) => ({\n id: time.constructorTeamByConstructorid.name,\n time: parseFloat(time.medianlaptimes),\n tooltip: `${time.constructorTeamByConstructorid.name}: ${time.medianlaptimes} seconds`,\n constructor: time.constructorTeamByConstructorid.name,\n }));\n\n const top70Times = conAvgLapt70PsByRaceidList.map((time) => ({\n id: time.constructorTeamByConstructorid.name,\n time: parseFloat(time.avglaptimes),\n tooltip: `${time.constructorTeamByConstructorid.name}: ${time.avglaptimes} seconds`,\n constructor: time.constructorTeamByConstructorid.name,\n }));\n\n const relevantLapCount =\n conAvgLapt70PsByRaceidList &&\n conAvgLapt70PsByRaceidList[0] &&\n conAvgLapt70PsByRaceidList[0].relevantLapCount\n ? conAvgLapt70PsByRaceidList[0].relevantLapCount\n : '?';\n\n const tabs = [\n {\n tabId: 1,\n tabName: AVG,\n component: (\n \n ),\n },\n {\n tabId: 2,\n tabName: MEDIAN,\n component: (\n \n ),\n },\n {\n tabId: 3,\n tabName: TOP70,\n component: (\n \n ),\n },\n ];\n\n return ;\n};\n\nConstructorLapTimes.propTypes = {\n conAvgLapt70PsByRaceidList: conAvgLapt70PType.isRequired,\n conAvgLaptsByRaceidList: conAvgLaptType.isRequired,\n};\n\nexport default ConstructorLapTimes;\n","import * as React from \"react\";\n\nfunction ExternalLinkIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 2,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(ExternalLinkIcon);\nexport default ForwardRef;","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { ExternalLinkIcon } from '@heroicons/react/outline';\n\nconst HighlightLink = ({ link, text }) => (\n \n \n {text}\n {' '}\n \n \n);\n\nHighlightLink.propTypes = {\n link: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n};\n\nconst HighlightVideos = ({ highlightlinks }) => {\n if (!highlightlinks) return null;\n\n let highlightObject;\n\n if (highlightlinks) {\n try {\n highlightObject = JSON.parse(highlightlinks);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(`Could not parse highlightlinks`, highlightlinks);\n return null;\n }\n }\n if (!highlightObject) return null;\n\n return (\n
\n

\n Highlights\n

\n
    \n {highlightObject.qualifyingHighlights ? (\n
  • \n \n
  • \n ) : null}\n {highlightObject.sprintHighlights ? (\n
  • \n \n
  • \n ) : null}\n {highlightObject.raceHighlights ? (\n
  • \n \n
  • \n ) : null}\n
\n
\n );\n};\n\nHighlightVideos.propTypes = {\n highlightlinks: PropTypes.string,\n};\n\nHighlightVideos.defaultProps = {\n highlightlinks: null,\n};\n\nexport default HighlightVideos;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { ExternalLinkIcon } from '@heroicons/react/outline';\n\nconst NoteLink = ({ link, title, i }) => {\n // extract website from url\n let { hostname } = new URL(link);\n\n // eslint-disable-next-line default-case\n switch (hostname) {\n case 'youtu.be':\n hostname = 'youtube.com';\n break;\n }\n\n return (\n \n {`[${i + 1}]`}\n \n {title}\n \n \n {`(${hostname})`}\n \n );\n};\n\nNoteLink.propTypes = {\n link: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n i: PropTypes.number.isRequired,\n};\n\nconst RaceNotes = ({ racenotes }) => {\n if (!racenotes) return null;\n\n let notesArray;\n\n if (racenotes) {\n try {\n notesArray = JSON.parse(racenotes);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(`Could not parse racenotes`, racenotes);\n return null;\n }\n }\n if (!notesArray || !notesArray.length || notesArray.length === 0) return null;\n\n return (\n
\n

\n Race Notes\n

\n \n
    \n {notesArray.map((note) => (\n
  • \n {note.text}\n {note.refs.map((ref, i) => (\n \n ))}\n
  • \n ))}\n
\n
\n \n );\n};\n\nRaceNotes.propTypes = {\n racenotes: PropTypes.string,\n};\n\nRaceNotes.defaultProps = {\n racenotes: null,\n};\n\nexport default RaceNotes;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { raceResultsType } from '../../types';\nimport TeamDisplay from '../teamDisplay/teamDisplay';\n\nconst RaceResultsTable = ({ resultsByRaceidList }) => (\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {resultsByRaceidList.map(\n (\n {\n resultid,\n fastestlap,\n constructorTeamByConstructorid,\n driverByDriverid,\n grid,\n laps,\n points,\n position,\n statusByStatusid,\n time: finishTime,\n fastestlapspeed,\n fastestlaptime,\n },\n i\n ) => (\n \n \n \n \n \n \n \n \n {fastestlaptime}\n \n \n \n )\n )}\n \n
\n #\n \n Driver\n \n Constructor\n \n Pts.\n \n Time\n \n Result\n \n Fastest L.\n \n Grid\n
{position}\n {driverByDriverid.forename} {driverByDriverid.surname}{' '}\n {driverByDriverid.number\n ? `(${driverByDriverid.number})`\n : null}\n \n \n {points}{finishTime}\n {statusByStatusid.status}\n {grid}
\n
\n
\n
\n);\n\nRaceResultsTable.propTypes = {\n resultsByRaceidList: PropTypes.arrayOf(raceResultsType).isRequired,\n};\n\nexport default RaceResultsTable;\n","import PropTypes from 'prop-types';\nimport driverType from './driverType';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n nodeId: PropTypes.string,\n driverByDriverid: driverType.isRequired,\n lap: PropTypes.string.isRequired,\n milliseconds: PropTypes.string.isRequired,\n stop: PropTypes.string.isRequired,\n }).isRequired\n);\n","/* eslint-disable react/prop-types */\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\nimport { useSortBy, useTable } from 'react-table';\nimport { seasonDriverMainConsType } from '../../types';\nimport pitstopsByRaceidListType from '../../types/pitstopsByRaceidListType';\nimport DriverTeamDisplay from '../teamDisplay/driverTeamDisplay';\n\nconst NO_FILL = `#D1D5DB`;\nconst FILL = `#374151`;\n\nconst SortedHeaderRenderer = ({ column }) => {\n let top = NO_FILL;\n let bottom = NO_FILL;\n\n if (column.isSorted && column.isSortedDesc) {\n bottom = FILL;\n } else if (column.isSorted) {\n top = FILL;\n }\n\n return (\n
\n {column.render('Header')}\n \n \n \n \n
\n );\n};\n\nconst cellClasses = (column) => {\n if (column.showAt) {\n return `hidden ${column.showAt}:c-table-cell`;\n }\n return 'c-table-cell';\n};\n\nconst headerClasses = (column) => {\n if (column.showAt) {\n return `hidden ${column.showAt}:c-table-heading`;\n }\n return 'c-table-heading';\n};\n\nconst PitStopTable = ({\n pitstopsByRaceidList,\n seasondrivermainconsByYearList,\n}) => {\n const columns = useMemo(\n () => [\n {\n Header: 'Driver',\n accessor: 'driverByDriverid.driverDisplayName',\n },\n {\n Header: 'Constructor',\n accessor: 'driverByDriverid.driverid',\n Cell: ({ value }) => (\n \n ),\n showAt: 'lg',\n },\n {\n Header: 'Lap',\n accessor: 'lap',\n showAt: 'lg',\n },\n {\n Header: 'Stop',\n accessor: 'stop',\n showAt: 'md',\n },\n {\n Header: 'Time',\n accessor: 'milliseconds',\n Cell: ({ value }) => <> {(parseInt(value) / 1000).toFixed(2)},\n },\n ],\n [seasondrivermainconsByYearList]\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =\n useTable({ columns, data: pitstopsByRaceidList }, useSortBy);\n\n return (\n
\n
\n \n \n {headerGroups.map((headerGroup) => (\n \n {headerGroup.headers.map((column) => (\n \n \n \n ))}\n \n ))}\n \n \n {rows.map((row, i) => {\n prepareRow(row);\n return (\n \n {row.cells.map((cell) => (\n \n {cell.render('Cell')}\n \n ))}\n \n );\n })}\n \n \n
\n
\n );\n};\n\nPitStopTable.propTypes = {\n pitstopsByRaceidList: pitstopsByRaceidListType.isRequired,\n seasondrivermainconsByYearList: PropTypes.arrayOf(\n seasonDriverMainConsType.isRequired\n ).isRequired,\n};\n\nexport default PitStopTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n conAvgPitstopsByRaceidListType,\n seasonDriverMainConsType,\n} from '../../types';\nimport pitstopsByRaceidListType from '../../types/pitstopsByRaceidListType';\nimport arrayWithValues from '../../util/arrayWithValues';\nimport AvgTimingsBar from '../charts/avgTimingsBar';\nimport { LinkableH2 } from '../headers';\nimport TabsContainer from '../tabsContainer';\nimport PitStopTable from './pitStopTable';\n\nconst PitStopTimes = ({\n conAvgPitstopsByRaceidList,\n pitstopsByRaceidList,\n seasondrivermainconsByYearList,\n}) => {\n const conTimes = conAvgPitstopsByRaceidList.map(\n ({ avgpittimes, constructorTeamByConstructorid }) => ({\n id: constructorTeamByConstructorid?.name,\n time: avgpittimes,\n constructor: constructorTeamByConstructorid?.name,\n tooltip: `${constructorTeamByConstructorid?.name}: ${avgpittimes} seconds`,\n })\n );\n const tabs = [\n {\n tabId: 1,\n tabName: 'Average Constructor Pitstops',\n component: (\n \n ),\n },\n {\n tabId: 2,\n tabName: 'Pitstop List',\n component: (\n \n ),\n },\n ];\n\n return arrayWithValues(conAvgPitstopsByRaceidList) ? (\n
\n Pitstop Times\n \n
\n ) : null;\n};\n\nPitStopTimes.propTypes = {\n conAvgPitstopsByRaceidList: conAvgPitstopsByRaceidListType.isRequired,\n pitstopsByRaceidList: pitstopsByRaceidListType.isRequired,\n seasondrivermainconsByYearList: PropTypes.arrayOf(\n seasonDriverMainConsType.isRequired\n ).isRequired,\n};\n\nexport default PitStopTimes;\n","import * as React from \"react\";\n\nfunction QuestionMarkCircleIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 2,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(QuestionMarkCircleIcon);\nexport default ForwardRef;","/* eslint-disable react/prop-types */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { QuestionMarkCircleIcon } from '@heroicons/react/outline';\n\nconst TyreLogo = ({ num }) => {\n let color;\n\n switch (num) {\n case 1:\n color = '#FFFDFE';\n break;\n case 2:\n color = '#FFF267';\n break;\n case 3:\n color = '#FF4E3F';\n break;\n default:\n // eslint-disable-next-line no-console\n console.warn('Unhandeled TyreLogo =>', num);\n }\n\n return (\n
\n \n \n \n \n \n \n
\n );\n};\n\nfunction getDesc({ tyreArr, grandPrix, year }) {\n const tyreSelection = [];\n tyreArr.forEach((tyre, i) => {\n if (tyre) tyreSelection.push(i + 1);\n });\n const text = tyreSelection.join('-');\n\n switch (text) {\n case '1-2-3':\n return `The hardest compound combination of C1, C2 and C3 was selected for the ${grandPrix} ${year}.`;\n case '2-3-4':\n return `The medium compound combination of C2, C3, C4 was selected for the ${grandPrix} ${year}.`;\n case '3-4-5':\n return `The softest compound combination of C3, C4, C5 was selected for the ${grandPrix} ${year}.`;\n case '2-3-5':\n return `The C4 compound was skipped in favor of C5 in the ${grandPrix} ${year}.`;\n default:\n return null;\n }\n}\n\nconst TyreSelection = ({ startcompound, compoundarr, grandPrix, year }) => {\n if (!startcompound && !compoundarr) return No data available!;\n\n const tyres = new Array(5).fill(null);\n\n if (startcompound) {\n for (let i = 0; i < 3; i += 1) {\n tyres[startcompound - 1 + i] = i + 1;\n }\n } else {\n const cpArr = JSON.parse(compoundarr);\n cpArr.forEach((tyreNum, i) => {\n tyres[tyreNum - 1] = i + 1;\n });\n }\n\n const sentence = getDesc({ tyreArr: tyres, grandPrix, year });\n\n return (\n <>\n

\n Tyre selection\n

\n
\n {tyres.map((tyre, i) => (\n // eslint-disable-next-line react/no-array-index-key\n
\n
\n
\n {`C${i + 1}`}\n
\n
\n {tyre ? (\n \n ) : (\n -\n )}\n
\n
\n
\n ))}\n
\n
\n
{sentence}
\n
\n
\n \n
\n

\n Out of five possible tyre compounds Pirelli selects a set of three\n for each race weekend. C1 is the hardest available tyre and C5 is\n the softest one. Intermediate and wet tyres are the same each\n weekend. The hardest tyre in a reace is always coloured white, the\n middle one yellow and the softest one red.\n

\n
\n
\n \n );\n};\n\nconst TyreRegulations = ({\n eoscamperlimitfront,\n eoscamperlimitrear,\n minstartingpressurefront,\n minstartingpressurerear,\n}) => (\n <>\n

\n Tyre regulations\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Category\n \n Front\n \n Rear\n
Min. Starting Pressures\n {minstartingpressurefront.toFixed(1)} psi\n \n {minstartingpressurerear.toFixed(1)} psi\n
EOS Camber Limit\n {eoscamperlimitfront.toFixed(2)}°\n \n {eoscamperlimitrear.toFixed(2)}°\n
\n \n);\n\nfunction getBlockColor(i, value) {\n if (i + 1 > value) {\n return '#ebf0f5';\n }\n\n switch (i + 1) {\n case 1:\n return '#67E8F9';\n case 2:\n return '#38BDF8';\n case 3:\n return '#3B82F6';\n case 4:\n return '#4F46E5';\n case 5:\n return '#6D28D9';\n case 6:\n return '#8928d9';\n default:\n return null;\n }\n}\n\nconst CharacteristicsBlock = ({ name, value }) => {\n const blocks = new Array(5).fill(null);\n\n return (\n
\n
\n
\n

\n {name}\n

\n
\n
\n {value}\n / 5\n
\n
\n
\n {blocks.map((_, i) => (\n \n ))}\n
\n
\n );\n};\n\nconst PirelliStats = ({ data, grandPrix, year }) => {\n const {\n pirellisource,\n startcompound,\n compoundarr,\n traction,\n braking,\n lateral,\n tyrestress,\n trackevolution,\n asphaltgrip,\n asphaltabrasion,\n downforce,\n eoscamperlimitfront,\n eoscamperlimitrear,\n minstartingpressurefront,\n minstartingpressurerear,\n } = data;\n\n return (\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n

\n Pirelli Track Characteristics\n

\n \n \n \n \n {trackevolution && (\n \n )}\n \n \n \n
\n \n
\n );\n};\n\nPirelliStats.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n data: PropTypes.object.isRequired,\n grandPrix: PropTypes.string.isRequired,\n year: PropTypes.string.isRequired,\n};\n\nexport default PirelliStats;\n","import * as React from \"react\";\n\nfunction ChevronLeftIcon(props, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n ref: svgRef\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\",\n clipRule: \"evenodd\"\n }));\n}\n\nvar ForwardRef = React.forwardRef(ChevronLeftIcon);\nexport default ForwardRef;","import { graphql, useStaticQuery } from 'gatsby';\n\nconst seasonMap = new Map();\n\nconst useRaceHistory = () => {\n const data = useStaticQuery(graphql`\n {\n postgres {\n allSeasons {\n nodes {\n year\n racesByYearList(orderBy: DATE_ASC) {\n raceid\n year\n round\n time\n raceSlug\n name\n }\n }\n }\n }\n }\n `);\n\n data.postgres.allSeasons.nodes.forEach((season) => {\n seasonMap.set(season.year, season);\n });\n\n const getPreviousAndNextRaceLink = ({ year, raceid }) => {\n const ret = { previous: null, next: null };\n if (!year) return ret;\n\n if (!seasonMap.has(year)) {\n console.error(`useRaceHistory: cannot season ${year}`);\n return ret;\n }\n const { racesByYearList } = seasonMap.get(year);\n const idx = racesByYearList.findIndex((r) => r.raceid === raceid);\n\n if (!idx && idx !== 0) {\n console.error(\n `useRaceHistory: cannot find raceid ${raceid} in season ${year}`,\n racesByYearList\n );\n return ret;\n }\n\n if (idx !== 0) {\n ret.previous = `/races/${racesByYearList[idx - 1].raceSlug}`;\n }\n\n if (idx !== racesByYearList.length - 1) {\n ret.next = `/races/${racesByYearList[idx + 1].raceSlug}`;\n }\n\n return ret;\n };\n\n return { getPreviousAndNextRaceLink };\n};\n\nexport default useRaceHistory;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/solid';\nimport { Link } from 'gatsby';\nimport useRaceHistory from '../../hooks/useRaceHistory';\n\nconst linkClasses =\n 'rounded-md border border-slate-300/75 px-3 py-2 text-slate-500 hover:bg-slate-100 focus:outline-none focus:ring-1 focus:ring-blue-500 ';\nconst disabledButtonClasses =\n 'cursor-not-allowed rounded-md border border-slate-100 px-3 py-2 text-slate-200';\n\nconst RaceNavigationButtons = ({ year, raceid }) => {\n const { getPreviousAndNextRaceLink } = useRaceHistory();\n const { previous, next } = getPreviousAndNextRaceLink({\n year,\n raceid,\n });\n\n return (\n
\n {previous ? (\n \n \n \n ) : (\n \n )}\n {next ? (\n \n \n \n ) : (\n \n )}\n
\n );\n};\n\nRaceNavigationButtons.propTypes = {\n year: PropTypes.string.isRequired,\n raceid: PropTypes.string.isRequired,\n};\n\nconst RaceHeader = ({ pageTitle, year, raceid }) => (\n \n);\n\nRaceHeader.propTypes = {\n pageTitle: PropTypes.string.isRequired,\n year: PropTypes.string.isRequired,\n raceid: PropTypes.string.isRequired,\n};\n\nexport default RaceHeader;\n","import { graphql, Link } from 'gatsby';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport Infobox from '../components/alerts/infobox';\nimport Warningbox from '../components/alerts/warningbox';\nimport Layout from '../components/layout';\nimport PositionChart from '../components/race-template/positionChart';\nimport DriverLapTimes from '../components/race-template/driverLapTimes';\nimport SEO from '../components/seo';\nimport {\n lapTimesType,\n raceResultsType,\n conAvgLapt70PType,\n conAvgLaptType,\n driAvgLapt70PType,\n driAvgLaptType,\n seasonDriverMainConsType,\n} from '../types';\nimport ConstructorLapTimes from '../components/race-template/constructorLapTimes';\nimport conAvgPitstopsByRaceidListType from '../types/conAvgPitstopsByRaceidListType';\nimport HighlightVideos from '../components/race-template/highlightVideos';\nimport RaceNotes from '../components/race-template/raceNotes';\nimport { Header1, LinkableH2 } from '../components/headers';\nimport RaceResultsTable from '../components/race-template/raceResultsTable';\nimport arrayWithValues from '../util/arrayWithValues';\nimport PitStopTimes from '../components/race-template/pitstopTimes';\nimport pitstopsByRaceidListType from '../types/pitstopsByRaceidListType';\nimport PirelliStats from '../components/race-template/pirelliStats';\nimport RaceHeader from '../components/race-template/raceHeader';\n\nexport const query = graphql`\n query raceData($raceid: PostGraphile_BigInt!, $year: PostGraphile_BigInt!) {\n postgres {\n raceByRaceid(raceid: $raceid) {\n circuitByCircuitid {\n country\n location\n name\n circuitref\n }\n round\n raceid\n time\n url\n year\n name\n date\n highlightlinks\n racenotes\n laptimesByRaceidList {\n lap\n milliseconds\n position\n time\n driverByDriverid {\n driverDisplayName\n driverid\n }\n }\n driAvgLapt70PsByRaceidList {\n avglaptimes\n relevantLapCount\n driverid\n }\n driAvgLaptsByRaceidList {\n avglaptimes\n medianlaptimes\n driverid\n }\n conAvgLapt70PsByRaceidList {\n relevantLapCount\n avglaptimes\n constructorTeamByConstructorid {\n name\n }\n }\n conAvgLaptsByRaceidList {\n avglaptimes\n medianlaptimes\n constructorTeamByConstructorid {\n name\n }\n }\n resultsByRaceidList {\n resultid\n fastestlap\n constructorTeamByConstructorid {\n name\n }\n driverByDriverid {\n forename\n surname\n number\n driverDisplayName\n driverid\n }\n grid\n laps\n points\n number\n position\n statusByStatusid {\n status\n }\n time\n fastestlapspeed\n fastestlaptime\n }\n conAvgPitstopsByRaceidList {\n avgpittimes\n constructorTeamByConstructorid {\n name\n }\n }\n pitstopsByRaceidList(orderBy: TIME_ASC) {\n nodeId\n lap\n milliseconds\n stop\n driverByDriverid {\n driverid\n driverDisplayName\n }\n }\n pirellisource\n startcompound\n compoundarr\n traction\n braking\n lateral\n tyrestress\n trackevolution\n asphaltgrip\n asphaltabrasion\n downforce\n eoscamperlimitfront\n eoscamperlimitrear\n minstartingpressurefront\n minstartingpressurerear\n }\n seasonByYear(year: $year) {\n seasondrivermainconsByYearList {\n year\n constructorTeamByConstructorid {\n name\n }\n driverid\n driverByDriverid {\n driverDisplayName\n }\n }\n }\n }\n }\n`;\n\nconst metaTags = ({ resultsByRaceidList, country, year, name }) => {\n const meta = [];\n let description;\n let one;\n\n // description\n if (arrayWithValues(resultsByRaceidList)) {\n one = resultsByRaceidList.find((r) => parseInt(r.position) === 1)\n ?.driverByDriverid?.driverDisplayName;\n const two = resultsByRaceidList.find((r) => parseInt(r.position) === 2)\n ?.driverByDriverid?.driverDisplayName;\n const third = resultsByRaceidList.find((r) => parseInt(r.position) === 3)\n ?.driverByDriverid?.driverDisplayName;\n description = `Results of the race in ${country}: 1st ${one}, 2nd: ${two}, 3rd ${third}`;\n } else {\n description = `Details of the upcoming race in ${country}`;\n }\n\n // keywords\n const keywords = {\n name: 'keywords',\n content: `Race, ${name}, ${country}, ${year}`,\n };\n if (one) {\n keywords.content += `, ${one}`;\n }\n meta.push(keywords);\n\n return { meta, description };\n};\n\nconst getDriverMap = (resultsByRaceidList) => {\n const map = {};\n\n resultsByRaceidList.forEach((res) => {\n map[res.driverByDriverid.driverid] = {\n constructor: res.constructorTeamByConstructorid.name,\n forename: res.driverByDriverid.forename,\n surname: res.driverByDriverid.surname,\n displayName: res.driverByDriverid.driverDisplayName,\n number: res.driverByDriverid.number,\n };\n });\n\n return map;\n};\n\nconst RaceTemplate = ({ data }) => {\n const { raceByRaceid, seasonByYear } = data.postgres;\n const { seasondrivermainconsByYearList } = seasonByYear;\n\n const {\n circuitByCircuitid,\n raceid,\n url,\n year,\n name,\n date,\n laptimesByRaceidList,\n driAvgLapt70PsByRaceidList,\n driAvgLaptsByRaceidList,\n conAvgLapt70PsByRaceidList,\n conAvgLaptsByRaceidList,\n resultsByRaceidList,\n highlightlinks,\n racenotes,\n conAvgPitstopsByRaceidList,\n pitstopsByRaceidList,\n pirellisource,\n startcompound,\n compoundarr,\n traction,\n braking,\n lateral,\n tyrestress,\n trackevolution,\n asphaltgrip,\n asphaltabrasion,\n downforce,\n eoscamperlimitfront,\n eoscamperlimitrear,\n minstartingpressurefront,\n minstartingpressurerear,\n } = raceByRaceid;\n\n const { country, location, name: curcuit, circuitref } = circuitByCircuitid;\n\n const driverMap = getDriverMap(resultsByRaceidList);\n\n const pageTitle = `${name} (${year})`;\n\n const { meta, description } = metaTags({\n resultsByRaceidList,\n country,\n year,\n name,\n });\n\n const dateLocal =\n typeof window !== 'undefined' ? new Date(date).toLocaleDateString() : date;\n\n return (\n \n \n \n
\n {pageTitle}\n
\n Date: \n \n
\n
\n Track: \n \n {curcuit}\n \n \n {' '}\n - {location} - {country}\n \n
\n \n
\n \n
\n
\n Race Results\n \n \n Season overview\n \n
\n \n \n
\n
\n {resultsByRaceidList && resultsByRaceidList.length > 0 ? (\n
\n
\n {laptimesByRaceidList && laptimesByRaceidList.length > 0 ? (\n <>\n Positions\n \n \n ) : null}\n
\n {driAvgLaptsByRaceidList && driAvgLaptsByRaceidList.length > 0 ? (\n
\n Driver Lap Time Statistics\n \n
\n ) : null}\n {conAvgLaptsByRaceidList && conAvgLaptsByRaceidList.length > 0 ? (\n
\n Constructor Lap Time Statistics\n \n
\n ) : null}\n \n
\n ) : (\n
\n \n
\n )}\n {pirellisource ? (\n
\n Tyre Usage\n \n
\n ) : null}\n
\n
\n );\n};\n\nRaceTemplate.propTypes = {\n data: PropTypes.shape({\n postgres: PropTypes.shape({\n raceByRaceid: PropTypes.shape({\n circuitByCircuitid: PropTypes.shape({\n country: PropTypes.string.isRequired,\n location: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n circuitref: PropTypes.string.isRequired,\n }).isRequired,\n conAvgLapt70PsByRaceidList: conAvgLapt70PType.isRequired,\n conAvgLaptsByRaceidList: conAvgLaptType.isRequired,\n date: PropTypes.string.isRequired,\n driAvgLapt70PsByRaceidList: driAvgLapt70PType.isRequired,\n driAvgLaptsByRaceidList: driAvgLaptType.isRequired,\n laptimesByRaceidList: lapTimesType.isRequired,\n name: PropTypes.string.isRequired,\n raceid: PropTypes.string.isRequired,\n resultsByRaceidList: PropTypes.arrayOf(raceResultsType).isRequired,\n round: PropTypes.string.isRequired,\n time: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n year: PropTypes.string.isRequired,\n highlightlinks: PropTypes.string,\n racenotes: PropTypes.string,\n conAvgPitstopsByRaceidList: conAvgPitstopsByRaceidListType.isRequired,\n pitstopsByRaceidList: pitstopsByRaceidListType.isRequired,\n pirellisource: PropTypes.string,\n startcompound: PropTypes.number,\n compoundarr: PropTypes.string,\n traction: PropTypes.number,\n braking: PropTypes.number,\n lateral: PropTypes.number,\n tyrestress: PropTypes.number,\n trackevolution: PropTypes.number,\n asphaltgrip: PropTypes.number,\n asphaltabrasion: PropTypes.number,\n downforce: PropTypes.number,\n eoscamperlimitfront: PropTypes.number,\n eoscamperlimitrear: PropTypes.number,\n minstartingpressurefront: PropTypes.number,\n minstartingpressurerear: PropTypes.number,\n }).isRequired,\n seasonByYear: {\n seasondrivermainconsByYearList: PropTypes.arrayOf(\n seasonDriverMainConsType.isRequired\n ).isRequired,\n }.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default RaceTemplate;\n","import PropTypes from 'prop-types';\nimport constructorType from './constructorType';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n avgpittimes: PropTypes.number.isRequired,\n constructorTeamByConstructorid: constructorType,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.shape({\n name: PropTypes.string,\n});\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.shape({\n driverDisplayName: PropTypes.string,\n driverid: PropTypes.string,\n forename: PropTypes.string,\n number: PropTypes.string,\n surname: PropTypes.string,\n});\n","import PropTypes from 'prop-types';\n\nconst raceType = PropTypes.shape({\n circuitByCircuitid: PropTypes.shape({\n name: PropTypes.string.isRequired,\n country: PropTypes.string.isRequired,\n location: PropTypes.string.isRequired,\n }),\n date: PropTypes.string,\n raceid: PropTypes.string,\n name: PropTypes.string,\n round: PropTypes.string,\n year: PropTypes.string,\n});\n\nexport default raceType;\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.shape({\n driverid: PropTypes.string.isRequired,\n points: PropTypes.string,\n poles: PropTypes.string,\n second: PropTypes.string,\n thirds: PropTypes.string,\n toptens: PropTypes.string,\n undertens: PropTypes.string,\n wins: PropTypes.string,\n}).isRequired;\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.shape({\n key: PropTypes.string.isRequired,\n json: PropTypes.string.isRequired,\n}).isRequired;\n","import PropTypes from 'prop-types';\nimport raceType from './raceType';\n\nconst allRacesType = PropTypes.shape({\n nodes: PropTypes.arrayOf(raceType),\n});\n\nexport default allRacesType;\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.shape({\n circuitid: PropTypes.number,\n circuitref: PropTypes.string,\n name: PropTypes.string,\n country: PropTypes.string,\n location: PropTypes.string,\n url: PropTypes.string,\n circuitstatByCircuitid: PropTypes.shape({\n firstrace: PropTypes.string,\n lastrace: PropTypes.string,\n racecount: PropTypes.string,\n racecountrank: PropTypes.string,\n mostconstructorpodiums: PropTypes.string,\n mostcostructorwins: PropTypes.string,\n mostdriverpodiums: PropTypes.string,\n mostdriverstarts: PropTypes.string,\n mostdriverwins: PropTypes.string,\n }).isRequired,\n});\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n avglaptimes: PropTypes.number.isRequired,\n relevantLapCount: PropTypes.string.isRequired,\n constructorTeamByConstructorid: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n avglaptimes: PropTypes.number.isRequired,\n medianlaptimes: PropTypes.number.isRequired,\n constructorTeamByConstructorid: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n avglaptimes: PropTypes.number.isRequired,\n driverid: PropTypes.string.isRequired,\n relevantLapCount: PropTypes.string.isRequired,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n avglaptimes: PropTypes.number.isRequired,\n driverid: PropTypes.string.isRequired,\n medianlaptimes: PropTypes.number.isRequired,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.objectOf(\n PropTypes.shape({\n constructor: PropTypes.string.isRequired,\n forename: PropTypes.string.isRequired,\n surname: PropTypes.string.isRequired,\n displayName: PropTypes.string.isRequired,\n number: PropTypes.string.isRequired,\n })\n);\n","import PropTypes from 'prop-types';\nimport driverType from './driverType';\n\nconst driverStandingsType = PropTypes.shape({\n points: PropTypes.number.isRequired,\n wins: PropTypes.string.isRequired,\n driverid: PropTypes.string.isRequired,\n driverByDriverid: driverType.isRequired,\n});\n\nexport default driverStandingsType;\n","import PropTypes from 'prop-types';\nimport driverType from './driverType';\n\nexport default PropTypes.arrayOf(\n PropTypes.shape({\n driverByDriverid: driverType.isRequired,\n lap: PropTypes.string.isRequired,\n milliseconds: PropTypes.string.isRequired,\n position: PropTypes.string.isRequired,\n time: PropTypes.string.isRequired,\n }).isRequired\n);\n","import PropTypes from 'prop-types';\nimport driverType from './driverType';\n\nexport default PropTypes.shape({\n constructorTeamByConstructorid: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n driverByDriverid: driverType,\n fastestlap: PropTypes.string,\n fastestlapspeed: PropTypes.string,\n fastestlaptime: PropTypes.string,\n grid: PropTypes.string,\n laps: PropTypes.string,\n number: PropTypes.string,\n points: PropTypes.number,\n position: PropTypes.string,\n resultid: PropTypes.string,\n statusByStatusid: PropTypes.shape({\n status: PropTypes.string,\n }),\n time: PropTypes.string,\n});\n","import PropTypes from 'prop-types';\nimport constructorType from './constructorType';\nimport driverType from './driverType';\n\nconst seasonDriverMainConsType = PropTypes.shape({\n year: PropTypes.string,\n driverid: PropTypes.string,\n driverByDriverid: driverType,\n constructorTeamByConstructorid: constructorType,\n});\n\nexport default seasonDriverMainConsType;\n","import PropTypes from 'prop-types';\nimport constructorType from './constructorType';\n\nconst teamStandingsType = PropTypes.shape({\n points: PropTypes.number.isRequired,\n position: PropTypes.string.isRequired,\n wins: PropTypes.string.isRequired,\n constructorid: PropTypes.string.isRequired,\n constructorTeamByConstructorid: constructorType.isRequired,\n});\n\nexport default teamStandingsType;\n"],"sourceRoot":""}