Have heartbeat update not trigger errors
This commit is contained in:
		@@ -113,7 +113,8 @@ export class ZeroExInstantProvider extends React.Component<ZeroExInstantProvider
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
        this._buyQuoteHeartbeat.start(BUY_QUOTE_UPDATE_INTERVAL_TIME_MS);
 | 
					        this._buyQuoteHeartbeat.start(BUY_QUOTE_UPDATE_INTERVAL_TIME_MS);
 | 
				
			||||||
        // tslint:disable-next-line:no-floating-promises
 | 
					        // tslint:disable-next-line:no-floating-promises
 | 
				
			||||||
        asyncData.fetchCurrentBuyQuoteAndDispatchToStore(state, dispatch, true);
 | 
					        // Trigger first buyquote fetch
 | 
				
			||||||
 | 
					        asyncData.fetchCurrentBuyQuoteAndDispatchToStore(state, dispatch, { updateSilently: false });
 | 
				
			||||||
        // warm up the gas price estimator cache just in case we can't
 | 
					        // warm up the gas price estimator cache just in case we can't
 | 
				
			||||||
        // grab the gas price estimate when submitting the transaction
 | 
					        // grab the gas price estimate when submitting the transaction
 | 
				
			||||||
        // tslint:disable-next-line:no-floating-promises
 | 
					        // tslint:disable-next-line:no-floating-promises
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -81,7 +81,14 @@ const mapDispatchToProps = (
 | 
				
			|||||||
            // even if it's debounced, give them the illusion it's loading
 | 
					            // even if it's debounced, give them the illusion it's loading
 | 
				
			||||||
            dispatch(actions.setQuoteRequestStatePending());
 | 
					            dispatch(actions.setQuoteRequestStatePending());
 | 
				
			||||||
            // tslint:disable-next-line:no-floating-promises
 | 
					            // tslint:disable-next-line:no-floating-promises
 | 
				
			||||||
            debouncedUpdateBuyQuoteAsync(assetBuyer, dispatch, asset, value, true, affiliateInfo);
 | 
					            debouncedUpdateBuyQuoteAsync(
 | 
				
			||||||
 | 
					                assetBuyer,
 | 
				
			||||||
 | 
					                dispatch,
 | 
				
			||||||
 | 
					                asset,
 | 
				
			||||||
 | 
					                value,
 | 
				
			||||||
 | 
					                { setPending: true, dispatchErrors: true },
 | 
				
			||||||
 | 
					                affiliateInfo,
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ export const asyncData = {
 | 
				
			|||||||
    fetchCurrentBuyQuoteAndDispatchToStore: async (
 | 
					    fetchCurrentBuyQuoteAndDispatchToStore: async (
 | 
				
			||||||
        state: State,
 | 
					        state: State,
 | 
				
			||||||
        dispatch: Dispatch,
 | 
					        dispatch: Dispatch,
 | 
				
			||||||
        shouldSetPending: boolean = false,
 | 
					        options: { updateSilently: boolean },
 | 
				
			||||||
    ) => {
 | 
					    ) => {
 | 
				
			||||||
        const { buyOrderState, providerState, selectedAsset, selectedAssetUnitAmount, affiliateInfo } = state;
 | 
					        const { buyOrderState, providerState, selectedAsset, selectedAssetUnitAmount, affiliateInfo } = state;
 | 
				
			||||||
        const assetBuyer = providerState.assetBuyer;
 | 
					        const assetBuyer = providerState.assetBuyer;
 | 
				
			||||||
@@ -97,7 +97,7 @@ export const asyncData = {
 | 
				
			|||||||
                dispatch,
 | 
					                dispatch,
 | 
				
			||||||
                selectedAsset as ERC20Asset,
 | 
					                selectedAsset as ERC20Asset,
 | 
				
			||||||
                selectedAssetUnitAmount,
 | 
					                selectedAssetUnitAmount,
 | 
				
			||||||
                shouldSetPending,
 | 
					                { setPending: !options.updateSilently, dispatchErrors: !options.updateSilently },
 | 
				
			||||||
                affiliateInfo,
 | 
					                affiliateInfo,
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,12 +16,12 @@ export const buyQuoteUpdater = {
 | 
				
			|||||||
        dispatch: Dispatch<Action>,
 | 
					        dispatch: Dispatch<Action>,
 | 
				
			||||||
        asset: ERC20Asset,
 | 
					        asset: ERC20Asset,
 | 
				
			||||||
        assetUnitAmount: BigNumber,
 | 
					        assetUnitAmount: BigNumber,
 | 
				
			||||||
        setPending = true,
 | 
					        options: { setPending: boolean; dispatchErrors: boolean },
 | 
				
			||||||
        affiliateInfo?: AffiliateInfo,
 | 
					        affiliateInfo?: AffiliateInfo,
 | 
				
			||||||
    ): Promise<void> => {
 | 
					    ): Promise<void> => {
 | 
				
			||||||
        // get a new buy quote.
 | 
					        // get a new buy quote.
 | 
				
			||||||
        const baseUnitValue = Web3Wrapper.toBaseUnitAmount(assetUnitAmount, asset.metaData.decimals);
 | 
					        const baseUnitValue = Web3Wrapper.toBaseUnitAmount(assetUnitAmount, asset.metaData.decimals);
 | 
				
			||||||
        if (setPending) {
 | 
					        if (options.setPending) {
 | 
				
			||||||
            // mark quote as pending
 | 
					            // mark quote as pending
 | 
				
			||||||
            dispatch(actions.setQuoteRequestStatePending());
 | 
					            dispatch(actions.setQuoteRequestStatePending());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -30,25 +30,29 @@ export const buyQuoteUpdater = {
 | 
				
			|||||||
        try {
 | 
					        try {
 | 
				
			||||||
            newBuyQuote = await assetBuyer.getBuyQuoteAsync(asset.assetData, baseUnitValue, { feePercentage });
 | 
					            newBuyQuote = await assetBuyer.getBuyQuoteAsync(asset.assetData, baseUnitValue, { feePercentage });
 | 
				
			||||||
        } catch (error) {
 | 
					        } catch (error) {
 | 
				
			||||||
            dispatch(actions.setQuoteRequestStateFailure());
 | 
					            if (options.dispatchErrors) {
 | 
				
			||||||
            let errorMessage;
 | 
					                dispatch(actions.setQuoteRequestStateFailure());
 | 
				
			||||||
            if (error.message === AssetBuyerError.InsufficientAssetLiquidity) {
 | 
					                let errorMessage;
 | 
				
			||||||
                const assetName = assetUtils.bestNameForAsset(asset, 'of this asset');
 | 
					                if (error.message === AssetBuyerError.InsufficientAssetLiquidity) {
 | 
				
			||||||
                errorMessage = `Not enough ${assetName} available`;
 | 
					                    const assetName = assetUtils.bestNameForAsset(asset, 'of this asset');
 | 
				
			||||||
            } else if (error.message === AssetBuyerError.InsufficientZrxLiquidity) {
 | 
					                    errorMessage = `Not enough ${assetName} available`;
 | 
				
			||||||
                errorMessage = 'Not enough ZRX available';
 | 
					                } else if (error.message === AssetBuyerError.InsufficientZrxLiquidity) {
 | 
				
			||||||
            } else if (
 | 
					                    errorMessage = 'Not enough ZRX available';
 | 
				
			||||||
                error.message === AssetBuyerError.StandardRelayerApiError ||
 | 
					                } else if (
 | 
				
			||||||
                error.message.startsWith(AssetBuyerError.AssetUnavailable)
 | 
					                    error.message === AssetBuyerError.StandardRelayerApiError ||
 | 
				
			||||||
            ) {
 | 
					                    error.message.startsWith(AssetBuyerError.AssetUnavailable)
 | 
				
			||||||
                const assetName = assetUtils.bestNameForAsset(asset, 'This asset');
 | 
					                ) {
 | 
				
			||||||
                errorMessage = `${assetName} is currently unavailable`;
 | 
					                    const assetName = assetUtils.bestNameForAsset(asset, 'This asset');
 | 
				
			||||||
            }
 | 
					                    errorMessage = `${assetName} is currently unavailable`;
 | 
				
			||||||
            if (!_.isUndefined(errorMessage)) {
 | 
					                }
 | 
				
			||||||
                errorFlasher.flashNewErrorMessage(dispatch, errorMessage);
 | 
					                if (!_.isUndefined(errorMessage)) {
 | 
				
			||||||
            } else {
 | 
					                    errorFlasher.flashNewErrorMessage(dispatch, errorMessage);
 | 
				
			||||||
                throw error;
 | 
					                } else {
 | 
				
			||||||
 | 
					                    throw error;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            // TODO: report to error reporter on else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // We have a successful new buy quote
 | 
					        // We have a successful new buy quote
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,8 @@ export const generateAccountHeartbeater = (options: HeartbeatFactoryOptions): He
 | 
				
			|||||||
export const generateBuyQuoteHeartbeater = (options: HeartbeatFactoryOptions): Heartbeater => {
 | 
					export const generateBuyQuoteHeartbeater = (options: HeartbeatFactoryOptions): Heartbeater => {
 | 
				
			||||||
    const { store, shouldPerformImmediatelyOnStart } = options;
 | 
					    const { store, shouldPerformImmediatelyOnStart } = options;
 | 
				
			||||||
    return new Heartbeater(async () => {
 | 
					    return new Heartbeater(async () => {
 | 
				
			||||||
        await asyncData.fetchCurrentBuyQuoteAndDispatchToStore(store.getState(), store.dispatch, false);
 | 
					        await asyncData.fetchCurrentBuyQuoteAndDispatchToStore(store.getState(), store.dispatch, {
 | 
				
			||||||
 | 
					            updateSilently: true,
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    }, shouldPerformImmediatelyOnStart);
 | 
					    }, shouldPerformImmediatelyOnStart);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user