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 ( {matchProfile?.sub || !user ? children : null} ) }