Skip to content

Commit

Permalink
feat: add events for analytics
Browse files Browse the repository at this point in the history
  • Loading branch information
zafar4aev committed Jul 25, 2023
1 parent 9389c9f commit 3393325
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,35 @@ enum KeyAppAnalyticsEvent: AnalyticsEvent {
case mainScreenCashOutBar

case mainScreenOpened(isSellEnabled: Bool)
case mainCopyAddress
case mainScreenAddressClick
case mainScreenAmountClick
case mainScreenAddMoneyClick
case mainScreenWithdrawClick
case mainScreenMainClick
case mainScreenTokenDetailsOpen(tokenTicker: String)
case mainScreenBuyToken(tokenName: String)
case mainScreenHiddenTokens

case mainScreenCryptoClick
case mainScreenSendClick
case mainScreenHistoryClick
case mainScreenSettingsClick

case userAggregateBalanceBase(amountUsd: Double, currency: String)
case userHasPositiveBalanceBase(state: Bool)

// MARK: - Crypto

case cryptoScreenOpened
case cryptoAmountClick
case cryptoReceiveClick
case cryptoSwapClick
case cryptoTokenClick(tokenName: String)
case cryptoClaimTransferredViewed(claimCount: Int)
case cryptoClaimTransferredClick

case userAggregateBalanceTokens(amountUsd: Double, currency: String)
case userHasPositiveBalanceTokens(state: Bool)

// MARK: - Tokens

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ final class CryptoAccountsViewModel: BaseViewModel, ObservableObject {

// MARK: - Dependencies

private let analyticsManager: AnalyticsManager
private let solanaAccountsService: SolanaAccountsService
private let ethereumAccountsService: EthereumAccountsService
private let userActionService: UserActionService
Expand All @@ -38,12 +39,14 @@ final class CryptoAccountsViewModel: BaseViewModel, ObservableObject {
// MARK: - Initialization

init(
analyticsManager: AnalyticsManager = Resolver.resolve(),
solanaAccountsService: SolanaAccountsService = Resolver.resolve(),
ethereumAccountsService: EthereumAccountsService = Resolver.resolve(),
userActionService: UserActionService = Resolver.resolve(),
favouriteAccountsStore: FavouriteAccountsDataSource = Resolver.resolve(),
navigation: PassthroughSubject<CryptoNavigation, Never>
) {
self.analyticsManager = analyticsManager
self.solanaAccountsService = solanaAccountsService
self.ethereumAccountsService = ethereumAccountsService
self.userActionService = userActionService
Expand Down Expand Up @@ -91,10 +94,12 @@ final class CryptoAccountsViewModel: BaseViewModel, ObservableObject {
homeAccountsAggregator.transform(input: (solanaAccounts, ethereumAccounts))
}
.receive(on: RunLoop.main)
.sink { transfer, primary, secondary in
self.transferAccounts = transfer
self.accounts = primary
self.hiddenAccounts = secondary
.sink { [weak self] transfer, primary, secondary in
self?.transferAccounts = transfer
self?.accounts = primary
self?.hiddenAccounts = secondary

self?.analyticsManager.log(event: .cryptoClaimTransferredViewed(claimCount: transfer.count))
}
.store(in: &subscriptions)
}
Expand All @@ -114,6 +119,7 @@ final class CryptoAccountsViewModel: BaseViewModel, ObservableObject {
case let renderableAccount as RenderableSolanaAccount:
switch event {
case .tap:
analyticsManager.log(event: .cryptoTokenClick(tokenName: renderableAccount.account.token.symbol))
navigation.send(.solanaAccount(renderableAccount.account))
case .visibleToggle:
let pubkey = renderableAccount.account.address
Expand All @@ -132,7 +138,10 @@ final class CryptoAccountsViewModel: BaseViewModel, ObservableObject {

case let renderableAccount as RenderableEthereumAccount:
switch event {
case .tap:
analyticsManager.log(event: .cryptoTokenClick(tokenName: renderableAccount.account.token.symbol))
case .extraButtonTap:
analyticsManager.log(event: .cryptoClaimTransferredClick)
navigation.send(.claim(renderableAccount.account, renderableAccount.userAction))
default:
break
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ struct CryptoActionsPanelView: View {
actions: viewModel.actions,
balance: viewModel.balance,
usdAmount: "",
action: { action in
self.viewModel.actionClicked(action)
}
action: viewModel.actionClicked,
balanceTapAction: viewModel.balanceTapped
)
.onAppear {
viewModel.viewDidAppear()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import AnalyticsManager
import Combine
import Foundation
import Resolver
Expand All @@ -12,6 +13,7 @@ final class CryptoActionsPanelViewModel: BaseViewModel, ObservableObject {
// MARK: - Dependencies

@Injected var solanaAccountsService: SolanaAccountsService
@Injected var analyticsManager: AnalyticsManager

// MARK: - Properties

Expand Down Expand Up @@ -57,11 +59,24 @@ final class CryptoActionsPanelViewModel: BaseViewModel, ObservableObject {
case .receive:
guard let pubkey = try? PublicKey(string: solanaAccountsService.state.value.nativeWallet?.address)
else { return }
analyticsManager.log(event: .cryptoReceiveClick)
navigation.send(.receive(publicKey: pubkey))
case .swap:
analyticsManager.log(event: .cryptoSwapClick)
navigation.send(.swap)
default: break
}
}

func balanceTapped() {
analyticsManager.log(event: .cryptoAmountClick)
}

func viewDidAppear() {
if let balance = Double(balance) {
analyticsManager.log(event: .userAggregateBalanceTokens(amountUsd: balance, currency: Defaults.fiat.code))
analyticsManager.log(event: .userHasPositiveBalanceTokens(state: balance > 0))
}
}
}

6 changes: 2 additions & 4 deletions p2p_wallet/Scenes/Main/Crypto/Container/CryptoViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,8 @@ final class CryptoViewModel: BaseViewModel, ObservableObject {
if available(.solanaNegativeStatus) {
solanaTracker.startTracking()
}

analyticsManager.log(
event: .mainScreenWalletsOpen(isSellEnabled: sellDataService.isAvailable)
)

analyticsManager.log(event: .cryptoScreenOpened)
}
}

Expand Down
2 changes: 1 addition & 1 deletion p2p_wallet/Scenes/Main/NewHome/HomeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class HomeViewModel: ObservableObject {
text = L10n.addressWasCopiedToClipboard
}
notificationsService.showToast(title: "🖤", text: text, haptic: true)
analyticsManager.log(event: .mainCopyAddress)
analyticsManager.log(event: .mainScreenAddressClick)
}

func updateAddressIfNeeded() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,18 @@ struct HomeAccountsView: View {
scrollAnimationIsEnded = false
}
}
.onAppear {
viewModel.viewDidAppear()
}
}

private var header: some View {
ActionsPanelView(
actions: [],
balance: viewModel.balance,
usdAmount: viewModel.usdcAmount,
action: { _ in }
action: { _ in },
balanceTapAction: viewModel.balanceTapped
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,14 +172,27 @@ final class HomeAccountsViewModel: BaseViewModel, ObservableObject {
func actionClicked(_ action: HomeAction) {
switch action {
case .addMoney:
analyticsManager.log(event: .mainScreenAddMoneyClick)
navigation.send(.addMoney)
case .withdraw: break
case .withdraw:
analyticsManager.log(event: .mainScreenWithdrawClick)
}
}

func scrollToTop() {
scrollOnTheTop = true
}

func viewDidAppear() {
if let balance = Double(balance) {
analyticsManager.log(event: .userAggregateBalanceBase(amountUsd: balance, currency: Defaults.fiat.code))
analyticsManager.log(event: .userHasPositiveBalanceBase(state: balance > 0))
}
}

func balanceTapped() {
analyticsManager.log(event: .mainScreenAmountClick)
}

func hiddenTokensTapped() {
analyticsManager.log(event: .mainScreenHiddenTokens)
Expand Down
25 changes: 18 additions & 7 deletions p2p_wallet/Scenes/TabBar/TabBarController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -314,13 +314,24 @@ extension TabBarController: UITabBarControllerDelegate {
return true
}

if TabItem(rawValue: selectedIndex) == .send {
return false
} else if TabItem(rawValue: selectedIndex) == .wallet,
(viewController as! UINavigationController).viewControllers.count == 1,
self.selectedIndex == selectedIndex
{
homeTabClickedTwicelySubject.send()
if let tabItem = TabItem(rawValue: selectedIndex) {
switch tabItem {
case .wallet:
viewModel.walletTapped()

if (viewController as! UINavigationController).viewControllers.count == 1, self.selectedIndex == selectedIndex {
homeTabClickedTwicelySubject.send()
}
case .crypto:
viewModel.cryptoTapped()
case .send:
viewModel.sendTapped()
return false
case .history:
viewModel.historyTapped()
case .settings:
viewModel.settingsTapped()
}
}

customTabBar.updateSelectedViewPositionIfNeeded()
Expand Down
23 changes: 23 additions & 0 deletions p2p_wallet/Scenes/TabBar/TabBarViewModel.swift
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import AnalyticsManager
import Combine
import Wormhole
import Foundation
Expand All @@ -22,6 +23,8 @@ final class TabBarViewModel {
@Injected private var userActionService: UserActionService
@Injected private var ethereumAccountsService: EthereumAccountsService
@Injected private var solanaAccountsService: SolanaAccountsService

@Injected private var analyticsManager: AnalyticsManager

// Input
let viewDidLoad = PassthroughSubject<Void, Never>()
Expand Down Expand Up @@ -65,6 +68,26 @@ final class TabBarViewModel {
})
.store(in: &cancellables)
}

func walletTapped() {
analyticsManager.log(event: .mainScreenMainClick)
}

func cryptoTapped() {
analyticsManager.log(event: .mainScreenCryptoClick)
}

func sendTapped() {
analyticsManager.log(event: .mainScreenSendClick)
}

func historyTapped() {
analyticsManager.log(event: .mainScreenHistoryClick)
}

func settingsTapped() {
analyticsManager.log(event: .mainScreenSettingsClick)
}
}

// MARK: - Output
Expand Down
6 changes: 5 additions & 1 deletion p2p_wallet/UI/SwiftUI/ActionsPanel/ActionsPanelView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ struct ActionsPanelView: View {
let balance: String
let usdAmount: String
let action: (WalletActionType) -> Void

let balanceTapAction: (() -> ())?

var body: some View {
VStack(alignment: .center, spacing: 0) {
if !balance.isEmpty {
Expand All @@ -16,6 +17,9 @@ struct ActionsPanelView: View {
.foregroundColor(Color(Asset.Colors.night.color))
.padding(.top, 24)
.padding(.bottom, usdAmount.isEmpty ? 46 : 12)
.onTapGesture {
balanceTapAction?()
}
} else {
Rectangle()
.fill(Color.clear)
Expand Down

0 comments on commit 3393325

Please sign in to comment.