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 && }
>
);
}