Passed
Push — feature/full-redesign ( 15ceb9...e2df01 )
by Kevin Van
04:43
created

TeamStats.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 axios from "axios"
2
import React from "react"
3
import { useEffect, useState } from "react"
4
import { useSiteMetaData } from "../hooks/use-site-metadata"
5
import { translateGameResult } from "../scripts/helper"
6
import { Card } from "./Card"
7
import { Spinner } from "./Spinner"
8
import "./TeamStats.scss"
9
import iconCardRed from "../images/i_card_red.png"
10
import iconCardYellow from "../images/i_card_yellow.png"
11
import iconCleansheet from "../images/i_cleansheet.png"
12
import iconGoal from "../images/i_goal.png"
13
import Icon from "./Icon"
14
15
const TeamStats = ({ teamId = 1 }: TeamStatsProps) => {
16
  const [data, setData] = useState<TeamStatsDataObject>()
17
  const { kcvvPsdApi } = useSiteMetaData()
18
19
  useEffect(() => {
20
    async function getData() {
21
      const response = await axios.get(`${kcvvPsdApi}/stats/team/${teamId}`)
22
      setData(response.data)
23
    }
24
    getData()
25
  }, [kcvvPsdApi, teamId])
26
27
  return (
28
    <section className="team__stats__wrapper">
29
      {data !== null || <Spinner />}
30
      {data && renderTeamStats(data)}
31
      {data && renderTeamSquadStats(data)}
32
    </section>
33
  )
34
}
35
36
const renderTeamStats = ({ extraStats }: TeamStatsDataObject) => (
37
  <Card className="team__stats__team" title="Statistieken">
38
    <section className="team__stats__stats">
39
      <span className="team__stats__label">Gespeeld</span>
40
      <span>{extraStats.gamesPlayed}</span>
41
      <span className="team__stats__label">Gewonnen</span>
42
      <span>{extraStats.gamesWon}</span>
43
      <span className="team__stats__label">Gelijk</span>
44
      <span>{extraStats.gamesEqual}</span>
45
      <span className="team__stats__label">Verloren</span>
46
      <span>{extraStats.gamesLost}</span>
47
      <span className="team__stats__label">Cleansheets</span>
48
      <span>{extraStats.cleanSheets}</span>
49
      <span className="team__stats__label">Gele kaarten</span>
50
      <span>{extraStats.yellowCards}</span>
51
      <span className="team__stats__label">Rode kaarten</span>
52
      <span>{extraStats.redCards}</span>
53
      <span className="team__stats__label">Wedstrijden niet gescoord</span>
54
      <span>{extraStats.notScored}</span>
55
      <span className="team__stats__label">Grootste overwinning</span>
56
      <span>
57
        {extraStats.biggestWin.result} tegen {extraStats.biggestWin.opponent}
58
      </span>
59
      <span className="team__stats__label">Grootste verlies</span>
60
      <span>
61
        {extraStats.biggestLoss.result} tegen {extraStats.biggestLoss.opponent}
62
      </span>
63
      <span className="team__stats__label">Meeste doelpunten</span>
64
      <span>
65
        {extraStats.mostGoals.result} tegen {extraStats.mostGoals.opponent}
66
      </span>
67
      <span className="team__stats__label">Topschutters</span>
68
      <ul className="team__stats__list">
69
        {extraStats.topscorers
70
          .sort((a, b) => b.value - a.value)
71
          .map((player, i) => (
72
            <li key={i}>
73
              {player.firstName} {player.lastName} ({player.value})
74
            </li>
75
          ))}
76
      </ul>
77
      <span className="team__stats__label">Laatste wedstrijden</span>
78
      <span>
79
        {extraStats.gameStreak.map((game, i) => (
80
          <span
81
            key={i}
82
            className={`team__stats__streak team__stats__streak--${game.result.toLowerCase()}`}
83
            title={`${translateGameResult(game.result)}`}
84
          >
85
            {game.result.charAt(0) !== `E` ? game.result.charAt(0) : `D`}
86
          </span>
87
        ))}
88
      </span>
89
    </section>
90
    <table className="team__stats__bars">
91
      <tr>
92
        <th className="team__stats__bars__title" colSpan={3} scope="row">
93
          Doelpunten
94
        </th>
95
      </tr>
96
      <tr className="team__stats__goals">
97
        <td className="team__stats__bars__label">{extraStats.goalsScored || `0`}</td>
98
        <td className="team__stats__bars__bars">
99
          <div className="team__stats__bars__bars__wrapper">
100
            <span
101
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
102
              style={{
103
                width: `calc(100% * ${extraStats.goalsScored / (extraStats.goalsScored + extraStats.goalsAgainst)})`,
104
              }}
105
            >
106
              {extraStats.goalsScored}
107
            </span>
108
            <span
109
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
110
              style={{
111
                width: `calc(100% * ${extraStats.goalsAgainst / (extraStats.goalsScored + extraStats.goalsAgainst)})`,
112
              }}
113
            >
114
              {extraStats.goalsAgainst}
115
            </span>
116
          </div>
117
        </td>
118
        <td className="team__stats__bars__label">{extraStats.goalsAgainst || `0`}</td>
119
      </tr>
120
      <tr>
121
        <th className="team__stats__bars__title" colSpan={3} scope="row">
122
          Wedstrijden
123
        </th>
124
      </tr>
125
      <tr className="team__stats__goals">
126
        <td className="team__stats__bars__label">{extraStats.gamesWon}</td>
127
        <td className="team__stats__bars__bars">
128
          <div className="team__stats__bars__bars__wrapper">
129
            <span
130
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
131
              style={{
132
                width: `calc(100% * ${extraStats.gamesWon / extraStats.gamesPlayed})`,
133
              }}
134
            >
135
              {extraStats.gamesWon}
136
            </span>
137
            <span
138
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
139
              style={{
140
                width: `calc(100% * ${extraStats.gamesLost / extraStats.gamesPlayed})`,
141
              }}
142
            >
143
              {extraStats.gamesLost}
144
            </span>
145
          </div>
146
        </td>
147
        <td className="team__stats__bars__label">{extraStats.gamesLost}</td>
148
      </tr>
149
      <tr>
150
        <th className="team__stats__bars__title" colSpan={3} scope="row">
151
          Cleansheets vs niet gescoord
152
        </th>
153
      </tr>
154
      <tr className="team__stats__goals">
155
        <td className="team__stats__bars__label">{extraStats.cleanSheets}</td>
156
        <td className="team__stats__bars__bars">
157
          <div className="team__stats__bars__bars__wrapper">
158
            <span
159
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
160
              style={{
161
                width: `calc(100% * ${extraStats.cleanSheets / (extraStats.cleanSheets + extraStats.notScored)})`,
162
              }}
163
            >
164
              {extraStats.cleanSheets}
165
            </span>
166
            <span
167
              className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
168
              style={{
169
                width: `calc(100% * ${extraStats.notScored / (extraStats.cleanSheets + extraStats.notScored)})`,
170
              }}
171
            >
172
              {extraStats.notScored}
173
            </span>
174
          </div>
175
        </td>
176
        <td className="team__stats__bars__label">{extraStats.notScored}</td>
177
      </tr>
178
    </table>
179
  </Card>
180
)
181
182
const renderTeamSquadStats = ({ squadPlayerStatistics }: TeamStatsDataObject) => {
183
  squadPlayerStatistics.sort((a, b) => b.minutes - a.minutes)
184
185
  return (
186
    <Card className="team__stats__players" title="Spelers" hasTable={true}>
187
      <table className="team__stats__players_overview">
188
        <thead>
189
          <tr>
190
            <th className="table__column__string">Speler</th>
191
            <th className="table__column__number show-for-medium">
192
              <span title="Wedstrijden gespeeld">P</span>
193
            </th>
194
            <th className="table__column__number">
195
              <span title="Wedstrijden gewonnen">W</span>
196
            </th>
197
            <th className="table__column__number">
198
              <span title="Wedstrijden gelijkgespeeld">D</span>
199
            </th>
200
            <th className="table__column__number">
201
              <span title="Wedstrijden verloren">L</span>
202
            </th>
203
            <th className="table__column__number">
204
              <img src={iconCardYellow} title="Gele kaart" alt="Gele kaart" className="table__header__icon" />
205
            </th>
206
            <th className="table__column__number">
207
              <img src={iconCardRed} title="Rode kaart" alt="Rode kaart" className="table__header__icon" />
208
            </th>
209
            <th className="table__column__number">
210
              <img
211
                src={iconGoal}
212
                title="Doelpunt(en) gescoord"
213
                alt="Doelpunt(en) gescoord"
214
                className="table__header__icon"
215
              />
216
            </th>
217
            <th className="table__column__number show-for-medium">
218
              <img src={iconCleansheet} title="Cleansheets" alt="Cleansheets" className="table__header__icon" />
219
            </th>
220
            <th className="table__column__number">
221
              <span title="Minuten gespeeld">
222
                <Icon icon="fa-clock-o" />
223
              </span>
224
            </th>
225
          </tr>
226
        </thead>
227
        <tbody>
228
          {squadPlayerStatistics
229
            .sort((a, b) => b.minutes - a.minutes)
230
            .map(function (player) {
231
              return (
232
                <tr>
233
                  <td className="table__column__string">
234
                    {player.firstName} {player.lastName}
235
                  </td>
236
                  <td className="table__column__number show-for-medium">{player.gamesPlayed}</td>
237
                  <td className="table__column__number">{player.gamesWon}</td>
238
                  <td className="table__column__number">{player.gamesEqual}</td>
239
                  <td className="table__column__number">{player.gamesLost}</td>
240
                  <td className="table__column__number">{player.yellowCards}</td>
241
                  <td className="table__column__number">{player.redCards}</td>
242
                  <td className="table__column__number">{player.goals}</td>
243
                  <td className="table__column__number show-for-medium">{player.cleanSheets}</td>
244
                  <td className="table__column__number">{player.minutes || `0`}'</td>
245
                </tr>
246
              )
247
            })}
248
        </tbody>
249
      </table>
250
    </Card>
251
  )
252
}
253
254
export default TeamStats
255