diff --git a/src/app/admin/open-day/page.tsx b/src/app/admin/open-day/page.tsx
index dfa0f06..6b86889 100644
--- a/src/app/admin/open-day/page.tsx
+++ b/src/app/admin/open-day/page.tsx
@@ -2,7 +2,7 @@
import { useState, useEffect, useMemo, useCallback } from "react";
import {
- Plus, X, Loader2, Calendar, Trash2, Ban, CheckCircle2,
+ Plus, X, Loader2, Calendar, Trash2, Ban, CheckCircle2, RotateCcw,
} from "lucide-react";
import { adminFetch } from "@/lib/csrf";
@@ -31,6 +31,7 @@ interface OpenDayClass {
cancelled: boolean;
sortOrder: number;
bookingCount: number;
+ maxParticipants: number;
}
@@ -97,7 +98,7 @@ function EventSettings({
/>
-
+
+
+
-
+
onChange({ minBookings: parseInt(e.target.value) || 1 })}
className="w-full rounded-lg border border-white/10 bg-neutral-800 px-4 py-2.5 text-white outline-none focus:border-gold transition-colors"
/>
+
Если записей меньше — занятие можно отменить
@@ -179,39 +184,41 @@ function ClassCell({
const [editing, setEditing] = useState(false);
const [trainer, setTrainer] = useState(cls.trainer);
const [style, setStyle] = useState(cls.style);
+ const [endTime, setEndTime] = useState(cls.endTime);
+ const [maxPart, setMaxPart] = useState(cls.maxParticipants);
const atRisk = cls.bookingCount < minBookings && !cls.cancelled;
function save() {
if (trainer.trim() && style.trim()) {
- onUpdate(cls.id, { trainer: trainer.trim(), style: style.trim() });
+ onUpdate(cls.id, { trainer: trainer.trim(), style: style.trim(), endTime, maxParticipants: maxPart });
setEditing(false);
}
}
+ const selectCls = "w-full rounded-md border border-white/10 bg-neutral-800 px-2 py-1 text-xs text-white outline-none focus:border-gold [color-scheme:dark]";
+
if (editing) {
return (
-
-