import { useQuery } from '@tanstack/react-query'; import { contractApi } from '../../services/api'; import Modal from '../ui/Modal'; import Badge from '../ui/Badge'; import Card from '../ui/Card'; import CopyButton from '../ui/CopyButton'; import type { ContractType, ContractStatus } from '../../types'; const typeLabels: Record = { ELECTRICITY: 'Strom', GAS: 'Gas', DSL: 'DSL', CABLE: 'Kabelinternet', FIBER: 'Glasfaser', MOBILE: 'Mobilfunk', TV: 'TV', CAR_INSURANCE: 'KFZ-Versicherung', }; const statusLabels: Record = { DRAFT: 'Entwurf', PENDING: 'Ausstehend', ACTIVE: 'Aktiv', CANCELLED: 'Gekündigt', EXPIRED: 'Abgelaufen', DEACTIVATED: 'Deaktiviert', }; const statusVariants: Record = { ACTIVE: 'success', PENDING: 'warning', CANCELLED: 'danger', EXPIRED: 'danger', DRAFT: 'default', DEACTIVATED: 'default', }; interface ContractDetailModalProps { contractId: number; isOpen: boolean; onClose: () => void; } export default function ContractDetailModal({ contractId, isOpen, onClose }: ContractDetailModalProps) { const { data, isLoading, error } = useQuery({ queryKey: ['contract', contractId], queryFn: () => contractApi.getById(contractId), enabled: isOpen, }); const c = data?.data; return ( {isLoading && (
Laden...
)} {error && (
Fehler beim Laden des Vertrags
)} {c && (
{/* Header */}
{c.contractNumber} {typeLabels[c.type as ContractType] || c.type} {statusLabels[c.status as ContractStatus] || c.status}
{/* Anbieter & Tarif */} {(c.providerName || c.provider?.name || c.tariffName || c.tariff?.name) && (
{(c.providerName || c.provider?.name) && (
Anbieter
{c.providerName || c.provider?.name}
)} {(c.tariffName || c.tariff?.name) && (
Tarif
{c.tariffName || c.tariff?.name}
)} {c.customerNumberAtProvider && (
Kundennummer beim Anbieter
{c.customerNumberAtProvider}
)}
)} {/* Laufzeit */}
{c.startDate && (
Vertragsbeginn
{new Date(c.startDate).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })}
)} {c.endDate && (
Vertragsende
{new Date(c.endDate).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })}
)} {c.contractDuration && (
Laufzeit
{c.contractDuration.description}
)} {c.cancellationPeriod && (
Kündigungsfrist
{c.cancellationPeriod.description}
)}
{/* Portal-Zugangsdaten */} {(c.portalUsername || c.provider?.portalUrl) && (
{c.provider?.portalUrl && ( )} {c.portalUsername && (
Benutzername
{c.portalUsername}
)}
)} {/* Adresse */} {c.address && (

{c.address.street} {c.address.houseNumber}

{c.address.postalCode} {c.address.city}

)} {/* Notizen */} {c.notes && (

{c.notes}

)}
)}
); }