From eb6ec5aeb6082fd974d346aa2c2a70cbdc7b76fd Mon Sep 17 00:00:00 2001 From: "diana.dolgolyova" Date: Tue, 24 Mar 2026 22:55:13 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20toast=20popup=20for=20save=20status=20?= =?UTF-8?q?=E2=80=94=20'=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE'=20or=20error,=20no=20layout=20jump?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/_components/SectionEditor.tsx | 1 + src/app/admin/open-day/page.tsx | 24 ++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/app/admin/_components/SectionEditor.tsx b/src/app/admin/_components/SectionEditor.tsx index e6df36d..53d3ec7 100644 --- a/src/app/admin/_components/SectionEditor.tsx +++ b/src/app/admin/_components/SectionEditor.tsx @@ -51,6 +51,7 @@ export function SectionEditor({ } catch { setStatus("error"); setError("Ошибка сохранения"); + setTimeout(() => setStatus((s) => (s === "error" ? "idle" : s)), 4000); } }, [sectionKey]); diff --git a/src/app/admin/open-day/page.tsx b/src/app/admin/open-day/page.tsx index 55a55ed..cdeaf88 100644 --- a/src/app/admin/open-day/page.tsx +++ b/src/app/admin/open-day/page.tsx @@ -416,6 +416,7 @@ export default function OpenDayAdminPage() { const [classes, setClasses] = useState([]); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); + const [saveStatus, setSaveStatus] = useState<"idle" | "saved" | "error">("idle"); const [trainers, setTrainers] = useState([]); const [styles, setStyles] = useState([]); const [halls, setHalls] = useState([]); @@ -455,12 +456,18 @@ export default function OpenDayAdminPage() { if (saveTimerRef.current) clearTimeout(saveTimerRef.current); saveTimerRef.current = setTimeout(async () => { setSaving(true); - await adminFetch("/api/admin/open-day", { - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(updated), - }); + try { + const res = await adminFetch("/api/admin/open-day", { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(updated), + }); + setSaveStatus(res.ok ? "saved" : "error"); + } catch { + setSaveStatus("error"); + } setSaving(false); + setTimeout(() => setSaveStatus("idle"), 2000); }, 800); }, [] @@ -528,6 +535,13 @@ export default function OpenDayAdminPage() { return (
+ {saveStatus !== "idle" && ( +
+ {saveStatus === "saved" ? "Сохранено" : "Ошибка сохранения"} +
+ )}

День открытых дверей