3022ae9a6a
* 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
59 lines
1.6 KiB
TypeScript
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
|