amarorn / frontend /src /presentation /components /squads /LineupPitchView.tsx
beAnalytic's picture
feat: sync main with feature/superbet-live-inplay
16c19b8 verified
Raw
History Blame Contribute Delete
1.65 kB
import { useMemo } from "react";
import type { WcSimulationLineupPlayer } from "@/domain/entities";
import { placeStartersOnPitch } from "@/presentation/utils/pitchPlacement";
import { PitchField } from "./PitchField";
import { PlayerPitchToken } from "./PlayerPitchToken";
const LINE_COLOR: Record<string, string> = {
goleiro: "#fbbf24",
defesa: "#00d4ff",
meio: "#00ff88",
ataque: "#f97316",
};
interface LineupPitchViewProps {
team: string;
teamColor: string;
formation: string | null;
lineup: WcSimulationLineupPlayer[];
}
export function LineupPitchView({ team, teamColor, formation, lineup }: LineupPitchViewProps) {
const placed = useMemo(
() => placeStartersOnPitch(lineup, formation),
[lineup, formation],
);
if (placed.length === 0) return null;
const footer = formation ? (
<div className="border-t border-white/8 bg-black/25 px-4 py-2 text-center text-[11px] text-slate-400">
Esquema {formation} · passe o mouse sobre o jogador para ver nota e cartões
</div>
) : null;
return (
<PitchField footer={footer}>
{placed.map((player, index) => (
<div
key={`${player.name}-${player.number}`}
className="absolute z-10 overflow-visible -translate-x-1/2 -translate-y-1/2"
style={{ left: `${player.x}%`, top: `${player.y}%` }}
>
<PlayerPitchToken
player={player}
teamName={team}
teamColor={teamColor}
positionColor={LINE_COLOR[player.line ?? "meio"] ?? "#64748b"}
index={index}
compact
/>
</div>
))}
</PitchField>
);
}