From f7e5cd6e6e90db663efe84328b0d78826b8677f6 Mon Sep 17 00:00:00 2001 From: Maximilian Stubhan Date: Mon, 13 Jul 2026 23:39:54 +0200 Subject: [PATCH] Fix Bericht speichern: window.prompt() is unsupported in this browser environment, replaced with a proper Modal dialog --- components/reports/ReportsPageClient.tsx | 51 +++++++++++++++++++++--- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/components/reports/ReportsPageClient.tsx b/components/reports/ReportsPageClient.tsx index 3759b07..9f05d47 100644 --- a/components/reports/ReportsPageClient.tsx +++ b/components/reports/ReportsPageClient.tsx @@ -5,6 +5,7 @@ import Link from "next/link"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { useState } from "react"; import { deleteReport, saveReport } from "@/actions/reports"; +import { Modal } from "@/components/ui/Modal"; import { useToast } from "@/components/ui/Toast"; import { fmtDate } from "@/lib/format"; import { @@ -51,6 +52,9 @@ export function ReportsPageClient(props: ReportsPageClientProps) { const searchParams = useSearchParams(); const { showToast } = useToast(); const [expandedKey, setExpandedKey] = useState(null); + const [saveModalOpen, setSaveModalOpen] = useState(false); + const [newReportName, setNewReportName] = useState(""); + const [savingReport, setSavingReport] = useState(false); function updateParams(patch: Record) { const sp = new URLSearchParams(searchParams.toString()); @@ -73,12 +77,18 @@ export function ReportsPageClient(props: ReportsPageClientProps) { router.push(`${pathname}?${sp.toString()}`); } - async function handleSaveReport() { - const name = window.prompt("Name für diesen Bericht:"); - if (!name) return; - const result = await saveReport({ name, config: { measure, group, split, ...filters } }); + async function handleConfirmSaveReport() { + if (!newReportName.trim()) { + showToast("Bitte einen Namen angeben.", "error"); + return; + } + setSavingReport(true); + const result = await saveReport({ name: newReportName.trim(), config: { measure, group, split, ...filters } }); + setSavingReport(false); if (result.success) { showToast("Bericht gespeichert."); + setSaveModalOpen(false); + setNewReportName(""); router.refresh(); } else { showToast(result.error ?? "Fehler beim Speichern.", "error"); @@ -273,7 +283,7 @@ export function ReportsPageClient(props: ReportsPageClientProps) { + + + } + > +
+ + setNewReportName(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && handleConfirmSaveReport()} + autoFocus + className="w-full rounded border border-border px-3 py-2 text-sm" + /> +
+ ); }