feat(instant): Add analytics events for payment dropdown
This commit is contained in:
@@ -3,6 +3,7 @@ import copy from 'copy-to-clipboard';
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import { Network } from '../types';
|
import { Network } from '../types';
|
||||||
|
import { analytics } from '../util/analytics';
|
||||||
import { envUtil } from '../util/env';
|
import { envUtil } from '../util/env';
|
||||||
import { etherscanUtil } from '../util/etherscan';
|
import { etherscanUtil } from '../util/etherscan';
|
||||||
import { format } from '../util/format';
|
import { format } from '../util/format';
|
||||||
@@ -20,7 +21,14 @@ export class PaymentMethodDropdown extends React.Component<PaymentMethodDropdown
|
|||||||
const { accountAddress, accountEthBalanceInWei } = this.props;
|
const { accountAddress, accountEthBalanceInWei } = this.props;
|
||||||
const value = format.ethAddress(accountAddress);
|
const value = format.ethAddress(accountAddress);
|
||||||
const label = format.ethBaseUnitAmount(accountEthBalanceInWei, 4, '') as string;
|
const label = format.ethBaseUnitAmount(accountEthBalanceInWei, 4, '') as string;
|
||||||
return <Dropdown value={value} label={label} items={this._getDropdownItemConfigs()} />;
|
return (
|
||||||
|
<Dropdown
|
||||||
|
value={value}
|
||||||
|
label={label}
|
||||||
|
items={this._getDropdownItemConfigs()}
|
||||||
|
onOpen={analytics.trackPaymentMethodDropdownOpened}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
private readonly _getDropdownItemConfigs = (): DropdownItemConfig[] => {
|
private readonly _getDropdownItemConfigs = (): DropdownItemConfig[] => {
|
||||||
if (envUtil.isMobileOperatingSystem()) {
|
if (envUtil.isMobileOperatingSystem()) {
|
||||||
@@ -37,11 +45,15 @@ export class PaymentMethodDropdown extends React.Component<PaymentMethodDropdown
|
|||||||
return [viewOnEtherscan, copyAddressToClipboard];
|
return [viewOnEtherscan, copyAddressToClipboard];
|
||||||
};
|
};
|
||||||
private readonly _handleEtherscanClick = (): void => {
|
private readonly _handleEtherscanClick = (): void => {
|
||||||
|
analytics.trackPaymentMethodOpenedEtherscan();
|
||||||
|
|
||||||
const { accountAddress, network } = this.props;
|
const { accountAddress, network } = this.props;
|
||||||
const etherscanUrl = etherscanUtil.getEtherScanEthAddressIfExists(accountAddress, network);
|
const etherscanUrl = etherscanUtil.getEtherScanEthAddressIfExists(accountAddress, network);
|
||||||
window.open(etherscanUrl, '_blank');
|
window.open(etherscanUrl, '_blank');
|
||||||
};
|
};
|
||||||
private readonly _handleCopyToClipboardClick = (): void => {
|
private readonly _handleCopyToClipboardClick = (): void => {
|
||||||
|
analytics.trackPaymentMethodCopiedAddress();
|
||||||
|
|
||||||
const { accountAddress } = this.props;
|
const { accountAddress } = this.props;
|
||||||
copy(accountAddress);
|
copy(accountAddress);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export interface DropdownProps {
|
|||||||
value: string;
|
value: string;
|
||||||
label?: string;
|
label?: string;
|
||||||
items: DropdownItemConfig[];
|
items: DropdownItemConfig[];
|
||||||
|
onOpen?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DropdownState {
|
export interface DropdownState {
|
||||||
@@ -97,9 +98,14 @@ export class Dropdown extends React.Component<DropdownProps, DropdownState> {
|
|||||||
if (_.isEmpty(this.props.items)) {
|
if (_.isEmpty(this.props.items)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const isOpen = !this.state.isOpen;
|
||||||
this.setState({
|
this.setState({
|
||||||
isOpen: !this.state.isOpen,
|
isOpen,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (isOpen && this.props.onOpen) {
|
||||||
|
this.props.onOpen();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
private readonly _closeDropdown = (): void => {
|
private readonly _closeDropdown = (): void => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ enum EventNames {
|
|||||||
ACCOUNT_UNLOCK_REQUESTED = 'Account - Unlock Requested',
|
ACCOUNT_UNLOCK_REQUESTED = 'Account - Unlock Requested',
|
||||||
ACCOUNT_UNLOCK_DENIED = 'Account - Unlock Denied',
|
ACCOUNT_UNLOCK_DENIED = 'Account - Unlock Denied',
|
||||||
ACCOUNT_ADDRESS_CHANGED = 'Account - Address Changed',
|
ACCOUNT_ADDRESS_CHANGED = 'Account - Address Changed',
|
||||||
|
PAYMENT_METHOD_DROPDOWN_OPENED = 'Payment Method - Dropdown Opened',
|
||||||
|
PAYMENT_METHOD_OPENED_ETHERSCAN = 'Payment Method - Opened Etherscan',
|
||||||
|
PAYMENT_METHOD_COPIED_ADDRESS = 'Payment Method - Copied Address',
|
||||||
}
|
}
|
||||||
const track = (eventName: EventNames, eventProperties: EventProperties = {}): void => {
|
const track = (eventName: EventNames, eventProperties: EventProperties = {}): void => {
|
||||||
evaluateIfEnabled(() => {
|
evaluateIfEnabled(() => {
|
||||||
@@ -94,4 +97,7 @@ export const analytics = {
|
|||||||
trackAccountUnlockDenied: trackingEventFnWithoutPayload(EventNames.ACCOUNT_UNLOCK_DENIED),
|
trackAccountUnlockDenied: trackingEventFnWithoutPayload(EventNames.ACCOUNT_UNLOCK_DENIED),
|
||||||
trackAccountAddressChanged: (address: string) =>
|
trackAccountAddressChanged: (address: string) =>
|
||||||
trackingEventFnWithPayload(EventNames.ACCOUNT_ADDRESS_CHANGED)({ address }),
|
trackingEventFnWithPayload(EventNames.ACCOUNT_ADDRESS_CHANGED)({ address }),
|
||||||
|
trackPaymentMethodDropdownOpened: trackingEventFnWithoutPayload(EventNames.PAYMENT_METHOD_DROPDOWN_OPENED),
|
||||||
|
trackPaymentMethodOpenedEtherscan: trackingEventFnWithoutPayload(EventNames.PAYMENT_METHOD_OPENED_ETHERSCAN),
|
||||||
|
trackPaymentMethodCopiedAddress: trackingEventFnWithoutPayload(EventNames.PAYMENT_METHOD_COPIED_ADDRESS),
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user