import { CheckCircle, XCircle, Lock, RefreshCw, Trash2 } from 'lucide-react'; import { Button, ButtonProps } from './button'; type ActionType = 'approve' | 'reject' | 'delete' | 'claim' | 'reset' | 'retry'; interface ActionConfig { icon: React.ReactNode; defaultLabel: string; loadingText: string; variant: ButtonProps['variant']; className?: string; } const ACTION_CONFIGS: Record = { approve: { icon: , defaultLabel: 'Approve', loadingText: 'Processing...', variant: 'default', }, reject: { icon: , defaultLabel: 'Reject', loadingText: 'Processing...', variant: 'destructive', }, claim: { icon: , defaultLabel: 'Claim Submission', loadingText: 'Claiming...', variant: 'default', }, reset: { icon: , defaultLabel: 'Reset to Pending', loadingText: 'Resetting...', variant: 'outline', }, retry: { icon: , defaultLabel: 'Retry Failed', loadingText: 'Retrying...', variant: 'default', className: 'bg-yellow-600 hover:bg-yellow-700', }, delete: { icon: , defaultLabel: 'Delete', loadingText: 'Deleting...', variant: 'destructive', }, }; interface ActionButtonProps extends Omit { action: ActionType; isLoading?: boolean; loadingText?: string; variant?: ButtonProps['variant']; children?: React.ReactNode; isMobile?: boolean; } export const ActionButton = ({ action, isLoading = false, loadingText, variant, size = 'default', className, children, isMobile = false, ...props }: ActionButtonProps) => { const config = ACTION_CONFIGS[action]; const iconClassName = isMobile ? "w-5 h-5 mr-2" : "w-4 h-4 mr-2"; // Clone the icon with mobile-appropriate size const icon = isMobile && config.icon ? // Dynamic sizing handled per action below : config.icon; return ( ); };