mars-v2-frontend/stores/useWalletStore.tsx
Gustavo Mauricio 3022ae9a6a
MP-2017: Deposit Funds and Account stats (#21)
* style: fund account font size adjustments

* client instance. contract addresses updates. prices hook added

* persist lend assets value for every credit account

* feat: account stats and semi circular progress

* minor code cleanup

* display borrowed assets interest rate

* fallback screen when no wallet is connected

* fix: hydration mismatch

* update osmosis testnet endpoints

* style: body text color

* coin interface imported from cosmos package

* risk calculation from ltv assets comment added

* svgr setup. inline svg extracted to Icons folder

* address removed from local storage. wallet store improvements

* rename setAddress action to connect

* yield page renamed to earn

* refactor: accountStats using BigNumber

* update contract addresses

* update hardcoded fee

* update market mocked values

* current leverage added to useAccountStats hook return

* leverage naming disambiguation

* debt positions labels color update. negative sign before values

* remove prefers-color-scheme media query

* update redbank mock data
2022-10-12 16:41:03 +01:00

59 lines
1.6 KiB
TypeScript

import create from 'zustand'
import { persist } from 'zustand/middleware'
import { Wallet } from 'types'
import { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'
import { chain } from 'utils/chains'
interface WalletStore {
address: string
metamaskInstalled: boolean
wallet: Wallet | null
client?: CosmWasmClient
actions: {
disconnect: () => void
initialize: () => void
connect: (address: string, wallet: Wallet) => void
setMetamaskInstalledStatus: (value: boolean) => void
}
}
const useWalletStore = create<WalletStore>()(
persist(
(set, get) => ({
address: '',
metamaskInstalled: false,
wallet: null,
actions: {
disconnect: () => {
set(() => ({ address: '', wallet: null }))
},
initialize: async () => {
const clientInstance = await CosmWasmClient.connect(chain.rpc)
let address = ''
if (get().wallet === Wallet.Keplr && window.keplr) {
const key = await window.keplr.getKey(chain.chainId)
address = key.bech32Address
}
set(() => ({ client: clientInstance, address }))
},
connect: (address: string, wallet: Wallet) => set(() => ({ address, wallet })),
setMetamaskInstalledStatus: (value: boolean) => set(() => ({ metamaskInstalled: value })),
},
}),
{
name: 'wallet',
partialize: (state) =>
Object.fromEntries(
Object.entries(state).filter(
([key]) => !['client', 'metamaskInstalled', 'actions', 'address'].includes(key)
)
),
}
)
)
export default useWalletStore