import { Trash2 } from 'lucide-react'; import { ComponentProps, PropsWithChildren, ReactNode } from 'react'; import { AutomationTestingProps } from '@/types'; import { confirmDelete } from '@@/modals/confirm'; import { Button } from './Button'; import { LoadingButton } from './LoadingButton'; type ConfirmOrClick = | { confirmMessage: ReactNode; onConfirmed(): Promise | void; onClick?: never; } | { confirmMessage?: never; onConfirmed?: never; /** if onClick is set, will skip confirmation (confirmation should be done on the parent) */ onClick(): void; }; export function DeleteButton({ disabled, size, children, isLoading, loadingText = 'Removing', 'data-cy': dataCy, ...props }: PropsWithChildren< AutomationTestingProps & ConfirmOrClick & { size?: ComponentProps['size']; disabled?: boolean; isLoading?: boolean; loadingText?: string; } >) { if (isLoading === undefined) { return ( ); } return ( handleClick()} icon={Trash2} className="!m-0" data-cy={dataCy} isLoading={isLoading} loadingText={loadingText} > {children || 'Remove'} ); async function handleClick() { const { confirmMessage, onConfirmed, onClick } = props; if (onClick) { return onClick(); } if (!(await confirmDelete(confirmMessage))) { return undefined; } return onConfirmed(); } }