Skip to content

Commit 4929bec

Browse files
feat(staking): [LW-8110] add analytics (#650)
--------- Co-authored-by: refi93 <rafael.korbas@gmail.com>
1 parent a9973f3 commit 4929bec

File tree

33 files changed

+473
-331
lines changed

33 files changed

+473
-331
lines changed

apps/browser-extension-wallet/src/features/delegation/components/MultiDelegationStakingPopup.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { OutsideHandlesProvider, StakingPopup } from '@lace/staking';
22
import React, { useCallback, useEffect } from 'react';
3-
import { useBackgroundServiceAPIContext, useCurrencyStore, useExternalLinkOpener, useTheme } from '@providers';
3+
import {
4+
useAnalyticsContext,
5+
useBackgroundServiceAPIContext,
6+
useCurrencyStore,
7+
useExternalLinkOpener,
8+
useTheme
9+
} from '@providers';
410
import { useBalances, useFetchCoinPrice, useLocalStorage, useStakingRewards, useWalletManager } from '@hooks';
511
import { useDelegationStore } from '@src/features/delegation/stores';
612
import { usePassword, useSubmitingState } from '@views/browser/features/send-transaction';
@@ -73,6 +79,7 @@ export const MultiDelegationStakingPopup = (): JSX.Element => {
7379
true
7480
);
7581
const walletAddress = walletInfo.addresses?.[0].address?.toString();
82+
const analytics = useAnalyticsContext();
7683

7784
useEffect(() => {
7885
fetchNetworkInfo();
@@ -81,6 +88,7 @@ export const MultiDelegationStakingPopup = (): JSX.Element => {
8188
return (
8289
<OutsideHandlesProvider
8390
{...{
91+
analytics,
8492
multidelegationFirstVisit,
8593
triggerMultidelegationFirstVisit: () => setMultidelegationFirstVisit(false),
8694
backgroundServiceAPIContextSetWalletPassword: setWalletPassword,

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import {
22
EnhancedAnalyticsOptInStatus,
33
ExtensionViews,
4-
MatomoSendEventProps,
4+
UserTrackingType,
55
PostHogAction,
66
PostHogProperties,
7-
UserTrackingType
7+
MatomoSendEventProps,
8+
IAnalyticsTracker
89
} from './types';
910
import { Wallet } from '@lace/cardano';
1011
import { MatomoClient, MATOMO_OPTED_OUT_EVENTS_DISABLED } from '../matomo';
@@ -24,7 +25,7 @@ interface AnalyticsTrackerArgs {
2425
isPostHogEnabled?: boolean;
2526
excludedEvents?: string;
2627
}
27-
export class AnalyticsTracker {
28+
export class AnalyticsTracker implements IAnalyticsTracker {
2829
protected matomoClient?: MatomoClient;
2930
protected postHogClient?: PostHogClient;
3031
protected userIdService?: UserIdService;

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

Lines changed: 5 additions & 178 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
/* eslint-disable camelcase */
2+
import { PostHogAction } from '@lace/common';
3+
4+
export { PostHogAction } from '@lace/common';
5+
export type { IAnalyticsTracker } from '@lace/common';
6+
27
export enum MatomoEventActions {
38
CLICK_EVENT = 'click-event',
49
HOVER_EVENT = 'hover-event'
@@ -29,184 +34,6 @@ export type Metadata = {
2934
url: string;
3035
};
3136

32-
export enum PostHogAction {
33-
// Hardware wallet connect
34-
OnboardingHWAnalyticsAgreeClick = 'onboarding | hardware wallet | analytics | agree | click',
35-
OnboardingHWAnalyticsSkipClick = 'onboarding | hardware wallet | analytics | skip | click',
36-
OnboardingHWClick = 'onboarding | hardware wallet | connect | click',
37-
OnboardinHWLaceTermsOfUseNextClick = 'onboarding | hardware wallet | lace terms of use | next | click',
38-
OnboardingHWConnectNextClick = 'onboarding | hardware wallet | connect hw | next | click',
39-
OnboardingHWSelectAccountNextClick = 'onboarding | hardware wallet | select hw account | next | click',
40-
OnboardingHWNameNextClick = 'onboarding | hardware wallet | name hw wallet | next | click',
41-
OnboardingHWDoneGoToWallet = 'onboarding | hardware wallet | all done | go to my wallet | click',
42-
// Restore wallet
43-
OnboardingRestoreDoneGoToWallet = 'onboarding | restore wallet | all done | go to my wallet | click',
44-
OnboardingRestoreAnalyticsAgreeClick = 'onboarding | restore wallet | analytics | agree | click',
45-
OnboardingRestoreAnalyticsSkipClick = 'onboarding | restore wallet | analytics | skip | click',
46-
OnboardingRestoreClick = 'onboarding | restore wallet | restore | click',
47-
OnboardingRestoreWarningMultiAddressWalletOkClick = 'onboarding | restore wallet | warning multi-address wallet | ok | click',
48-
OnboardingRestoreWarningMultiAddressWalletCancelClick = 'onboarding | restore wallet | warning multi-address wallet | cancel | click',
49-
OnboardingRestoreLaceTermsOfUseNextClick = 'onboarding | restore wallet | lace terms of use | next | click',
50-
OnboardingRestoreWalletNameNextClick = 'onboarding | restore wallet | wallet name | next | click',
51-
OnboardingRestoreWalletPasswordNextClick = 'onboarding | restore wallet | wallet password | next | click',
52-
OnboardingRestoreRecoveryPhraseLengthNextClick = 'onboarding | restore wallet | recovery phrase length | next | click',
53-
OnboardingRestoreEnterPassphrase01NextClick = 'onboarding | restore wallet | enter passphrase #01 | next | click',
54-
OnboardingRestoreEnterPassphrase09NextClick = 'onboarding | restore wallet | enter passphrase #09 | next | click',
55-
OnboardingRestoreEnterPassphrase17NextClick = 'onboarding | restore wallet | enter passphrase #17 | next | click',
56-
OnboardingRestoreWalletNamePasswordNextClick = 'onboarding | restore wallet | wallet name & password | next | click',
57-
// Create new wallet
58-
OnboardingCreateDoneGoToWallet = 'onboarding | new wallet | all done | go to my wallet | click',
59-
OnboardingCreateAnalyticsAgreeClick = 'onboarding | new wallet | analytics | agree | click',
60-
OnboardingCreateAnalyticsSkipClick = 'onboarding | new wallet | analytics | skip | click',
61-
OnboardingCreateClick = 'onboarding | new wallet | create | click',
62-
OnboardingCreateLaceTermsOfUseNextClick = 'onboarding | new wallet | lace terms of use | next | click',
63-
OnboardingCreateWalletNameNextClick = 'onboarding | new wallet | wallet name | next | click',
64-
OnboardingCreateWalletPasswordNextClick = 'onboarding | new wallet | wallet password | next | click',
65-
OnboardingCreatePassphraseIntroNextClick = 'onboarding | new wallet | passphrase intro | next | click',
66-
OnboardingCreateWritePassphrase01NextClick = 'onboarding | new wallet | write passphrase #01 | next | click',
67-
OnboardingCreateWritePassphrase09NextClick = 'onboarding | new wallet | write passphrase #09 | next | click',
68-
OnboardingCreateWritePassphrase17NextClick = 'onboarding | new wallet | write passphrase #17 | next | click',
69-
OnboardingCreateEnterPassphrase01NextClick = 'onboarding | new wallet | enter passphrase #01 | next | click',
70-
OnboardingCreateEnterPassphrase09NextClick = 'onboarding | new wallet | enter passphrase #09 | next | click',
71-
OnboardingCreateEnterPassphrase17NextClick = 'onboarding | new wallet | enter passphrase #17 | next | click',
72-
OnboardingCreateWalletNamePasswordNextClick = 'onboarding | new wallet | wallet name & password | next | click',
73-
OnboardingCreatePassphraseIntroPlayVideoClick = 'onboarding | new wallet | passphrase intro | play video | click',
74-
// Staking
75-
StakingClick = 'staking | staking | click',
76-
StakingStakePoolClick = 'staking | staking | stake pool | click',
77-
StakingStakePoolDetailStakeOnThisPoolClick = 'staking | stake pool detail | stake on this pool | click',
78-
StakingSwitchingPoolFineByMeClick = 'staking | switching pool? | fine by me | click',
79-
StakingManageDelegationStakePoolConfirmationNextClick = 'staking | manage delegation | stake pool confirmation | next | click',
80-
StakingManageDelegationPasswordConfirmationConfirmClick = 'staking | manage delegation | password confirmation | confirm | click',
81-
StakingManageDelegationHurrayView = 'staking | manage delegation | hurray! | view',
82-
StakingManageDelegationHurrayCloseClick = 'staking | manage delegation | hurray! | close | click',
83-
StakingManageDelegationHurrayXClick = 'staking | manage delegation | hurray! | x | click',
84-
StakingManageDelegationSomethingWentWrongBackClick = 'staking | manage delegation | something went wrong | back | click',
85-
StakingManageDelegationSomethingWentWrongCancelClick = 'staking | manage delegation | something went wrong | cancel | click',
86-
StakingManageDelegationSomethingWentWrongXClick = 'staking | manage delegation | something went wrong | x | click',
87-
// Send Flow
88-
SendClick = 'send | send | click',
89-
SendTransactionDataReviewTransactionClick = 'send | transaction data | review transaction | click',
90-
SendTransactionSummaryConfirmClick = 'send | transaction summary | confirm | click',
91-
SendTransactionConfirmationConfirmClick = 'send | transaction confirmation | confirm | click',
92-
SendAllDoneView = 'send | all done | view',
93-
SendAllDoneViewTransactionClick = 'send | all done | view transaction | click',
94-
SendAllDoneCloseClick = 'send | all done | close | click',
95-
SendAllDoneXClick = 'send | all done | x | click',
96-
SendSomethingWentWrongView = 'send | something went wrong | view',
97-
SendSomethingWentWrongBackClick = 'send | something went wrong | back | click',
98-
SendSomethingWentWrongCancelClick = 'send | something went wrong | cancel | click',
99-
SendSomethingWentWrongXClick = 'send | something went wrong | x | click',
100-
// NFTs Flow
101-
NFTsClick = 'nft | nfts | click',
102-
NFTsImageClick = 'nft | nfts | nft image | click',
103-
NFTsCreateFolderClick = 'nft | nfts | create folder | click',
104-
NFTCreateFolderNameYourFolderNextClick = 'nft | create folder | name your folder | next | click',
105-
NFTCreateFolderSelectNftsNextClick = 'nft | create folder | select nfts | next | click',
106-
// Address book
107-
AddressBookAddAddressClick = 'address book | add address | click',
108-
AddressBookAddNewAddressSaveAddressClick = 'address book | add new address | save address | click',
109-
AddressBookAddNewAddressCancelClick = 'address book | add new address | cancel | click',
110-
AddressBookAddressRecordClick = 'address book | address record | click',
111-
AddressBookAddressRecordCopyClick = 'address book | address record | copy | click',
112-
AddressBookAddressRecordEditClick = 'address book | address record | edit | click',
113-
AddressBookAddressRecordDeleteClick = 'address book | address record | delete | click',
114-
AddressBookAddressRecordHoldUpDeleteAddressClick = 'address book | address record | hold up! | delete address | click',
115-
AddressBookAddressRecordHoldUpCancelClick = 'address book | address record | hold up! | cancel | click',
116-
AddressBookAddressRecordEditAddressDoneClick = 'address book | address record | edit address | done | click',
117-
AddressBookAddressRecordEditAddressCancelClick = 'address book | address record | edit address | cancel | click',
118-
AddressBookAddressRecordEditAddressXClick = 'address book | address record | edit address | x | click',
119-
// Settings
120-
SettingsHelpClick = 'settings | help | click',
121-
SettingsHelpCreateSupportTicketClick = 'settings | help | create a support ticket | click',
122-
SettingsHelpXClick = 'settings | help | x | click',
123-
SettingsTermsAndConditionsClick = 'settings | terms and conditions | click',
124-
SettingsTermsAndConditionsXClick = 'settings | terms and conditions | x | click',
125-
SettingsPrivacyPolicyClick = 'settings | privacy policy | click',
126-
SettingsPrivacyPolicyXClick = 'settings | privacy policy | x | click',
127-
SettingsCookiePolicyClick = 'settings | cookie policy | click',
128-
SettingsCookiePolicyXClick = 'settings | cookie policy | x | click',
129-
SettingsRemoveWalletClick = 'settings | remove wallet | click',
130-
SettingsHoldUpRemoveWalletClick = 'settings | hold up | remove wallet | click',
131-
SettingsHoldUpBackClick = 'settings | hold up | back | click',
132-
SettingsNetworkClick = 'settings | network | click',
133-
SettingsNetworkPreviewClick = 'settings | network | preview | click',
134-
SettingsNetworkPreprodClick = 'settings | network | preprod | click',
135-
SettingsNetworkMainnetClick = 'settings | network | mainnet | click',
136-
SettingsNetworkXClick = 'settings | network | x | click',
137-
SettingsAuthorizedDappsClick = 'settings | authorized dapps | click',
138-
SettingsAuthorizedDappsTrashBinIconClick = 'settings | authorized dapps | trash bin icon | click',
139-
SettingsAuthorizedDappsHoldUpDisconnectDappClick = 'settings | authorized dapps | hold up! | disconnect dapp | click',
140-
SettingsAuthorizedDappsHoldUpBackClick = 'settings | authorized dapps | hold up! | back | click',
141-
SettingsYourKeysClick = 'settings | your keys | click',
142-
SettingsYourKeysShowPublicKeyClick = 'settings | your keys | show public key | click',
143-
SettingsYourKeysShowPublicKeyCopyClick = 'settings | your keys | show public key | copy | click',
144-
SettingsYourKeysShowPublicKeyXClick = 'settings | your keys | show public key | x | click',
145-
SettingsCollateralClick = 'settings | collateral | click',
146-
SettingsCollateralConfirmClick = 'settings | collateral | confirm | click',
147-
SettingsCollateralReclaimCollateralClick = 'settings | collateral | reclaim collateral | click',
148-
SettingsCollateralXClick = 'settings | collateral | x | click',
149-
SettingsCurrencyClick = 'settings | currency | click',
150-
SettingsCurrencySelectCurrencyClick = 'settings | currency | select currency | click',
151-
SettingsCurrencyXClick = 'settings | currency | x | click',
152-
SettingsThemeLightModeClick = 'settings | theme | light mode | click',
153-
SettingsThemeDarkModeClick = 'settings | theme | dark mode | click',
154-
SettingsShowRecoveryPhraseClick = 'settings | show recovery phrase | click',
155-
SettingsShowRecoveryPhraseEnterYourPasswordShowRecoveryPhraseClick = 'settings | show recovery phrase | enter your password | show recovery phrase | click',
156-
SettingsShowRecoveryPhraseYourRecoveryPhraseHidePassphraseClick = 'settings | show recovery phrase | Your recovery phrase (keep it secret!) | hide passphrase | click',
157-
SettingsShowRecoveryPhraseYourRecoveryPhraseXClick = 'settings | show recovery phrase | Your recovery phrase (keep it secret!) | x | click',
158-
SettingsAnalyticsAgreeClick = 'settings | analytics | agree | click',
159-
SettingsAnalyticsSkipClick = 'settings | analytics | skip | click',
160-
SettingsFaqsClick = 'settings | faqs | click',
161-
// Recieve section
162-
ReceiveClick = 'receive | receive | click',
163-
ReceiveCopyAddressIconClick = 'receive | receive | copy address icon | click',
164-
ReceiveCopyADAHandleIconClick = 'receive | receive | copy ADA handle icon | click',
165-
ReceiveYourWalletAddressXClick = 'receive | Your wallet address | x | click',
166-
// Dapp Connector
167-
DappConnectorAuthorizeDappAuthorizeClick = 'dapp connector | authorize dapp | authorize | click',
168-
DappConnectorAuthorizeDappCancelClick = 'dapp connector | authorize dapp | cancel | click',
169-
DappConnectorAuthorizeDappDappConnectorBetaClick = 'dapp connector | authorize dapp | dapp connector beta | click',
170-
DappConnectorAuthorizeDappConnectionAlwaysClick = 'dapp connector | authorize dapp | dapp connection | always | click',
171-
DappConnectorAuthorizeDappConnectionOnlyOnceClick = 'dapp connector | authorize dapp | dapp connection | only once | click',
172-
// User
173-
UserWalletProfileIconClick = 'user/wallet profile | profile icon | click',
174-
UserWalletProfileWalletAddressClick = 'user/wallet profile | wallet address | click',
175-
UserWalletProfileAddressBookClick = 'user/wallet profile | address book | click',
176-
UserWalletProfileSettingsClick = 'user/wallet profile | settings | click',
177-
UserWalletProfileLightModeClick = 'user/wallet profile | light mode | click',
178-
UserWalletProfileDarkModeClick = 'user/wallet profile | dark mode | click',
179-
UserWalletProfileNetworkClick = 'user/wallet profile | network | click',
180-
UserWalletProfileNetworkPreviewClick = 'user/wallet profile | network | preview | click',
181-
UserWalletProfileNetworkPreprodClick = 'user/wallet profile | network | preprod | click',
182-
UserWalletProfileNetworkMainnetClick = 'user/wallet profile | network | mainnet | click',
183-
UserWalletProfileLockWalletClick = 'user/wallet profile | lock wallet | click',
184-
// Lace Logo
185-
WalletLaceClick = 'wallet | lace | click',
186-
// Tokens
187-
TokenTokensClick = 'token | tokens | click',
188-
TokenTokensTokenRowClick = 'token | tokens | token row | click',
189-
TokenTokenDetailViewAllClick = 'token | token detail | view all | click',
190-
TokenTokenDetailXClick = 'token | token detail | x | click',
191-
// Activities
192-
ActivityActivityClick = 'activity | activity | click',
193-
ActivityActivityActivityRowClick = 'activity | activity | activity row | click',
194-
ActivityActivityDetailTransactionHashClick = 'activity | activity detail | transaction hash | click',
195-
ActivityActivityDetailInputsClick = 'activity | activity detail | inputs | click',
196-
ActivityActivityDetailOutputsClick = 'activity | activity detail | outputs | click',
197-
ActivityActivityDetailXClick = 'activity | activity detail | x | click',
198-
// Unlock Wallet
199-
UnlockWalletWelcomeBackUnlockClick = 'unlock wallet | welcome back! | unlock | click',
200-
UnlockWalletWelcomeBackForgotPasswordClick = 'unlock wallet | welcome back! | forgot password? | click',
201-
UnlockWalletForgotPasswordProceedClick = 'unlock wallet | forgot password? | proceed | click',
202-
UnlockWalletForgotPasswordCancelClick = 'unlock wallet | forgot password? | cancel | click',
203-
UnlockWalletForgotPasswordNextClick = 'unlock wallet | forgot password? | set up your password | next | click',
204-
UnlockWalletForgotPasswordRecoveryPhraseLengthNextClick = 'unlock wallet | forgot password? | recovery phrase length | next | click',
205-
UnlockWalletForgotPasswordEnterPassphrase01NextClick = 'unlock wallet | forgot password? | enter passphrase #01 | next | click',
206-
UnlockWalletForgotPasswordEnterPassphrase09NextClick = 'unlock wallet | forgot password? | enter passphrase #09 | next | click',
207-
UnlockWalletForgotPasswordEnterPassphrase17NextClick = 'unlock wallet | forgot password? | enter passphrase #17 | next | click'
208-
}
209-
21037
export enum EnhancedAnalyticsOptInStatus {
21138
OptedIn = 'ACCEPTED',
21239
OptedOut = 'REJECTED'

apps/browser-extension-wallet/src/providers/PostHogClientProvider/client/PostHogClient.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ import dayjs from 'dayjs';
44
import { Wallet } from '@lace/cardano';
55
import {
66
ExtensionViews,
7-
PostHogAction,
87
PostHogMetadata,
98
PostHogPersonProperties,
10-
PostHogProperties,
119
UserTrackingType
1210
} from '@providers/AnalyticsProvider/analyticsTracker';
1311
import {
@@ -23,6 +21,7 @@ import { BackgroundService, UserIdService } from '@lib/scripts/types';
2321
import { experiments, fallbackConfiguration } from '@providers/ExperimentsProvider/config';
2422
import { ExperimentName } from '@providers/ExperimentsProvider/types';
2523
import { Subscription, BehaviorSubject } from 'rxjs';
24+
import { PostHogAction, PostHogProperties } from '@lace/common';
2625

2726
/**
2827
* PostHog API reference:

apps/browser-extension-wallet/src/views/browser-view/features/staking/components/MultiDelegationStaking.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { OutsideHandlesProvider, Staking } from '@lace/staking';
22
import React, { useCallback } from 'react';
3-
import { useBackgroundServiceAPIContext, useCurrencyStore, useExternalLinkOpener, useTheme } from '@providers';
3+
import {
4+
useAnalyticsContext,
5+
useBackgroundServiceAPIContext,
6+
useCurrencyStore,
7+
useExternalLinkOpener,
8+
useTheme
9+
} from '@providers';
410
import { useBalances, useFetchCoinPrice, useLocalStorage, useWalletManager } from '@hooks';
511
import { useDelegationStore } from '@src/features/delegation/stores';
612
import { usePassword, useSubmitingState } from '@views/browser/features/send-transaction';
@@ -66,10 +72,12 @@ export const MultiDelegationStaking = (): JSX.Element => {
6672
true
6773
);
6874
const walletAddress = walletInfo.addresses?.[0].address?.toString();
75+
const analytics = useAnalyticsContext();
6976

7077
return (
7178
<OutsideHandlesProvider
7279
{...{
80+
analytics,
7381
backgroundServiceAPIContextSetWalletPassword: setWalletPassword,
7482
balancesBalance: balance,
7583
delegationStoreSetDelegationTxBuilder: setDelegationTxBuilder,

apps/browser-extension-wallet/src/views/browser-view/features/staking/components/StakePoolDetails/TransactionFail.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ export const TransactionFailFooter = ({ popupView }: TransactionFailProps): Reac
8282
return (
8383
<div className={styles.footerFail}>
8484
<Button
85-
onClick={() => closeDrawer()}
85+
onClick={() => {
86+
analytics.sendEventToPostHog(PostHogAction.StakingManageDelegationSomethingWentWrongCancelClick);
87+
closeDrawer();
88+
}}
8689
color="secondary"
8790
className={styles.btn}
8891
size="large"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { PostHogAction, PostHogProperties } from './types';
2+
3+
export interface IAnalyticsTracker {
4+
sendPageNavigationEvent: () => Promise<void>;
5+
sendAliasEvent: () => Promise<void>;
6+
sendEventToPostHog: (action: PostHogAction, properties?: PostHogProperties) => Promise<void>;
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './types';
2+
export * from './iAnalyticsTracker';

0 commit comments

Comments
 (0)