1- import React , { useCallback , useContext } from 'react'
1+ import React , { useCallback , useContext , useState , useEffect } from 'react'
22import { createPortal } from 'react-dom'
33import { RouteComponentProps } from 'react-router-dom'
44import { useTranslation } from 'react-i18next'
5- import { Stack , getTheme , Text , ProgressIndicator , Icon , TooltipHost } from 'office-ui-fabric-react'
5+ import { Stack , getTheme , Text , ProgressIndicator , Icon , TooltipHost , TeachingBubble } from 'office-ui-fabric-react'
66
7+ import { openExternal } from 'services/remote'
78import { StateWithDispatch } from 'states/stateProvider/reducer'
8- import { ConnectionStatus , FULL_SCREENS , Routes } from 'utils/const'
99import { NeuronWalletContext } from 'states/stateProvider'
10+ import { ConnectionStatus , FULL_SCREENS , RUN_NODE_GUIDE_URL , Routes } from 'utils/const'
1011
1112const theme = getTheme ( )
1213const stackStyles = {
@@ -55,7 +56,7 @@ export const SyncStatus = ({
5556
5657export const NetworkStatus = ( { name, online } : { name : string ; online : boolean } ) => {
5758 return (
58- < Stack horizontal verticalAlign = "center" tokens = { { childrenGap : 5 } } styles = { stackItemStyles } >
59+ < Stack id = "network-status" horizontal verticalAlign = "center" tokens = { { childrenGap : 5 } } styles = { stackItemStyles } >
5960 < Icon
6061 iconName = { online ? 'Connected' : 'Disconnected' }
6162 styles = { { root : { display : 'flex' , alignItems : 'center' } } }
@@ -75,6 +76,23 @@ const Footer = ({
7576 settings : { networks = [ ] } ,
7677 } = useContext ( NeuronWalletContext )
7778 const [ t ] = useTranslation ( )
79+ const [ showGuide , setShowGuide ] = useState ( false )
80+
81+ useEffect ( ( ) => {
82+ if ( connectionStatus !== ConnectionStatus . Online ) {
83+ setShowGuide ( true )
84+ } else {
85+ setShowGuide ( false )
86+ }
87+ } , [ connectionStatus , setShowGuide ] )
88+
89+ const onDismissGuide = useCallback ( ( ) => {
90+ setShowGuide ( false )
91+ } , [ setShowGuide ] )
92+
93+ const onGuideLinkClick = useCallback ( ( ) => {
94+ openExternal ( RUN_NODE_GUIDE_URL )
95+ } , [ ] )
7896
7997 const goToNetworksSetting = useCallback ( ( ) => {
8098 history . push ( Routes . SettingsNetworks )
@@ -106,6 +124,27 @@ const Footer = ({
106124 ) : (
107125 < Text > { t ( 'settings.setting-tabs.network' ) } </ Text >
108126 ) }
127+ { showGuide ? (
128+ < TeachingBubble
129+ target = "#network-status"
130+ headline = { t ( 'messages.run-ckb-guide' ) }
131+ hasSmallHeadline
132+ primaryButtonProps = { {
133+ children : t ( 'common.open' ) ,
134+ onClick : onGuideLinkClick ,
135+ } }
136+ onDismiss = { onDismissGuide }
137+ styles = { {
138+ subText : {
139+ fontSize : '14px' ,
140+ } ,
141+ } }
142+ >
143+ < Text as = "span" variant = "xSmall" >
144+ { t ( 'messages.view-the-run-node-doc' ) }
145+ </ Text >
146+ </ TeachingBubble >
147+ ) : null }
109148 </ Stack >
110149 </ Stack >
111150 )
0 commit comments