Updated so that the rules and class text can be updated through the admin page

This commit is contained in:
2026-04-19 13:28:13 +02:00 Verified
parent 16f5c3f22b
commit 0d4d447569
11 changed files with 103 additions and 39 deletions
+27 -5
View File
@@ -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 }) {
</div>
</div>
<div>
<label className="block text-sm font-bold mb-1">Regeltext (HTML tillåtet)</label>
<p className="text-xs text-gray-500 mb-2">
Du kan använda <b>{"<a target=\"_blank\" href=\"länk\">text</a>"}</b> för länkar och <b>{"<i>text</i>"}</b> för kursiv text.
</p>
<textarea name="rulesText" defaultValue={initialConfig.beachPage.rulesText} className="w-full border p-2 rounded h-48" />
</div>
<div>
<label className="block text-sm font-bold mb-1">Meddelande vid stängd anmälan</label>
<textarea name="closeReason" defaultValue={initialConfig.beachPage.closeReason} className="w-full border p-2 rounded h-20" />
<textarea name="closeReason" defaultValue={initialConfig.beachPage.closeReason} className="w-full border p-2 rounded h-32" />
</div>
<div>
@@ -121,6 +133,11 @@ export default function AdminForm({ initialConfig }: { initialConfig: any }) {
</button>
</div>
<div>
<label className="block text-sm font-bold mb-1">Intro-text ovanför klasserna</label>
<textarea name="classesIntroText" defaultValue={initialConfig.beachPage.classesIntroText} className="w-full border p-2 rounded h-16" />
</div>
<div className="space-y-3">
{classes.map((c, index) => (
<div key={index} className="flex flex-col md:flex-row gap-3 items-center w-full">
@@ -180,6 +197,11 @@ export default function AdminForm({ initialConfig }: { initialConfig: any }) {
)}
</div>
<div className="mt-2">
<label className="block text-sm font-bold mb-1">Avslutande text under klasserna</label>
<textarea name="classesOutroText" defaultValue={initialConfig.beachPage.classesOutroText} className="w-full border p-2 rounded h-16" />
</div>
{/* Dold JSON-sträng för Server Action */}
<input type="hidden" name="classesJSON" value={JSON.stringify(classes)} />
</section>