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.
132 lines
3.4 KiB
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>
|
|
)
|
|
}
|
|
|