mirror of
https://github.com/luxfi/market.git
synced 2026-09-24 00:25:57 +00:00
83 lines
2.1 KiB
TypeScript
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
|