File size: 814 Bytes
867b17d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
'use client';
import { useFormStatus } from 'react-dom';
import { LoaderIcon } from '@/components/icons';
import { Button } from './ui/button';
export function SubmitButton({
children,
isSuccessful,
}: {
children: React.ReactNode;
isSuccessful: boolean;
}) {
const { pending } = useFormStatus();
return (
<Button
type={pending ? 'button' : 'submit'}
aria-disabled={pending || isSuccessful}
disabled={pending || isSuccessful}
className="relative"
>
{children}
{(pending || isSuccessful) && (
<span className="animate-spin absolute right-4">
<LoaderIcon />
</span>
)}
<output aria-live="polite" className="sr-only">
{pending || isSuccessful ? 'Loading' : 'Submit form'}
</output>
</Button>
);
}
|