{"version":3,"sources":["hooks/useMergeState.tsx","hooks/axios.tsx","components/teamForm/teamForm.tsx","components/boxScore/BoxScore.tsx","components/teamLogo/TeamLogo.tsx","components/spinner/spinner.tsx","components/table/table.tsx","components/gameCard/gamecard.tsx","components/banner/banner.tsx","App.tsx","index.tsx"],"names":["reducer","prevState","updater","useMergeState","initialState","useReducer","instance","axios","create","baseURL","defaults","headers","common","process","RapidAPI","TeamForm","form","chars","split","newForm","formClass","forEach","char","content","BoxScore","team","boxScore","rank","goalDiff","points","leagueName","className","played","win","draw","lose","goals","for","against","TeamLogo","logo","size","showName","src","alt","classnames","Spinner","msg","undefined","Table","season","currentLeague","initialTeam","visibleRank","teamLogo","dataLoaded","leagueSize","state","setState","league","setLeague","useEffect","a","get","params","request","data","response","standings","thisTeam","Image","tempLeague","getInitialTeam","find","row","id","initialPosition","name","all","goalsDiff","length","fetchLeague","tableClickHandler","direction","newRank","tempRank","wrapRank","Button","onClick","xmlns","width","height","fill","viewBox","fillRule","d","GameCard","apiDirection","gameDate","gameTime","teams","away","home","venue","seasonOver","gameStatus","formatTime","hours","getHours","minuntes","getMinutes","toString","padStart","amPm","results","teamData","Date","fixture","date","toDateString","status","long","fetchGames","isPostponed","Banner","children","Card","App","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.b8502a0c.chunk.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useReducer, Dispatch } from 'react';\n\nconst reducer = (prevState: any, updater: any): any =>\n typeof updater === 'function'\n ? { ...prevState, ...updater(prevState) }\n : { ...prevState, ...updater };\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst useMergeState = (initialState: any): [any, Dispatch<any>] =>\n useReducer(reducer, initialState);\n\nexport default useMergeState;\n","import axios from 'axios';\n\nconst instance = axios.create({\n baseURL: 'https://api-football-v1.p.rapidapi.com/v3',\n});\n\ninstance.defaults.headers.common['content-type'] = 'application/octet-stream';\ninstance.defaults.headers.common['X-RapidAPI-Key'] = `${process.env.REACT_APP_FOOTBALL_API}`;\ninstance.defaults.headers.common.RapidAPI = 'api-football-v1.p.rapidapi.com';\n\nexport default instance;\n","import React, { FunctionComponent } from 'react';\nimport { Markup } from 'interweave';\n\nimport './teamForm.scss';\n\ntype TeamFormProps = {\n form: string;\n};\n\nconst TeamForm: FunctionComponent<TeamFormProps> = ({ form }) => {\n let chars: string[] = [];\n if (form) {\n chars = form.split('');\n }\n let newForm = '';\n let formClass = '';\n\n chars.forEach((char) => {\n switch (char) {\n case 'W': {\n formClass = '--win';\n break;\n }\n case 'L': {\n formClass = '--lose';\n break;\n }\n case 'D': {\n formClass = '--draw';\n break;\n }\n default: {\n formClass = '';\n break;\n }\n }\n newForm += `<span class='teamForm teamForm${formClass}'>${char}</span>`;\n });\n\n return <Markup content={newForm} />;\n};\n\nexport default TeamForm;\n","import React, { FunctionComponent } from 'react';\nimport TeamForm from '../teamForm/teamForm';\nimport './BoxScore.scss';\n\ntype BoxScoreProps = {\n team: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n boxScore: any;\n rank: number;\n goalDiff: number;\n points: number;\n form: string;\n leagueName: string;\n};\n\nconst BoxScore: FunctionComponent<BoxScoreProps> = ({\n team,\n boxScore,\n rank,\n goalDiff,\n points,\n form,\n leagueName,\n}) => {\n return (\n <div className=\"football_boxscore\">\n <div className=\"football_title\">{team}</div>\n <div>{leagueName}</div>\n <table className=\"football__table\">\n <tbody>\n <tr className=\"football__table_tr\">\n <th className=\"football__table__header\">\n <div aria-label=\"Rank\">Rank</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\"Matches played\">MP</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\"Wins\">W</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\" Draws\">D</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\" Losses\">L</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\" Goals scored\">GF</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\" Goals against\">GA</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\"Goal difference\">GD</div>\n </th>\n <th className=\"football__table__header\">\n <div aria-label=\"Points\">Pts</div>\n </th>\n </tr>\n <tr>\n <td className=\"football__table__td__div\">{rank + 1}</td>\n <td className=\"football__table__td__div\">{boxScore.played}</td>\n <td className=\"football__table__td__div\">{boxScore.win}</td>\n <td className=\"football__table__td__div\">{boxScore.draw}</td>\n <td className=\"football__table__td__div\">{boxScore.lose}</td>\n <td className=\"football__table__td__div\">{boxScore.goals.for}</td>\n <td className=\"football__table__td__div\">{boxScore.goals.against}</td>\n <td className=\"football__table__td__div\">{goalDiff}</td>\n <td className=\"football__table__td__div\">{points}</td>\n </tr>\n </tbody>\n </table>\n <div className=\"football_rank\">\n <span className=\"bold\">Form:</span> <TeamForm form={form} />\n </div>\n </div>\n );\n};\n\nexport default BoxScore;\n","import React, { FunctionComponent } from 'react';\nimport classnames from 'classnames';\n\nimport './TeamLogo.scss';\n\ntype LogoProps = {\n logo: string;\n team: string;\n size: string;\n showName: boolean;\n} & typeof defaultProps;\n\nconst defaultProps = {\n logo: '',\n team: '',\n size: '',\n showName: true,\n};\n\nconst TeamLogo: FunctionComponent<LogoProps> = ({ logo, team, size, showName }) => (\n <div className=\"football_logo\">\n <img src={logo} alt={team} className={classnames('teamLogo', size)} />\n {showName && <div className={classnames('teamName', size)}>{team}</div>}\n </div>\n);\n\nexport default TeamLogo;\n","import React, { FunctionComponent } from 'react';\n\ntype SpinnerProps = {\n // eslint-disable-next-line react/require-default-props\n msg?: string;\n};\n\nconst Spinner: FunctionComponent<SpinnerProps> = ({ msg = '' }) => (\n <>\n <div className=\"ui active inverted dimmer\">\n <div className=\"ui text loader\">{msg === '' || msg === undefined ? 'Loading' : msg}</div>\n </div>\n </>\n);\n\nexport default Spinner;\n","import React, { FunctionComponent, useEffect } from 'react';\nimport Button from 'react-bootstrap/Button';\nimport { useMergeState } from '../../hooks';\nimport axios from '../../hooks/axios';\nimport BoxScore from '../boxScore/BoxScore';\nimport TeamLogo from '../teamLogo/TeamLogo';\nimport Spinner from '../spinner/spinner';\n\ntype TableProps = {\n season: number;\n currentLeague: number;\n initialTeam: number;\n} & typeof defaultProps;\n\nconst defaultProps = {\n season: 2023,\n currentLeague: 39,\n initialTeam: 50,\n};\n\nconst Table: FunctionComponent<TableProps> = ({ season, currentLeague, initialTeam }) => {\n const initialState = {\n visibleRank: 0,\n teamLogo: '',\n team: initialTeam,\n boxScore: { goals: { for: '', against: '' } },\n goalDiff: 0,\n points: 0,\n form: '',\n dataLoaded: false,\n leagueName: '',\n leagueSize: 0,\n };\n\n const [state, setState] = useMergeState(initialState);\n const [league, setLeague] = useMergeState([]);\n const { team } = state;\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n const fetchLeague = async () => {\n const request = await axios.get(`/standings`, {\n params: {\n season,\n league: currentLeague,\n },\n });\n\n // preload images\n request.data.response[0].league.standings[0].forEach(\n (thisTeam: { team: { logo: string } }) => {\n const img = new Image();\n img.src = thisTeam.team.logo;\n },\n );\n\n const tempLeague = { ...request.data.response[0].league.standings[0] };\n setLeague({ ...tempLeague });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getInitialTeam = request.data.response[0].league.standings[0].find((row: any) => {\n return row.team.id === initialTeam;\n });\n let { rank: initialPosition = 1 } = getInitialTeam;\n // eslint-disable-next-line no-plusplus\n initialPosition--;\n\n setState({\n visibleRank: initialPosition,\n teamLogo: tempLeague[initialPosition].team.logo,\n team: tempLeague[initialPosition].team.name,\n boxScore: tempLeague[initialPosition].all,\n goalDiff: tempLeague[initialPosition].goalsDiff,\n points: tempLeague[initialPosition].points,\n form: tempLeague[initialPosition].form,\n dataLoaded: true,\n leagueName: request.data.response[0].league.name,\n leagueSize: request.data.response[0].league.standings[0].length,\n });\n\n return request;\n };\n fetchLeague();\n }, [initialTeam, currentLeague, season, setLeague, setState]);\n\n const wrapRank = (rank: number, direction: number): number => {\n let tempRank = rank;\n tempRank += direction;\n if (tempRank === state.leagueSize) tempRank = 0;\n if (tempRank === -1) tempRank = state.leagueSize - 1;\n return tempRank;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tableClickHandler = (direction: number): any => {\n const newRank = wrapRank(state.visibleRank, direction);\n setState({\n visibleRank: newRank,\n teamLogo: league[newRank].team.logo,\n team: league[newRank].team.name,\n boxScore: league[newRank].all,\n goalDiff: league[newRank].goalsDiff,\n points: league[newRank].points,\n form: league[newRank].form,\n });\n };\n\n return (\n <>\n {!state.dataLoaded ? (\n <Spinner msg=\"Loading Table\" />\n ) : (\n <div className=\"card-body\">\n <div className=\"arrow_container\">\n <div className=\"arrows\">\n <Button onClick={() => tableClickHandler(-1)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n className=\"bi bi-arrow-up\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5z\"\n />\n </svg>\n </Button>\n <Button onClick={() => tableClickHandler(1)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n className=\"bi bi-arrow-down\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1z\"\n />\n </svg>\n </Button>\n </div>\n </div>\n <TeamLogo logo={state.teamLogo} team={team} size=\"lrg\" showName={false} />\n <BoxScore\n team={state.team}\n boxScore={state.boxScore}\n goalDiff={state.goalDiff}\n points={state.points}\n rank={state.visibleRank}\n form={state.form}\n leagueName={state.leagueName}\n />\n </div>\n )}\n </>\n );\n};\n\nexport default Table;\n","import React, { FunctionComponent, useEffect } from 'react';\nimport axios from '../../hooks/axios';\nimport { useMergeState } from '../../hooks';\nimport TeamLogo from '../teamLogo/TeamLogo';\nimport Spinner from '../spinner/spinner';\n\nimport './gameCard.scss';\n\ntype GameCardProps = {\n // eslint-disable-next-line react/require-default-props\n direction: boolean;\n currentLeague: number;\n season: number;\n team: number;\n} & typeof defaultProps;\n\nconst defaultProps = {\n direction: true,\n currentLeague: 39,\n season: 2022,\n team: 50,\n};\n\nconst GameCard: FunctionComponent<GameCardProps> = ({\n direction,\n currentLeague,\n season,\n team,\n}): JSX.Element => {\n const apiDirection = direction ? 'last' : 'next';\n\n const initialState = {\n gameDate: '',\n gameTime: '',\n teams: { away: { name: '', id: '', logo: '' }, home: { name: '', id: '', logo: '' } },\n goals: { away: '0', home: '0' },\n venue: '',\n seasonOver: false,\n dataLoaded: false,\n gameStatus: null,\n };\n\n const [state, setState] = useMergeState(initialState);\n\n function formatTime(gameDate: Date): string {\n const hours: number =\n // eslint-disable-next-line no-nested-ternary\n gameDate.getHours() === 0\n ? 12\n : gameDate.getHours() > 12\n ? gameDate.getHours() - 12\n : gameDate.getHours();\n const minuntes: string = gameDate.getMinutes().toString().padStart(2, '0');\n const amPm = gameDate.getHours() < 12 ? 'AM' : 'PM';\n return `${hours.toString()}:${minuntes} ${amPm}`;\n }\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n const fetchGames = async () => {\n const request = await axios.get('/fixtures', {\n params: {\n season,\n league: currentLeague,\n team,\n [`${apiDirection}`]: '1',\n },\n });\n\n if (request.data.results > 0) {\n const teamData = { ...request.data.response[0] };\n // console.log(teamData);\n const gameDate = new Date(teamData.fixture.date);\n setState({\n teams: teamData.teams,\n goals: teamData.goals,\n venue: teamData.fixture.venue.name,\n gameDate: gameDate.toDateString(),\n gameTime: formatTime(gameDate),\n seasonOver: false,\n dataLoaded: true,\n gameStatus: teamData.fixture.status.long,\n });\n } else {\n setState({\n seasonOver: true,\n dataLoaded: true,\n });\n }\n return request;\n };\n\n fetchGames();\n }, [apiDirection, currentLeague, season, setState, team]);\n\n function isPostponed({ status }: { status: string }): string {\n if (status === 'Match Postponed') {\n return status;\n }\n return '';\n }\n\n return (\n <div className=\"card-body\">\n <div className=\"card-gameCard\">\n {!state.dataLoaded ? (\n <Spinner msg={direction ? 'Loading Last Game ' : 'Loading Next Game'} />\n ) : (\n <>\n {state.seasonOver ? (\n <>\n <h4>\n {direction ? 'Last ' : 'Next '}\n {team === state.teams.home.id\n ? state.teams.home.name\n : state.teams.away.name}{' '}\n Game\n </h4>\n <div className=\"card-nextSeason\">\n <h4>{direction ? 'Last ' : 'Next '} Season</h4>\n </div>\n </>\n ) : (\n <>\n <h4>\n {direction ? 'Last ' : 'Next '}\n {team === state.teams.home.id\n ? state.teams.home.name\n : state.teams.away.name}{' '}\n Game\n </h4>\n <div className=\"score\">\n <div className=\"score__block\">\n <TeamLogo\n logo={state.teams.home.logo}\n team={state.teams.home.name}\n size=\"med\"\n showName\n />\n </div>\n <div className=\"score__block\">\n {state.gameDate} - {state.gameTime}\n <br />\n <div className=\"postponed\">{isPostponed({ status: state.gameStatus })}</div>\n {direction && (\n <div className=\"score__score\">\n {state.goals.home} - {state.goals.away}\n </div>\n )}\n <div>{state.venue}</div>\n </div>\n <div className=\"score__block\">\n <TeamLogo\n logo={state.teams.away.logo}\n team={state.teams.away.name}\n size=\"med\"\n showName\n />\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default GameCard;\n","/* eslint-disable react/button-has-type */\nimport React, { FunctionComponent } from 'react';\nimport classnames from 'classnames';\nimport Card from 'react-bootstrap/Card';\nimport Table from '../table/table';\nimport GameCard from '../gameCard/gamecard';\n\nimport './banner.scss';\n\ntype BannerProps = {\n className: string;\n} & typeof defaultProps;\n\nconst defaultProps = {\n className: '',\n};\n\nconst Banner: FunctionComponent<BannerProps> = ({ className, children }) => {\n const season = 2023;\n const currentLeague = 39;\n const team = 50;\n\n return (\n <div className={classnames('container-fluid', className)}>\n <div className=\"row\">\n <div className=\"col-sm\">\n <Card>\n <Table season={season} currentLeague={currentLeague} initialTeam={team} />\n </Card>\n </div>\n <div className=\"col-sm\">\n <Card className=\"mobileHide\">\n <GameCard season={season} currentLeague={currentLeague} team={team} direction />\n </Card>\n </div>\n <div className=\"col-sm\">\n <Card className=\"mobileHide\">\n <GameCard season={season} currentLeague={currentLeague} team={team} direction={false} />\n </Card>\n </div>\n {children}\n </div>\n </div>\n );\n};\n\nexport default Banner;\n","import React from 'react';\nimport Banner from './components/banner/banner';\nimport './App.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst App = (): any => {\n return (\n <div className=\"App\">\n <header className=\"App-header\">\n <Banner className=\"football\" />\n </header>\n </div>\n );\n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.scss';\nimport App from './App';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root'),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n// reportWebVitals();\n"],"sourceRoot":""}