feat(instant): add buyQuote properties to buy events
This commit is contained in:
@@ -60,7 +60,7 @@ export class BuyButton extends React.Component<BuyButtonProps> {
|
||||
// if we don't have a balance for the user, let the transaction through, it will be handled by the wallet
|
||||
const hasSufficientEth = _.isUndefined(accountEthBalanceInWei) || accountEthBalanceInWei.gte(ethNeededForBuy);
|
||||
if (!hasSufficientEth) {
|
||||
analytics.trackBuyNotEnoughEth();
|
||||
analytics.trackBuyNotEnoughEth(buyQuote);
|
||||
this.props.onValidationFail(buyQuote, ZeroExInstantError.InsufficientETH);
|
||||
return;
|
||||
}
|
||||
@@ -68,21 +68,21 @@ export class BuyButton extends React.Component<BuyButtonProps> {
|
||||
const gasInfo = await gasPriceEstimator.getGasInfoAsync();
|
||||
const feeRecipient = oc(affiliateInfo).feeRecipient();
|
||||
try {
|
||||
analytics.trackBuyStarted();
|
||||
analytics.trackBuyStarted(buyQuote);
|
||||
txHash = await assetBuyer.executeBuyQuoteAsync(buyQuote, {
|
||||
feeRecipient,
|
||||
takerAddress: accountAddress,
|
||||
gasPrice: gasInfo.gasPriceInWei,
|
||||
});
|
||||
analytics.trackBuyTxSubmitted(txHash);
|
||||
analytics.trackBuyTxSubmitted(buyQuote, txHash);
|
||||
} catch (e) {
|
||||
if (e instanceof Error) {
|
||||
if (e.message === AssetBuyerError.SignatureRequestDenied) {
|
||||
analytics.trackBuySignatureDenied();
|
||||
analytics.trackBuySignatureDenied(buyQuote);
|
||||
this.props.onSignatureDenied(buyQuote);
|
||||
return;
|
||||
} else if (e.message === AssetBuyerError.TransactionValueTooLow) {
|
||||
analytics.trackBuySimulationFailed();
|
||||
analytics.trackBuySimulationFailed(buyQuote);
|
||||
this.props.onValidationFail(buyQuote, AssetBuyerError.TransactionValueTooLow);
|
||||
return;
|
||||
}
|
||||
@@ -95,14 +95,14 @@ export class BuyButton extends React.Component<BuyButtonProps> {
|
||||
try {
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(txHash);
|
||||
} catch (e) {
|
||||
analytics.trackBuyTxFailed(txHash);
|
||||
analytics.trackBuyTxFailed(buyQuote, txHash);
|
||||
if (e instanceof Error && e.message.startsWith(WEB_3_WRAPPER_TRANSACTION_FAILED_ERROR_MSG_PREFIX)) {
|
||||
this.props.onBuyFailure(buyQuote, txHash);
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
analytics.trackBuyTxSucceeded(txHash);
|
||||
analytics.trackBuyTxSucceeded(buyQuote, txHash);
|
||||
this.props.onBuySuccess(buyQuote, txHash);
|
||||
};
|
||||
}
|
||||
|
@@ -1,3 +1,6 @@
|
||||
import { BuyQuote } from '@0x/asset-buyer';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { EventProperties, heapUtil } from './heap';
|
||||
|
||||
let isDisabled = false;
|
||||
@@ -43,6 +46,25 @@ function trackingEventFnWithPayload(eventName: EventNames): (eventProperties: Ev
|
||||
};
|
||||
}
|
||||
|
||||
const buyQuoteEventProperties = (buyQuote: BuyQuote) => {
|
||||
const assetData = buyQuote.assetData.toString();
|
||||
const assetBuyAmount = buyQuote.assetBuyAmount.toString();
|
||||
const assetEthAmount = buyQuote.worstCaseQuoteInfo.assetEthAmount.toString();
|
||||
const feeEthAmount = buyQuote.worstCaseQuoteInfo.feeEthAmount.toString();
|
||||
const totalEthAmount = buyQuote.worstCaseQuoteInfo.totalEthAmount.toString();
|
||||
const feePercentage = !_.isUndefined(buyQuote.feePercentage) ? buyQuote.feePercentage.toString() : 0;
|
||||
const hasFeeOrders = !_.isEmpty(buyQuote.feeOrders) ? 'true' : 'false';
|
||||
return {
|
||||
assetData,
|
||||
assetBuyAmount,
|
||||
assetEthAmount,
|
||||
feeEthAmount,
|
||||
totalEthAmount,
|
||||
feePercentage,
|
||||
hasFeeOrders,
|
||||
};
|
||||
};
|
||||
|
||||
export interface AnalyticsUserOptions {
|
||||
lastKnownEthAddress?: string;
|
||||
ethBalanceInUnitAmount?: string;
|
||||
@@ -74,11 +96,18 @@ export const analytics = {
|
||||
trackAccountUnlockDenied: trackingEventFnWithoutPayload(EventNames.ACCOUNT_UNLOCK_DENIED),
|
||||
trackAccountAddressChanged: (address: string) =>
|
||||
trackingEventFnWithPayload(EventNames.ACCOUNT_ADDRESS_CHANGED)({ address }),
|
||||
trackBuyNotEnoughEth: trackingEventFnWithoutPayload(EventNames.BUY_NOT_ENOUGH_ETH),
|
||||
trackBuyStarted: trackingEventFnWithoutPayload(EventNames.BUY_STARTED),
|
||||
trackBuySignatureDenied: trackingEventFnWithoutPayload(EventNames.BUY_SIGNATURE_DENIED),
|
||||
trackBuySimulationFailed: trackingEventFnWithoutPayload(EventNames.BUY_SIMULATION_FAILED),
|
||||
trackBuyTxSubmitted: (txHash: string) => trackingEventFnWithPayload(EventNames.BUY_TX_SUBMITTED)({ txHash }),
|
||||
trackBuyTxSucceeded: (txHash: string) => trackingEventFnWithPayload(EventNames.BUY_TX_SUCCEEDED)({ txHash }),
|
||||
trackBuyTxFailed: (txHash: string) => trackingEventFnWithPayload(EventNames.BUY_TX_FAILED)({ txHash }),
|
||||
trackBuyNotEnoughEth: (buyQuote: BuyQuote) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_NOT_ENOUGH_ETH)(buyQuoteEventProperties(buyQuote)),
|
||||
trackBuyStarted: (buyQuote: BuyQuote) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_STARTED)(buyQuoteEventProperties(buyQuote)),
|
||||
trackBuySignatureDenied: (buyQuote: BuyQuote) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_SIGNATURE_DENIED)(buyQuoteEventProperties(buyQuote)),
|
||||
trackBuySimulationFailed: (buyQuote: BuyQuote) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_SIMULATION_FAILED)(buyQuoteEventProperties(buyQuote)),
|
||||
trackBuyTxSubmitted: (buyQuote: BuyQuote, txHash: string) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_TX_SUBMITTED)({ ...buyQuoteEventProperties(buyQuote), txHash }),
|
||||
trackBuyTxSucceeded: (buyQuote: BuyQuote, txHash: string) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_TX_SUCCEEDED)({ ...buyQuoteEventProperties(buyQuote), txHash }),
|
||||
trackBuyTxFailed: (buyQuote: BuyQuote, txHash: string) =>
|
||||
trackingEventFnWithPayload(EventNames.BUY_TX_FAILED)({ ...buyQuoteEventProperties(buyQuote), txHash }),
|
||||
};
|
||||
|
Reference in New Issue
Block a user