You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
spa_instat_tv/src/features/TournamentPage/hooks.tsx

61 lines
1.4 KiB

import {
useEffect,
useState,
useCallback,
} from 'react'
import { useHistory } from 'react-router'
import type { TournamentInfo } from 'requests'
import { getTournamentInfo, getTournamentMatches } from 'requests'
import { usePageParams } from 'hooks/usePageParams'
import { useName } from 'features/Name'
import { isPermittedTournament } from '../../helpers/isPermittedTournament'
export const useTournamentPage = () => {
const [tournamentProfile, setTournamentProfile] = useState<TournamentInfo>(null)
const { profileId: tournamentId, sportType } = usePageParams()
const country = useName(tournamentProfile?.country || {})
const history = useHistory()
useEffect(() => {
if (!isPermittedTournament(tournamentId, sportType)) {
history.push('/')
}
getTournamentInfo(sportType, tournamentId)
.then(setTournamentProfile)
},
[
history,
sportType,
tournamentId,
])
const fetchMatches = useCallback(
(limit: number, offset: number) => getTournamentMatches({
limit,
offset,
sportType,
tournamentId,
}),
[
tournamentId,
sportType,
],
)
const profile = tournamentProfile && {
additionalInfo: tournamentProfile.country,
name_eng: tournamentProfile.name_eng,
name_rus: tournamentProfile.name_rus,
}
return {
fetchMatches,
headerImage: tournamentProfile?.header_image,
infoItems: [country],
profile,
tournamentId,
}
}