Skip to content

Commit 9fc8946

Browse files
authored
Merge pull request #217 from mattrubin/feature/confirm-before-delete
Asks user for confirmation before deleting token from device
2 parents 5bc9f54 + 54c2b6c commit 9fc8946

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

Authenticator/Source/AppController.swift

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,7 @@ class AppController {
148148
}
149149

150150
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)
157152

158153
case let .showErrorMessage(message):
159154
SVProgressHUD.showError(withStatus: message)
@@ -205,6 +200,44 @@ class AppController {
205200
func addTokenFromURL(_ token: Token) {
206201
handleAction(.addTokenFromURL(token))
207202
}
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+
}
208241
}
209242

210243
private extension DisplayTime {

0 commit comments

Comments
 (0)