fix: implements dynamic session list (#413)

* fix: implements dynamic session list

* chore: updates log msg

---------

Co-authored-by: Gancho Radkov <ganchoradkov@gmail.com>
This commit is contained in:
Gancho Radkov 2024-01-15 15:09:47 +02:00 committed by GitHub
parent 92eea35ee8
commit 2f2cc8f2d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 7 deletions

View File

@ -125,7 +125,12 @@ export default function useWalletConnectEventsManager(initialized: boolean) {
web3wallet.on('auth_request', onAuthRequest) web3wallet.on('auth_request', onAuthRequest)
// TODOs // TODOs
web3wallet.engine.signClient.events.on('session_ping', data => console.log('ping', data)) web3wallet.engine.signClient.events.on('session_ping', data => console.log('ping', data))
web3wallet.on('session_delete', data => console.log('delete', data)) web3wallet.on('session_delete', data => {
console.log('session_delete event received', data)
SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions()))
})
// load sessions on init
SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions()))
} }
}, [initialized, onAuthRequest, onSessionProposal, onSessionRequest]) }, [initialized, onAuthRequest, onSessionProposal, onSessionRequest])
} }

View File

@ -1,11 +1,12 @@
import PageHeader from '@/components/PageHeader' import PageHeader from '@/components/PageHeader'
import SessionCard from '@/components/SessionCard' import SessionCard from '@/components/SessionCard'
import { web3wallet } from '@/utils/WalletConnectUtil' import SettingsStore from '@/store/SettingsStore'
import { Text } from '@nextui-org/react' import { Text } from '@nextui-org/react'
import { Fragment, useState } from 'react' import { Fragment } from 'react'
import { useSnapshot } from 'valtio'
export default function SessionsPage() { export default function SessionsPage() {
const [sessions] = useState(Object.values(web3wallet.getActiveSessions())) const { sessions } = useSnapshot(SettingsStore.state)
if (!sessions.length) { if (!sessions.length) {
return ( return (

View File

@ -1,4 +1,4 @@
import { Verify } from '@walletconnect/types' import { Verify, SessionTypes } from '@walletconnect/types'
import { proxy } from 'valtio' import { proxy } from 'valtio'
/** /**
@ -19,6 +19,7 @@ interface State {
relayerRegionURL: string relayerRegionURL: string
activeChainId: string activeChainId: string
currentRequestVerifyContext?: Verify.Context currentRequestVerifyContext?: Verify.Context
sessions: SessionTypes.Struct[]
} }
/** /**
@ -37,7 +38,8 @@ const state = proxy<State>({
tronAddress: '', tronAddress: '',
tezosAddress: '', tezosAddress: '',
kadenaAddress: '', kadenaAddress: '',
relayerRegionURL: '' relayerRegionURL: '',
sessions: []
}) })
/** /**
@ -94,6 +96,9 @@ const SettingsStore = {
setCurrentRequestVerifyContext(context: Verify.Context) { setCurrentRequestVerifyContext(context: Verify.Context) {
state.currentRequestVerifyContext = context state.currentRequestVerifyContext = context
}, },
setSessions(sessions: SessionTypes.Struct[]) {
state.sessions = sessions
},
toggleTestNets() { toggleTestNets() {
state.testNets = !state.testNets state.testNets = !state.testNets
@ -102,7 +107,7 @@ const SettingsStore = {
} else { } else {
localStorage.removeItem('TEST_NETS') localStorage.removeItem('TEST_NETS')
} }
}, }
} }
export default SettingsStore export default SettingsStore

View File

@ -33,6 +33,7 @@ import ChainAddressMini from '@/components/ChainAddressMini'
import { getChainData } from '@/data/chainsUtil' import { getChainData } from '@/data/chainsUtil'
import RequestModal from './RequestModal' import RequestModal from './RequestModal'
import { useSnapshot } from 'valtio' import { useSnapshot } from 'valtio'
import SettingsStore from '@/store/SettingsStore'
const StyledText = styled(Text, { const StyledText = styled(Text, {
fontWeight: 400 fontWeight: 400
@ -232,6 +233,7 @@ export default function SessionProposalModal() {
id: proposal.id, id: proposal.id,
namespaces namespaces
}) })
SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions()))
} catch (e) { } catch (e) {
setIsLoadingApprove(false) setIsLoadingApprove(false)
styledToast((e as Error).message, 'error') styledToast((e as Error).message, 'error')