style(#2317): fix style for desktop version in homepage
parent
161629a114
commit
4dde396f59
@ -0,0 +1,147 @@ |
|||||||
|
import type { KeyboardEvent } from 'react' |
||||||
|
import { 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 { |
||||||
|
access, |
||||||
|
date, |
||||||
|
formattedDate, |
||||||
|
live, |
||||||
|
preview, |
||||||
|
previewURL, |
||||||
|
sportType, |
||||||
|
team1, |
||||||
|
team2, |
||||||
|
time, |
||||||
|
tournament, |
||||||
|
} = match |
||||||
|
const isHomePage = useRouteMatch(PAGES.home)?.isExact |
||||||
|
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 ? 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' size={5} /> |
||||||
|
</BuyMatchBadge> |
||||||
|
)} |
||||||
|
</SecondaryInfo> |
||||||
|
</Info> |
||||||
|
</CardWrapper> |
||||||
|
</CardWrapperOuter> |
||||||
|
) |
||||||
|
} |
||||||
@ -0,0 +1,350 @@ |
|||||||
|
import styled, { css } from 'styled-components/macro' |
||||||
|
|
||||||
|
import { devices } from 'config/devices' |
||||||
|
import { isMobileDevice } from 'config/userAgent' |
||||||
|
|
||||||
|
import { Name } from 'features/Name' |
||||||
|
import { Icon } from 'features/Icon' |
||||||
|
import { ProfileLogo } from 'features/ProfileLogo' |
||||||
|
|
||||||
|
export const CardWrapperOuter = styled.li.attrs({ |
||||||
|
tabIndex: 0, |
||||||
|
})` |
||||||
|
padding-top: 100%; |
||||||
|
position: relative; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
width: 100%; |
||||||
|
padding-top: 0; |
||||||
|
margin-top: 6px; |
||||||
|
|
||||||
|
@media screen and (orientation: landscape) { |
||||||
|
width: 100%; |
||||||
|
:nth-child(odd) { |
||||||
|
margin-right: 10px; |
||||||
|
} |
||||||
|
} |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const CardWrapper = styled.div` |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
bottom: 0; |
||||||
|
right: 0; |
||||||
|
padding-bottom: 0.75rem; |
||||||
|
border-radius: 2px; |
||||||
|
background-color: #3F3F3F; |
||||||
|
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.4); |
||||||
|
cursor: pointer; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
position: static; |
||||||
|
display: flex; |
||||||
|
width: 100%; |
||||||
|
height: 75px; |
||||||
|
padding-bottom: 0; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const HoverFrame = styled.div` |
||||||
|
position: absolute; |
||||||
|
min-width: 100%; |
||||||
|
min-height: 100%; |
||||||
|
border-radius: 2px; |
||||||
|
border: 2px solid transparent; |
||||||
|
transition: border 0.5s ease-out; |
||||||
|
z-index: 2; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
border: 2px solid #fff |
||||||
|
} |
||||||
|
` |
||||||
|
|
||||||
|
export const PreviewWrapper = styled.div` |
||||||
|
position: relative; |
||||||
|
display: flex; |
||||||
|
width: 100%; |
||||||
|
height: 60%; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
width: 40%; |
||||||
|
height: 100%; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const Preview = styled.img` |
||||||
|
position: absolute; |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
object-fit: cover; |
||||||
|
opacity: 0.4; |
||||||
|
|
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
opacity: 0.2; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const MatchTimeInfo = styled.div` |
||||||
|
width: 100%; |
||||||
|
position: absolute; |
||||||
|
top: 0.519rem; |
||||||
|
padding: 0 0.519rem; |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
` |
||||||
|
|
||||||
|
type MatchDateProps = { |
||||||
|
isHomePage?: boolean, |
||||||
|
} |
||||||
|
|
||||||
|
export const MatchDate = styled.div<MatchDateProps>` |
||||||
|
width: fit-content; |
||||||
|
height: 0.9rem; |
||||||
|
border-radius: 2px; |
||||||
|
padding: ${({ isHomePage }) => (!isHomePage ? '0 0.27rem' : '')}; |
||||||
|
font-weight: bold; |
||||||
|
font-size: 0.472rem; |
||||||
|
line-height: 0.567rem; |
||||||
|
letter-spacing: 0.05em; |
||||||
|
text-transform: uppercase; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
white-space: nowrap; |
||||||
|
color: white; |
||||||
|
background-color: #6D6D6D; |
||||||
|
|
||||||
|
@media ${devices.tablet} { |
||||||
|
padding: ${({ isHomePage }) => (!isHomePage ? '0.27rem 0.36rem' : '')}; |
||||||
|
} |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
background-color: transparent; |
||||||
|
margin-left: 4px; |
||||||
|
height: 15px; |
||||||
|
width: 22px; |
||||||
|
font-size: 7px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
type LiveType = { |
||||||
|
color?: string, |
||||||
|
} |
||||||
|
|
||||||
|
export const LiveSign = styled(MatchDate)<LiveType>` |
||||||
|
background-color: ${({ color }) => color ?? '#CC0000'}; |
||||||
|
margin-left: auto; |
||||||
|
|
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
font-size: 7px; |
||||||
|
padding: 3px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const Time = styled.span` |
||||||
|
margin: 0 0.2rem; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
font-size: 10px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const Info = styled.div` |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
padding: 0.85rem 0.472rem 0 0.519rem; |
||||||
|
color: #fff; |
||||||
|
text-overflow: ellipsis; |
||||||
|
overflow: hidden; |
||||||
|
white-space: nowrap; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
/* position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 45%; */ |
||||||
|
width: 60%; |
||||||
|
height: 100%; |
||||||
|
padding: 9px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const SecondaryInfo = styled.div` |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
|
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
justify-content: space-between; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const CountryFlag = styled.img` |
||||||
|
width: 0.71rem; |
||||||
|
height: 0.75rem; |
||||||
|
margin-left: 0.567rem; |
||||||
|
object-fit: contain; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
object-fit: cover; |
||||||
|
width: 12px; |
||||||
|
height: 100%; |
||||||
|
margin-left: 8px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
type FavoriteSignProps = { |
||||||
|
color?: string, |
||||||
|
marginLeft?: number, |
||||||
|
} |
||||||
|
|
||||||
|
export const FavoriteSign = styled.span<FavoriteSignProps>` |
||||||
|
display: inline-block; |
||||||
|
margin-left: ${({ marginLeft = 9 }) => marginLeft}px; |
||||||
|
color: ${({ color }) => color}; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 8px; |
||||||
|
height: 8px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
const nameStyles = css` |
||||||
|
text-overflow: ellipsis; |
||||||
|
white-space: nowrap; |
||||||
|
overflow: hidden; |
||||||
|
` |
||||||
|
|
||||||
|
export const TournamentName = styled.span` |
||||||
|
max-width: 95%; |
||||||
|
color: rgba(255, 255, 255, 0.7); |
||||||
|
font-size: 0.567rem; |
||||||
|
line-height: 0.95rem; |
||||||
|
margin-left: 0.567rem; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
font-size: 10px; |
||||||
|
line-height: 100%; |
||||||
|
max-width: 100%; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
|
||||||
|
${nameStyles} |
||||||
|
` |
||||||
|
|
||||||
|
export const Teams = styled.div` |
||||||
|
margin-bottom: 0.567rem; |
||||||
|
` |
||||||
|
|
||||||
|
export const Team = styled.span` |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
font-weight: 600; |
||||||
|
font-size: 0.85rem; |
||||||
|
line-height: 1.14rem; |
||||||
|
color: #fff; |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
font-size: 14px; |
||||||
|
line-height: 20px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const NameSignWrapper = styled.div` |
||||||
|
display: flex; |
||||||
|
max-width: 90%; |
||||||
|
align-items: center; |
||||||
|
` |
||||||
|
|
||||||
|
export const TeamName = styled(Name)` |
||||||
|
${nameStyles} |
||||||
|
` |
||||||
|
|
||||||
|
export const Score = styled.div` |
||||||
|
|
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
width: 15px; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
|
||||||
|
` |
||||||
|
|
||||||
|
export const TeamLogos = styled.div` |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
margin: 0.71rem auto 0 auto; |
||||||
|
z-index: 1; |
||||||
|
` |
||||||
|
|
||||||
|
export const TeamLogo = styled(ProfileLogo)` |
||||||
|
width: 33%; |
||||||
|
max-height: 100%; |
||||||
|
|
||||||
|
:last-child { |
||||||
|
margin-left: 0.8rem; |
||||||
|
} |
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
width: 30%; |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const BuyMatchBadge = styled.span` |
||||||
|
position: absolute; |
||||||
|
left: 0.472rem; |
||||||
|
bottom: 0.519rem; |
||||||
|
width: 1.18rem; |
||||||
|
height: 1.18rem; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
/* background-image: url(/images/dollar-sign.svg); */ |
||||||
|
color: rgba(255, 255, 255, 0.7); |
||||||
|
background-position: center; |
||||||
|
background-repeat: no-repeat; |
||||||
|
background-size: 0.472rem 0.71rem; |
||||||
|
background-color: rgba(255, 255, 255, 0.19); |
||||||
|
border-radius: 50%; |
||||||
|
box-shadow: 0px 0.08rem 0.283rem rgba(0, 0, 0, 0.5); |
||||||
|
|
||||||
|
${isMobileDevice |
||||||
|
? css` |
||||||
|
position: static; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
width: 15px; |
||||||
|
height: 15px; |
||||||
|
/* background-size: 40%; */ |
||||||
|
` |
||||||
|
: ''}; |
||||||
|
` |
||||||
|
|
||||||
|
export const ScDollar = styled(Icon)` |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
` |
||||||
Loading…
Reference in new issue