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("/ff/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: "/ff/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} Erforderlich: {kennzahl.mandatory ? 'Ja' : 'Nein'} Format {typeDisplayMapping[kennzahl.type] || kennzahl.type} ); } return ( Kennzahl bearbeiten ); }