import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { Box, Typography, IconButton, Button, CircularProgress, Paper, Divider } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { useEffect, useState } from "react"; import type { Kennzahl } from "../types/kpi"; import { KPIForm } from "../components/KPIForm"; import { typeDisplayMapping } from "../types/kpi"; import { API_HOST } from "../util/api"; export const Route = createFileRoute("/config-detail/$kpiId")({ component: KPIDetailPage, validateSearch: (search: Record): { from?: string } => { return { from: search.from as string | undefined, }; }, }); function KPIDetailPage() { const { kpiId } = Route.useParams(); const navigate = useNavigate(); const { from } = Route.useSearch(); const [kennzahl, setKennzahl] = useState(null); const [isEditing, setIsEditing] = useState(false); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const handleBack = () => { navigate({ to: "/config", search: from ? { from } : undefined }); }; useEffect(() => { const fetchKennzahl = async () => { try { setLoading(true); const response = await fetch(`${API_HOST}/api/kpi_setting/${kpiId}`); if (!response.ok) { if (response.status === 404) { setError('KPI not found'); return; } throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); setKennzahl(data); setError(null); } catch (err) { console.error('Error fetching KPI:', err); setError('Error loading KPI'); } finally { setLoading(false); } }; fetchKennzahl(); }, [kpiId]); const handleSave = async (formData: Partial) => { try { const response = await fetch(`${API_HOST}/api/kpi_setting/${kpiId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const updatedKennzahl = await response.json(); setKennzahl(updatedKennzahl); setIsEditing(false); } catch (error) { console.error('Error saving KPI:', error); throw error; } }; const handleCancel = () => { setIsEditing(false); }; if (loading) { return ( Lade KPI Details... ); } if (error || !kennzahl) { return ( {error || 'KPI nicht gefunden'} ); } if (!isEditing) { return ( Detailansicht Kennzahl {kennzahl.name} Beschreibung {kennzahl.description || "Zurzeit ist die Beschreibung der Kennzahl leer. Klicken Sie auf den Bearbeiten-Button, um die Beschreibung zu ergänzen."} Erforderlich: {kennzahl.mandatory ? 'Ja' : 'Nein'} Format {typeDisplayMapping[kennzahl.type] || kennzahl.type} Synonyme & Übersetzungen {kennzahl.translation || "Zurzeit gibt es keine Einträge für Synonyme und Übersetzungen der Kennzahl. Klicken Sie auf den Bearbeiten-Button, um die Liste zu ergänzen."} Beispiele von Kennzahl {kennzahl.example || "Zurzeit gibt es keine Beispiele der Kennzahl. Klicken Sie auf den Bearbeiten-Button, um die Liste zu ergänzen."} ); } return ( Kennzahl bearbeiten ); }