'use client' import * as React from 'react' import { useFormStatus } from 'react-dom' import { AlertCircle, CheckCircle2, Loader2 } from 'lucide-react' import { Alert, AlertDescription } from '@/components/ui/alert' import { Button, type ButtonProps } from '@/components/ui/button' import type { Formularzustand } from '@/server/actions/sozialhilfe' /** * Kleinteile, die in allen Formularen des Sozialhilfemoduls * wiederkehren. Sie liegen hier zusammen, damit nicht jedes Formular * seinen eigenen Absende-Knopf und seine eigene Meldung erfindet. */ /** * Absende-Knopf, der während des Speicherns gesperrt ist. Ohne die Sperre * entstehen bei langsamer Verbindung Dubletten - und eine doppelt * angelegte Nachforderung fällt erst beim Bezirk auf. */ export function Absenden({ children = 'Speichern', laedtText = 'Wird gespeichert …', disabled, ...props }: ButtonProps & { laedtText?: string }) { const { pending } = useFormStatus() return ( ) } /** Rückmeldung einer Server Action - Fehler oder Erfolg. */ export function Meldung({ zustand }: { zustand: Formularzustand }) { if (zustand.fehler) { return ( ) } if (zustand.erfolg) { return ( ) } return null } /** * Ein Knopf, der eine Aktion ohne Formularfelder auslöst und vorher * nachfragt. Für Löschen und andere Schritte, die man nicht versehentlich * gehen will. */ export function AktionMitRueckfrage({ aktion, frage, children, variant = 'ghost', size = 'sm', }: { aktion: () => Promise frage: string children: React.ReactNode variant?: ButtonProps['variant'] size?: ButtonProps['size'] }) { return (
{ if (!window.confirm(frage)) ereignis.preventDefault() }} > {children}
) }