@@ -22,24 +22,29 @@ final class MainViewModel: Store {
2222
2323 enum Action {
2424 case onAppear
25+ case selectedTabChanged( MainTab )
2526 case setUnreadPushCount( Int )
2627 case setAlert( Bool )
2728 }
2829
2930 enum SideEffect {
3031 case observeUnreadPushCount
32+ case trackScreenView( MainTab )
3133 case updateBadgeCount( Int )
3234 }
3335
3436 private( set) var state = State ( )
3537 private let logger = Logger ( category: " MainViewModel " )
3638 private var cancellables = Set < AnyCancellable > ( )
3739 private var isObservingUnreadPushCount = false
40+ private let trackAnalyticsEventUseCase : TrackAnalyticsEventUseCase
3841 private let unreadPushCountUseCase : ObserveUnreadPushCountUseCase
3942
4043 init (
44+ trackAnalyticsEventUseCase: TrackAnalyticsEventUseCase ,
4145 unreadPushCountUseCase: ObserveUnreadPushCountUseCase
4246 ) {
47+ self . trackAnalyticsEventUseCase = trackAnalyticsEventUseCase
4348 self . unreadPushCountUseCase = unreadPushCountUseCase
4449 }
4550
@@ -53,6 +58,10 @@ final class MainViewModel: Store {
5358 isObservingUnreadPushCount = true
5459 sideEffects = [ . observeUnreadPushCount]
5560 }
61+ case . selectedTabChanged( let tab) :
62+ if tab. analyticsScreenName != nil {
63+ sideEffects = [ . trackScreenView( tab) ]
64+ }
5665 case . setUnreadPushCount( let count) :
5766 state. unreadPushCount = count
5867 sideEffects = [ . updateBadgeCount( count) ]
@@ -68,6 +77,8 @@ final class MainViewModel: Store {
6877 switch effect {
6978 case . observeUnreadPushCount:
7079 observeUnreadPushCount ( )
80+ case . trackScreenView( let tab) :
81+ trackScreenView ( tab)
7182 case . updateBadgeCount( let count) :
7283 updateBadgeCount ( count)
7384 }
@@ -116,4 +127,24 @@ private extension MainViewModel {
116127 }
117128 }
118129 }
130+
131+ func trackScreenView( _ tab: MainTab ) {
132+ guard let screenName = tab. analyticsScreenName else { return }
133+ trackAnalyticsEventUseCase. execute ( . screenView( screenName) )
134+ }
135+ }
136+
137+ private extension MainTab {
138+ var analyticsScreenName : String ? {
139+ switch self {
140+ case . home:
141+ return " home "
142+ case . today:
143+ return " today "
144+ case . notification:
145+ return nil
146+ case . profile:
147+ return " profile "
148+ }
149+ }
119150}
0 commit comments