Skip to content

Commit 57a5863

Browse files
authored
feat: add analytics to the hardware wallet flow (#1073)
* feat: add analytics to the hardware wallet flow * fix: name analytics event properly
1 parent 6bf8d47 commit 57a5863

File tree

7 files changed

+37
-23
lines changed

7 files changed

+37
-23
lines changed

apps/browser-extension-wallet/src/providers/AnalyticsProvider/analyticsTracker/events.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ export const postHogOnboardingActions: PostHogOnboardingActionsType = {
2626
PostHogAction.OnboardingRestoreEnterRecoveryPhrasePasteFromClipboardClick
2727
},
2828
hw: {
29-
WALLET_NAME_NEXT_CLICK: PostHogAction.OnboardingHWNameNextClick,
30-
CONNECT_HW_NEXT_CLICK: PostHogAction.OnboardingHWConnectNextClick,
31-
SETUP_HW_WALLET_NEXT_CLICK: PostHogAction.OnboardingHWSelectAccountNextClick,
3229
SETUP_OPTION_CLICK: PostHogAction.OnboardingHWClick,
33-
DONE_GO_TO_WALLET: PostHogAction.OnboardingHWDoneGoToWallet
30+
CONNECT_HW_VIEW: PostHogAction.OnboardingHWConnectView,
31+
HW_POPUP_CONNECT_CLICK: PostHogAction.OnboardingHWPopupConnectClick,
32+
CONNECT_HW_TRY_AGAIN_CLICK: PostHogAction.OnboardingHWConnectTryAgainClick,
33+
SETUP_HW_ACCOUNT_NO_CLICK: PostHogAction.OnboardingHWSetupWalletAccountNoClick,
34+
ENTER_WALLET: PostHogAction.OnboardingHWEnterWalletClick
3435
},
3536
// eslint-disable-next-line camelcase
3637
forgot_password: {

apps/browser-extension-wallet/src/providers/AnalyticsProvider/analyticsTracker/types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ export type PostHogActionsKeys =
4444
| 'ANALYTICS_AGREE_CLICK'
4545
| 'LEARN_MORE_CLICK'
4646
| 'ANALYTICS_REJECT_CLICK'
47-
| 'WALLET_NAME_NEXT_CLICK'
4847
| 'SAVE_RECOVERY_PHRASE_NEXT_CLICK'
4948
| 'ENTER_RECOVERY_PHRASE_NEXT_CLICK'
5049
| 'ENTER_WALLET'
5150
| 'GOT_IT_CLICK'
5251
| 'PIN_EXTENSION_CLICK'
53-
| 'CONNECT_HW_NEXT_CLICK'
54-
| 'SETUP_HW_WALLET_NEXT_CLICK'
55-
| 'DONE_GO_TO_WALLET'
52+
| 'CONNECT_HW_VIEW'
53+
| 'HW_POPUP_CONNECT_CLICK'
54+
| 'CONNECT_HW_TRY_AGAIN_CLICK'
55+
| 'SETUP_HW_ACCOUNT_NO_CLICK'
5656
| 'WALLET_NAME_PASSWORD_NEXT_CLICK'
5757
| 'RECOVERY_PHRASE_INTRO_WATCH_VIDEO_CLICK'
5858
| 'RECOVERY_PHRASE_INTRO_VIDEO_GOTIT_CLICK'

apps/browser-extension-wallet/src/views/browser-view/features/wallet-setup/components/HardwareWalletFlow/HardwareWalletFlow.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { walletRoutePaths } from '@routes/wallet-paths';
1111
import { StepConnect } from './StepConnect';
1212
import { WalletType } from '@cardano-sdk/web-extension';
1313
import { StepCreate, WalletData } from './StepCreate';
14+
import { useAnalyticsContext } from '@providers';
15+
import { postHogOnboardingActions } from '@providers/AnalyticsProvider/analyticsTracker';
1416

1517
export interface HardwareWalletFlowProps {
1618
onCancel: () => void;
@@ -58,6 +60,7 @@ export const HardwareWalletFlow = ({ onCancel }: HardwareWalletFlowProps): React
5860
const [connection, setConnection] = useState<Wallet.HardwareWalletConnection>();
5961
const [walletData, setWalletData] = useState<WalletData>();
6062
const { updateEnteredAtTime } = useTimeSpentOnPage();
63+
const analytics = useAnalyticsContext();
6164

6265
useEffect(() => {
6366
updateEnteredAtTime();
@@ -157,6 +160,9 @@ export const HardwareWalletFlow = ({ onCancel }: HardwareWalletFlowProps): React
157160
accounts={TOTAL_ACCOUNTS}
158161
onBack={() => setIsStartOverDialogVisible(true)}
159162
onSubmit={onAccountAndNameSubmit}
163+
onSelectedAccountChange={() => {
164+
void analytics.sendEventToPostHog(postHogOnboardingActions.hw?.SETUP_HW_ACCOUNT_NO_CLICK);
165+
}}
160166
/>
161167
</Route>
162168
<Route path={route(FlowStep.Create)}>

apps/browser-extension-wallet/src/views/browser-view/features/wallet-setup/components/HardwareWalletFlow/StepConnect.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { TranslationKey } from '@lib/translations/types';
66
import { TFunction } from 'i18next';
77
import React, { useCallback, useEffect, useState, VFC } from 'react';
88
import { useTranslation } from 'react-i18next';
9+
import { useAnalyticsContext } from '@providers';
10+
import { postHogOnboardingActions } from '@providers/AnalyticsProvider/analyticsTracker';
911

1012
export const isTrezorHWSupported = (): boolean => process.env.USE_TREZOR_HW === 'true';
1113

@@ -92,14 +94,16 @@ export const StepConnect: VFC<StepConnectProps> = ({ onBack, onConnected, onUsbD
9294
const [discoveryState, setDiscoveryState] = useState<DiscoveryState>(DiscoveryState.Requested);
9395
const [connectionError, setConnectionError] = useState<ConnectionError | null>(null);
9496
const { connectHardwareWalletRevamped } = useWalletManager();
97+
const analytics = useAnalyticsContext();
9598

9699
const translations = makeTranslations({ connectionError, t });
97100
const connect = useConnectHardwareWalletWithTimeout(connectHardwareWalletRevamped);
98101

99102
const onRetry = useCallback(() => {
100103
setDiscoveryState(DiscoveryState.Requested);
101104
setConnectionError(null);
102-
}, []);
105+
void analytics.sendEventToPostHog(postHogOnboardingActions.hw?.CONNECT_HW_TRY_AGAIN_CLICK);
106+
}, [analytics]);
103107

104108
useEffect(() => {
105109
(async () => {
@@ -108,10 +112,12 @@ export const StepConnect: VFC<StepConnectProps> = ({ onBack, onConnected, onUsbD
108112
setDiscoveryState(DiscoveryState.Running);
109113
let connectionResult: Wallet.HardwareWalletConnection;
110114
try {
115+
void analytics.sendEventToPostHog(postHogOnboardingActions.hw?.CONNECT_HW_VIEW);
111116
const usbDevice = await requestHardwareWalletConnection();
112117
onUsbDeviceChange(usbDevice);
113118
connectionResult = await connect(usbDevice);
114119
onConnected(connectionResult);
120+
void analytics.sendEventToPostHog(postHogOnboardingActions.hw?.HW_POPUP_CONNECT_CLICK);
115121
setDiscoveryState(DiscoveryState.Idle);
116122
} catch (error) {
117123
setDiscoveryState(DiscoveryState.Idle);
@@ -125,7 +131,7 @@ export const StepConnect: VFC<StepConnectProps> = ({ onBack, onConnected, onUsbD
125131
setConnectionError(parseConnectionError(error));
126132
}
127133
})();
128-
}, [connect, discoveryState, onUsbDeviceChange, onConnected]);
134+
}, [connect, discoveryState, onUsbDeviceChange, onConnected, analytics]);
129135

130136
return (
131137
<WalletSetupConnectHardwareWalletStepRevamp

apps/browser-extension-wallet/src/views/browser-view/features/wallet-setup/components/HardwareWalletFlow/StepCreate.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ export const StepCreate: VFC<StepCreateProps> = ({ connection, onError, walletDa
4949
if (status !== CreationState.Idle) return;
5050
setStatus(CreationState.Working);
5151

52-
void analytics.sendEventToPostHog(postHogOnboardingActions.hw.SETUP_HW_WALLET_NEXT_CLICK);
53-
5452
let cardanoWallet: Wallet.CardanoWallet;
5553
try {
5654
cardanoWallet = await createHardwareWalletRevamped({
@@ -64,7 +62,7 @@ export const StepCreate: VFC<StepCreateProps> = ({ connection, onError, walletDa
6462
}
6563

6664
const deviceSpec = await Wallet.getDeviceSpec(connection);
67-
await analytics.sendEventToPostHog(postHogOnboardingActions.hw.DONE_GO_TO_WALLET, {
65+
void analytics.sendEventToPostHog(postHogOnboardingActions.hw.ENTER_WALLET, {
6866
/* eslint-disable camelcase */
6967
$set_once: {
7068
initial_hardware_wallet_model: deviceSpec.model,

packages/common/src/analytics/types.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ export enum PostHogAction {
77
OnboardingMainViewPinExtensionClick = 'wallet | onboarding | lace main view | pin the wallet extension | click',
88
OnboardingMainViewMultiAddressModalGotItClick = 'wallet | onboarding | lace main view | multi-address modal | got it | click',
99
// Hardware wallet connect
10-
OnboardingHWAnalyticsAgreeClick = 'onboarding | hardware wallet | analytics | agree | click',
11-
OnboardingHWAnalyticsSkipClick = 'onboarding | hardware wallet | analytics | skip | click',
12-
OnboardingHWClick = 'onboarding | hardware wallet | connect | click',
13-
OnboardinHWLaceTermsOfUseNextClick = 'onboarding | hardware wallet | lace terms of use | next | click',
14-
OnboardingHWConnectNextClick = 'onboarding | hardware wallet | connect hw | next | click',
15-
OnboardingHWSelectAccountNextClick = 'onboarding | hardware wallet | select hw account | next | click',
16-
OnboardingHWNameNextClick = 'onboarding | hardware wallet | name hw wallet | next | click',
17-
OnboardingHWDoneGoToWallet = 'onboarding | hardware wallet | all done | go to my wallet | click',
10+
OnboardingHWClick = 'onboarding | hardware wallet revamp | connect | click',
11+
OnboardingHWConnectView = 'onboarding | hardware wallet revamp | connect your device | view',
12+
OnboardingHWPopupConnectClick = 'onboarding | hardware wallet revamp | native browser pop-up with HWs | connect | click',
13+
OnboardingHWConnectTryAgainClick = 'onboarding | hardware wallet revamp | connect your device | try again | click',
14+
OnboardingHWSetupWalletAccountNoClick = "onboarding | hardware wallet revamp | let's set up your wallet | Account No | click",
15+
OnboardingHWEnterWalletClick = "onboarding | hardware wallet revamp | let's set up your wallet | enter wallet | click",
1816
// Restore wallet
1917
OnboardingRestoreClick = 'onboarding | restore wallet revamp | restore | click',
2018
OnboardingRestoreEnterRecoveryPhraseNextClick = 'onboarding | restore wallet revamp | enter your recovery phrase | next | click',

packages/core/src/ui/components/WalletSetupRevamp/WalletSetupSelectAccountsStepRevamp.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ export interface WalletSetupSelectAccountsStepRevampProps {
1616
onBack: () => void;
1717
onSubmit: (accountIndex: number, name: string) => void;
1818
isNextLoading?: boolean;
19+
onSelectedAccountChange?: () => void;
1920
}
2021

2122
export const WalletSetupSelectAccountsStepRevamp = ({
2223
accounts,
2324
onBack,
2425
onSubmit,
25-
isNextLoading
26+
isNextLoading,
27+
onSelectedAccountChange
2628
}: WalletSetupSelectAccountsStepRevampProps): React.ReactElement => {
2729
const [selectedAccount, setSelectedAccount] = useState<string | undefined>('0');
2830
const [walletName, setWalletName] = useState(INITIAL_WALLET_NAME);
@@ -72,7 +74,10 @@ export const WalletSetupSelectAccountsStepRevamp = ({
7274
<SelectGroup
7375
placeholder="Accounts"
7476
options={options}
75-
onValueChange={(value) => setSelectedAccount(value)}
77+
onValueChange={(value) => {
78+
setSelectedAccount(value);
79+
onSelectedAccountChange?.();
80+
}}
7681
showArrow
7782
withOutline
7883
selectedValue={selectedAccount}

0 commit comments

Comments
 (0)