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/MatchPage/components/SubscriptionGuard/index.tsx

82 lines
2.1 KiB

import type { ReactNode } from 'react'
import { Fragment, useEffect } from 'react'
import { useHistory } from 'react-router-dom'
import { isMobileDevice, PAGES } from 'config'
import { usePageParams } from 'hooks'
import { useBuyMatchPopupStore } from 'features/BuyMatchPopup'
import { useMatchPageStore } from 'features/MatchPage/store'
import { MatchAccess } from 'features/Matches/helpers/getMatchClickAction'
import { isSubscribePopup } from 'helpers'
import { getMatchInfo } from 'requests'
import { prepareMatchProfile } from '../../helpers/prepareMatchProfile'
import { useAuthStore } from '../../../AuthStore'
type Props = {
children: ReactNode,
}
export const SubscriptionGuard = ({ children }: Props) => {
const { profile: matchProfile, setMatchProfile } = useMatchPageStore()
const { match, open: openBuyMatchPopup } = useBuyMatchPopupStore()
const { profileId: matchId, sportType } = usePageParams()
const { user } = useAuthStore()
const history = useHistory()
const checkAccess = async () => {
const profile = await getMatchInfo(sportType, matchId)
if (!profile?.sub) {
history.replace(PAGES.home)
}
}
useEffect(() => {
let timer: NodeJS.Timeout
if ((user && matchProfile
&& !matchProfile.sub
&& match?.access !== MatchAccess.RedirectToProfile)
|| (matchProfile && isSubscribePopup())) {
const profile = prepareMatchProfile({
matchId,
profile: matchProfile,
sportType,
})
openBuyMatchPopup(profile)
isMobileDevice && history.replace(PAGES.subscriptions)
}
if (match?.access === MatchAccess.RedirectToProfile) {
setMatchProfile((profile) => profile && {
...profile,
access: true,
sub: true,
})
timer = setTimeout(checkAccess, 30000)
}
return () => timer && clearTimeout(timer)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
matchId,
openBuyMatchPopup,
matchProfile?.sub,
sportType,
user,
match?.access,
history,
])
return (
<Fragment>
{matchProfile?.sub || !user ? children : null}
</Fragment>
)
}