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

136 lines
3.4 KiB

import {
useEffect,
useState,
useCallback,
} from 'react'
import { useHistory } from 'react-router'
import type { TournamentInfo } from 'requests'
import {
getTournamentInfo,
getTournamentMatches,
} from 'requests'
import { openSubscribePopup, redirectToUrl } from 'helpers'
import { PAGES } from 'config/pages'
import { useName } from 'features/Name'
import { checkUrlParams } from 'helpers/parseUrlParams/parseUrlParams'
import { usePageParams } from 'hooks/usePageParams'
import { isPermittedTournament } from '../../helpers/isPermittedTournament'
import { getLandingStatus } from '../../requests/getLandingStatus'
import { useProfileCard } from '../ProfileCard/hooks'
import { useBuyMatchPopupStore } from '../BuyMatchPopup'
import { MATCH_CONFIG } from '../BuyMatchPopup/store/hooks/useSubscriptions'
import { useAuthStore } from '../AuthStore'
export const useTournamentPage = () => {
const [tournamentProfile, setTournamentProfile] = useState<TournamentInfo>(null)
const { profileId: tournamentId, sportType } = usePageParams()
const { open: openBuyMatchPopup } = useBuyMatchPopupStore()
const country = useName(tournamentProfile?.country || {})
const history = useHistory()
const {
isFromLanding,
setIsFromLanding,
setLandingUrlFrom,
user,
} = useAuthStore()
const { isFavorite, toggleFavorites } = useProfileCard()
useEffect(
() => {
if (!isPermittedTournament(tournamentId, sportType)) {
history.push('/')
}
getTournamentInfo(sportType, tournamentId)
.then(setTournamentProfile)
},
[
history,
sportType,
tournamentId,
],
)
useEffect(() => {
if (user || isFromLanding || history.length > 1) return
setLandingUrlFrom(window.location.pathname)
getLandingStatus({ sportType, tournamentId })
.then((data) => {
sessionStorage.setItem(
'landingData',
JSON.stringify({ ...data, defaultLanding: false }),
)
setIsFromLanding(false)
if (data.landing_id) redirectToUrl(`${PAGES.landing}/${data.landing_id}`)
})
.catch(() => {
sessionStorage.setItem('landingData', JSON.stringify({
defaultLanding: true,
sportType,
tournamentId,
}))
redirectToUrl(`${PAGES.landing}/default`)
})
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
setLandingUrlFrom,
isFromLanding,
tournamentId,
setIsFromLanding,
sportType,
user,
])
useEffect(() => {
!isFavorite
&& checkUrlParams('from') === 'landing'
&& toggleFavorites()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
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,
}
useEffect(() => {
openSubscribePopup(
{
matchConfig: MATCH_CONFIG,
openBuyMatchPopup,
},
)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
return {
fetchMatches,
headerImage: tournamentProfile?.header_image,
infoItems: [country],
profile,
tournamentId,
user,
}
}