'use client'; import { useFormStatus } from 'react-dom'; import { useActionState } from 'react'; import { type ComponentProps } from 'react'; import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from './alert'; import { AlertTriangle } from 'lucide-react'; type Props = Omit, 'formAction'> & { pendingText?: string; formAction: (prevState: any, formData: FormData) => Promise; errorMessage?: string; }; const initialState = { message: '', }; export function SubmitButton({ children, formAction, errorMessage, pendingText = 'Submitting...', ...props }: Props) { const { pending, action } = useFormStatus(); const [state, internalFormAction] = useActionState(formAction, initialState); const isPending = pending && action === internalFormAction; return (
{Boolean(errorMessage || state?.message) && ( {errorMessage || state?.message} )}
); }