11import React , { FC , useState , useEffect } from 'react'
22import Web3 from 'web3'
33import { makeStyles , Theme } from '@material-ui/core/styles'
4+ import Popover from '@material-ui/core/Popover'
45import ProviderInfo , { EProvider } from '../../models/ProviderInfo'
56import { shortenString } from '../../utils'
67import { Button , NetworkIndicator , Typography } from '../atoms'
@@ -37,6 +38,9 @@ const useStyles = makeStyles((theme: Theme) => ({
3738 networkIndicator : {
3839 marginRight : theme . spacing ( 1 ) ,
3940 } ,
41+ rightNetwork : {
42+ padding : theme . spacing ( 2 ) ,
43+ } ,
4044} ) )
4145
4246const Account : FC < AccountProps > = ( props ) => {
@@ -57,15 +61,28 @@ const Account: FC<AccountProps> = (props) => {
5761 const [ accountModalOpen , setAccountModalOpen ] = useState ( false )
5862 const handleAccountModalClose = ( ) : void => setAccountModalOpen ( false )
5963 const handleAccountModalOpen = ( ) : void => setAccountModalOpen ( true )
60- const [ wrongNetworkModalOpen , setWrongNetworkModalOpen ] = useState ( false )
61- const openWrongNetworkModal = ( ) : void => setWrongNetworkModalOpen ( true )
62- const closeWrongNetworkModal = ( ) : void => setWrongNetworkModalOpen ( false )
64+ const [ wrongNetModalOpen , setWrongNetModalOpen ] = useState ( false )
65+ const openWrongNetModal = ( ) : void => setWrongNetModalOpen ( true )
66+ const closeWrongNetModal = ( ) : void => setWrongNetModalOpen ( false )
6367 const connectionStatus : ConnectionStatus = getConnectionStatus ( web3 , requiredNetworkId , networkInfo ?. networkId , account )
6468
69+ // TODO: extract popover functionallity into new component
70+ const [ anchorEl , setAnchorEl ] = React . useState < HTMLButtonElement | null > ( null )
71+
72+ const popoverOpen = Boolean ( anchorEl )
73+ const id = popoverOpen ? 'right-net-popover' : undefined
74+
75+ const handlePopoverClose = ( ) => {
76+ setAnchorEl ( null )
77+ }
78+
6579 useEffect ( ( ) => {
6680 if ( connectionStatus === ConnectionStatus . WrongNetwork ) {
67- openWrongNetworkModal ( )
68- } else if ( connectionStatus === ConnectionStatus . LoggedIn ) closeWrongNetworkModal ( )
81+ openWrongNetModal ( )
82+ } else {
83+ closeWrongNetModal ( )
84+ handlePopoverClose ( )
85+ }
6986 } , [ connectionStatus ] )
7087
7188 const accountText = ( ) : string => {
@@ -80,10 +97,13 @@ const Account: FC<AccountProps> = (props) => {
8097 return 'Unlock your wallet'
8198 }
8299
83- const onAccountClicked = ( ) : void => {
84- if ( connectionStatus === ConnectionStatus . WrongNetwork ) return openWrongNetworkModal ( )
100+ const onAccountClicked = ( event : React . MouseEvent < HTMLButtonElement > ) : void | null => {
101+ if ( connectionStatus === ConnectionStatus . WrongNetwork ) return openWrongNetModal ( )
85102
86103 if ( connectionStatus === ConnectionStatus . LoggedOut ) return handleAccountModalOpen ( )
104+
105+ if ( connectionStatus === ConnectionStatus . LoggedIn ) return setAnchorEl ( event . currentTarget )
106+ return null
87107 }
88108
89109 return (
@@ -105,6 +125,27 @@ const Account: FC<AccountProps> = (props) => {
105125 { accountText ( ) }
106126 </ Typography >
107127 </ Button >
128+ { /* TODO: extract molecule */ }
129+ < Popover
130+ id = { id }
131+ open = { popoverOpen }
132+ anchorEl = { anchorEl }
133+ onClose = { handlePopoverClose }
134+ anchorOrigin = { {
135+ vertical : 'bottom' ,
136+ horizontal : 'center' ,
137+ } }
138+ transformOrigin = { {
139+ vertical : 'top' ,
140+ horizontal : 'center' ,
141+ } }
142+ >
143+ < Typography className = { classes . rightNetwork } >
144+ You are successfully connected to
145+ { networkInfo ?. name }
146+ .
147+ </ Typography >
148+ </ Popover >
108149 < AccountModal
109150 open = { accountModalOpen }
110151 onClose = { handleAccountModalClose }
@@ -114,8 +155,8 @@ const Account: FC<AccountProps> = (props) => {
114155 availableProviders = { availableProviders }
115156 />
116157 < WrongNetworkModal
117- open = { wrongNetworkModalOpen }
118- onClose = { closeWrongNetworkModal }
158+ open = { wrongNetModalOpen }
159+ onClose = { closeWrongNetModal }
119160 requiredNetworkName = { requiredNetworkName }
120161 currentNetworkName = { networkInfo ?. name }
121162 />
0 commit comments