@@ -3,8 +3,11 @@ import { TFunction } from 'i18next'
33import { Dispatch , SetStateAction , useCallback , useEffect , useMemo , useRef , useState } from 'react'
44import { useTranslation } from 'react-i18next'
55import {
6+ MultisigConfig ,
67 generateDaoDepositAllTx as generateDaoDepositAllTxAPI ,
78 generateDaoDepositTx as generateDaoDepositTxAPI ,
9+ generateMultisigDaoDepositTx as generateMultisigDaoDepositTxAPI ,
10+ generateMultisigDaoDepositAllTx as generateMultisigDaoDepositAllTxAPI ,
811} from 'services/remote'
912import { AppActions , useDispatch } from 'states'
1013import {
@@ -17,6 +20,7 @@ import {
1720 useClearGeneratedTx ,
1821 validateAmount ,
1922} from 'utils'
23+ import getMultisigSignStatus from 'utils/getMultisigSignStatus'
2024import { MAX_DECIMAL_DIGITS , MIN_DEPOSIT_AMOUNT , SHANNON_CKB_RATIO } from 'utils/const'
2125
2226const PERCENT_100 = 100
@@ -45,17 +49,26 @@ function generateDaoDepositTx({
4549 capacity,
4650 suggestFeeRate,
4751 t,
52+ multisigConfig,
4853} : {
4954 walletID : string
5055 capacity : string
5156 suggestFeeRate : number
5257 t : TFunction
58+ multisigConfig ?: MultisigConfig
5359} ) : Promise < State . GeneratedTx | null > {
54- return generateDaoDepositTxAPI ( {
55- feeRate : `${ suggestFeeRate } ` ,
56- capacity,
57- walletID,
58- } ) . then ( res => {
60+ const generateCall = multisigConfig
61+ ? generateMultisigDaoDepositTxAPI ( {
62+ feeRate : `${ suggestFeeRate } ` ,
63+ capacity,
64+ multisigConfig,
65+ } )
66+ : generateDaoDepositTxAPI ( {
67+ walletID,
68+ feeRate : `${ suggestFeeRate } ` ,
69+ capacity,
70+ } )
71+ return generateCall . then ( res => {
5972 if ( isSuccessResponse ( res ) ) {
6073 return res . result
6174 }
@@ -73,16 +86,25 @@ function generateDaoDepositAllTx({
7386 suggestFeeRate,
7487 isBalanceReserved,
7588 walletID,
89+ multisigConfig,
7690} : {
7791 suggestFeeRate : number
7892 isBalanceReserved : boolean
7993 walletID : string
94+ multisigConfig ?: MultisigConfig
8095} ) : Promise < State . GeneratedTx | null > {
81- return generateDaoDepositAllTxAPI ( {
82- walletID,
83- feeRate : `${ suggestFeeRate } ` ,
84- isBalanceReserved,
85- } ) . then ( res => {
96+ const generateAllCall = multisigConfig
97+ ? generateMultisigDaoDepositAllTxAPI ( {
98+ feeRate : `${ suggestFeeRate } ` ,
99+ isBalanceReserved,
100+ multisigConfig,
101+ } )
102+ : generateDaoDepositAllTxAPI ( {
103+ walletID,
104+ feeRate : `${ suggestFeeRate } ` ,
105+ isBalanceReserved,
106+ } )
107+ return generateAllCall . then ( res => {
86108 if ( isSuccessResponse ( res ) ) {
87109 return res . result
88110 }
@@ -97,13 +119,15 @@ export const useGenerateDaoDepositTx = ({
97119 suggestFeeRate,
98120 showDepositDialog,
99121 slidePercent,
122+ multisigConfig,
100123} : {
101124 walletID : string
102125 isBalanceReserved : boolean
103126 depositValue : string
104127 suggestFeeRate : number
105128 showDepositDialog : boolean
106129 slidePercent : number
130+ multisigConfig ?: MultisigConfig
107131} ) => {
108132 const timer = useRef < ReturnType < typeof setTimeout > > ( )
109133 const [ errorMessage , setErrorMessage ] = useState ( '' )
@@ -127,8 +151,14 @@ export const useGenerateDaoDepositTx = ({
127151 }
128152
129153 const generateDaoDepositResult : Promise < State . GeneratedTx | null > = isDepositAll
130- ? generateDaoDepositAllTx ( { walletID, isBalanceReserved, suggestFeeRate } )
131- : generateDaoDepositTx ( { walletID, capacity : CKBToShannonFormatter ( depositValue ) , suggestFeeRate, t } )
154+ ? generateDaoDepositAllTx ( { walletID, isBalanceReserved, suggestFeeRate, multisigConfig } )
155+ : generateDaoDepositTx ( {
156+ walletID,
157+ capacity : CKBToShannonFormatter ( depositValue ) ,
158+ suggestFeeRate,
159+ t,
160+ multisigConfig,
161+ } )
132162 generateDaoDepositResult
133163 . then ( res => {
134164 dispatch ( {
@@ -239,22 +269,38 @@ export const useBalanceReserved = () => {
239269
240270export const useOnDepositDialogSubmit = ( {
241271 onDepositSuccess,
242- walletID,
272+ wallet,
273+ multisigConfig,
243274} : {
244275 onDepositSuccess : ( ) => void
245- walletID : string
276+ wallet : State . Wallet
277+ multisigConfig ?: MultisigConfig
246278} ) => {
247279 const dispatch = useDispatch ( )
248280 return useCallback ( ( ) => {
249- dispatch ( {
250- type : AppActions . RequestPassword ,
251- payload : {
252- walletID,
253- actionType : 'send' ,
254- onSuccess : onDepositSuccess ,
255- } ,
256- } )
257- } , [ dispatch , walletID , onDepositSuccess ] )
281+ if ( multisigConfig ) {
282+ const { canBroadcastAfterSign } = getMultisigSignStatus ( { multisigConfig, addresses : wallet . addresses } )
283+ dispatch ( {
284+ type : AppActions . RequestPassword ,
285+ payload : {
286+ walletID : wallet . id ,
287+ actionType : canBroadcastAfterSign ? 'send-from-multisig-need-one' : 'send-from-multisig' ,
288+ multisigConfig,
289+ onSuccess : onDepositSuccess ,
290+ title : 'password-request.verify-password' ,
291+ } ,
292+ } )
293+ } else {
294+ dispatch ( {
295+ type : AppActions . RequestPassword ,
296+ payload : {
297+ walletID : wallet . id ,
298+ actionType : 'send' ,
299+ onSuccess : onDepositSuccess ,
300+ } ,
301+ } )
302+ }
303+ } , [ dispatch , wallet . id , onDepositSuccess , multisigConfig ] )
258304}
259305
260306export const useOnDepositDialogCancel = ( {
0 commit comments