@@ -379,31 +379,62 @@ export function useWeb3Wallet() {
379379 */
380380 useEffect ( ( ) => {
381381 if ( typeof window === 'undefined' ) return ;
382- if ( state . provider !== 'metamask' ) return ;
383382
384- const ethereum = ( window as Window & { ethereum ?: any } ) . ethereum ;
385- if ( ! ethereum ) return ;
383+ if ( state . provider === 'metamask' ) {
384+ const ethereum = ( window as Window & { ethereum ?: any } ) . ethereum ;
385+ if ( ! ethereum ) return ;
386386
387- const handleAccountsChanged = ( accounts : string [ ] ) => {
388- if ( accounts . length === 0 ) {
389- disconnect ( ) ;
390- } else if ( accounts [ 0 ] !== state . address ) {
391- setState ( ( prev ) => ( { ...prev , address : accounts [ 0 ] } ) ) ;
392- }
393- } ;
387+ const handleAccountsChanged = ( accounts : string [ ] ) => {
388+ if ( accounts . length === 0 ) {
389+ disconnect ( ) ;
390+ } else if ( accounts [ 0 ] !== state . address ) {
391+ setState ( ( prev ) => ( { ...prev , address : accounts [ 0 ] } ) ) ;
392+ }
393+ } ;
394394
395- const handleChainChanged = ( chainId : string ) => {
396- setState ( ( prev ) => ( { ...prev , chainId } ) ) ;
397- window . location . reload ( ) ; // Reload on chain change to update contract references
398- } ;
395+ const handleChainChanged = ( chainId : string ) => {
396+ setState ( ( prev ) => ( { ...prev , chainId } ) ) ;
397+ window . location . reload ( ) ; // Reload on chain change to update contract references
398+ } ;
399399
400- ethereum . on ( 'accountsChanged' , handleAccountsChanged ) ;
401- ethereum . on ( 'chainChanged' , handleChainChanged ) ;
400+ ethereum . on ( 'accountsChanged' , handleAccountsChanged ) ;
401+ ethereum . on ( 'chainChanged' , handleChainChanged ) ;
402402
403- return ( ) => {
404- ethereum . removeListener ( 'accountsChanged' , handleAccountsChanged ) ;
405- ethereum . removeListener ( 'chainChanged' , handleChainChanged ) ;
406- } ;
403+ return ( ) => {
404+ ethereum . removeListener ( 'accountsChanged' , handleAccountsChanged ) ;
405+ ethereum . removeListener ( 'chainChanged' , handleChainChanged ) ;
406+ } ;
407+ } else if ( state . provider === 'starknet' ) {
408+ const starknet = ( window as Window & { starknet ?: any } ) . starknet ;
409+ if ( ! starknet ) return ;
410+
411+ const handleAccountsChanged = ( accounts : string [ ] ) => {
412+ if ( accounts . length === 0 ) {
413+ disconnect ( ) ;
414+ } else if ( accounts [ 0 ] !== state . address ) {
415+ setState ( ( prev ) => ( { ...prev , address : accounts [ 0 ] } ) ) ;
416+ }
417+ } ;
418+
419+ const handleNetworkChanged = ( ) => {
420+ window . location . reload ( ) ; // Reload on network change to update contract references
421+ } ;
422+
423+ if ( typeof starknet . on === 'function' ) {
424+ starknet . on ( 'accountsChanged' , handleAccountsChanged ) ;
425+ starknet . on ( 'networkChanged' , handleNetworkChanged ) ;
426+ }
427+
428+ return ( ) => {
429+ if ( typeof starknet . off === 'function' ) {
430+ starknet . off ( 'accountsChanged' , handleAccountsChanged ) ;
431+ starknet . off ( 'networkChanged' , handleNetworkChanged ) ;
432+ } else if ( typeof starknet . removeListener === 'function' ) {
433+ starknet . removeListener ( 'accountsChanged' , handleAccountsChanged ) ;
434+ starknet . removeListener ( 'networkChanged' , handleNetworkChanged ) ;
435+ }
436+ } ;
437+ }
407438 } , [ state . address , state . provider , disconnect ] ) ;
408439
409440 return {
0 commit comments