@@ -148,12 +148,7 @@ class AppController {
148
148
}
149
149
150
150
case let . deletePersistentToken( persistentToken, failure) :
151
- do {
152
- try store. deletePersistentToken ( persistentToken)
153
- updateView ( )
154
- } catch {
155
- handleEvent ( failure ( error) )
156
- }
151
+ confirmDeletion ( of: persistentToken, failure: failure)
157
152
158
153
case let . showErrorMessage( message) :
159
154
SVProgressHUD . showError ( withStatus: message)
@@ -205,6 +200,44 @@ class AppController {
205
200
func addTokenFromURL( _ token: Token ) {
206
201
handleAction ( . addTokenFromURL( token) )
207
202
}
203
+
204
+ private func confirmDeletion( of persistentToken: PersistentToken , failure: @escaping ( Error ) -> Root . Event ) {
205
+ let messagePrefix = persistentToken. token. displayName. map ( { " The token “ \( $0) ” " } ) ?? " The unnamed token "
206
+ let message = messagePrefix + " will be permanently deleted from this device. "
207
+
208
+ let alert = UIAlertController ( title: " Delete Token? " , message: message, preferredStyle: . alert)
209
+ alert. addAction ( UIAlertAction ( title: " Delete " , style: . destructive, handler: { [ weak self] _ in
210
+ self ? . permanentlyDelete ( persistentToken, failure: failure)
211
+ } ) )
212
+ alert. addAction ( UIAlertAction ( title: " Cancel " , style: . cancel) )
213
+
214
+ let presenter = topViewController ( presentedFrom: rootViewController)
215
+ presenter. present ( alert, animated: true )
216
+ }
217
+
218
+ private func permanentlyDelete( _ persistentToken: PersistentToken , failure: @escaping ( Error ) -> Root . Event ) {
219
+ do {
220
+ try store. deletePersistentToken ( persistentToken)
221
+ updateView ( )
222
+ } catch {
223
+ handleEvent ( failure ( error) )
224
+ }
225
+ }
226
+ }
227
+
228
+ private extension Token {
229
+ var displayName : String ? {
230
+ switch ( !name. isEmpty, !issuer. isEmpty) {
231
+ case ( true , true ) :
232
+ return " \( issuer) : \( name) "
233
+ case ( true , false ) :
234
+ return name
235
+ case ( false , true ) :
236
+ return issuer
237
+ case ( false , false ) :
238
+ return nil
239
+ }
240
+ }
208
241
}
209
242
210
243
private extension DisplayTime {
0 commit comments