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.
149 lines
4.0 KiB
149 lines
4.0 KiB
import type { KeyboardEvent } from 'react'
|
|
import { useLocation, useRouteMatch } from 'react-router'
|
|
|
|
import getUnixTime from 'date-fns/getUnixTime'
|
|
|
|
import { ProfileTypes, PAGES } from 'config'
|
|
|
|
import type { Match } from 'features/Matches'
|
|
import { useMatchSwitchesStore } from 'features/MatchSwitches'
|
|
import { useName } from 'features/Name'
|
|
import { T9n } from 'features/T9n'
|
|
import { MatchAccess } from 'features/Matches/helpers/getMatchClickAction'
|
|
import { useUserFavoritesStore } from 'features/UserFavorites/store'
|
|
|
|
import { NoAccessMessage } from '../../NoAccessMessage'
|
|
import {
|
|
CardWrapperOuter,
|
|
CardWrapper,
|
|
Info,
|
|
LiveSign,
|
|
MatchDate,
|
|
MatchTimeInfo,
|
|
Preview,
|
|
PreviewWrapper,
|
|
Score,
|
|
Team,
|
|
TeamName,
|
|
Teams,
|
|
Time,
|
|
TeamLogos,
|
|
TeamLogo,
|
|
BuyMatchBadge,
|
|
SecondaryInfo,
|
|
FavoriteSign,
|
|
NameSignWrapper,
|
|
HoverFrame,
|
|
ScDollar,
|
|
} from './styled'
|
|
import { useCardPreview } from '../hooks'
|
|
|
|
type Props = {
|
|
match: Match,
|
|
onClick: () => void,
|
|
onKeyPress: (e: KeyboardEvent<HTMLLIElement>) => void,
|
|
}
|
|
|
|
export const CardFrontsideMobile = ({
|
|
match,
|
|
onClick,
|
|
onKeyPress,
|
|
}: Props) => {
|
|
const location = useLocation()
|
|
const {
|
|
access,
|
|
date,
|
|
formattedDate,
|
|
live,
|
|
preview,
|
|
previewURL,
|
|
sportType,
|
|
team1,
|
|
team2,
|
|
time,
|
|
tournament,
|
|
} = match
|
|
const isHomePage = useRouteMatch(PAGES.home)?.isExact
|
|
const isMatchPage = location.pathname.includes(PAGES.match)
|
|
const tournamentName = useName(tournament)
|
|
const { isInFavorites } = useUserFavoritesStore()
|
|
const { isScoreHidden } = useMatchSwitchesStore()
|
|
const isInFuture = getUnixTime(date) > getUnixTime(new Date())
|
|
const showScore = !(isInFuture || isScoreHidden) || (live && !isScoreHidden)
|
|
const team1InFavorites = isInFavorites(ProfileTypes.TEAMS, team1.id)
|
|
const team2InFavorites = isInFavorites(ProfileTypes.TEAMS, team2.id)
|
|
|
|
const { previewImage } = useCardPreview({
|
|
preview,
|
|
previewURL,
|
|
})
|
|
|
|
return (
|
|
<CardWrapperOuter onClick={onClick} onKeyPress={onKeyPress}>
|
|
<CardWrapper>
|
|
<HoverFrame />
|
|
<PreviewWrapper>
|
|
{previewImage && (
|
|
<Preview title={tournamentName} src={previewImage} />
|
|
)}
|
|
{access === MatchAccess.NoCountryAccess ? (
|
|
<NoAccessMessage />
|
|
) : (
|
|
<TeamLogos>
|
|
<TeamLogo
|
|
id={team1.id}
|
|
nameAsTitle
|
|
altNameObj={team1}
|
|
sportType={sportType}
|
|
profileType={ProfileTypes.TEAMS}
|
|
/>
|
|
<TeamLogo
|
|
id={team2.id}
|
|
nameAsTitle
|
|
altNameObj={team2}
|
|
sportType={sportType}
|
|
profileType={ProfileTypes.TEAMS}
|
|
/>
|
|
</TeamLogos>
|
|
)}
|
|
<MatchTimeInfo>
|
|
<MatchDate isHomePage={isHomePage}>
|
|
{isHomePage || isMatchPage ? null : formattedDate}
|
|
{live && (
|
|
<LiveSign>
|
|
<T9n t='live' />
|
|
</LiveSign>
|
|
)}
|
|
</MatchDate>
|
|
</MatchTimeInfo>
|
|
</PreviewWrapper>
|
|
<Info>
|
|
<Teams>
|
|
<Team>
|
|
<NameSignWrapper>
|
|
<TeamName nameObj={team1} />
|
|
{team1InFavorites && <FavoriteSign />}
|
|
</NameSignWrapper>
|
|
{showScore && <Score>{team1.score}</Score>}
|
|
</Team>
|
|
<Team>
|
|
<NameSignWrapper>
|
|
<TeamName nameObj={team2} />
|
|
{team2InFavorites && <FavoriteSign />}
|
|
</NameSignWrapper>
|
|
{showScore && <Score>{team2.score}</Score>}
|
|
</Team>
|
|
</Teams>
|
|
<SecondaryInfo>
|
|
<Time>{time}</Time>
|
|
{access === MatchAccess.CanBuyMatch && (
|
|
<BuyMatchBadge>
|
|
<ScDollar refIcon='Dollar' />
|
|
</BuyMatchBadge>
|
|
)}
|
|
</SecondaryInfo>
|
|
</Info>
|
|
</CardWrapper>
|
|
</CardWrapperOuter>
|
|
)
|
|
}
|
|
|