UNPKG

doloresqui

Version:
83 lines (71 loc) 2.67 kB
// A hook to // 1. mutate build-next-tx with updated swapSlippage // 2. call active route again with the updated slippage // 3. update the selectedRoute/activeRoute depending on which one is being used by the transaction modal import { setSelectedRoute } from "../state/selectedRouteSlice"; import { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useNextTx, useActiveRoute } from "./apis"; import { setActiveRoute } from "../state/modals"; import { getSwapTx } from "../utils"; export const updateAndRefetch = ( activeRouteId, inRouteSlippage, currentTxIndex ) => { const dispatch = useDispatch(); let build = null; // data from store const newSwapSlippage = useSelector( (state: any) => state.quotes.swapSlippage ); const isSettingsModalOpen = useSelector( (state: any) => state.modals.isSettingsModalOpen ); const selectedRoute = useSelector((state: any) => state.routes.selectedRoute); const currentActiveRoute = useSelector((state: any) => state.modals.activeRoute); // running in a loop // passing the new slippage to the database: build-next-tx api build = useNextTx( activeRouteId, inRouteSlippage !== newSwapSlippage, newSwapSlippage ); // refetching active route data on closing the settings modal: active-routes api const shouldUpdate = !!build?.data?.result && !build.isBuildNextTxLoading && !isSettingsModalOpen; const updatedActiveRoute = useActiveRoute( build ? activeRouteId : false, shouldUpdate ); useEffect(() => { // Get new swap tx, after the slippage is changed const newSwapTx = getSwapTx( updatedActiveRoute?.data?.result, currentTxIndex ); // Get current swap tx (before the slippage is changed) const currentSwapTx = getSwapTx(selectedRoute?.route ?? currentActiveRoute, currentTxIndex); // shouldDispatch should be true only if the new swap slippage and current swap slippage are different const shouldDispatch = !!newSwapTx && !!currentSwapTx && newSwapTx?.swapSlippage !== currentSwapTx?.swapSlippage; // Setting the selectedRoute/activeRoute (depending on which one's is in use) with the new route data. if (shouldDispatch) { if(!!currentActiveRoute){ dispatch(setActiveRoute(updatedActiveRoute?.data?.result)); } else if (selectedRoute){ const _update = { ...selectedRoute, route: updatedActiveRoute?.data?.result, } dispatch(setSelectedRoute(_update)); } } }, [updatedActiveRoute]); return { loading: updatedActiveRoute.isActiveRoutesLoading, }; };