import { useSelector } from "react-redux"; import type { SharedState } from "./store"; import { createSelector } from "@reduxjs/toolkit"; import type { AuthState } from "./slices"; import type { Account, AppNotification, Balance, MarketData, SessionInfo, VaultInfo } from "../types"; const useSharedSelector = useSelector.withTypes(); export const useAuth = (): AuthState => useSharedSelector(state => state.auth); export const useMarketData = (tokenId: string): MarketData => useSharedSelector(state => state.market.data[tokenId]); export const useBlockHeight = (): number => useSharedSelector(state => state.status.height); export const useAccount = (id: number): Account => useSharedSelector(state => state.wallet.accounts[id]); export const useSelectedAccount = (): number => useSharedSelector(state => state.wallet.selectedAccount); export const useLastAccountId = (): number => useSharedSelector(state => Math.max(...Object.keys(state.wallet.accounts).map(Number))); export const useMainReceiveAddress = (account: number): string => useSharedSelector(state => state.wallet.accounts[account].address); export const useWalletBalance = (account: number): Balance => useSharedSelector(state => state.wallet.accounts[account].balance); export const useTokenBalance = (account: number, tokenIdHex: string): Balance => useSharedSelector(state => state.wallet.accounts[account].tokensBalance[tokenIdHex]); export const useDAppSession = (account: number, session: string): SessionInfo => useSharedSelector(state => state.wallet.accounts[account].sessions[session]); export const useVaults = (): Record => useSharedSelector(state => state.wallet.vaults); const selectWalletNotificationsArray = createSelector( [(state: SharedState) => state.notifications.wallet], (wallet) => Object.values(wallet).sort((a, b) => b.createdAt - a.createdAt) ); const selectWeb3NotificationsArray = createSelector( [(state: SharedState) => state.notifications.web3], (web3) => Object.values(web3).sort((a, b) => b.createdAt - a.createdAt) ); const selectAllNotificationsArray = createSelector( [selectWalletNotificationsArray, selectWeb3NotificationsArray], (wallet, web3) => [...wallet, ...web3].sort((a, b) => b.createdAt - a.createdAt) ); export const useWalletNotifications = (): AppNotification[] => useSharedSelector(selectWalletNotificationsArray); export const useWeb3Notifications = (): AppNotification[] => useSharedSelector(selectWeb3NotificationsArray); export const useAllNotifications = (): AppNotification[] => useSharedSelector(selectAllNotificationsArray);