11import { useRef , useContext } from 'react'
2- import { useNavigate } from 'react-router'
32import { useDispatch , useSelector } from 'react-redux'
43import type { RootState , AppDispatch } from '../redux/store'
5- import { setJoining , setFederationId } from '../redux/slices/ActiveFederation'
6- import WalletContext from '../context/wallet'
4+ import { setJoining , setWalletId } from '../redux/slices/ActiveWallet'
75import LoadingContext from '../context/loader'
86import Alerts from './Alerts'
97import { JoinFederation as JoinFederationService } from '../services/FederationService'
108import { setError } from '../redux/slices/Alerts'
119import QrScanner from 'qr-scanner'
1210import NProgress from 'nprogress'
1311import logger from '../utils/logger'
12+ import { useWallet } from '../context/WalletManager'
1413
1514
1615export default function AddFederation ( { setJoinForm } : { setJoinForm : React . Dispatch < React . SetStateAction < boolean > > } ) {
17-
1816 const inviteCode = useRef < HTMLInputElement | null > ( null )
1917 const walletName = useRef < HTMLInputElement | null > ( null )
2018 const videoRef = useRef < HTMLVideoElement | null > ( null )
2119 const scannerRef = useRef < QrScanner | null > ( null )
22- const navigate = useNavigate ( )
23- const { wallet} = useContext ( WalletContext )
2420 const { setLoading } = useContext ( LoadingContext )
21+ const { setWallet, switchWallet } = useWallet ( )
2522 const dispatch = useDispatch < AppDispatch > ( )
2623 const { joining } = useSelector ( ( state : RootState ) => state . activeFederation )
27- const { error} = useSelector ( ( state :RootState ) => state . Alert )
24+ const { error } = useSelector ( ( state : RootState ) => state . Alert )
2825
2926 const handleJoinFederation = async ( e : React . FormEvent , qrData ?: string ) : Promise < void > => {
3027 e . preventDefault ( )
3128
3229 const code = inviteCode . current ?. value ?. trim ( ) || qrData
3330 if ( ! code ) return ; // invitecode should not be empty
34- if ( wallet ?. isOpen ( ) ) {
35- logger . log ( "wallet is open" )
36- // let result = await wallet.federation.getFederationId();
37- // localStorage.setItem('activeFederation', result)
38- // dispatch(setFederationId(result))
39- // navigate('/wallet')
40- setTimeout ( ( ) => {
41- dispatch ( setError ( null ) )
42- } , 2000 ) ;
43- dispatch ( setError ( { type :'Join Federation: ' , message :'Wallet is open' } ) )
44- return ;
45- }
4631 dispatch ( setJoining ( true ) )
4732
4833 try {
4934 NProgress . start ( )
5035 setLoading ( true )
51- const result = await JoinFederationService ( code , walletName . current ?. value || '' , wallet )
52- // dispatch(setJoinResult(result.message))
53- dispatch ( setFederationId ( result . federationID ) )
54- navigate ( '/wallet' )
36+ const result = await JoinFederationService ( code , walletName . current ?. value || '' )
37+ if ( result ) {
38+ logger . log ( 'setting new wallet ' , result )
39+ setWallet ( result )
40+ dispatch ( setWalletId ( result . id ) )
41+ localStorage . setItem ( 'activeWallet' , result . id )
42+ localStorage . setItem ( 'lastUsedWallet' , result . id )
43+ await switchWallet ( result . id )
44+ }
5545 } catch ( err ) {
56- dispatch ( setError ( { type :'Join Federation: ' , message :err instanceof Error ? err . message : String ( err ) } ) )
46+ dispatch ( setError ( { type : 'Join Federation: ' , message : err instanceof Error ? err . message : String ( err ) } ) )
5747 } finally {
5848 dispatch ( setJoining ( false ) )
5949 NProgress . done ( )
@@ -82,14 +72,14 @@ export default function AddFederation({ setJoinForm }: { setJoinForm: React.Disp
8272 logger . log ( "Camera started successfully" ) ;
8373 } ) . catch ( ( err ) => {
8474 logger . log ( "Camera access denied:" , err ) ;
85- dispatch ( setError ( { type :'QR Error: ' , message :'Camera access denied!' } ) )
75+ dispatch ( setError ( { type : 'QR Error: ' , message : 'Camera access denied!' } ) )
8676 setTimeout ( ( ) => {
8777 dispatch ( setError ( null ) )
8878 } , 2000 ) ;
8979 } ) ;
9080 } catch ( err ) {
9181 logger . log ( "an error occured while scanning" )
92- dispatch ( setError ( { type :'QR Error: ' , message :"Error occured while scanning" } ) )
82+ dispatch ( setError ( { type : 'QR Error: ' , message : "Error occured while scanning" } ) )
9383 setTimeout ( ( ) => {
9484 dispatch ( setError ( null ) )
9585 } , 2000 ) ;
@@ -109,7 +99,7 @@ export default function AddFederation({ setJoinForm }: { setJoinForm: React.Disp
10999 < button onClick = { handleJoinFederation } disabled = { joining } > { joining ? 'Joining...' : 'Add Federation' } </ button >
110100 </ div >
111101
112- < div className = "divider" > < p > Or</ p > </ div >
102+ < div className = "option- divider" > < p > Or</ p > </ div >
113103
114104 < div className = "addVideoBox" >
115105 < video ref = { videoRef } width = "250" />
0 commit comments