Files

83 lines
2.1 KiB
TypeScript

import React, { ComponentProps, FC } from 'react'
import { SWRResponse } from 'swr'
import { useNetwork, useSigner } from 'wagmi'
import { BuyModal, useTokens } from '@reservoir0x/reservoir-kit-ui'
import { useSwitchNetwork } from 'wagmi'
import { Button } from 'components/primitives'
import { useConnectModal } from '@rainbow-me/rainbowkit'
import { CSS } from '@stitches/react'
import { useMarketplaceChain } from 'hooks'
type Props = {
token?: ReturnType<typeof useTokens>['data'][0]
buttonCss?: CSS
buttonProps?: ComponentProps<typeof Button>
mutate?: SWRResponse['mutate']
}
const BuyNow: FC<Props> = ({ token, mutate, buttonCss, buttonProps = {} }) => {
const { data: signer } = useSigner()
const { openConnectModal } = useConnectModal()
const { chain: activeChain } = useNetwork()
const marketplaceChain = useMarketplaceChain()
const { switchNetworkAsync } = useSwitchNetwork({
chainId: marketplaceChain.id,
})
const isInTheWrongNetwork = Boolean(
signer && activeChain?.id !== marketplaceChain.id
)
if (
token?.market?.floorAsk?.price?.amount === null ||
token?.market?.floorAsk?.price?.amount === undefined
) {
return null
}
const trigger = (
<Button css={buttonCss} color="primary" {...buttonProps}>
Buy Now
</Button>
)
const canBuy =
signer &&
token?.token?.tokenId &&
token?.token?.collection?.id &&
!isInTheWrongNetwork
return !canBuy ? (
<Button
css={buttonCss}
color="primary"
onClick={async () => {
if (isInTheWrongNetwork && switchNetworkAsync) {
const chain = await switchNetworkAsync(marketplaceChain.id)
if (chain.id !== marketplaceChain.id) {
return false
}
}
if (!signer) {
openConnectModal?.()
}
}}
{...buttonProps}
>
Buy Now
</Button>
) : (
<BuyModal
trigger={trigger}
tokenId={token?.token?.tokenId}
collectionId={token?.token?.collection?.id}
onClose={() => {
if (mutate) {
mutate()
}
}}
/>
)
}
export default BuyNow