'use client' import { useState, useTransition } from 'react' import { useRouter } from 'next/navigation' import { Loader2, RefreshCw, Unplug } from 'lucide-react' import { toast } from 'sonner' import { Button } from '@/components/ui/button' import { Card, CardInhalt, CardKopf, CardTitel } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Kennzeichen } from '@/components/ui/kennzeichen' import { jetztAbgleichen, kontoTrennen, kontoUmbenennen, type Rueckmeldung, } from '@/server/aktionen/kalenderkonten' export type KontoAnzeige = { id: string anbieter: 'GRAPH' | 'GOOGLE' anbieterName: string anzeigename: string extKontoId: string termine: number letzterAbgleich: string | null letzterFehler: string | null } export function KontoKarte({ konto }: { konto: KontoAnzeige }) { const router = useRouter() const [laeuft, starte] = useTransition() const [name, setName] = useState(konto.anzeigename) const [trennenBestaetigt, setTrennenBestaetigt] = useState(false) function mitRueckmeldung(tun: () => Promise) { starte(async () => { const antwort = await tun() if (antwort.ok) { toast.success(antwort.meldung) router.refresh() } else { toast.error(antwort.fehler) } }) } function felder(werte: Record): FormData { const daten = new FormData() for (const [schluessel, wert] of Object.entries(werte)) daten.set(schluessel, wert) return daten } return ( {konto.anzeigename} {konto.anbieterName} {konto.letzterFehler && Fehler}
Konto
{konto.extKontoId}
Gespiegelte Termine
{konto.termine}
Letzter Abgleich
{konto.letzterAbgleich ?? 'noch nie'}
{konto.letzterFehler && (

{konto.letzterFehler}

)}
setName(e.target.value)} maxLength={60} disabled={laeuft} />
{trennenBestaetigt && (

Die gespiegelten Termine verschwinden dabei. Im Kalender selbst bleibt alles unangetastet.

)}
) }