forked from Apillon/embedded-wallet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApproveContractTx.tsx
84 lines (73 loc) · 2.38 KB
/
ApproveContractTx.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { useApproveContext } from '../../contexts/approve.context';
import { useWalletContext } from '../../contexts/wallet.context';
import { formatTxObjectData } from '../../lib/helpers';
import ApproveButtons from './ApproveButtons';
import ApproveDataRow from './ApproveDataRow';
export default () => {
const {
wallet,
state: { username, appProps },
networksById,
} = useWalletContext();
const {
state: { contractFunctionData, approveParams },
} = useApproveContext();
if (!contractFunctionData) {
return <></>;
}
return (
<div className="flex flex-col min-h-full pb-2">
<h3 className="my-6">Contract Transaction</h3>
{!!contractFunctionData.chainId && !!networksById[contractFunctionData.chainId] && (
<ApproveDataRow
label="Chain"
data={`${contractFunctionData.chainId} (${networksById[contractFunctionData.chainId].name})`}
className="mb-4"
/>
)}
<ApproveDataRow
label="Contract address"
data={contractFunctionData.contractAddress}
className="mb-4"
/>
<ApproveDataRow
label="Contract function"
data={contractFunctionData.contractFunctionName}
className="mb-4"
/>
{!!contractFunctionData.contractFunctionValues &&
!!contractFunctionData.contractFunctionValues.length && (
<ApproveDataRow
label="Contract function values"
data={formatTxObjectData(contractFunctionData.contractFunctionValues)}
className="mb-4"
collapsable
/>
)}
<div className="grow"></div>
<ApproveButtons
className="mt-6"
onApprove={async () => {
if (approveParams?.contractWrite) {
const res = await wallet?.signContractWrite({
...approveParams.contractWrite,
authData: { username },
});
if (appProps.broadcastAfterSign && res) {
const { signedTxData, chainId } = res;
await wallet?.broadcastTransaction(
signedTxData,
chainId,
approveParams.contractWrite.label || 'Transaction'
);
}
} else {
const err = new Error('Embedded wallet approve');
err.name = 'no approve data';
throw err;
}
}}
/>
</div>
);
};