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