82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import { Flex, Text } from "@mantine/core";
|
|
import React from "react";
|
|
import { CrownIcon } from "@phosphor-icons/react";
|
|
import { SeedBadge } from "./seed-badge";
|
|
import { TeamInfo } from "@/features/teams/types";
|
|
|
|
interface MatchSlotProps {
|
|
from?: number;
|
|
from_loser?: boolean;
|
|
team?: TeamInfo;
|
|
seed?: number;
|
|
cups?: number;
|
|
isWinner?: boolean;
|
|
groupLabel?: string;
|
|
}
|
|
|
|
export const MatchSlot: React.FC<MatchSlotProps> = ({
|
|
from,
|
|
from_loser,
|
|
team,
|
|
seed,
|
|
cups,
|
|
isWinner,
|
|
groupLabel
|
|
}) => (
|
|
<Flex
|
|
align="stretch"
|
|
style={{
|
|
backgroundColor: isWinner ? 'var(--mantine-color-green-light)' : 'transparent',
|
|
borderRadius: 'var(--mantine-radius-sm)',
|
|
transition: 'background-color 200ms ease',
|
|
}}
|
|
>
|
|
{(seed && seed > 0) ? <SeedBadge seed={seed} /> : undefined}
|
|
<Flex p="6px 10px" w='100%' align="center">
|
|
<Flex align="center" gap={4} flex={1}>
|
|
{team ? (
|
|
<>
|
|
<Text
|
|
size={team.name.length > 12 ? (team.name.length > 18 ? '10px' : '11px') : 'xs'}
|
|
truncate
|
|
style={{ minWidth: 0, flex: 1, lineHeight: "12px" }}
|
|
>
|
|
{team.name}
|
|
</Text>
|
|
{isWinner && (
|
|
<CrownIcon
|
|
size={14}
|
|
weight="fill"
|
|
style={{
|
|
color: 'gold',
|
|
marginLeft: '2px',
|
|
marginTop: '-1px',
|
|
filter: 'drop-shadow(0 1px 1px rgba(0,0,0,0.3))',
|
|
flexShrink: 0
|
|
}}
|
|
/>
|
|
)}
|
|
</>
|
|
) : groupLabel ? (
|
|
<Text c="dimmed" size="xs" truncate style={{ minWidth: 0, flex: 1 }}>
|
|
{groupLabel}
|
|
</Text>
|
|
) : from ? (
|
|
<Text c="dimmed" size="xs" truncate style={{ minWidth: 0, flex: 1 }}>
|
|
{from_loser ? "Loser" : "Winner"} of Match {from}
|
|
</Text>
|
|
) : (
|
|
<Text c="dimmed" size="xs" truncate style={{ minWidth: 0, flex: 1 }}>
|
|
TBD
|
|
</Text>
|
|
)}
|
|
</Flex>
|
|
{
|
|
cups !== undefined ? (
|
|
<Text ta='center' w={15} fw="800" ml={4} size="xs">{cups}</Text>
|
|
) : undefined
|
|
}
|
|
</Flex>
|
|
</Flex>
|
|
);
|