make getBalance global

This commit is contained in:
fmtabbara
2021-09-09 19:00:30 +01:00
parent 5de8c9d1ed
commit 08fd1c1b47
5 changed files with 30 additions and 16 deletions
@@ -13,14 +13,12 @@ import { NymCard } from './NymCard'
import { Alert } from '@material-ui/lab' import { Alert } from '@material-ui/lab'
import { handleCopy } from './CopyToClipboard' import { handleCopy } from './CopyToClipboard'
import { truncate } from '../utils' import { truncate } from '../utils'
import { useGetBalance } from '../hooks/useGetBalance'
export const BalanceCard = () => { export const BalanceCard = () => {
const { getBalance } = useContext(ClientContext)
const theme = useTheme() const theme = useTheme()
const { balance, isLoading, error, getBalance } = useGetBalance() useEffect(getBalance.fetchBalance, [])
useEffect(getBalance, [])
return ( return (
<div style={{ margin: theme.spacing(3) }}> <div style={{ margin: theme.spacing(3) }}>
@@ -30,7 +28,7 @@ export const BalanceCard = () => {
noPadding noPadding
Action={ Action={
<Tooltip title="Refresh balance"> <Tooltip title="Refresh balance">
<IconButton onClick={getBalance}> <IconButton onClick={getBalance.fetchBalance}>
<Refresh /> <Refresh />
</IconButton> </IconButton>
</Tooltip> </Tooltip>
@@ -38,14 +36,16 @@ export const BalanceCard = () => {
> >
<CardContent> <CardContent>
<div style={{ display: 'flex', justifyContent: 'center' }}> <div style={{ display: 'flex', justifyContent: 'center' }}>
{isLoading ? ( {getBalance.isLoading ? (
<CircularProgress size={24} /> <CircularProgress size={24} />
) : error ? ( ) : getBalance.error ? (
<Alert severity="error" style={{ width: '100%' }}> <Alert severity="error" style={{ width: '100%' }}>
{error} {getBalance.error}
</Alert> </Alert>
) : ( ) : (
<Typography variant="h6">{balance?.printable_balance}</Typography> <Typography variant="h6">
{getBalance.balance?.printable_balance}
</Typography>
)} )}
</div> </div>
</CardContent> </CardContent>
+5
View File
@@ -2,10 +2,12 @@ import React, { createContext, useEffect, useState } from 'react'
import { useHistory } from 'react-router-dom' import { useHistory } from 'react-router-dom'
import { invoke } from '@tauri-apps/api' import { invoke } from '@tauri-apps/api'
import { Coin, TClientDetails } from '../types' import { Coin, TClientDetails } from '../types'
import { TUseGetBalance, useGetBalance } from '../hooks/useGetBalance'
type TClientContext = { type TClientContext = {
clientDetails?: TClientDetails clientDetails?: TClientDetails
gasPrice?: Coin gasPrice?: Coin
getBalance: TUseGetBalance
logIn: (clientDetails: TClientDetails) => void logIn: (clientDetails: TClientDetails) => void
logOut: () => void logOut: () => void
} }
@@ -22,6 +24,8 @@ export const ClientContextProvider = ({
const history = useHistory() const history = useHistory()
const getBalance = useGetBalance()
useEffect(() => { useEffect(() => {
!clientDetails ? history.push('/signin') : history.push('/balance') !clientDetails ? history.push('/signin') : history.push('/balance')
}, [clientDetails]) }, [clientDetails])
@@ -40,6 +44,7 @@ export const ClientContextProvider = ({
value={{ value={{
clientDetails, clientDetails,
gasPrice, gasPrice,
getBalance,
logIn, logIn,
logOut, logOut,
}} }}
+10 -3
View File
@@ -2,12 +2,19 @@ import { useState } from 'react'
import { invoke } from '@tauri-apps/api' import { invoke } from '@tauri-apps/api'
import { Balance } from '../types' import { Balance } from '../types'
export const useGetBalance = () => { export type TUseGetBalance = {
error?: string
balance?: Balance
isLoading: boolean
fetchBalance: () => void
}
export const useGetBalance = (): TUseGetBalance => {
const [balance, setBalance] = useState<Balance>() const [balance, setBalance] = useState<Balance>()
const [error, setEror] = useState<string>() const [error, setEror] = useState<string>()
const [isLoading, setIsLoading] = useState(false) const [isLoading, setIsLoading] = useState(false)
const getBalance = () => { const fetchBalance = () => {
setIsLoading(true) setIsLoading(true)
setEror(undefined) setEror(undefined)
invoke('get_balance') invoke('get_balance')
@@ -24,6 +31,6 @@ export const useGetBalance = () => {
error, error,
isLoading, isLoading,
balance, balance,
getBalance, fetchBalance,
} }
} }
+3 -3
View File
@@ -8,9 +8,9 @@ import { theme } from '../theme'
import { useGetBalance } from '../hooks/useGetBalance' import { useGetBalance } from '../hooks/useGetBalance'
export const Balance = () => { export const Balance = () => {
const { balance, isLoading, error, getBalance } = useGetBalance() const { balance, isLoading, error, fetchBalance } = useGetBalance()
useEffect(getBalance, []) useEffect(fetchBalance, [])
const RefreshAction = () => ( const RefreshAction = () => (
<Button <Button
@@ -18,7 +18,7 @@ export const Balance = () => {
size="small" size="small"
color="primary" color="primary"
type="submit" type="submit"
onClick={getBalance} onClick={fetchBalance}
disabled={isLoading} disabled={isLoading}
disableElevation disableElevation
startIcon={<Refresh />} startIcon={<Refresh />}
+3 -1
View File
@@ -30,6 +30,8 @@ export const SendWizard = () => {
const [requestError, setRequestError] = useState<string>() const [requestError, setRequestError] = useState<string>()
const [confirmedData, setConfirmedData] = useState<TauriTxResult['details']>() const [confirmedData, setConfirmedData] = useState<TauriTxResult['details']>()
const { getBalance } = useContext(ClientContext)
const steps = ['Enter address', 'Review and send', 'Await confirmation'] const steps = ['Enter address', 'Review and send', 'Await confirmation']
const { clientDetails } = useContext(ClientContext) const { clientDetails } = useContext(ClientContext)
@@ -68,8 +70,8 @@ export const SendWizard = () => {
const { details } = res as TauriTxResult const { details } = res as TauriTxResult
setActiveStep((s) => s + 1) setActiveStep((s) => s + 1)
setConfirmedData(details) setConfirmedData(details)
setIsLoading(false) setIsLoading(false)
getBalance.fetchBalance()
}) })
.catch((e) => { .catch((e) => {
setRequestError(e) setRequestError(e)