{"version":3,"sources":["images/automoves-logo-black-blue.jpg","registerServiceWorker.js","helpers/urlSeriesMapping.js","resources/eventResource.js","resources/eventResultsResource.js","resources/competitorDetailsResource.js","resources/seriesDetailsResource.js","resources/eventCompetitorBestLapsResource.js","reducers/index.js","rootReducer.js","helpers/lapTimeFormatter.js","components/EventResults/CompetitorResult.js","components/EventResults/ClassResult.js","components/EventResults/EventResults.js","components/LoadingSpinner.js","components/EventResults/EventResultsContainer.js","components/Header.js","components/HeaderContainer.js","components/Layout.js","components/EventResults/EventResultsPage.js","components/SeriesDetails/EventDetails.js","components/SeriesDetails/SeasonDetails.js","components/SeriesDetails/SeriesDetails.js","components/SeriesDetails/SeriesDetailsContainer.js","components/SimpleLayout.js","components/SeriesDetails/SeriesDetailsPage.js","components/CompetitorDetails/CompetitorPersonalDetails.js","components/CompetitorDetails/CompetitorResultSummary.js","components/CompetitorDetails/CompetitorSession.js","components/CompetitorDetails/CompetitorResults.js","components/CompetitorDetails/CompetitorDetailsContainer.js","components/CompetitorDetails/CompetitorDetailsPage.js","components/EventOverallTimes/EventOverallTimes.js","components/EventOverallTimes/EventOverallTimesContainer.js","components/EventOverallTimes/EventOverallTimesPage.js","components/404.js","routes/RecentEventRoute.js","Router.js","index.js"],"names":["module","exports","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","catch","error","urlSeriesMappingConfig","getSeriesId","resource","getCurrentEvent","seriesId","fetch","response","json","currentEvent","Promise","resolve","getEvent","eventId","getEventResults","classShortCode","eventResults","getCompetitorDetails","competitorId","competitorDetails","getSeriesDetails","seriesDetails","getEventCompetitorBestLaps","eventCompetitorBestLaps","setSelectedEventIdAction","dispatch","type","payload","selectedEventId","selectEventDetails","event","eventDetails","selectEventResults","selectCompetitorEventDetails","selectSeriesDetails","selectEventCompetitorBestLaps","initialState","undefined","selectedClassShortCode","selectedCompetitorId","isLoading","data","rootReducer","combineReducers","action","competitorEventDetails","formatLapTime","timeInSeconds","duration","Moment","parseFloat","toFixed","utc","as","format","TextLink","styled","Link","theme","red","CompetitorResult","competitorResult","shouldDisplayPaxFields","boldStyle","fontWeight","Container","fluid","Row","Col","sm","style","fontSize","rank","s","v","getRankOrdinal","to","competitorName","carNumber","car","performanceIndex","paxFactor","classTargetTimeInSeconds","overallTargetTimeInSeconds","bordered","width","backgroundColor","competitorLaps","score","isExhibition","isPenalizedBySteward","ClassResult","classResult","border","className","map","competitorResults","key","EventResults","results","override","css","LoadingSpinner","size","color","paddingTop","sizeUnit","EventResultsContainer","connect","fetchEventResults","eventResultsResource","fetchSelectedEventResultsFailureAction","useEffect","classResults","displayPaxFieldsOnLiveTiming","bigFontStyle","Header","seasonName","eventName","trackName","trackLayoutName","eventDate","includes","href","target","rel","src","sponsorLogo","alt","textAlign","moment","Date","HeaderContainer","fetchEventDetails","getState","eventResource","fetchSelectedEventFailureAction","Layout","children","margin","maxWidth","EventResultsPage","params","EventDetails","enableLink","SeasonDetails","seasonDetails","seasonHasEvents","events","length","name","SeriesDetails","seasons","season","id","SeriesDetailsContainer","fetchSeriesDetails","seriesDetailsResource","fetchSelectedSeriesDetailsFailureAction","SimpleLayout","SeriesDetailsPage","CompetitorPersonalDetails","CompetitorResultSummary","bestTimeInSeconds","CompetitorSession","competitorSession","sessionName","sessionStatusName","sessionLaps","lap","index","statusId","lapScore","statusName","paxTime","endUtcTimestamp","local","CompetitorResults","competitorSessionsData","competitorCarNumber","competitorCar","competitorPerformanceIndex","competitorPaxFactor","sessions","sessionId","CompetitorDetailsContainer","fetchCompetitorEventDetails","competitorDetailsResource","fetchSelectedCompetitorEventDetailsFailureAction","CompetitorDetailsPage","numericSortFunction","a","b","property","Number","original","getSortBy","desc","getColumns","columns","Cell","props","row","competitorFirstName","competitorLastName","carMake","carModel","accessor","sortType","practiceBestRawTime","practiceBestPaxTime","competitionBestRawTime","competitionBestPaxTime","bestTimeScore","pop","push","Styles","div","Table","useTable","sortBy","useSortBy","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","headerGroup","getHeaderGroupProps","headers","column","getHeaderProps","getSortByToggleProps","render","isSorted","isSortedDesc","i","getRowProps","cells","cell","getCellProps","EventOverallTimes","EventOverallTimesContainer","fetchEventCompetitorBestLaps","eventCompetitorBestLapsResource","fetchSelectedEventCompetitorBestLapsFailureAction","EventOverallTimesPage","FourZeroFour","RecentEventRoute","compose","withRouter","fetchCurrentEventAndRedirect","router","fetchCurrentEventFailureAction","path","component","exact","history","rest","store","createStore","applyMiddleware","thunk","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","white","black","Router","URL","process","origin","addEventListener","status","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.2196a8c1.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/automoves-logo-black-blue.dc916091.jpg\";","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\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.1/8 is 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 default function register() {\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);\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/facebookincubator/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. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\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 }\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) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').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);\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.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","\nconst urlSeriesMappingConfig = {\n 'localhost': 1,\n 'otaltdev.thewpp.ca': 1,\n 'livetiming.time-attack.ca': 1,\n 'livetiming.ontariotimeattack.ca': 1,\n 'livetiming.ontariotimeattack.com': 1,\n 'nstadev.thewpp.ca': 2,\n 'nstiming.time-attack.ca': 2,\n 'nstiming.ontariotimeattack.ca': 2,\n 'nstiming.ontariotimeattack.com': 2\n};\n\nconst getSeriesId = () => {\n return urlSeriesMappingConfig[window.location.hostname] ? urlSeriesMappingConfig[window.location.hostname] : 1;\n};\n\nexport default getSeriesId;","import getSeriesId from '../helpers/urlSeriesMapping'\n\nconst resource = {\n getCurrentEvent() {\n const seriesId = getSeriesId();\n\n return fetch(`/api/series/${seriesId}/currentevent`)\n .then(response => response.json())\n .then(currentEvent => Promise.resolve({ currentEvent }));\n },\n getEvent(eventId) {\n return fetch(`/api/event/${eventId}/details`)\n .then(response => response.json())\n .then(currentEvent => Promise.resolve({ currentEvent }));\n },\n};\n\nexport default resource;\n","const resource = {\n getEventResults(eventId, classShortCode) {\n return fetch(`/api/event/${eventId}/results/${classShortCode}`)\n .then(response => response.json())\n .then(eventResults => Promise.resolve({ eventResults }));\n },\n};\n\nexport default resource;\n","const resource = {\n getCompetitorDetails(eventId, competitorId) {\n return fetch(`/api/event/${eventId}/competitor/${competitorId}/details`)\n .then(response => response.json())\n .then(competitorDetails => Promise.resolve({ competitorDetails }));\n },\n};\n\nexport default resource;\n","const resource = {\n getSeriesDetails(seriesId) {\n return fetch(`/api/series/${seriesId}/details`)\n .then(response => response.json())\n .then(seriesDetails => Promise.resolve({ seriesDetails }));\n },\n};\n\nexport default resource;\n","const resource = {\n getEventCompetitorBestLaps(eventId) {\n return fetch(`/api/event/${eventId}/competitorbestlaps`)\n .then(response => response.json())\n .then(eventCompetitorBestLaps => Promise.resolve({ eventCompetitorBestLaps }));\n },\n};\n\nexport default resource;\n","import eventResource from '../resources/eventResource';\nimport eventResultsResource from '../resources/eventResultsResource';\nimport competitorDetailsResource from '../resources/competitorDetailsResource';\nimport seriesDetailsResource from '../resources/seriesDetailsResource';\nimport eventCompetitorBestLapsResource from '../resources/eventCompetitorBestLapsResource';\n\n// Action Types\nconst FETCH_CURRENT_EVENT_START = 'FETCH_CURRENT_EVENT_START';\nconst FETCH_CURRENT_EVENT_SUCCESS = 'FETCH_CURRENT_EVENT_SUCCESS';\nconst FETCH_CURRENT_EVENT_FAILURE = 'FETCH_CURRENT_EVENT_FAILURE';\n\nconst SET_SELECTED_EVENT_ID = 'SET_SELECTED_EVENT_ID';\n\nconst FETCH_SELECTED_EVENT_DETAILS_START = 'FETCH_SELECTED_EVENT_DETAILS_START';\nconst FETCH_SELECTED_EVENT_DETAILS_SUCCESS = 'FETCH_SELECTED_EVENT_DETAILS_SUCCESS';\nconst FETCH_SELECTED_EVENT_DETAILS_FAILURE = 'FETCH_SELECTED_EVENT_DETAILS_FAILURE';\n\nconst FETCH_SELECTED_EVENT_RESULTS_START = 'FETCH_SELECTED_EVENT_RESULTS_START';\nconst FETCH_SELECTED_EVENT_RESULTS_SUCCESS = 'FETCH_SELECTED_EVENT_RESULTS_SUCCESS';\nconst FETCH_SELECTED_EVENT_RESULTS_FAILURE = 'FETCH_SELECTED_EVENT_RESULTS_FAILURE';\n\nconst FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_START = 'FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_START';\nconst FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_SUCCESS = 'FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_SUCCESS';\nconst FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_FAILURE = 'FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_FAILURE';\n\nconst FETCH_SELECTED_SERIES_DETAILS_START = 'FETCH_SELECTED_SERIES_DETAILS_START';\nconst FETCH_SELECTED_SERIES_DETAILS_SUCCESS = 'FETCH_SELECTED_SERIES_DETAILS_SUCCESS';\nconst FETCH_SELECTED_SERIES_DETAILS_FAILURE = 'FETCH_SELECTED_SERIES_DETAILS_FAILURE';\n\nconst FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_START = 'FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_START';\nconst FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_SUCCESS = 'FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_SUCCESS';\nconst FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_FAILURE = 'FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_FAILURE';\n\n// Action Creators\nconst fetchCurrentEventStartAction = () => {\n return {\n type: FETCH_CURRENT_EVENT_START\n };\n};\nconst fetchCurrentEventSuccessAction = (eventDetails) => {\n return {\n type: FETCH_CURRENT_EVENT_SUCCESS,\n payload: {\n eventDetails\n }\n };\n};\nconst fetchCurrentEventFailureAction = (error) => {\n return {\n type: FETCH_CURRENT_EVENT_FAILURE,\n payload: {\n error\n }\n };\n};\n\nconst setSelectedEventIdAction = (eventId, dispatch) => {\n return {\n type: SET_SELECTED_EVENT_ID,\n payload: {\n selectedEventId: eventId\n },\n dispatch\n };\n};\n\nconst fetchSelectedEventStartAction = () => {\n return {\n type: FETCH_SELECTED_EVENT_DETAILS_START\n };\n};\nconst fetchSelectedEventSuccessAction = (eventDetails) => {\n return {\n type: FETCH_SELECTED_EVENT_DETAILS_SUCCESS,\n payload: {\n eventDetails\n }\n };\n};\nconst fetchSelectedEventFailureAction = (error) => {\n return {\n type: FETCH_SELECTED_EVENT_DETAILS_FAILURE,\n payload: {\n error\n }\n };\n}\n\nconst fetchSelectedEventResultsStartAction = () => {\n return {\n type: FETCH_SELECTED_EVENT_RESULTS_START\n };\n};\nconst fetchSelectedEventResultsSuccessAction = (eventResults) => {\n return {\n type: FETCH_SELECTED_EVENT_RESULTS_SUCCESS,\n payload: {\n eventResults\n }\n };\n};\nconst fetchSelectedEventResultsFailureAction = (error) => {\n return {\n type: FETCH_SELECTED_EVENT_RESULTS_FAILURE,\n payload: {\n error\n }\n };\n};\n\nconst fetchSelectedCompetitorEventDetailsStartAction = () => {\n return {\n type: FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_START\n };\n};\nconst fetchSelectedCompetitorEventDetailsSuccessAction = (competitorEventDetails) => {\n return {\n type: FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_SUCCESS,\n payload: {\n competitorEventDetails\n }\n };\n};\nconst fetchSelectedCompetitorEventDetailsFailureAction = (error) => {\n return {\n type: FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_FAILURE,\n payload: {\n error\n }\n };\n};\n\nconst fetchSelectedSeriesDetailsStartAction = () => {\n return {\n type: FETCH_SELECTED_SERIES_DETAILS_START\n }\n};\nconst fetchSelectedSeriesDetailsSuccessAction = (seriesDetails) => {\n return {\n type: FETCH_SELECTED_SERIES_DETAILS_SUCCESS,\n payload: {\n seriesDetails\n }\n };\n};\nconst fetchSelectedSeriesDetailsFailureAction = (error) => {\n return {\n type: FETCH_SELECTED_SERIES_DETAILS_FAILURE,\n payload: {\n error\n }\n };\n};\n\nconst fetchSelectedEventCompetitorBestLapsStartAction = () => {\n return {\n type: FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_START\n };\n};\nconst fetchSelectedEventCompetitorBestLapsSuccessAction = (eventCompetitorBestLaps) => {\n return {\n type: FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_SUCCESS,\n payload: {\n eventCompetitorBestLaps\n }\n };\n};\nconst fetchSelectedEventCompetitorBestLapsFailureAction = (error) => {\n return {\n type: FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_FAILURE,\n payload: {\n error\n }\n };\n};\n\n// Thunks\nexport const fetchCurrentEventAndRedirect = (router) => {\n return dispatch => {\n dispatch(fetchCurrentEventStartAction());\n eventResource.getCurrentEvent()\n .then(data => {\n const { currentEvent } = data;\n if (currentEvent) {\n dispatch(setSelectedEventIdAction(currentEvent.eventId));\n dispatch(fetchCurrentEventSuccessAction(currentEvent));\n\n router.push(`/events/${currentEvent.eventId}/results/`);\n }\n })\n .catch(error => {\n dispatch(fetchCurrentEventFailureAction(error))\n });\n };\n};\n\nexport const fetchEventDetails = (eventId) => {\n return (dispatch, getState) => {\n const state = getState();\n\n if (eventId !== state.event.selectedEventId) {\n dispatch(setSelectedEventIdAction(eventId));\n dispatch(fetchSelectedEventStartAction());\n\n eventResource.getEvent(eventId)\n .then(data => {\n dispatch(fetchSelectedEventSuccessAction(data.currentEvent));\n })\n .catch(error => {\n dispatch(fetchSelectedEventFailureAction(error));\n });\n }\n };\n};\n\nexport const fetchEventResults = (eventId, classShortCode) => {\n return dispatch => {\n dispatch(fetchSelectedEventResultsStartAction());\n\n eventResultsResource.getEventResults(eventId, classShortCode)\n .then(data => {\n dispatch(fetchSelectedEventResultsSuccessAction(data));\n })\n .catch(error => {\n dispatch(fetchSelectedEventResultsFailureAction(error));\n });\n };\n};\n\nexport const fetchCompetitorEventDetails = (eventId, competitorId) => {\n return dispatch => {\n dispatch(fetchSelectedCompetitorEventDetailsStartAction());\n\n competitorDetailsResource.getCompetitorDetails(eventId, competitorId)\n .then(data => {\n dispatch(fetchSelectedCompetitorEventDetailsSuccessAction(data.competitorDetails));\n })\n .catch(error => {\n dispatch(fetchSelectedCompetitorEventDetailsFailureAction(error));\n });\n };\n};\n\nexport const fetchSeriesDetails = (seriesId) => {\n return dispatch => {\n dispatch(fetchSelectedSeriesDetailsStartAction());\n\n seriesDetailsResource.getSeriesDetails(seriesId)\n .then(data => {\n dispatch(fetchSelectedSeriesDetailsSuccessAction(data.seriesDetails));\n })\n .catch(error => {\n dispatch(fetchSelectedSeriesDetailsFailureAction(error));\n });\n };\n};\n\nexport const fetchEventCompetitorBestLaps = (eventId) => {\n return dispatch => {\n dispatch(fetchSelectedEventCompetitorBestLapsStartAction());\n\n eventCompetitorBestLapsResource.getEventCompetitorBestLaps(eventId)\n .then(data => {\n dispatch(fetchSelectedEventCompetitorBestLapsSuccessAction(data))\n })\n .catch(error => {\n dispatch(fetchSelectedEventCompetitorBestLapsFailureAction(error))\n });\n };\n};\n\n// Selectors\nexport const selectEventDetails = state => {\n return state.event.eventDetails;\n};\n\nexport const selectEventResults = state => {\n return state.event.eventResults;\n};\n\nexport const selectCompetitorEventDetails = state => {\n return state.event.competitorDetails;\n};\n\nexport const selectSeriesDetails = state => {\n return state.event.seriesDetails;\n};\n\nexport const selectEventCompetitorBestLaps = state => {\n return state.event.eventCompetitorBestLaps;\n}\n\nconst initialState = {\n selectedEventId: undefined,\n selectedClassShortCode: undefined,\n selectedCompetitorId: undefined,\n eventDetails: {\n isLoading: false,\n data: undefined,\n error: undefined\n },\n eventResults: {\n isLoading: false,\n data: undefined,\n error: undefined\n },\n competitorDetails: {\n isLoading: false,\n data: undefined,\n error: undefined\n },\n seriesDetails: {\n isLoading: false,\n data: undefined,\n error: undefined\n },\n eventCompetitorBestLaps: {\n isLoading: false,\n data: undefined,\n error: undefined\n }\n};\n\nexport default (state = initialState, action) => {\n const { type } = action;\n switch (type) {\n case FETCH_CURRENT_EVENT_START:\n return {\n ...state,\n eventDetails: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_CURRENT_EVENT_SUCCESS:\n return {\n ...state,\n eventDetails: {\n isLoading: false,\n data: action.payload.eventDetails,\n error: undefined\n }\n };\n case FETCH_CURRENT_EVENT_FAILURE:\n return {\n ...state,\n eventDetails: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n case SET_SELECTED_EVENT_ID:\n return {\n ...state,\n selectedEventId: action.payload.selectedEventId\n };\n case FETCH_SELECTED_EVENT_DETAILS_START:\n return {\n ...state,\n eventDetails: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_DETAILS_SUCCESS:\n return {\n ...state,\n eventDetails: {\n isLoading: false,\n data: action.payload.eventDetails,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_DETAILS_FAILURE:\n return {\n ...state,\n eventDetails: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n case FETCH_SELECTED_EVENT_RESULTS_START:\n return {\n ...state,\n eventResults: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_RESULTS_SUCCESS:\n return {\n ...state,\n eventResults: {\n isLoading: false,\n data: action.payload.eventResults,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_RESULTS_FAILURE:\n return {\n ...state,\n eventResults: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n case FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_START:\n return {\n ...state,\n competitorDetails: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_SUCCESS:\n return {\n ...state,\n competitorDetails: {\n isLoading: false,\n data: action.payload.competitorEventDetails,\n error: undefined\n }\n };\n case FETCH_SELECTED_COMPETITOR_EVENT_DETAILS_FAILURE:\n return {\n ...state,\n competitorDetails: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n case FETCH_SELECTED_SERIES_DETAILS_START:\n return {\n ...state,\n seriesDetails: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_SELECTED_SERIES_DETAILS_SUCCESS:\n return {\n ...state,\n seriesDetails: {\n isLoading: false,\n data: action.payload.seriesDetails,\n error: undefined\n }\n };\n case FETCH_SELECTED_SERIES_DETAILS_FAILURE:\n return {\n ...state,\n seriesDetails: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n case FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_START:\n return {\n ...state,\n eventCompetitorBestLaps: {\n isLoading: true,\n data: undefined,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_SUCCESS:\n return {\n ...state,\n eventCompetitorBestLaps: {\n isLoading: false,\n data: action.payload.eventCompetitorBestLaps,\n error: undefined\n }\n };\n case FETCH_SELECTED_EVENT_COMPETITOR_BEST_LAPS_FAILURE:\n return {\n ...state,\n eventCompetitorBestLaps: {\n isLoading: false,\n data: undefined,\n error: action.payload.error\n }\n };\n default:\n return state;\n }\n};\n","import { combineReducers } from 'redux';\nimport event from './reducers/index';\n\nconst rootReducer = combineReducers({\n event,\n});\n\nexport default rootReducer;\n","import Moment from 'moment';\n\nexport default function formatLapTime(timeInSeconds) {\n let duration = Moment.duration(parseFloat(timeInSeconds).toFixed(3) * 1000);\n\n return Moment.utc(duration.as('milliseconds')).format('m:ss.SSS');;\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Table, Col, Container, Row } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport formatLapTime from '../../helpers/lapTimeFormatter';\n\nconst getRankOrdinal = rank => {\n var s = ['th', 'st', 'nd', 'rd'],\n v = rank % 100;\n return rank + (s[(v - 20) % 10] || s[v] || s[0]);\n};\n\nconst TextLink = styled(Link)`\n font-weight: bold;\n color: ${({ theme }) => theme.red};\n\n &:hover {\n cursor: pointer;\n text-decoration: underline;\n color: ${({ theme }) => theme.red};\n }\n`;\n\nconst CompetitorResult = ({ eventId, competitorResult, shouldDisplayPaxFields }) => {\n const boldStyle = {\n fontWeight: 'bold',\n };\n const bigFontStyle = {\n fontSize: '125%',\n };\n \n return (\n \n \n \n {getRankOrdinal(competitorResult.rank)}\n \n \n \n {competitorResult.competitorName}\n \n \n \n #{competitorResult.carNumber} {competitorResult.car}\n \n {\n shouldDisplayPaxFields\n ? \n PI (PAX): {competitorResult.performanceIndex} ({competitorResult.paxFactor})\n \n : ''\n }\n \n Class Target: {formatLapTime(competitorResult.classTargetTimeInSeconds)}\n \n \n Overall Target: {formatLapTime(competitorResult.overallTargetTimeInSeconds)}\n \n
\n \n \n \n \n \n \n 1 | \n 2 | \n 3 | \n 4 | \n 5 | \n
\n \n \n \n \n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[0] && competitorResult.competitorLaps[0].timeInSeconds\n ? formatLapTime(competitorResult.competitorLaps[0].timeInSeconds)\n : '-'\n }\n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[0] && competitorResult.competitorLaps[0].score\n ? \n ({competitorResult.competitorLaps[0].score.toFixed(3)}\n {competitorResult.competitorLaps[0].isExhibition ? '*' : ''}\n {competitorResult.competitorLaps[0].isPenalizedBySteward ? '!' : ''})\n \n : ''\n }\n | \n \n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[1] && competitorResult.competitorLaps[1].timeInSeconds\n ? formatLapTime(competitorResult.competitorLaps[1].timeInSeconds)\n : '-'\n }\n | \n \n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[2] && competitorResult.competitorLaps[2].timeInSeconds\n ? formatLapTime(competitorResult.competitorLaps[2].timeInSeconds)\n : '-'\n }\n | \n \n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[3] && competitorResult.competitorLaps[3].timeInSeconds\n ? formatLapTime(competitorResult.competitorLaps[3].timeInSeconds)\n : '-'\n }\n | \n \n {\n competitorResult.competitorLaps && competitorResult.competitorLaps[4] && competitorResult.competitorLaps[4].timeInSeconds\n ? formatLapTime(competitorResult.competitorLaps[4].timeInSeconds)\n : '-'\n }\n | \n
\n \n
\n \n
\n \n );\n};\n\nexport default CompetitorResult;\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { map } from 'lodash';\r\nimport { Col, Container, Row } from 'react-bootstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport CompetitorResult from './CompetitorResult';\r\n\r\nconst TextLink = styled(Link)`\r\n color: ${({ theme }) => theme.red};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n text-decoration: underline;\r\n color: ${({ theme }) => theme.red};\r\n }\r\n`;\r\n\r\nconst ClassResult = ({ classResult, eventId, shouldDisplayPaxFields }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n {classResult.className}\r\n \r\n \r\n
\r\n \r\n \r\n {map(classResult.competitorResults, competitorResult => {\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\nexport default ClassResult;\r\n","import React from 'react';\r\nimport { map } from 'lodash';\r\nimport { Col, Container, Row } from 'react-bootstrap';\r\nimport ClassResult from './ClassResult';\r\n\r\nconst EventResults = ({ results, eventId, shouldDisplayPaxFields }) => {\r\n return (\r\n \r\n {map(results, classResult => {\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\nexport default EventResults;\r\n","import React from 'react';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport { css } from '@emotion/react';\nimport { PacmanLoader } from 'react-spinners';\n\nconst override = css`\n display: block;\n margin: 0 auto;\n`;\n\nconst LoadingSpinner = ({ size, color }) => {\n return (\n \n \n \n \n \n
\n \n );\n};\n\nexport default LoadingSpinner;\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport EventResults from './EventResults';\r\nimport { fetchEventResults, selectEventResults, selectEventDetails } from '../../reducers';\r\nimport LoadingSpinner from '../LoadingSpinner';\r\n\r\nconst EventResultsContainer = connect(\r\n state => {\r\n return {\r\n eventResults: selectEventResults(state),\r\n eventDetails: selectEventDetails(state)\r\n };\r\n },\r\n {\r\n fetchEventResults\r\n }\r\n)(({ eventResults, fetchEventResults, eventId, classShortCode, eventDetails, ...rest }) => {\r\n\r\n useEffect(() => {\r\n fetchEventResults(eventId, classShortCode);\r\n }, [fetchEventResults, eventId, classShortCode]);\r\n\r\n return eventResults.isLoading || typeof eventResults.data === 'undefined' || eventDetails.isLoading || typeof eventDetails.data === 'undefined'\r\n ? \r\n : ;\r\n});\r\n\r\nexport default EventResultsContainer;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Col, Container, Row } from 'react-bootstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport sponsorLogo from '../images/automoves-logo-black-blue.jpg';\r\n\r\nconst bigFontStyle = {\r\n fontSize: '150%',\r\n};\r\n\r\nconst TextLink = styled(Link)`\r\n color: ${({ theme }) => theme.red};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n text-decoration: underline;\r\n color: ${({ theme }) => theme.red};\r\n }\n\n &:focus {\n color: ${({ theme }) => theme.red};\n }\r\n`;\r\n\r\nconst Header = ({ eventId, seasonName, eventName, trackName, trackLayoutName, eventDate }) => {\r\n return (\r\n \r\n \r\n \r\n {\n seasonName.includes(\"OTA\")\n ?
\n :
\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {seasonName} {eventName}\r\n \r\n \r\n \r\n \r\n \r\n {trackName} {trackLayoutName}\r\n \r\n \r\n \r\n \r\n {moment(new Date(eventDate)).format('MMMM Do, YYYY')}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n View Overall Best Laps\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { fetchEventDetails, selectEventDetails } from '../reducers';\nimport Header from './Header';\nimport LoadingSpinner from './LoadingSpinner';\n\nconst HeaderContainer = connect(\n state => {\n return {\n eventDetails: selectEventDetails(state)\n };\n },\n {\n fetchEventDetails\n }\n)(({ eventDetails, fetchEventDetails, eventId, ...rest }) => {\n\n useEffect(() => {\n fetchEventDetails(eventId);\n }, [fetchEventDetails, eventId]);\n\n return eventDetails.isLoading || typeof eventDetails.data === 'undefined'\n ? \n : (\n \n );\n});\n\nexport default HeaderContainer;","import React from \"react\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport HeaderContainer from './HeaderContainer';\nimport getSeriesId from '../helpers/urlSeriesMapping';\n\nconst TextLink = styled(Link)`\n font-weight: bold;\n color: ${({ theme }) => theme.red};\n\n &:hover {\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.red};\n }\n`;\n\nconst Layout = ({ eventId, children }) => {\n const seriesId = getSeriesId();\n\n return (\n
\n \n \n \n \n View All Events\n \n \n
\n \n \n \n \n
\n \n {children}\n
\n \n \n * - Exhibition Competitor ! - Stewards Decision Penalty\n \n
\n \n
\n );\n};\n\nexport default Layout;\n","import React from 'react';\nimport EventResultsContainer from './EventResultsContainer';\nimport Layout from '../Layout';\n\nconst EventResultsPage = ({ match }) => {\n const { params } = match;\n const { eventId, classShortCode } = params;\n return (\n \n \n \n );\n};\n\nexport default EventResultsPage;","import React from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nconst TextLink = styled(Link)`\n color: ${({ theme }) => theme.red};\n\n &:hover {\n cursor: pointer;\n text-decoration: underline;\n color: ${({ theme }) => theme.red};\n }\n`;\n\nconst EventDetails = ({ eventDetails }) => {\n return (\n \n \n \n {\n eventDetails.enableLink\n ? {eventDetails.eventName}\n : eventDetails.eventName\n }\n \n \n {\n eventDetails.enableLink\n ? {eventDetails.trackName} {eventDetails.trackLayoutName}\n : eventDetails.trackName + ' ' + eventDetails.trackLayoutName\n }\n \n \n \n {\n eventDetails.enableLink\n ? {moment(new Date(eventDetails.eventDate)).format('MMMM Do, YYYY')}\n : moment(new Date(eventDetails.eventDate)).format('MMMM Do, YYYY')\n }\n \n
\n \n );\n};\n\nexport default EventDetails;\n","import React from 'react';\nimport { map } from 'lodash';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport EventDetails from './EventDetails';\n\nconst SeasonDetails = ({ seasonDetails }) => {\n const seasonHasEvents = seasonDetails.events && seasonDetails.events.length;\n return (\n \n {/* //TODO: make these collapsable */}\n \n {seasonDetails.name}
\n
\n \n {\n seasonHasEvents\n ? map(seasonDetails.events, eventDetails => {\n return ;\n })\n : No events to view for this season yet. \n }\n
\n \n );\n};\n\nexport default SeasonDetails;\n","import React from 'react';\nimport { map } from 'lodash';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport SeasonDetails from './SeasonDetails';\n\nconst SeriesDetails = ({ seriesDetails }) => {\n return (\n \n \n {seriesDetails.name}
\n
\n {map(seriesDetails.seasons, season => {\n return (\n \n );\n })}\n \n );\n};\n\nexport default SeriesDetails;\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { fetchSeriesDetails, selectSeriesDetails } from '../../reducers';\nimport SeriesDetails from './SeriesDetails';\nimport LoadingSpinner from '../LoadingSpinner';\n\nconst SeriesDetailsContainer = connect(\n state => {\n return {\n seriesDetails: selectSeriesDetails(state)\n };\n },\n {\n fetchSeriesDetails\n }\n)(({ seriesDetails, fetchSeriesDetails, seriesId, ...rest }) => {\n\n useEffect(() => {\n fetchSeriesDetails(seriesId);\n }, [fetchSeriesDetails, seriesId]);\n\n return seriesDetails.isLoading || typeof seriesDetails.data === 'undefined'\n ? \n : ;\n});\n\nexport default SeriesDetailsContainer;","import React from \"react\";\nimport { Col, Container, Row } from \"react-bootstrap\";\n\nconst SimpleLayout = ({ children }) => {\n return (\n \n \n \n {children}\n
\n \n
\n );\n};\n\nexport default SimpleLayout;\n","import React from 'react';\nimport SeriesDetailsContainer from './SeriesDetailsContainer';\nimport SimpleLayout from '../SimpleLayout';\n\nconst SeriesDetailsPage = ({ match }) => {\n const { params } = match;\n const { seriesId } = params;\n return (\n \n \n \n );\n};\n\nexport default SeriesDetailsPage;","import React from 'react';\nimport { Col, Container, Row } from 'react-bootstrap';\n\nconst CompetitorPersonalDetails = ({ name, carNumber, car, paxFactor, performanceIndex, shouldDisplayPaxFields }) => {\n const boldStyle = {\n fontWeight: 'bold',\n };\n const bigFontStyle = {\n fontSize: '125%',\n };\n return (\n \n \n \n {name}\n \n \n #{carNumber} {car}\n \n {\n shouldDisplayPaxFields\n ?\n \n Pax Factor: {paxFactor}\n \n : ''\n }\n {\n shouldDisplayPaxFields\n ? \n \n PI: {performanceIndex}\n \n : ''\n }\n
\n \n );\n};\n\nexport default CompetitorPersonalDetails;\n","import React from 'react';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport formatLapTime from '../../helpers/lapTimeFormatter';\n\nconst CompetitorResultSummary = ({\n bestTimeInSeconds,\n classTargetTimeInSeconds,\n overallTargetTimeInSeconds,\n}) => {\n const boldStyle = {\n fontWeight: 'bold',\n };\n\n return (\n \n \n \n Best Lap: {formatLapTime(bestTimeInSeconds)}\n \n \n Class Target: {formatLapTime(classTargetTimeInSeconds)} {bestTimeInSeconds.toFixed(3) > classTargetTimeInSeconds.toFixed(3) ? `(+${(bestTimeInSeconds - classTargetTimeInSeconds).toFixed(3)}s)` : \"\" }\n \n \n Overall Target: {formatLapTime(overallTargetTimeInSeconds)} {bestTimeInSeconds.toFixed(3) > overallTargetTimeInSeconds.toFixed(3) ? `(+${(bestTimeInSeconds - overallTargetTimeInSeconds).toFixed(3)}s)` : \"\"}\n \n
\n \n );\n};\n\nexport default CompetitorResultSummary;\n","import React from 'react';\nimport { map } from 'lodash';\nimport { Table, Col, Container, Row } from 'react-bootstrap';\nimport moment from 'moment';\nimport formatLapTime from '../../helpers/lapTimeFormatter';\n\nconst getRowColor = (statusId, lapScore) => {\n if (statusId === 8 || statusId === 16) {\n return '#FFEEEE';\n } else if (lapScore !== null) {\n return '#EEFFEE';\n }\n\n return '#FFFFFF';\n};\n\nconst CompetitorSession = ({ competitorSession, shouldDisplayPaxFields }) => {\n return (\n \n \n \n {competitorSession.sessionName} ({competitorSession.sessionStatusName})\n \n
\n \n \n \n \n \n \n Laptime\n | \n {\n shouldDisplayPaxFields\n ?\n \n Pax Time\n | \n : ''\n }\n \n Time of Day\n | \n
\n \n \n {map(competitorSession.sessionLaps, (lap, index) => {\n return (\n \n \n {formatLapTime(lap.timeInSeconds)} {lap.statusId !== 2 ? `(${lap.statusName})` : ''}\n {lap.score\n ? ({lap.score.toFixed(3)}{lap.isExhibition ? '*' : ''}{lap.isPenalizedBySteward ? '!' : ''})\n : ''}\n | \n {\n shouldDisplayPaxFields\n ? {lap.paxTime} | \n : ''\n }\n {moment.utc(lap.endUtcTimestamp).local().format('h:mm:ss a')} | \n
\n );\n })}\n \n
\n \n
\n \n );\n};\n\nexport default CompetitorSession;\n","import React from 'react';\nimport { map } from 'lodash';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport CompetitorPersonalDetails from './CompetitorPersonalDetails';\nimport CompetitorResultSummary from './CompetitorResultSummary';\nimport CompetitorSession from './CompetitorSession';\n\nconst CompetitorResults = ({ competitorSessionsData, shouldDisplayPaxFields }) => {\n return (\n \n \n \n \n \n
\n \n \n \n \n
\n \n {map(competitorSessionsData.sessions, competitorSession => {\n const { sessionId } = competitorSession;\n return (\n \n \n \n );\n })}\n
\n \n );\n};\n\nexport default CompetitorResults;\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { fetchCompetitorEventDetails, selectCompetitorEventDetails, selectEventDetails } from '../../reducers';\r\nimport CompetitorResults from './CompetitorResults';\r\nimport LoadingSpinner from '../LoadingSpinner';\n\r\nconst CompetitorDetailsContainer = connect(\r\n state => {\r\n return {\r\n competitorDetails: selectCompetitorEventDetails(state),\r\n eventDetails: selectEventDetails(state)\r\n };\r\n },\r\n {\r\n fetchCompetitorEventDetails\r\n }\r\n)(({ competitorDetails, fetchCompetitorEventDetails, eventId, competitorId, eventDetails, ...rest }) => {\r\n\r\n useEffect(() => {\r\n fetchCompetitorEventDetails(eventId, competitorId);\r\n }, [fetchCompetitorEventDetails, eventId, competitorId]);\r\n\r\n return competitorDetails.isLoading || typeof competitorDetails.data === 'undefined' || eventDetails.isLoading || typeof eventDetails.data === 'undefined'\r\n ? \r\n : ;\r\n});\r\n\r\nexport default CompetitorDetailsContainer;","import React from 'react';\nimport CompetitorDetailsContainer from './CompetitorDetailsContainer';\nimport Layout from '../Layout';\n\nconst CompetitorDetailsPage = ({ match }) => {\n const { params } = match;\n const { eventId, competitorId } = params;\n return (\n \n \n \n );\n};\n\nexport default CompetitorDetailsPage;","import React, { Fragment } from 'react';\r\nimport { useTable, useSortBy } from 'react-table';\r\nimport styled from 'styled-components';\r\nimport formatLapTime from '../../helpers/lapTimeFormatter';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst TextLink = styled(Link)`\r\n color: ${({ theme }) => theme.red};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n text-decoration: underline;\r\n color: ${({ theme }) => theme.red};\r\n }\n\n &:focus {\n color: ${({ theme }) => theme.red};\n }\r\n`;\r\n\r\nconst numericSortFunction = (a, b, property) => Number(a.original[property]) - Number(b.original[property]);\n\r\nconst getSortBy = (shouldDisplayPaxFields) => {\r\n return shouldDisplayPaxFields\r\n ? [\n { id: 'bestTimeScoreSortable', desc: true },\n { id: 'practiceBestPaxTimeSortable', desc: false },\n { id: 'competitorLastName', desc: false }\n ]\r\n : [\n { id: 'competitionBestRawTimeSortable', desc: false },\n { id: 'practiceBestRawTimeSortable', desc: false },\n { id: 'competitorLastName', desc: false }\n ];\r\n};\r\n\r\nconst getColumns = (eventId, shouldDisplayPaxFields) => {\r\n const columns = [\n {\n Header: 'Competitor',\n columns: [\n {\n Header: 'Name',\n Cell: props =>\n \n \n {props.row.original.competitorFirstName} {props.row.original.competitorLastName}\n \n {\n shouldDisplayPaxFields\n ? - (PI: {props.row.original.performanceIndex}, PAX: {props.row.original.paxFactor})\n : ''\n }\n \n },\n {\n Header: 'Car',\n Cell: props => #{props.row.original.carNumber} - {props.row.original.carMake} {props.row.original.carModel}\n },\n {\n Header: 'Class',\n accessor: 'classMinPerformanceIndex',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.classShortCode}\n }\n ]\n },\n {\n Header: 'Practice',\n columns: [\n {\n Header: 'Best Raw',\n accessor: 'practiceBestRawTimeSortable',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.practiceBestRawTime ? formatLapTime(props.row.original.practiceBestRawTime) : '-'}\n },\n {\n Header: 'Best PAX',\n accessor: 'practiceBestPaxTimeSortable',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.practiceBestPaxTime ? props.row.original.practiceBestPaxTime.toFixed(3) : '-'}\n }\n ]\n },\n {\n Header: 'Competition',\n columns: [\n {\n Header: 'Best Raw',\n accessor: 'competitionBestRawTimeSortable',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.competitionBestRawTime ? formatLapTime(props.row.original.competitionBestRawTime) : '-'}\n },\n {\n Header: 'Best PAX',\n accessor: 'competitionBestPaxTimeSortable',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.competitionBestPaxTime ? props.row.original.competitionBestPaxTime.toFixed(3) : '-'}\n },\n {\n Header: 'Score',\n accessor: 'bestTimeScoreSortable',\n sortType: numericSortFunction,\n Cell: props => {props.row.original.bestTimeScore ? props.row.original.bestTimeScore.toFixed(3) : '-'}{props.row.original.isExhibition ? '*' : ''}{props.row.original.isPenalizedBySteward ? '!' : ''}\n }\n ]\n }\n ];\n\n if (!shouldDisplayPaxFields) {\n columns[1].columns.pop();\n let score = columns[2].columns.pop();\n columns[2].columns.pop();\n columns[2].columns.push(score);\n }\n\n return columns;\n}\r\n\r\nconst Styles = styled.div`\n padding: 1rem;\n\n table {\n border-spacing: 0;\n border: 1px solid #DDDDDD;\n width: 100%;\n\n tr {\n :last-child {\n td {\n border-bottom: 0;\n }\n }\n }\n\n th {\n margin-right: 0;\n padding: 0.5rem 2rem;\n text-align: center;\n background-color: #EEEEEE;\n border-bottom: 1px solid #DDDDDD;\n border-right: 1px solid #DDDDDD;\n },\n td {\n margin: 0;\n padding: 1rem;\n border-bottom: 1px solid #DDDDDD;\n border-right: 1px solid #DDDDDD;\n }\n }\n`;\r\n\r\nconst Table = ({ columns, data, shouldDisplayPaxFields }) => {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n } = useTable(\n {\n columns,\n data,\n initialState: {\n sortBy: getSortBy(shouldDisplayPaxFields)\n }\n },\n useSortBy\n )\n\n return (\n <>\n \n \n {headerGroups.map(headerGroup => (\n \n {headerGroup.headers.map(column => (\n // Add the sorting props to control sorting. For this example\n // we can add them into the header props\n \n {column.render('Header')}\n {/* Add a sort direction indicator */}\n \n {column.isSorted\n ? column.isSortedDesc\n ? ' 🔽'\n : ' 🔼'\n : ''}\n \n | \n ))}\n
\n ))}\n \n \n {rows.map(\n (row, i) => {\n prepareRow(row);\n return (\n \n {row.cells.map(cell => {\n return (\n {cell.render('Cell')} | \n )\n })}\n
\n )\n }\n )}\n \n
\n >\n )\n};\r\n\r\nconst EventOverallTimes = ({ eventId, eventCompetitorBestLaps, shouldDisplayPaxFields }) => {\r\n return (\n \n \n \n );\r\n};\r\n\r\nexport default EventOverallTimes;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport EventOverallTimes from './EventOverallTimes';\r\nimport { fetchEventCompetitorBestLaps, selectEventCompetitorBestLaps, selectEventDetails } from '../../reducers';\r\nimport LoadingSpinner from '../LoadingSpinner';\r\n\r\nconst EventOverallTimesContainer = connect(\r\n state => {\r\n return {\r\n eventCompetitorBestLaps: selectEventCompetitorBestLaps(state),\r\n eventDetails: selectEventDetails(state)\r\n };\r\n },\r\n {\r\n fetchEventCompetitorBestLaps\r\n }\r\n)(({ eventCompetitorBestLaps, fetchEventCompetitorBestLaps, eventId, eventDetails, ...rest }) => {\r\n\r\n useEffect(() => {\r\n fetchEventCompetitorBestLaps(eventId);\r\n }, [fetchEventCompetitorBestLaps, eventId]);\r\n\r\n return eventCompetitorBestLaps.isLoading || typeof eventCompetitorBestLaps.data === 'undefined' || eventDetails.isLoading || typeof eventDetails.data === 'undefined'\r\n ? \r\n : ;\r\n});\r\n\r\nexport default EventOverallTimesContainer;\r\n","import React from 'react';\nimport EventOverallTimesContainer from './EventOverallTimesContainer';\nimport Layout from '../Layout';\n\nconst EventOverallTimesPage = ({ match }) => {\n const { params } = match;\n const { eventId } = params;\n return (\n \n \n \n );\n};\n\nexport default EventOverallTimesPage;","import React from 'react';\n// Style this if you care\nconst FourZeroFour = () => {\n return 404 - Page Not Found
;\n};\n\nexport default FourZeroFour;\n","import React, { useEffect } from 'react';\nimport { compose } from 'recompose';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { Route } from 'react-router-dom';\nimport { fetchCurrentEventAndRedirect } from '../reducers';\n\nconst RecentEventRoute = compose(\n withRouter,\n connect(\n null,\n {\n fetchCurrentEventAndRedirect,\n }\n )\n)(({ path, component, exact, fetchCurrentEventAndRedirect, history, ...rest }) => {\n useEffect(() => {\n fetchCurrentEventAndRedirect(history);\n }, [fetchCurrentEventAndRedirect, history]);\n\n return ;\n});\n\nexport default RecentEventRoute;\n","import React from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport EventResultsPage from './components/EventResults/EventResultsPage';\nimport SeriesDetailsPage from './components/SeriesDetails/SeriesDetailsPage';\nimport CompetitorDetailsPage from './components/CompetitorDetails/CompetitorDetailsPage';\nimport EventOverallTimesPage from './components/EventOverallTimes/EventOverallTimesPage';\nimport FourZeroFour from './components/404';\n\n// Routes\nimport RecentEventRoute from './routes/RecentEventRoute';\n\nexport default (\n \n \n \n \n \n \n \n \n \n \n);\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport 'bootstrap/dist/css/bootstrap-theme.css';\r\nimport './index.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { createStore, applyMiddleware, compose } from 'redux';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport thunk from 'redux-thunk';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport rootReducer from './rootReducer';\r\nimport { ThemeProvider } from 'styled-components';\r\nimport Router from './Router';\r\n\r\nconst theme = {\r\n white: '#fff',\r\n black: '#000',\r\n red: '#ba0000'\r\n};\r\n\r\nconst store = createStore(rootReducer, compose(applyMiddleware(thunk)));\r\n\r\n/*\r\n * I added this here so I could check what is in the reducer during development.\r\n * You can either add an environment check so it's not exposed in a live environment\r\n * or remove it all together.\r\n */\r\nwindow.store = store;\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n {Router}\r\n \r\n ,\r\n rootElement\r\n);\r\n\r\nregisterServiceWorker();\r\n"],"sourceRoot":""}