import { useQuery, type UseQueryResult } from '@tanstack/react-query'; import type { MoneyMarketAsset } from '@sodax/sdk'; import { useSodaxContext } from '../shared/useSodaxContext.js'; import { unwrapResult } from './unwrapResult.js'; import type { ReadHookParams } from '../shared/types.js'; export type UseBackendMoneyMarketAssetParams = ReadHookParams< MoneyMarketAsset | undefined, { reserveAddress: string | undefined; } >; /** * React hook to fetch a specific money market asset from the backend API. * * @example * const { data: asset } = useBackendMoneyMarketAsset({ params: { reserveAddress: '0xabc...' } }); */ export const useBackendMoneyMarketAsset = ({ params, queryOptions, }: UseBackendMoneyMarketAssetParams = {}): UseQueryResult => { const { sodax } = useSodaxContext(); const reserveAddress = params?.reserveAddress; return useQuery({ queryKey: ['backend', 'mm', 'asset', reserveAddress], queryFn: async (): Promise => { if (!reserveAddress) return undefined; return unwrapResult(await sodax.backendApi.getMoneyMarketAsset(reserveAddress)); }, enabled: !!reserveAddress && reserveAddress.length > 0, retry: 3, ...queryOptions, }); };