import React from "react"; import { Button, Modal, ModalBody, ModalContent, ModalOverlay, ModalHeader, Spinner, ButtonProps, useDisclosure, Alert, } from "@chakra-ui/react"; import { PublicKey } from "@solana/web3.js"; import { Swap, useTokenBonding, useTokenBondingKey, useTokenMetadata, } from "@strata-foundation/react"; import { useWalletModal } from "@solana/wallet-adapter-react-ui"; import { useWallet } from "@solana/wallet-adapter-react"; type BuyMoreTrigger = React.FC<{ onClick: () => void; connected: boolean; mint?: PublicKey; btnProps?: ButtonProps; }>; const DefaultTrigger: BuyMoreTrigger = ({ onClick, connected, mint, btnProps, }) => { const { metadata } = useTokenMetadata(mint); return ( ); }; export function BuyMoreButton({ mint, trigger = DefaultTrigger, btnProps, }: { mint?: PublicKey; trigger?: BuyMoreTrigger; btnProps?: ButtonProps; }) { const { isOpen, onToggle, onClose } = useDisclosure(); const { connected } = useWallet(); const { result: tokenBondingKey, loading } = useTokenBondingKey(mint, 0); const { setVisible } = useWalletModal(); const { metadata } = useTokenMetadata(mint); const { account, loading: loadingBonding } = useTokenBonding(tokenBondingKey); function onClick() { if (!connected) setVisible(true); else { if (!account && !loadingBonding) { window.open(`https://jup.ag/swap/SOL-${metadata?.data.symbol.toUpperCase()}`); } else { onToggle(); } } } return ( <> {trigger({ mint, connected, onClick, btnProps })} Buy More {metadata?.data.symbol} {!account && !loadingBonding && ( Buy is not yet supported for this token )} {account && !loadingBonding && tokenBondingKey && ( { onClose(); setVisible(true); }} /> )} {loading && } ); }