1- import { useEffect } from 'react'
1+ import { useEffect, useState } from 'react'
22import { useNavigate, useParams } from 'react-router-dom'
33import ErrorMessage from '../components/ErrorMessage'
44import TableCell from '../components/tables/TableCell'
@@ -14,20 +14,31 @@ import usePlayer from '../utils/usePlayer'
1414import Table from '../components/tables/Table'
1515import { useRecoilValue } from 'recoil'
1616import activeGameState, { SelectedActiveGame } from '../state/activeGameState'
17+ import Button from '../components/Button'
18+ import { IconPencil } from '@tabler/icons-react'
19+ import { PlayerGameStat } from '../entities/playerGameStat'
20+ import UpdateStatValue from '../modals/UpdateStatValue'
21+ import { PermissionBasedAction } from '../utils/canPerformAction'
22+ import canPerformAction from '../utils/canPerformAction'
23+ import userState from '../state/userState'
24+ import { AuthedUser } from '../state/userState'
1725
1826export default function PlayerStats() {
27+ const user = useRecoilValue(userState) as AuthedUser
1928 const activeGame = useRecoilValue(activeGameState) as SelectedActiveGame
2029
2130 const { id: playerId } = useParams()
2231 const [player] = usePlayer()
2332
24- const { stats, loading: statsLoading, error, errorStatusCode } = usePlayerStats(activeGame, playerId!)
33+ const { stats, loading: statsLoading, error, errorStatusCode, mutate } = usePlayerStats(activeGame, playerId!)
2534 const sortedStats = useSortedItems(stats, 'updatedAt')
2635
2736 const navigate = useNavigate()
2837
2938 const loading = !player || statsLoading
3039
40+ const [editingStat, setEditingStat] = useState<PlayerGameStat | null>(null)
41+
3142 useEffect(() => {
3243 if (errorStatusCode === 404) {
3344 navigate(routes.players, { replace: true })
@@ -52,7 +63,20 @@ export default function PlayerStats() {
5263 {(playerStat) => (
5364 <>
5465 <TableCell className='min-w-60'>{playerStat.stat.name}</TableCell>
55- <TableCell className='min-w-40'>{playerStat.value}</TableCell>
66+ <TableCell className='min-w-40 flex items-center space-x-2'>
67+ <>
68+ <span>{playerStat.value}</span>
69+ {canPerformAction(user, PermissionBasedAction.UPDATE_PLAYER_STAT) &&
70+ <Button
71+ variant='icon'
72+ className='p-1 rounded-full bg-indigo-900'
73+ onClick={() => setEditingStat(playerStat)}
74+ icon={<IconPencil size={16} />}
75+ extra={{ 'aria-label': 'Edit game name' }}
76+ />
77+ }
78+ </>
79+ </TableCell>
5680 <DateCell>{format(new Date(playerStat.createdAt), 'dd MMM Y, HH:mm')}</DateCell>
5781 <DateCell>{format(new Date(playerStat.updatedAt), 'dd MMM Y, HH:mm')}</DateCell>
5882 </>
@@ -61,6 +85,15 @@ export default function PlayerStats() {
6185 </Table>
6286 }
6387
88+ {editingStat &&
89+ <UpdateStatValue
90+ modalState={[true, () => setEditingStat(null)]}
91+ mutate={mutate}
92+ editingStat={editingStat}
93+ player={player}
94+ />
95+ }
96+
6497 {error && <ErrorMessage error={error} />}
6598 </Page>
6699 )
0 commit comments