import { BidModal, BidStep } from '@reservoir0x/reservoir-kit-ui' import { Button } from 'components/primitives' import { cloneElement, ComponentProps, ComponentPropsWithoutRef, FC, useContext, } from 'react' import { CSS } from '@stitches/react' import { SWRResponse } from 'swr' import { useAccount, useWalletClient, mainnet } from 'wagmi' import { useConnectModal } from '@rainbow-me/rainbowkit' import { ToastContext } from 'context/ToastContextProvider' import { useMarketplaceChain } from 'hooks' type Props = { tokenId?: string | undefined collectionId?: string | undefined disabled?: boolean openState?: [boolean, React.Dispatch>] buttonCss?: CSS buttonProps?: ComponentProps mutate?: SWRResponse['mutate'] } type BiddingCurrencies = ComponentPropsWithoutRef['currencies'] const orderFee = process.env.NEXT_PUBLIC_MARKETPLACE_FEE const orderFees = orderFee ? [orderFee] : [] const Bid: FC = ({ tokenId, collectionId, disabled, openState, buttonCss, buttonProps, mutate, }) => { const { isDisconnected } = useAccount() const { openConnectModal } = useConnectModal() const { addToast } = useContext(ToastContext) const marketplaceChain = useMarketplaceChain() const { data: signer } = useWalletClient() const trigger = ( ) // CONFIGURABLE: Here you can configure which currencies you would like to support for bidding let bidCurrencies: BiddingCurrencies = undefined if (marketplaceChain.id === mainnet.id) { bidCurrencies = [ { contract: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', symbol: 'WETH', coinGeckoId: 'ethereum', }, { contract: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', symbol: 'USDC', decimals: 6, coinGeckoId: 'usd-coin', }, ] } if (isDisconnected) { return cloneElement(trigger, { onClick: async () => { if (!signer) { openConnectModal?.() } }, }) } else return ( { if (mutate && currentStep == BidStep.Complete) mutate() }} onBidError={(error) => { if (error) { if ( (error as any).cause.code && (error as any).cause.code === 4001 ) { addToast?.({ title: 'User canceled transaction', description: 'You have canceled the transaction.', }) return } } addToast?.({ title: 'Could not place bid', description: 'The transaction was not completed.', }) }} /> ) } export default Bid