src/components/Ranking.tsx   A
last analyzed

Complexity

Total Complexity 11
Complexity/F 11

Size

Lines of Code 94
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 11
eloc 81
mnd 10
bc 10
fnc 1
dl 0
loc 94
rs 10
bpm 10
cpm 11
noi 0
c 0
b 0
f 0

1 Function

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