A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ciphermask/ui/hooks/useShouldAnimateGasEstimati...

57 lines
1.6 KiB

import { useRef, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { isEqual } from 'lodash';
import {
getGasLoadingAnimationIsShowing,
toggleGasLoadingAnimation,
} from '../ducks/app/app';
import { useGasFeeEstimates } from './useGasFeeEstimates';
export function useShouldAnimateGasEstimations() {
const { isGasEstimatesLoading, gasFeeEstimates } = useGasFeeEstimates();
const dispatch = useDispatch();
const isGasLoadingAnimationActive = useSelector(
getGasLoadingAnimationIsShowing,
);
// Do the animation only when gas prices have changed...
const lastGasEstimates = useRef(gasFeeEstimates);
const gasEstimatesChanged = !isEqual(
lastGasEstimates.current,
gasFeeEstimates,
);
// ... and only if gas didn't just load
// Removing this line will cause the initial loading screen to stay empty
const gasJustLoaded = isEqual(lastGasEstimates.current, {});
if (gasEstimatesChanged) {
lastGasEstimates.current = gasFeeEstimates;
}
const showLoadingAnimation =
isGasEstimatesLoading || (gasEstimatesChanged && !gasJustLoaded);
useEffect(() => {
if (
isGasLoadingAnimationActive === false &&
showLoadingAnimation === true
) {
dispatch(toggleGasLoadingAnimation(true));
}
}, [dispatch, isGasLoadingAnimationActive, showLoadingAnimation]);
useEffect(() => {
if (
isGasLoadingAnimationActive === true &&
showLoadingAnimation === false
) {
setTimeout(() => {
dispatch(toggleGasLoadingAnimation(false));
}, 2000);
}
}, [dispatch, isGasLoadingAnimationActive, showLoadingAnimation]);
}