@@ -54,8 +54,8 @@ struct Root: Component {
54
54
}
55
55
}
56
56
57
- init ( persistentTokens : [ PersistentToken ] , displayTime : DisplayTime , deviceCanScan: Bool ) {
58
- tokenList = TokenList ( persistentTokens : persistentTokens , displayTime : displayTime )
57
+ init ( deviceCanScan: Bool ) {
58
+ tokenList = TokenList ( )
59
59
modal = . none
60
60
self . deviceCanScan = deviceCanScan
61
61
}
@@ -66,9 +66,9 @@ struct Root: Component {
66
66
extension Root {
67
67
typealias ViewModel = RootViewModel
68
68
69
- var viewModel : ViewModel {
69
+ func viewModel( for persistentTokens : [ PersistentToken ] , at displayTime : DisplayTime ) -> ViewModel {
70
70
return ViewModel (
71
- tokenList: tokenList. viewModel,
71
+ tokenList: tokenList. viewModel ( for : persistentTokens , at : displayTime ) ,
72
72
modal: modal. viewModel
73
73
)
74
74
}
@@ -89,35 +89,32 @@ extension Root {
89
89
}
90
90
91
91
enum Event {
92
- case tokenListEvent( TokenList . Event )
93
- case updateDisplayTime( DisplayTime )
94
-
95
- case addTokenFromURLSucceeded( [ PersistentToken ] )
96
-
97
- case tokenFormSucceeded( [ PersistentToken ] )
92
+ case addTokenFromURLSucceeded
93
+ case tokenFormSucceeded
98
94
99
95
case addTokenFailed( Error )
100
96
case saveTokenFailed( Error )
97
+ case updateTokenFailed( Error )
98
+ case moveTokenFailed( Error )
99
+ case deleteTokenFailed( Error )
101
100
}
102
101
103
102
enum Effect {
104
103
case addToken( Token ,
105
- success: ( [ PersistentToken ] ) -> Event ,
104
+ success: Event ,
106
105
failure: ( Error ) -> Event )
107
106
108
107
case saveToken( Token , PersistentToken ,
109
- success: ( [ PersistentToken ] ) -> Event ,
108
+ success: Event ,
110
109
failure: ( Error ) -> Event )
111
110
112
111
case updatePersistentToken( PersistentToken ,
113
- success: ( [ PersistentToken ] ) -> Event ,
114
112
failure: ( Error ) -> Event )
115
113
116
114
case moveToken( fromIndex: Int , toIndex: Int ,
117
- success : ( [ PersistentToken ] ) -> Event )
115
+ failure : ( Error ) -> Event )
118
116
119
117
case deletePersistentToken( PersistentToken ,
120
- success: ( [ PersistentToken ] ) -> Event ,
121
118
failure: ( Error ) -> Event )
122
119
123
120
case showErrorMessage( String )
@@ -166,31 +163,24 @@ extension Root {
166
163
167
164
mutating func update( _ event: Event ) -> Effect ? {
168
165
switch event {
169
- case . tokenListEvent( let event) :
170
- return handleTokenListEvent ( event)
171
-
172
- case . updateDisplayTime( let displayTime) :
173
- return handleTokenListEvent ( . updateDisplayTime( displayTime) )
174
-
175
- case . addTokenFromURLSucceeded( let persistentTokens) :
176
- return handleTokenListEvent ( . tokenChangeSucceeded( persistentTokens) )
166
+ case . addTokenFromURLSucceeded:
167
+ return nil
177
168
178
- case . tokenFormSucceeded( let persistentTokens ) :
169
+ case . tokenFormSucceeded:
179
170
// Dismiss the modal form.
180
171
modal = . none
181
- return handleTokenListEvent ( . tokenChangeSucceeded ( persistentTokens ) )
172
+ return nil
182
173
183
174
case . addTokenFailed:
184
175
return . showErrorMessage( " Failed to add token. " )
185
176
case . saveTokenFailed:
186
177
return . showErrorMessage( " Failed to save token. " )
187
- }
188
- }
189
-
190
- private mutating func handleTokenListEvent( _ event: TokenList . Event ) -> Effect ? {
191
- let effect = tokenList. update ( event)
192
- return effect. flatMap { effect in
193
- handleTokenListEffect ( effect)
178
+ case . updateTokenFailed:
179
+ return . showErrorMessage( " Failed to update token. " )
180
+ case . moveTokenFailed:
181
+ return . showErrorMessage( " Failed to move token. " )
182
+ case . deleteTokenFailed:
183
+ return . showErrorMessage( " Failed to delete token. " )
194
184
}
195
185
}
196
186
@@ -209,19 +199,17 @@ extension Root {
209
199
modal = . editForm( form)
210
200
return nil
211
201
212
- case let . updateToken( persistentToken, success , failure ) :
202
+ case let . updateToken( persistentToken) :
213
203
return . updatePersistentToken( persistentToken,
214
- success: compose ( success, Event . tokenListEvent) ,
215
- failure: compose ( failure, Event . tokenListEvent) )
204
+ failure: Event . updateTokenFailed)
216
205
217
- case let . moveToken( fromIndex, toIndex, success ) :
206
+ case let . moveToken( fromIndex, toIndex) :
218
207
return . moveToken( fromIndex: fromIndex, toIndex: toIndex,
219
- success : compose ( success , Event . tokenListEvent ) )
208
+ failure : Event . moveTokenFailed )
220
209
221
- case let . deletePersistentToken( persistentToken, success , failure ) :
210
+ case let . deletePersistentToken( persistentToken) :
222
211
return . deletePersistentToken( persistentToken,
223
- success: compose ( success, Event . tokenListEvent) ,
224
- failure: compose ( failure, Event . tokenListEvent) )
212
+ failure: Event . deleteTokenFailed)
225
213
226
214
case . showErrorMessage( let message) :
227
215
return . showErrorMessage( message)
@@ -349,7 +337,3 @@ private extension Root.Modal {
349
337
return result
350
338
}
351
339
}
352
-
353
- private func compose< A, B, C> ( _ transform: @escaping ( A ) -> B , _ handler: @escaping ( B ) -> C ) -> ( A ) -> C {
354
- return { handler ( transform ( $0) ) }
355
- }
0 commit comments