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/MatchDescription/index.tsx

132 lines
3.4 KiB

import { useCallback } from 'react'
import { useQuery } from 'react-query'
import { format } from 'date-fns'
import includes from 'lodash/includes'
import isNil from 'lodash/isNil'
import type { Team } from 'requests/getMatchInfo'
import { getName, Name } from 'features/Name'
import { useAuthStore } from 'features/AuthStore'
import { useMatchSwitchesStore } from 'features/MatchSwitches'
import { TournamentSubtitle } from 'features/TournamentSubtitle'
import { useLexicsStore } from 'features/LexicsStore'
import { useMatchPageStore } from 'features/MatchPage/store'
import { parseDate } from 'helpers/parseDate'
import { ProfileTypes } from 'config'
import { isMobileDevice } from 'config/userAgent'
import { querieKeys } from 'config/queries'
import { usePageParams } from 'hooks/usePageParams'
import { getMatchScore } from 'requests/getMatchScore'
import {
Description,
DescriptionInnerBlock,
MatchDate,
Score,
StyledLink,
Time,
Title,
Views,
} from './styled'
export const MatchDescription = () => {
const {
profileId,
sportType,
} = usePageParams()
const { user } = useAuthStore()
const { isScoreHidden } = useMatchSwitchesStore()
const { suffix } = useLexicsStore()
const { profile, profileCardShown } = useMatchPageStore()
const getTeamName = useCallback((team: Team) => (
isMobileDevice
? getName({ nameObj: team, suffix })
: <Name nameObj={team} />
), [suffix])
const { data: queryScore } = useQuery({
queryFn: async () => {
if (profile?.live && !isScoreHidden) {
const score = await getMatchScore({ profileId, sportType })
return score
}
return null
},
queryKey: querieKeys.matchScore,
refetchInterval: 5000,
})
if (!profile) return <Description />
const {
country,
country_id,
date,
sport,
team1,
team2,
tournament,
} = profile
const isChangedTimeFormat = includes(['US', 'CA'], user?.profile.country_code)
const localDate = format(parseDate(date), isMobileDevice ? 'MMM d, y' : 'MMMM d, y')
const changedTimeFormat = format(parseDate(date),
isChangedTimeFormat ? 'h:mm a' : 'HH:mm')
return (
<Description isHidden={!profileCardShown}>
<DescriptionInnerBlock>
<Title>
<StyledLink
id={team1.id}
profileType={ProfileTypes.TEAMS}
sportType={sportType}
>
{getTeamName(team1)}
</StyledLink>
<Score>
{
isScoreHidden || isNil(team1.score) || isNil(team2.score)
? '-'
: `${queryScore?.team1.score ?? team1.score} - ${queryScore?.team2.score ?? team2.score}`
}
</Score>
<StyledLink
id={team2.id}
profileType={ProfileTypes.TEAMS}
sportType={sportType}
>
{getTeamName(team2)}
</StyledLink>
</Title>
<TournamentSubtitle
countryInfo={country}
countryId={country_id}
sportInfo={sport}
tournament={tournament}
time={isMobileDevice ? changedTimeFormat : null}
date={isMobileDevice ? localDate : null}
/>
</DescriptionInnerBlock>
{
!isMobileDevice && (
<Views>
<Time>{changedTimeFormat}</Time>
<MatchDate>{localDate}</MatchDate>
</Views>
)
}
</Description>
)
}