import { useState, useEffect } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import api from '../api/client'; interface CompanySettings { name: string | null; street: string | null; postalCode: string | null; city: string | null; phone: string | null; email: string | null; website: string | null; } const empty: CompanySettings = { name: null, street: null, postalCode: null, city: null, phone: null, email: null, website: null, }; const cardStyle: React.CSSProperties = { background: 'var(--color-bg-card)', borderRadius: 'var(--radius-md)', boxShadow: 'var(--shadow-sm)', border: '1px solid var(--color-border)', padding: '1.5rem', marginBottom: '1.5rem', }; const btnPrimary: React.CSSProperties = { padding: '0.5rem 1.25rem', background: 'var(--color-primary)', color: 'white', border: 'none', borderRadius: 'var(--radius-sm)', fontSize: '0.875rem', fontWeight: 600, cursor: 'pointer', }; const labelStyle: React.CSSProperties = { display: 'block', fontSize: '0.75rem', fontWeight: 600, color: 'var(--color-text-secondary)', marginBottom: '0.25rem', textTransform: 'uppercase', letterSpacing: '0.04em', }; const inputStyle: React.CSSProperties = { width: '100%', padding: '0.5rem 0.75rem', border: '1px solid var(--color-border)', borderRadius: 'var(--radius-sm)', fontSize: '0.875rem', background: 'var(--color-bg)', color: 'var(--color-text)', boxSizing: 'border-box', }; const rowStyle: React.CSSProperties = { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem', }; export function AdminCompanyPage() { const queryClient = useQueryClient(); const [form, setForm] = useState(empty); const [saved, setSaved] = useState(false); const { data, isLoading } = useQuery({ queryKey: ['company-settings'], queryFn: () => api.get('/settings/company').then((r) => r.data), }); useEffect(() => { if (data) setForm(data); }, [data]); const mutation = useMutation({ mutationFn: (settings: CompanySettings) => api.post('/settings/company', settings), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ['company-settings'] }); setSaved(true); setTimeout(() => setSaved(false), 2500); }, }); const set = (field: keyof CompanySettings, value: string) => setForm((prev) => ({ ...prev, [field]: value || null })); if (isLoading) return

Lädt…

; return (

Firmendaten

Diese Angaben erscheinen als Fußzeile in jedem PDF-Export.

set('name', e.target.value)} placeholder="Muster GmbH" />
set('street', e.target.value)} placeholder="Musterstraße 1" />
set('postalCode', e.target.value)} placeholder="12345" />
set('city', e.target.value)} placeholder="Musterstadt" />
set('phone', e.target.value)} placeholder="+49 123 456789" />
set('email', e.target.value)} placeholder="info@muster.de" />
set('website', e.target.value)} placeholder="https://www.muster.de" />
{saved && ( Gespeichert ✓ )} {mutation.isError && ( Fehler beim Speichern )}
{/* Vorschau Fußzeile */} {(form.name || form.city || form.phone || form.email || form.website) && (

VORSCHAU FUSSZEILE

{[ form.name, [form.street, [form.postalCode, form.city].filter(Boolean).join(' ')].filter(Boolean).join(', '), form.phone ? `Tel: ${form.phone}` : null, form.email, form.website, ].filter(Boolean).join(' | ')}
)}
); }