feat: refresh frequency changes if the bee is in error state (#409)

This commit is contained in:
Vojtech Simetka
2022-06-20 15:32:23 +02:00
committed by GitHub
parent 8b3ea5249e
commit ce44ef78f4
+30 -16
View File
@@ -19,6 +19,9 @@ import { WalletAddress } from '../utils/wallet'
import { Context as SettingsContext } from './Settings' import { Context as SettingsContext } from './Settings'
import { Context as TopUpContext } from './TopUp' import { Context as TopUpContext } from './TopUp'
const REFRESH_WHEN_OK = 30_000
const REFRESH_WHEN_ERROR = 5_000
export enum CheckState { export enum CheckState {
OK = 'OK', OK = 'OK',
WARNING = 'Warning', WARNING = 'Warning',
@@ -217,7 +220,7 @@ export function Provider({ children }: Props): ReactElement {
setApiHealth(false) setApiHealth(false)
refresh() if (beeApi !== null) refresh()
}, [beeApi]) // eslint-disable-line react-hooks/exhaustive-deps }, [beeApi]) // eslint-disable-line react-hooks/exhaustive-deps
useEffect(() => { useEffect(() => {
@@ -235,7 +238,7 @@ export function Provider({ children }: Props): ReactElement {
setSettlements(null) setSettlements(null)
setChainState(null) setChainState(null)
refresh() if (beeDebugApi !== null) refresh()
}, [beeDebugApi]) // eslint-disable-line react-hooks/exhaustive-deps }, [beeDebugApi]) // eslint-disable-line react-hooks/exhaustive-deps
useEffect(() => { useEffect(() => {
@@ -245,7 +248,7 @@ export function Provider({ children }: Props): ReactElement {
}, [nodeAddresses, provider]) }, [nodeAddresses, provider])
useEffect(() => { useEffect(() => {
const interval = setInterval(() => walletAddress?.refresh().then(setWalletAddress), 30_000) const interval = setInterval(() => walletAddress?.refresh().then(setWalletAddress), REFRESH_WHEN_OK)
return () => clearInterval(interval) return () => clearInterval(interval)
}, [walletAddress]) }, [walletAddress])
@@ -378,13 +381,33 @@ export function Provider({ children }: Props): ReactElement {
} }
} }
const start = (freq = 30000) => setFrequency(freq) const start = (freq = REFRESH_WHEN_OK) => {
refresh()
setFrequency(freq)
}
const stop = () => setFrequency(null) const stop = () => setFrequency(null)
const status = getStatus(
debugApiHealth,
nodeAddresses,
nodeInfo,
apiHealth,
topology,
chequebookAddress,
chequebookBalance,
error,
)
useEffect(() => {
let newFrequency = REFRESH_WHEN_OK
if (status.all !== 'OK') newFrequency = REFRESH_WHEN_ERROR
if (newFrequency !== frequency) setFrequency(newFrequency)
}, [status.all, frequency])
// Start the update loop // Start the update loop
useEffect(() => { useEffect(() => {
refresh()
// Start autorefresh only if the frequency is set // Start autorefresh only if the frequency is set
if (frequency) { if (frequency) {
const interval = setInterval(refresh, frequency) const interval = setInterval(refresh, frequency)
@@ -396,16 +419,7 @@ export function Provider({ children }: Props): ReactElement {
return ( return (
<Context.Provider <Context.Provider
value={{ value={{
status: getStatus( status,
debugApiHealth,
nodeAddresses,
nodeInfo,
apiHealth,
topology,
chequebookAddress,
chequebookBalance,
error,
),
balance: walletAddress, balance: walletAddress,
latestUserVersion, latestUserVersion,
latestUserVersionExact, latestUserVersionExact,