Passed
Push — feature/full-redesign ( df0162...8cb7da )
by Kevin Van
04:35
created

MiniRanking.tsx ➔ getData   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 1
1
import { MiniRankingProps } from "../Types/MiniRanking"
2
import { RankingDataObject, RankingDataTeamObject } from "../Types/Ranking"
3
import { useSiteMetaData } from "../hooks/use-site-metadata"
4
import { useEffect, useState } from "react"
5
import axios from "axios"
6
import React from "react"
7
import { Spinner } from "./Spinner"
8
import { sortRankings } from "../scripts/helper"
9
10
export const MiniRanking = ({ teamId, homeTeam, awayTeam }: MiniRankingProps) => {
11
  const [data, setData] = useState<RankingDataObject[]>([])
12
13
  const { kcvvPsdApi } = useSiteMetaData()
14
15
  useEffect(() => {
16
    async function getData() {
17
      const response = await axios.get(`${kcvvPsdApi}/ranking/${teamId}`)
18
      setData(response.data)
19
    }
20
    getData()
21
  }, [kcvvPsdApi, teamId])
22
  return (
23
    <section className={`ranking__wrapper`}>
24
      {data.length > 0 || <Spinner />}
25
      {data && renderRankings(data, homeTeam, awayTeam)}
26
    </section>
27
  )
28
}
29
30
const renderRankings = (rankings: RankingDataObject[], homeTeam: string, awayTeam: string) => (
31
  <>
32
    {rankings
33
      .filter((ranking: RankingDataObject) => ranking.teams.length > 0)
34
      .sort((a, b) => a.name.localeCompare(b.name))
35
      .map((ranking: RankingDataObject, i: number) => i === 0 && renderRanking(ranking, homeTeam, awayTeam, i))}
36
  </>
37
)
38
39
const renderRanking = (ranking: RankingDataObject, homeTeam: string, awayTeam: string, i: number) => (
40
  <div className={`ranking`} key={i}>
41
    <h4>{ranking.name.replace(`Voetbal : `, ``)}</h4>
42
    <table>
43
      <thead>
44
        <tr>
45
          <th className={`table__column__number`}>#</th>
46
          <th className={`table__column__string`}>Team</th>
47
          <th className={`table__column__number show-for-medium`}>P</th>
48
          <th className={`table__column__number`}>W</th>
49
          <th className={`table__column__number`}>D</th>
50
          <th className={`table__column__number`}>L</th>
51
          <th className={`table__column__number show-for-medium`}>G+</th>
52
          <th className={`table__column__number show-for-medium`}>G-</th>
53
          <th className={`table__column__number`}>+/-</th>
54
          <th className={`table__column__number`}>Pts</th>
55
        </tr>
56
      </thead>
57
      <tbody>
58
        {ranking.teams.sort(sortRankings).map(
59
          (team: RankingDataTeamObject, j: number) =>
60
            (team.team?.club?.localName.includes(homeTeam) || team.team?.club?.localName.includes(awayTeam)) && (
61
              <tr key={j}>
62
                <td className={`table__column__number`}>{team.rank || `-`}</td>
63
                <td
64
                  className={`table__column__string ${
65
                    team.team?.club?.localName?.toLowerCase().includes(`elewijt`) ? `table__column--highlight` : ``
66
                  }`}
67
                >
68
                  {team.team?.club?.localName || ``}
69
                </td>
70
                <td className={`table__column__number show-for-medium`}>{team.matchesPlayed || `0`}</td>
71
                <td className={`table__column__number`}>{team.wins || `0`}</td>
72
                <td className={`table__column__number`}>{team.draws || `0`}</td>
73
                <td className={`table__column__number`}>{team.losses || `0`}</td>
74
                <td className={`table__column__number show-for-medium`}>{team.goalsScored || `0`}</td>
75
                <td className={`table__column__number show-for-medium`}>{team.goalsConceded || `0`}</td>
76
                <td className={`table__column__number`}>{team.goalsScored - team.goalsConceded || `0`}</td>
77
                <td className={`table__column__number`}>{team.points || `0`}</td>
78
              </tr>
79
            )
80
        )}
81
      </tbody>
82
    </table>
83
  </div>
84
)
85
86
export default MiniRanking
87