@@ -32,11 +32,17 @@ final class RootViewModel: StorePattern {
3232
3333 enum SideEffect {
3434 case clearApplicationBadgeCount
35+ case observeNetworkConnectivity
36+ case observeSession
37+ case observeTheme
3538 case trackLoginScreen
3639 }
3740
3841 private( set) var state : State
3942 private var cancellables = Set < AnyCancellable > ( )
43+ private var isObservingNetworkConnectivity = false
44+ private var isObservingSession = false
45+ private var isObservingTheme = false
4046 private let sessionUseCase : ObserveAuthSessionUseCase
4147 private let networkConnectivityUseCase : ObserveNetworkConnectivityUseCase
4248 private let systemThemeUseCase : ObserveSystemThemeUseCase
@@ -53,10 +59,6 @@ final class RootViewModel: StorePattern {
5359 self . systemThemeUseCase = systemThemeUseCase
5460 self . trackAnalyticsEventUseCase = trackAnalyticsEventUseCase
5561 self . state = State ( )
56-
57- setupNetworkObserving ( )
58- setupSessionObserving ( )
59- setupThemeObserving ( )
6062 }
6163
6264 func reduce( with action: Action ) -> [ SideEffect ] {
@@ -65,7 +67,12 @@ final class RootViewModel: StorePattern {
6567
6668 switch action {
6769 case . onAppear:
68- effects = [ . clearApplicationBadgeCount]
70+ effects = [
71+ . clearApplicationBadgeCount,
72+ . observeNetworkConnectivity,
73+ . observeSession,
74+ . observeTheme
75+ ]
6976 case . setAlert( let isPresented) :
7077 setAlert ( & state, isPresented: isPresented)
7178 case . networkStatusChanged( let isConnected) :
@@ -91,6 +98,12 @@ final class RootViewModel: StorePattern {
9198 switch effect {
9299 case . clearApplicationBadgeCount:
93100 UNUserNotificationCenter . current ( ) . setBadgeCount ( 0 ) { _ in }
101+ case . observeNetworkConnectivity:
102+ setupNetworkObserving ( )
103+ case . observeSession:
104+ setupSessionObserving ( )
105+ case . observeTheme:
106+ setupThemeObserving ( )
94107 case . trackLoginScreen:
95108 trackAnalyticsEventUseCase. execute ( . screenView( " login " ) )
96109 }
@@ -109,6 +122,9 @@ private extension RootViewModel {
109122 }
110123
111124 func setupNetworkObserving( ) {
125+ guard !isObservingNetworkConnectivity else { return }
126+ isObservingNetworkConnectivity = true
127+
112128 networkConnectivityUseCase. observe ( )
113129 . receive ( on: DispatchQueue . main)
114130 . sink { [ weak self] isConnected in
@@ -118,6 +134,9 @@ private extension RootViewModel {
118134 }
119135
120136 func setupSessionObserving( ) {
137+ guard !isObservingSession else { return }
138+ isObservingSession = true
139+
121140 sessionUseCase. observe ( )
122141 . removeDuplicates ( )
123142 . receive ( on: DispatchQueue . main)
@@ -128,6 +147,9 @@ private extension RootViewModel {
128147 }
129148
130149 func setupThemeObserving( ) {
150+ guard !isObservingTheme else { return }
151+ isObservingTheme = true
152+
131153 systemThemeUseCase. observe ( )
132154 . removeDuplicates ( )
133155 . receive ( on: DispatchQueue . main)
0 commit comments