feat: add light node upgrade top up methods (#372)

* feat: add top up

* chore: remove console.log

* build: add pseudo-missing dependency

* feat: add missing top up components

* fix: crypto route

* feat(wip): add gift wallet logic

* fix: fix gift wallet flows

* feat: simplify flow without fund step

* feat: add loading screens

* fix: remove alert

* fix: prepend http if needed

* fix: fix bug that was reintroduced with merge

* refactor: rename minusEther to minusBaseUnits

* fix: remove unused setStartedAt

* build: remove unused dependency
This commit is contained in:
Cafe137
2022-06-02 09:28:43 +02:00
committed by GitHub
parent 026783924f
commit a768b4ea06
35 changed files with 1196 additions and 215 deletions
+73
View File
@@ -0,0 +1,73 @@
import Wallet from 'ethereumjs-wallet'
import { createContext, ReactElement, useEffect, useState } from 'react'
import { setJsonRpcInDesktop } from '../utils/desktop'
import { getWalletFromPrivateKeyString } from '../utils/identity'
const LocalStorageKeys = {
jsonRpcProvider: 'json-rpc-provider',
depositWallet: 'deposit-wallet',
giftWallets: 'gift-wallets',
invitation: 'invitation',
}
interface ContextInterface {
jsonRpcProvider: string
giftWallets: Wallet[]
setJsonRpcProvider: (jsonRpcProvider: string) => void
addGiftWallet: (wallet: Wallet) => void
}
const initialValues: ContextInterface = {
jsonRpcProvider: '',
giftWallets: [],
setJsonRpcProvider: () => {}, // eslint-disable-line
addGiftWallet: () => {}, // eslint-disable-line
}
export const Context = createContext<ContextInterface>(initialValues)
export const Consumer = Context.Consumer
interface Props {
children: ReactElement
}
export function Provider({ children }: Props): ReactElement {
const [jsonRpcProvider, setJsonRpcProvider] = useState(
localStorage.getItem('json-rpc-provider') || initialValues.jsonRpcProvider,
)
const [giftWallets, setGiftWallets] = useState(initialValues.giftWallets)
useEffect(() => {
const existingGiftWallets = localStorage.getItem(LocalStorageKeys.giftWallets)
if (existingGiftWallets) {
setGiftWallets(JSON.parse(existingGiftWallets).map(getWalletFromPrivateKeyString))
}
}, [])
function setAndPersistJsonRpcProvider(jsonRpcProvider: string) {
localStorage.setItem(LocalStorageKeys.jsonRpcProvider, jsonRpcProvider)
setJsonRpcProvider(jsonRpcProvider)
// eslint-disable-next-line no-console
setJsonRpcInDesktop(jsonRpcProvider).catch(console.error)
}
function addGiftWallet(wallet: Wallet) {
const newArray = [...giftWallets, wallet]
localStorage.setItem(LocalStorageKeys.giftWallets, JSON.stringify(newArray.map(x => x.getPrivateKeyString())))
setGiftWallets(newArray)
}
return (
<Context.Provider
value={{
jsonRpcProvider,
giftWallets,
setJsonRpcProvider: setAndPersistJsonRpcProvider,
addGiftWallet,
}}
>
{children}
</Context.Provider>
)
}