1
+ import { waitForTransactionReceipt } from '@wagmi/core'
2
+ import { TxHistoryContext } from 'contexts/Transaction/TxHistoryContext'
1
3
import { FormikHelpers } from 'formik'
2
4
import { useWallet } from 'hooks/Wallet'
3
5
import { useCurrencyConverter } from 'hooks/useCurrencyConverter'
4
- import { useProjectSelector } from 'packages/v4/components/ProjectDashboard/redux/hooks'
5
- import { ProjectPayReceipt } from 'packages/v4/views/V4ProjectDashboard/hooks/useProjectPageQueries'
6
- // import { NftRewardsContext } from 'packages/v4/contexts/NftRewards/NftRewardsContext'
7
- // import { useProjectHasErc20 } from 'packages/v4/hooks/useProjectHasErc20'
8
- import { waitForTransactionReceipt } from '@wagmi/core'
9
- import { TxHistoryContext } from 'contexts/Transaction/TxHistoryContext'
10
- import { NATIVE_TOKEN } from 'juice-sdk-core'
6
+ import { DEFAULT_METADATA , NATIVE_TOKEN } from 'juice-sdk-core'
11
7
import {
12
8
useJBContractContext ,
9
+ useJBRulesetContext ,
10
+ usePreparePayMetadata ,
13
11
useWriteJbMultiTerminalPay ,
14
12
} from 'juice-sdk-react'
15
- // import { useProjectHasErc20 } from 'packages/v2v3/hooks/useProjectHasErc20'
13
+ import { useProjectSelector } from 'packages/v4/components/ProjectDashboard/redux/hooks'
14
+ import { useV4NftRewards } from 'packages/v4/contexts/V4NftRewards/V4NftRewardsProvider'
16
15
import { V4_CURRENCY_ETH } from 'packages/v4/utils/currency'
16
+ import { ProjectPayReceipt } from 'packages/v4/views/V4ProjectDashboard/hooks/useProjectPageQueries'
17
17
import { wagmiConfig } from 'packages/v4/wagmiConfig'
18
18
import { useCallback , useContext , useMemo } from 'react'
19
19
import { buildPaymentMemo } from 'utils/buildPaymentMemo'
@@ -42,11 +42,12 @@ export const usePayProjectTx = ({
42
42
const { payAmount, chosenNftRewards } = useProjectSelector (
43
43
state => state . projectCart ,
44
44
)
45
- // const {
46
- // nftRewards: { rewardTiers },
47
- // } = useContext(NftRewardsContext )
45
+ const {
46
+ nftRewards : { rewardTiers } ,
47
+ } = useV4NftRewards ( )
48
48
const converter = useCurrencyConverter ( )
49
49
const { receivedTickets } = useProjectPaymentTokens ( )
50
+ // TODO: implement
50
51
// const projectHasErc20 = useProjectHasErc20()
51
52
52
53
const buildPayReceipt = useCallback (
@@ -76,10 +77,21 @@ export const usePayProjectTx = ({
76
77
}
77
78
} , [ payAmount , converter ] )
78
79
79
- // const prepareDelegateMetadata = usePrepareDelegatePayMetadata(weiAmount, {
80
- // nftRewards: chosenNftRewards,
81
- // receivedTickets,
82
- // })
80
+ const {
81
+ rulesetMetadata : { data : rulesetMetadata } ,
82
+ } = useJBRulesetContext ( )
83
+ const metadata = usePreparePayMetadata (
84
+ rulesetMetadata ?. dataHook
85
+ ? {
86
+ jb721Hook : {
87
+ dataHookAddress : rulesetMetadata . dataHook ,
88
+ tierIdsToMint : chosenNftRewards
89
+ . map ( ( { id, quantity } ) => Array ( quantity ) . fill ( BigInt ( id ) ) )
90
+ . flat ( ) ,
91
+ } ,
92
+ }
93
+ : undefined ,
94
+ )
83
95
84
96
const { writeContractAsync : writePay } = useWriteJbMultiTerminalPay ( )
85
97
const { contracts, projectId } = useJBContractContext ( )
@@ -103,13 +115,13 @@ export const usePayProjectTx = ({
103
115
const memo = buildPaymentMemo ( {
104
116
text : messageString ,
105
117
imageUrl : attachedUrl ,
106
- // nftUrls: chosenNftRewards
107
- // .map(
108
- // ({ id }) =>
109
- // (rewardTiers ?? []).find(({ id: tierId }) => tierId === id)
110
- // ?.fileUrl,
111
- // )
112
- // .filter((url): url is string => !!url),
118
+ nftUrls : chosenNftRewards
119
+ . map (
120
+ ( { id } ) =>
121
+ ( rewardTiers ?? [ ] ) . find ( ( { id : tierId } ) => tierId === id )
122
+ ?. fileUrl ,
123
+ )
124
+ . filter ( ( url ) : url is string => ! ! url ) ,
113
125
} )
114
126
const beneficiary = ( values . beneficiaryAddress ?? userAddress ) as Address
115
127
const args = [
@@ -119,9 +131,15 @@ export const usePayProjectTx = ({
119
131
beneficiary ,
120
132
0n ,
121
133
memo ,
122
- '0x0' ,
134
+ metadata ?? DEFAULT_METADATA ,
123
135
] as const
124
136
137
+ // SIMULATE TRANSACTION:
138
+ // const encodedData = encodeFunctionData({
139
+ // abi: jbMultiTerminalAbi, // ABI of the contract
140
+ // functionName: 'pay',
141
+ // args,
142
+ // })
125
143
try {
126
144
const hash = await writePay ( {
127
145
address : contracts . primaryNativeTerminal . data ,
@@ -147,21 +165,19 @@ export const usePayProjectTx = ({
147
165
}
148
166
} ,
149
167
[
150
- // projectHasErc20,
151
- buildPayReceipt ,
152
- // chosenNftRewards,
153
- onTransactionConfirmedCallback ,
154
- onTransactionErrorCallback ,
155
- onTransactionPendingCallback ,
156
- // payProjectTx,
157
- // rewardTiers,
158
168
weiAmount ,
169
+ contracts . primaryNativeTerminal . data ,
159
170
userAddress ,
160
- // prepareDelegateMetadata ,
171
+ chosenNftRewards ,
161
172
projectId ,
173
+ metadata ,
174
+ rewardTiers ,
162
175
writePay ,
163
- contracts . primaryNativeTerminal . data ,
176
+ onTransactionPendingCallback ,
164
177
addTransaction ,
178
+ onTransactionConfirmedCallback ,
179
+ buildPayReceipt ,
180
+ onTransactionErrorCallback ,
165
181
] ,
166
182
)
167
183
}
0 commit comments