11import { ContractType , type Hash } from '@0xsequence/api-client' ;
22import { useSupportedChains } from '0xtrails' ;
3+ import type { NFTTransfer } from '0xtrails' ;
34import { type Chain , formatUnits } from 'viem' ;
5+ import { useAccount } from 'wagmi' ;
46import { TransactionType } from '../../../../_internal' ;
57import { useConfig } from '../../../../hooks' ;
68import { useBuyTransaction } from '../../../../hooks/transactions/useBuyTransaction' ;
@@ -19,6 +21,7 @@ export function useBuyModalContext() {
1921 const { close } = useBuyModal ( ) ;
2022 const transactionStatusModal = useTransactionStatusModal ( ) ;
2123 const { supportedChains, isLoadingChains } = useSupportedChains ( ) ;
24+ const { address : userWalletAddress } = useAccount ( ) ;
2225
2326 const {
2427 collectible,
@@ -34,16 +37,18 @@ export function useBuyModalContext() {
3437 refetchQueries,
3538 } = useBuyModalData ( ) ;
3639
40+ const contractType =
41+ collection ?. type === ContractType . ERC1155
42+ ? ContractType . ERC1155
43+ : ContractType . ERC721 ;
44+
3745 const transactionData = useBuyTransaction ( {
3846 modalProps,
3947 primarySalePrice : {
4048 amount : primarySaleItem ?. priceAmount ,
4149 currencyAddress : primarySaleItem ?. currencyAddress ,
4250 } ,
43- contractType :
44- collection ?. type === ContractType . ERC1155
45- ? ContractType . ERC1155
46- : ContractType . ERC721 ,
51+ contractType,
4752 } ) ;
4853 const steps = transactionData . data ?. steps ;
4954 const canBeUsedWithTrails =
@@ -60,6 +65,23 @@ export function useBuyModalContext() {
6065
6166 const buyStep = steps ?. find ( ( step ) => step . id === 'buy' ) ;
6267
68+ const nftTransfer : NFTTransfer | null = ( ( ) => {
69+ if ( ! isMarket || ! marketOrder || ! userWalletAddress || marketOrder . tokenId === undefined ) {
70+ return null ;
71+ }
72+
73+ const baseTransfer = {
74+ contract : marketOrder . collectionContractAddress ,
75+ tokenId : marketOrder . tokenId ,
76+ recipient : userWalletAddress ,
77+ } ;
78+
79+ if ( contractType === ContractType . ERC1155 ) {
80+ return { ...baseTransfer , type : 'ERC1155' as const , amount : 1n } ;
81+ }
82+ return { ...baseTransfer , type : 'ERC721' as const } ;
83+ } ) ( ) ;
84+
6385 const checkoutMode = determineCheckoutMode ( {
6486 checkoutModeConfig,
6587 isChainSupported,
@@ -133,6 +155,7 @@ export function useBuyModalContext() {
133155 marketOrder,
134156 isShop,
135157 buyStep,
158+ nftTransfer,
136159 isLoading,
137160 checkoutMode,
138161 formattedAmount,
0 commit comments