import { BZZ, DAI } from '@ethersphere/bee-js' import { Box, Tooltip, Typography } from '@material-ui/core' import { Wallet } from 'ethers' import { useSnackbar } from 'notistack' import { ReactElement, useContext, useEffect, useState } from 'react' import { useNavigate } from 'react-router' import Check from 'remixicon-react/CheckLineIcon' import X from 'remixicon-react/CloseLineIcon' import ExpandableListItem from '../../components/ExpandableListItem' import ExpandableListItemActions from '../../components/ExpandableListItemActions' import ExpandableListItemKey from '../../components/ExpandableListItemKey' import { HistoryHeader } from '../../components/HistoryHeader' import { Loading } from '../../components/Loading' import { SwarmButton } from '../../components/SwarmButton' import { Context as SettingsContext } from '../../providers/Settings' import { Context as TopUpContext } from '../../providers/TopUp' import { Context as BalanceProvider } from '../../providers/WalletBalance' import { createGiftWallet } from '../../utils/desktop' import { ResolvedWallet } from '../../utils/wallet' const GIFT_WALLET_FUND_DAI_AMOUNT = DAI.fromDecimalString('0.1') const GIFT_WALLET_FUND_BZZ_AMOUNT = BZZ.fromDecimalString('0.5') export default function Index(): ReactElement { const { giftWallets, addGiftWallet } = useContext(TopUpContext) const { rpcProvider, desktopUrl } = useContext(SettingsContext) const { balance } = useContext(BalanceProvider) const [loading, setLoading] = useState(false) const [balances, setBalances] = useState([]) useEffect(() => { async function mapGiftWallets() { if (!rpcProvider) { return } const results = [] for (const giftWallet of giftWallets) { results.push(await ResolvedWallet.make(giftWallet, rpcProvider)) } setBalances(results) } mapGiftWallets() }, [giftWallets, rpcProvider]) const { enqueueSnackbar } = useSnackbar() const navigate = useNavigate() async function onCreate() { enqueueSnackbar('Sending funds to gift wallet...') setLoading(true) try { const wallet = Wallet.createRandom() addGiftWallet(wallet) await createGiftWallet(desktopUrl, wallet.address) enqueueSnackbar('Succesfully funded gift wallet', { variant: 'success' }) } catch (error) { console.error(error) // eslint-disable-line enqueueSnackbar(`Failed to fund gift wallet: ${error}`, { variant: 'error' }) } finally { setLoading(false) } } function onCancel() { navigate(-1) } if (!balance) { return } const notEnoughFundsCheck = balance.dai.lte(GIFT_WALLET_FUND_DAI_AMOUNT) || balance.bzz.lt(GIFT_WALLET_FUND_BZZ_AMOUNT) return ( <> Invite to Swarm... Generate and share a gift wallet that anyone can use to set-up their light node with Swarm Desktop. This will use {GIFT_WALLET_FUND_DAI_AMOUNT.toSignificantDigits(2)} xDAI and{' '} {GIFT_WALLET_FUND_BZZ_AMOUNT.toSignificantDigits(2)} xBZZ from your node wallet. {balances.map((x, i) => ( ))}
Generate gift wallet
Cancel
) }