"use client"; import React, {useEffect, useState} from "react"; import {useParams, useRouter} from "next/navigation"; import {ChevronLeft} from "lucide-react"; import {Button} from "@/components/ui/button"; import {Dialog} from "@/components/ui/dialog"; import {Skeleton} from "@/components/ui/skeleton"; import CustomerDetailContent from "@/components/customers/details/CustomerDetailContent"; import CustomerInformationContent from "@/components/customers/details/sub/ContactInformationContent"; import CustomerPhoneNumberContent from "@/components/customers/details/sub/CustomerPhoneNumberContent"; import CustomerNotesContent from "@/components/customers/details/sub/CustomerNotesContent"; import CustomerProjectsContent from "@/components/customers/details/sub/CustomerProjectsContent"; import {Customer} from "@/services/customers/entities/customer"; export default function CustomerDetailPage() { const router = useRouter(); const {id} = useParams<{ id: string }>(); const [customer, setCustomer] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [openDialog, setOpenDialog] = useState(false); const [dialogContent, setDialogContent] = useState(null); useEffect(() => { if (!id) { setError("Keine Kunden-ID angegeben"); setLoading(false); return; } let isMounted = true; setLoading(true); setError(null); fetch(`/api/customers/${id}`) .then(async (response) => { if (!isMounted) return; if (response.status === 404) { setError("Kunde nicht gefunden"); setCustomer(null); return; } if (!response.ok) { throw new Error(`Failed to fetch customer: ${response.statusText}`); } const result = await response.json(); setCustomer(result); }) .catch((error) => { if (!isMounted) return; console.error("Error fetching customer:", error); setCustomer(null); setError("Fehler beim Laden der Kundendaten"); }) .finally(() => { if (isMounted) { setLoading(false); } }); return () => { isMounted = false; }; }, [id]); const handleOpenDialog = (content: React.ReactNode) => { setDialogContent(content); setOpenDialog(true); }; const formatDate = (date: string) => { try { const formattedDate = new Date(date).toLocaleDateString("de-DE", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", }); return formattedDate === "Invalid Date" ? "-" : formattedDate; } catch (error) { console.error("Error formatting date:", error); return "-"; } }; const customerMetadata = { createdInfo: customer ? `Erstellt von ${customer.createdBy || "-"} am ${formatDate(customer.createdAt)}` : "Erstellt von - am -", lastActivityInfo: customer ? `Letzte Aktivität: ${customer.updatedBy || "-"} am ${formatDate(customer.updatedAt)}` : "Letzte Aktivität: - am -", }; const renderMetadata = () => { if (loading) { return (
); } return (
{customerMetadata.createdInfo}
{customerMetadata.lastActivityInfo}
); }; return (
{renderMetadata()}
{error ? (
{error}
) : ( } phoneNumberSection={ } notesSection={ } projectsSection={ } /> )} {dialogContent}
); }