Files
frontend/src/features/wallet/model/useWalletData.ts
2026-05-14 22:39:06 +03:00

85 lines
2.1 KiB
TypeScript

import { useQuery, useQueries, useMutation } from '@tanstack/react-query'
import { getWalletBalance, getPrices, sendWallet, getWalletAddresses, getPortfolio, getTokensList, getRelayQuote, createWallet, revealMnemonic, CHAINS, type Chain, type SendWalletPayload, type RelayQuotePayload } from '../api/walletApi'
export function useWalletBalance(chain: Chain) {
return useQuery({
queryKey: ['wallet', 'balance', chain],
queryFn: () => getWalletBalance(chain),
staleTime: 30_000,
})
}
export function useAllWalletBalances() {
return useQueries({
queries: CHAINS.map(chain => ({
queryKey: ['wallet', 'balance', chain],
queryFn: () => getWalletBalance(chain),
staleTime: 30_000,
})),
})
}
export function usePrices(symbols: string[]) {
return useQuery({
queryKey: ['wallet', 'prices', symbols.join(',')],
queryFn: () => getPrices(symbols),
staleTime: 5 * 60 * 1000,
})
}
export function useSendWallet() {
return useMutation({
mutationFn: ({ chain, ...payload }: { chain: Chain } & SendWalletPayload) =>
sendWallet(chain, payload),
})
}
export function useWalletAddresses() {
return useQuery({
queryKey: ['wallet', 'addresses'],
queryFn: getWalletAddresses,
staleTime: 10 * 60 * 1000,
})
}
export function usePortfolio() {
return useQuery({
queryKey: ['wallet', 'portfolio'],
queryFn: getPortfolio,
staleTime: 30_000,
})
}
export function useTokensList() {
return useQuery({
queryKey: ['wallet', 'tokens'],
queryFn: getTokensList,
staleTime: 10 * 60 * 1000,
})
}
export function useCreateWallet() {
return useMutation({ mutationFn: createWallet })
}
export function useRevealMnemonic() {
return useQuery({
queryKey: ['wallet', 'mnemonic'],
queryFn: revealMnemonic,
staleTime: Infinity,
retry: false,
})
}
export function useRelayQuote(payload: RelayQuotePayload | null) {
return useQuery({
queryKey: ['relay', 'quote',
payload?.originChainId, payload?.originCurrency,
payload?.destinationCurrency, payload?.amount,
],
queryFn: () => getRelayQuote(payload!),
enabled: !!payload,
staleTime: 10_000,
})
}