@@ -17,6 +17,7 @@ import { getMessagePlaceholder, validateMessage } from '../../helpers/messages'
17
17
18
18
import './SignForm.scss'
19
19
import { MdIosShare } from 'react-icons/md'
20
+ import { useWeb3Onboard } from '@web3-onboard/react/dist/context'
20
21
21
22
const truncateAddress = ( addr ) => {
22
23
return addr . substr ( 0 , 4 ) + '...' + addr . substr ( - 4 )
@@ -30,12 +31,14 @@ const SignForm = ({ selectedForm, setShareModalLink }) => {
30
31
31
32
const connectedWallets = useWallets ( )
32
33
const [ connectedAccount , setConnectedAccount ] = useState ( null )
34
+ const { state } = useWeb3Onboard ( )
33
35
34
36
const [ error , setError ] = useState ( null )
35
37
36
38
const [ isSigning , setIsSigning ] = useState ( false )
37
39
const [ isLoaderDelayerActive , setIsLoaderDelayerActive ] = useState ( false )
38
40
const [ signature , setSignature ] = useState ( null )
41
+ const [ hasDisconnected , setHasDiconnected ] = useState ( false )
39
42
40
43
const [ message , setMessage ] = useState ( '' )
41
44
const [ messageError , setMessageError ] = useState ( null )
@@ -64,10 +67,26 @@ const SignForm = ({ selectedForm, setShareModalLink }) => {
64
67
useEffect ( ( ) => {
65
68
if ( ! wallet ?. provider ) {
66
69
provider = null
70
+
71
+ const currentState = state . get ( )
72
+
73
+ // If the user has disconnected from safe once we should not autoconnect him again
74
+ if ( selectedForm !== 'sign' || hasDisconnected || ! currentState ) return
75
+
76
+ const availableWalletLabels = currentState . walletModules . map ( ( module ) => module . label )
77
+
78
+ // Check if Safe is available, because autoselecting will fail if it's not
79
+ if ( ! availableWalletLabels . includes ( 'Safe' ) ) return
80
+
81
+ connect ( {
82
+ autoSelect : {
83
+ label : 'Safe' ,
84
+ } ,
85
+ } )
67
86
} else {
68
87
provider = new ethers . providers . Web3Provider ( wallet . provider , 'any' )
69
88
}
70
- } , [ wallet ] )
89
+ } , [ wallet , connect , selectedForm , hasDisconnected , state ] )
71
90
72
91
// wallet sign call
73
92
const walletSign = useCallback (
@@ -81,19 +100,19 @@ const SignForm = ({ selectedForm, setShareModalLink }) => {
81
100
const signer = provider . getUncheckedSigner ( )
82
101
83
102
if ( messageType === 'humanMessage' ) {
84
- if ( wallet . label === 'Gnosis Safe' ) {
85
- return ( await provider . sdk . txs . signMessage ( hexlify ( ethers . utils . toUtf8Bytes ( message ) ) ) ) . safeTxHash
103
+ if ( wallet . label === 'Safe' ) {
104
+ return ( await wallet . instance . txs . signMessage ( hexlify ( ethers . utils . toUtf8Bytes ( message ) ) ) ) . safeTxHash
86
105
}
87
106
return signer . signMessage ( message )
88
107
} else if ( messageType === 'hexMessage' ) {
89
- if ( wallet . label === 'Gnosis Safe' ) {
90
- return ( await provider . sdk . txs . signMessage ( message ) ) . safeTxHash
108
+ if ( wallet . label === 'Safe' ) {
109
+ return ( await wallet . instance . txs . signMessage ( message ) ) . safeTxHash
91
110
}
92
111
return signer . signMessage ( arrayify ( message ) )
93
112
} else if ( messageType === 'typedData' ) {
94
- if ( wallet . label === 'Gnosis Safe' ) {
113
+ if ( wallet . label === 'Safe' ) {
95
114
return (
96
- await provider . sdk . txs . signMessage ( {
115
+ await wallet . instance . txs . signMessage ( {
97
116
signType : 'eth_signTypedData_v4' ,
98
117
message,
99
118
} )
@@ -321,7 +340,13 @@ const SignForm = ({ selectedForm, setShareModalLink }) => {
321
340
Connected with < b > { truncateAddress ( connectedAccount . address ) } </ b >
322
341
< CopyButton textToCopy = { connectedAccount . address } />
323
342
</ span >
324
- < button onClick = { ( ) => disconnect ( wallet ) } className = 'button-disconnect' >
343
+ < button
344
+ onClick = { ( ) => {
345
+ disconnect ( wallet )
346
+ setHasDiconnected ( true )
347
+ } }
348
+ className = 'button-disconnect'
349
+ >
325
350
Disconnect Wallet
326
351
</ button >
327
352
</ >
0 commit comments