import { Button } from '@/components'; import { useErc20 } from '@/hooks'; import React from 'react'; /** * Props for the ERC20ApprovalButton component. * * @interface ERC20ApprovalButtonProps * @property {string} owner - The address of the token owner. * @property {string} spender - The address of the spender. * @property {string} tokenAddress - The address of the ERC20 token contract. * @property {number} amount - The amount of tokens to approve. * @property {string} chainId - The ID of the blockchain network. * @property {string} [className] - Optional CSS class for styling the button. */ export interface ERC20ApprovalButtonProps { owner: string; spender: string; tokenAddress: string; amount: number; chainId: string; className?: string; } /** * ERC20ApprovalButton component allows users to approve a token spend for a specified ERC20 token. * * @component * @param {ERC20ApprovalButtonProps} props - The properties for the ERC20ApprovalButton component. * @param {string} props.owner - The address of the token owner. * @param {string} props.spender - The address of the spender who is being approved to spend the tokens. * @param {string} props.tokenAddress - The address of the ERC20 token contract. * @param {string} props.amount - The amount of tokens to approve for spending. * @param {number} props.chainId - The ID of the blockchain network. * @param {string} [props.className] - Optional CSS class name to apply to the button. * * @returns {JSX.Element} A button that, when clicked, triggers the approval of token spend. * * @example * */ export const ERC20ApprovalButton: React.FC = ({ owner, spender, tokenAddress, amount, chainId, className = '', }) => { const { approveTokenSpendIfNeeded } = useErc20(); const handleApproval = async () => { try { await approveTokenSpendIfNeeded( owner, spender, tokenAddress, amount, chainId ); } catch (error) { console.error('Approval failed:', error); } }; return ( ); }; export default ERC20ApprovalButton;