doloresqui
Version:
87 lines (82 loc) • 1.9 kB
text/typescript
import { time } from "../../consts/time";
import { SortOptions, Token } from "@socket.tech/socket-v2-sdk";
import { useSelector } from "react-redux";
import useSWR from "swr";
import { socket } from "../apis";
// Main hook that takes in params and fetches the quotes.
export const useRoutes = (
sourceToken,
destToken,
amount,
sort: SortOptions,
userAddress,
refuelEnabled,
includeBridges,
excludeBridges,
singleTxOnly,
swapSlippage
) => {
const isTxModalOpen = useSelector((state: any) => state.modals.isTxModalOpen);
const shouldFetch =
!!sourceToken &&
!!destToken &&
!!amount &&
amount !== "0" &&
!!userAddress &&
!isTxModalOpen;
async function fetchQuotes(
sourceToken: Token,
destToken: Token,
amount: string,
userAddress: string,
sort: SortOptions,
bridgeWithGas,
includeBridges,
excludeBridges,
singleTxOnly,
swapSlippage
) {
const quotes = await socket.getAllQuotes(
{
path: { fromToken: sourceToken, toToken: destToken },
amount,
address: userAddress,
},
{
sort,
bridgeWithGas,
includeBridges,
excludeBridges,
singleTxOnly,
defaultSwapSlippage: swapSlippage
}
);
return quotes;
}
const { data, error, isValidating } = useSWR(
shouldFetch
? [
sourceToken,
destToken,
amount,
userAddress,
sort,
refuelEnabled,
includeBridges,
excludeBridges,
singleTxOnly,
swapSlippage,
"quotes",
]
: null,
fetchQuotes,
{
refreshInterval: time.QUOTES_REFRESH * 1000, //refresh quotes every 60 seconds
revalidateOnFocus: false,
}
);
return {
data: data,
isQuotesLoading: userAddress && ((!data && !error) || isValidating),
};
};