// app/beach/BeachClientPage.tsx 'use client'; import { useEffect, useState } from 'react'; import { FaClipboardList, FaClock, FaInfoCircle, FaLock, FaMapMarkerAlt, FaTicketAlt, FaTrophy, FaUsers } from "react-icons/fa"; import { IoIosMail } from "react-icons/io"; import Footer from '../components/Footer'; import Header from '../components/Header'; import BeachRegistrationForm from './BeachRegistrationForm'; export default function BeachClientPage({ config }: { config: any }) { const [timeInfo, setTimeInfo] = useState({ dateStr: 'Laddar...', matchStr: 'Laddar...', deadlineText: 'Laddar...', isClosed: false, }); const classesData = Array.isArray(config.beachPage?.classes) ? config.beachPage.classes : [ { name: 'Grön', color: '#16a34a', desc: 'Nybörjare' }, { name: 'Blå', color: '#2563eb', desc: 'Spelat lite' }, { name: 'Svart', color: '#111827', desc: 'Spelat mycket' } ]; useEffect(() => { const updateTournamentInfo = () => { const matchStart = new Date(config.beachPage.matchStart); const now = new Date(); const infoGathering = new Date(matchStart.getTime() - 30 * 60000); const closingDate = new Date(matchStart.getTime() - 24 * 60 * 60000); const dateOptions: Intl.DateTimeFormatOptions = { day: 'numeric', month: 'long', year: 'numeric' }; const timeOptions: Intl.DateTimeFormatOptions = { hour: '2-digit', minute: '2-digit' }; setTimeInfo({ dateStr: matchStart.toLocaleDateString('sv-SE', dateOptions), matchStr: `Matchstart kl.${matchStart.toLocaleTimeString('sv-SE', timeOptions)} (Infosamling kl.${infoGathering.toLocaleTimeString('sv-SE', timeOptions)})`, deadlineText: `Anmälan stänger den ${closingDate.toLocaleDateString('sv-SE', dateOptions)} kl.${closingDate.toLocaleTimeString('sv-SE', timeOptions)} (24 timmar innan start) eller om alla platser har blivit fyllda.`, isClosed: config.beachPage.isClosedOverride || now >= closingDate, }); }; updateTournamentInfo(); }, [config]); return (
{/* Logotyp med subtil hover-effekt */}
Mat- & Sommarfesten
{/* Huvudrubrik med 3D-känsla */}

Beach­turnering

Samla ihop ett kompisgäng och anmäl er!

{/* Moderniserad "Stängd"-box */} {timeInfo.isClosed && (
{/* Röd dekorationslist i toppen */}

Anmälan är stängd

{config.beachPage.closeReason}

)}
{/* Större och tydligare badge för Turneringsinfo */}
Turneringsinfo
{/* VAR & NÄR - Logistik */}

Var

Kvickbadet i Höganäs

När

{timeInfo.dateStr}

{timeInfo.matchStr}

Samtidigt som Höganäs Mat- & Sommarfest

{/* REGLER & KLASSER - Spelet */}

Regler

Matcherna spelas 4v4 med inomhusregler, förutom poängräkningen som följer reglerna för beachvolley.

Klasser

Turneringen kan delas upp i tre klasser beroende på antal anmälda lag och nivå:

{classesData.map((c: any, i: number) => ( {c.name.toUpperCase()} {c.desc && ({c.desc})} ))}

Gör en gissning på er nivå i anmälan – skriv gärna om ni är osäkra.

{/* KOSTNAD & ANMÄLAN */}

Anmälan & Kostnad

Kostnad: Gratis!

Anmälan görs via formuläret nedan. Du får ett bekräftelsemejl när vi granskat er anmälan.

{timeInfo.deadlineText}

Övrig info:

{(config.beachPage?.otherInfo || "").split('\n').map((line: string, i: number) => ( line.trim() &&

{line}

))}
{/* Kompaktare PRIS-BANNER */}

{config.beachPage?.prizesText || "Fina priser till alla pallplatser! 🏆"}

{/* Rendera formuläret endast om anmälan är öppen */} {!timeInfo.isClosed && }
{/* Dekorativ bakgrundscirkel */}
{/* Ikon-badge */}

Kontakta oss

Har du frågor om turneringen, regler eller vill ändra något i er anmälan? Tveka inte att höra av dig!

Skicka ett mejl
); }