"use client" import { useState, useEffect } from "react" import { useSearchParams } from "next/navigation" import { useBetslipStore } from "@/lib/store/betslip-store" import { mockEvents, popularLeagues, type Event } from "@/lib/mock-data" import { cn } from "@/lib/utils" import { ChevronDown, BarChart2, TrendingUp, Plus } from "lucide-react" function OddsButton({ odds, onClick, isSelected }: { odds: number onClick: () => void isSelected: boolean }) { return ( ) } function EventRow({ event }: { event: Event }) { const { bets, addBet } = useBetslipStore() return (
{/* Small Icons & ID Column */}
{event.id || "01682"}
{/* Time & Team Column */}
11:00 PM
{event.homeTeam} - {event.awayTeam}
{/* Market Columns Grid (10 Markets) */}
{event.markets.slice(0, 10).map((market) => { const betId = `${event.id}-${market.id}` const isSelected = bets.some((b) => b.id === betId) return ( addBet({ id: betId, event: `${event.homeTeam} vs ${event.awayTeam}`, league: event.league, market: "1X2", selection: `${event.homeTeam} (${market.label})`, odds: market.odds, })} /> ) })}
{/* More Markets Button */}
) } const MARKET_HEADERS = ["1", "x", "2", "Over (2.5)", "Under (2.5)", "1X", "12", "X2", "Yes", "No"]; export function EventsList({ filter = "All", sport = "all", search = "" }: { filter?: string sport?: string search?: string }) { const searchParams = useSearchParams() const leagueQuery = searchParams.get("league") const [selectedLeague, setSelectedLeague] = useState(leagueQuery) const { bets, addBet } = useBetslipStore() useEffect(() => { setSelectedLeague(leagueQuery) }, [leagueQuery]) const handleClose = () => { const url = new URL(window.location.href) url.searchParams.delete("league") window.history.pushState({}, "", url) setSelectedLeague(null) } const events = selectedLeague ? mockEvents.filter(e => e.league.toLowerCase() === selectedLeague.toLowerCase()) : mockEvents.filter((e) => { if (filter === "Live" && !e.isLive) return false if (sport !== "all" && e.sport.toLowerCase() !== sport.toLowerCase()) return false return true }) // Common Header Rendering const renderTableHeaders = () => ( <> {/* Table Header Categories */}
Main
Goals
Handicap
Half Time / Full Time
Correct Score
{/* Sub Headers */}
1st Half
2nd Half
Combo
Chance Mix
Home
) const renderColumnHeaders = () => (
Main
Over/Under
{MARKET_HEADERS.map(h => {h})}
) const renderEventItem = (event: Event) => (
{/* Stats & Icons */}
{/* ID */}
{event.id}
{/* Time */}
{event.time} PM
{/* Event Name */}
{event.homeTeam} - {event.awayTeam}
{/* Odds Grid */}
{event.markets.slice(0, 10).map((market) => { const betId = `${event.id}-${market.id}` const isSelected = bets.some((b) => b.id === betId) return ( ) })}
{/* More Button */}
) if (selectedLeague) { // Group by date for league view const groupedEvents = events.reduce((acc, event) => { if (!acc[event.date]) acc[event.date] = [] acc[event.date].push(event) return acc }, {} as Record) return (
{/* League Header / Breadcrumbs */}
••• Football | {selectedLeague === "LaLiga" ? "Spain - LaLiga" : selectedLeague}
{/* Large Market Tab Grid */}
{[ { label: "Main", active: true }, { label: "Goals" }, { label: "Handicap" }, { label: "Half Time / Full Time" }, { label: "Correct Score" }, { label: "1st Half" }, { label: "2nd Half" }, { label: "Asian Markets" }, { label: "Corners" }, { label: "Home" } ].map((m, i) => ( ))}
{/* Column Headers */} {renderColumnHeaders()} {/* Grouped Events */}
{Object.entries(groupedEvents).map(([date, dateEvents]) => (
{date}
{dateEvents.map(event => renderEventItem(event))}
))}
) } // Home View (No League Selected) const homeEventsByLeague = events.reduce((acc, event) => { if (!acc[event.league]) acc[event.league] = [] acc[event.league].push(event) return acc }, {} as Record) return (
{Object.entries(homeEventsByLeague).map(([leagueName, leagueEvents]) => (
{/* League Box Header */}
{popularLeagues.find(l => l.name === leagueName)?.icon || popularLeagues.find(l => l.id.toLowerCase() === leagueName.toLowerCase())?.icon || "⚽"} {leagueName === "LaLiga" ? "Spain - LaLiga" : leagueName === "Premier League" ? "England - Premier League" : leagueName === "Bundesliga" ? "Germany - Bundesliga" : leagueName === "Ligue 1" ? "France - Ligue 1" : leagueName}
{/* Column Headers for each league box */}
Stats ID Time Event
{MARKET_HEADERS.map(h => {h})}
{/* Matches in this league */}
{leagueEvents.map(event => renderEventItem(event))}
))}
) }