diff options
| author | Steve Klebanoff <steve.klebanoff@gmail.com> | 2018-11-16 06:20:19 +0800 | 
|---|---|---|
| committer | Steve Klebanoff <steve.klebanoff@gmail.com> | 2018-11-16 06:20:19 +0800 | 
| commit | 447b0f91f9bdc200d14897be94796873c95490c7 (patch) | |
| tree | 6bc38643a1d14437c0f56fe91048d5716064f801 | |
| parent | 34d86647bfc56dbf8221b08b3d7bdeba08f46ca1 (diff) | |
| download | dexon-sol-tools-447b0f91f9bdc200d14897be94796873c95490c7.tar.gz dexon-sol-tools-447b0f91f9bdc200d14897be94796873c95490c7.tar.zst dexon-sol-tools-447b0f91f9bdc200d14897be94796873c95490c7.zip | |
Have heartbeat update not trigger errors
5 files changed, 39 insertions, 25 deletions
| diff --git a/packages/instant/src/components/zero_ex_instant_provider.tsx b/packages/instant/src/components/zero_ex_instant_provider.tsx index 18e71edb6..f6dadf3e4 100644 --- a/packages/instant/src/components/zero_ex_instant_provider.tsx +++ b/packages/instant/src/components/zero_ex_instant_provider.tsx @@ -113,7 +113,8 @@ export class ZeroExInstantProvider extends React.Component<ZeroExInstantProvider          });          this._buyQuoteHeartbeat.start(BUY_QUOTE_UPDATE_INTERVAL_TIME_MS);          // 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          // grab the gas price estimate when submitting the transaction          // tslint:disable-next-line:no-floating-promises diff --git a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts index 8b0070228..3e6ef41a0 100644 --- a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts +++ b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts @@ -81,7 +81,14 @@ const mapDispatchToProps = (              // even if it's debounced, give them the illusion it's loading              dispatch(actions.setQuoteRequestStatePending());              // tslint:disable-next-line:no-floating-promises -            debouncedUpdateBuyQuoteAsync(assetBuyer, dispatch, asset, value, true, affiliateInfo); +            debouncedUpdateBuyQuoteAsync( +                assetBuyer, +                dispatch, +                asset, +                value, +                { setPending: true, dispatchErrors: true }, +                affiliateInfo, +            );          }      },  }); diff --git a/packages/instant/src/redux/async_data.ts b/packages/instant/src/redux/async_data.ts index a1952e429..f4b3f94bf 100644 --- a/packages/instant/src/redux/async_data.ts +++ b/packages/instant/src/redux/async_data.ts @@ -82,7 +82,7 @@ export const asyncData = {      fetchCurrentBuyQuoteAndDispatchToStore: async (          state: State,          dispatch: Dispatch, -        shouldSetPending: boolean = false, +        options: { updateSilently: boolean },      ) => {          const { buyOrderState, providerState, selectedAsset, selectedAssetUnitAmount, affiliateInfo } = state;          const assetBuyer = providerState.assetBuyer; @@ -97,7 +97,7 @@ export const asyncData = {                  dispatch,                  selectedAsset as ERC20Asset,                  selectedAssetUnitAmount, -                shouldSetPending, +                { setPending: !options.updateSilently, dispatchErrors: !options.updateSilently },                  affiliateInfo,              );          } diff --git a/packages/instant/src/util/buy_quote_updater.ts b/packages/instant/src/util/buy_quote_updater.ts index fcdded0a9..eeb792bcf 100644 --- a/packages/instant/src/util/buy_quote_updater.ts +++ b/packages/instant/src/util/buy_quote_updater.ts @@ -16,12 +16,12 @@ export const buyQuoteUpdater = {          dispatch: Dispatch<Action>,          asset: ERC20Asset,          assetUnitAmount: BigNumber, -        setPending = true, +        options: { setPending: boolean; dispatchErrors: boolean },          affiliateInfo?: AffiliateInfo,      ): Promise<void> => {          // get a new buy quote.          const baseUnitValue = Web3Wrapper.toBaseUnitAmount(assetUnitAmount, asset.metaData.decimals); -        if (setPending) { +        if (options.setPending) {              // mark quote as pending              dispatch(actions.setQuoteRequestStatePending());          } @@ -30,25 +30,29 @@ export const buyQuoteUpdater = {          try {              newBuyQuote = await assetBuyer.getBuyQuoteAsync(asset.assetData, baseUnitValue, { feePercentage });          } catch (error) { -            dispatch(actions.setQuoteRequestStateFailure()); -            let errorMessage; -            if (error.message === AssetBuyerError.InsufficientAssetLiquidity) { -                const assetName = assetUtils.bestNameForAsset(asset, 'of this asset'); -                errorMessage = `Not enough ${assetName} available`; -            } else if (error.message === AssetBuyerError.InsufficientZrxLiquidity) { -                errorMessage = 'Not enough ZRX available'; -            } else if ( -                error.message === AssetBuyerError.StandardRelayerApiError || -                error.message.startsWith(AssetBuyerError.AssetUnavailable) -            ) { -                const assetName = assetUtils.bestNameForAsset(asset, 'This asset'); -                errorMessage = `${assetName} is currently unavailable`; -            } -            if (!_.isUndefined(errorMessage)) { -                errorFlasher.flashNewErrorMessage(dispatch, errorMessage); -            } else { -                throw error; +            if (options.dispatchErrors) { +                dispatch(actions.setQuoteRequestStateFailure()); +                let errorMessage; +                if (error.message === AssetBuyerError.InsufficientAssetLiquidity) { +                    const assetName = assetUtils.bestNameForAsset(asset, 'of this asset'); +                    errorMessage = `Not enough ${assetName} available`; +                } else if (error.message === AssetBuyerError.InsufficientZrxLiquidity) { +                    errorMessage = 'Not enough ZRX available'; +                } else if ( +                    error.message === AssetBuyerError.StandardRelayerApiError || +                    error.message.startsWith(AssetBuyerError.AssetUnavailable) +                ) { +                    const assetName = assetUtils.bestNameForAsset(asset, 'This asset'); +                    errorMessage = `${assetName} is currently unavailable`; +                } +                if (!_.isUndefined(errorMessage)) { +                    errorFlasher.flashNewErrorMessage(dispatch, errorMessage); +                } else { +                    throw error; +                }              } +            // TODO: report to error reporter on else +              return;          }          // We have a successful new buy quote diff --git a/packages/instant/src/util/heartbeater_factory.ts b/packages/instant/src/util/heartbeater_factory.ts index 06fcdb8bb..2b852fb0d 100644 --- a/packages/instant/src/util/heartbeater_factory.ts +++ b/packages/instant/src/util/heartbeater_factory.ts @@ -17,6 +17,8 @@ export const generateAccountHeartbeater = (options: HeartbeatFactoryOptions): He  export const generateBuyQuoteHeartbeater = (options: HeartbeatFactoryOptions): Heartbeater => {      const { store, shouldPerformImmediatelyOnStart } = options;      return new Heartbeater(async () => { -        await asyncData.fetchCurrentBuyQuoteAndDispatchToStore(store.getState(), store.dispatch, false); +        await asyncData.fetchCurrentBuyQuoteAndDispatchToStore(store.getState(), store.dispatch, { +            updateSilently: true, +        });      }, shouldPerformImmediatelyOnStart);  }; | 
