diff --git a/app/admin/AdminForm.tsx b/app/admin/AdminForm.tsx index 5ad4829..df37517 100644 --- a/app/admin/AdminForm.tsx +++ b/app/admin/AdminForm.tsx @@ -5,8 +5,9 @@ import { useActionState, useEffect, useState } from 'react'; import { FaPlus, FaTrash, FaArrowUp, FaArrowDown } from 'react-icons/fa'; // Importera pilarna import { saveConfigAction } from './actions'; +import { SiteConfig } from '../lib/config'; -export default function AdminForm({ initialConfig }: { initialConfig: any }) { +export default function AdminForm({ initialConfig }: { initialConfig: SiteConfig }) { const [state, formAction, isPending] = useActionState(saveConfigAction, null); const [showToast, setShowToast] = useState(false); @@ -49,9 +50,12 @@ export default function AdminForm({ initialConfig }: { initialConfig: any }) { useEffect(() => { if (state?.success) { - setShowToast(true); - const timer = setTimeout(() => setShowToast(false), 3000); - return () => clearTimeout(timer); + const showTimer = setTimeout(() => setShowToast(true), 0); + const hideTimer = setTimeout(() => setShowToast(false), 3000); + return () => { + clearTimeout(showTimer); + clearTimeout(hideTimer); + }; } }, [state]); @@ -87,9 +91,17 @@ export default function AdminForm({ initialConfig }: { initialConfig: any }) { +
+ Du kan använda {"text"} för länkar och {"text"} för kursiv text. +
+ +
- 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. -
+Turneringen kommer att delas upp i flera olika klasser beroende på antal anmälda lag och dess nivå:
+{config.beachPage?.classesIntroText}
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.
+{config.beachPage?.classesOutroText}
Trycka på knappen nedan för att starta registreringen. Du kommer att skickas till laget.se
diff --git a/app/lib/config.ts b/app/lib/config.ts index 969a79e..f44d7eb 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -5,11 +5,27 @@ import path from 'node:path'; const configPath = path.join(process.cwd(), 'data', 'site-config.json'); +export interface SiteConfig { + showBeachPromo: boolean; + beachPage: { + matchStart: string; + festivalLink: string; + closeReason: string; + otherInfo: string; + prizesText: string; + rulesText?: string; + classesIntroText?: string; + classesOutroText?: string; + isClosedOverride: boolean; + classes: Array<{ name: string; color: string; desc: string }>; + }; +} + export async function getConfig() { try { const data = await fs.readFile(configPath, 'utf-8'); return JSON.parse(data); - } catch (error) { + } catch { return { showBeachPromo: true, beachPage: { @@ -17,6 +33,9 @@ export async function getConfig() { isClosedOverride: false, closeReason: "Det är hela 26 lag anmälda och vi kan tyvärr inte ta emot fler anmälningar.\r\n\r\nVi är glada över förväntan och bjuder in alla andra till att komma och kolla men vi har tyvärr inte kapaciteten till att ha med fler lag.", festivalLink: "https://www.kullahalvon.com/upptacka--uppleva/kultur--noje/evenemang-pa-kullahalvon/mat---sommarfesten.html", + rulesText: "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.", + classesIntroText: "Turneringen kommer att delas upp i flera olika klasser beroende på antal anmälda lag och dess nivå:", + classesOutroText: "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.", otherInfo: "Turneringen uppskattas hålla på till ca 17-18 tiden\r\nDet kommer finnas duschmöjligheter i anslutning till stranden.", prizesText: "Det kommer att finnas fina priser till alla pallplatser! 🏆" } @@ -25,6 +44,6 @@ export async function getConfig() { } -export async function updateConfig(newConfig: any) { +export async function updateConfig(newConfig: SiteConfig) { await fs.writeFile(configPath, JSON.stringify(newConfig, null, 2)); } \ No newline at end of file diff --git a/app/login/actions.ts b/app/login/actions.ts index 4738992..e0a6443 100644 --- a/app/login/actions.ts +++ b/app/login/actions.ts @@ -5,7 +5,7 @@ import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; -export async function loginAction(prevState: any, formData: FormData) { +export async function loginAction(prevState: { success?: boolean } | null | unknown, formData: FormData) { const password = formData.get('password'); if (password === process.env.ADMIN_PASSWORD) { diff --git a/data/site-config.json.example b/data/site-config.json.example index 5dc8ddc..343c038 100644 --- a/data/site-config.json.example +++ b/data/site-config.json.example @@ -3,14 +3,17 @@ "beachPage": { "matchStart": "2026-06-13T10:00", "isClosedOverride": false, - "closeReason": "Det är hela 26 lag anmälda och vi kan tyvärr inte ta emot fler anmälningar. Vi är glada över förväntan och bjuder in alla andra till att komma och kolla men vi har tyvärr inte kapaciteten till att ha med fler lag.", + "closeReason": "Det är hela 26 lag anmälda och vi kan tyvärr inte ta emot fler anmälningar.\r\n\r\nVi är glada över förväntan och bjuder in alla andra till att komma och kolla men vi har tyvärr inte kapaciteten till att ha med fler lag.", "festivalLink": "https://www.kullahalvon.com/upptacka--uppleva/kultur--noje/evenemang-pa-kullahalvon/mat---sommarfesten.html", - "otherInfo": "Turneringen uppskattas hålla på till ca 17-18 tiden\r\nDet kommer finnas duschmöjligheter i anslutning till stranden.", - "prizesText": "Det kommer att finnas fina priser till alla pallplatser!", + "rulesText": "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.", + "classesIntroText": "Turneringen kommer att delas upp i flera olika klasser beroende på antal anmälda lag och dess nivå:", + "classesOutroText": "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.", + "otherInfo": "Turneringen uppskattas hålla på till ca 17-18 tiden\r\nDet kommer finnas duschmöjligheter i anslutning till stranden.\r\nDet kommer fotograferas och filmas under dagen.", + "prizesText": "Fina priser väntar för alla som kniper en pallplats!", "classes": [ { "name": "Grön", - "color": "#07be15", + "color": "#16a34a", "desc": "Nybörjare" }, { @@ -18,10 +21,15 @@ "color": "#2563eb", "desc": "Spelat lite" }, + { + "name": "Röd", + "color": "#e22400", + "desc": "Spelat mycket" + }, { "name": "Svart", "color": "#111827", - "desc": "Spelat mycket" + "desc": "Elit" } ] }