// 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, turnstileSiteKey }: { config: any, turnstileSiteKey: string }) { 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. Turneringsformen som kommer spelas är Double Elimination vilket betyder att alla lag spelar minst två matcher under dagen.

Klasser

Turneringen kommer att delas upp i flera olika klasser beroende på antal anmälda lag och dess 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 något extra om ni är osäkra. Vi meddelar om det skulle bli ändringar.

{/* 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
); }