Add button to resend email (#690)

Make it work (<- we're here)
Make it right
Make it fast
This commit is contained in:
Nathan Mattes 2022-12-29 12:56:06 +01:00
parent 1f7298c6b9
commit de87424f53
2 changed files with 52 additions and 3 deletions

View File

@ -41,6 +41,19 @@ final class MastodonConfirmEmailViewController: UIViewController, NeedsDependenc
imageView.contentMode = .scaleAspectFit
return imageView
}()
let resendEmailButton: UIButton = {
var buttonConfiguration = UIButton.Configuration.plain()
buttonConfiguration.attributedTitle = try! AttributedString(markdown: "Didn't get a link? **Resend (10)**")
let button = UIButton(configuration: buttonConfiguration)
button.translatesAutoresizingMaskIntoConstraints = false
button.isEnabled = false
return button
}()
var resendButtonTimer: Timer?
}
extension MastodonConfirmEmailViewController {
@ -52,6 +65,8 @@ extension MastodonConfirmEmailViewController {
subtitleLabel.text = L10n.Scene.ConfirmEmail.tapTheLinkWeEmailedToYouToVerifyYourAccount(viewModel.email)
resendEmailButton.addTarget(self, action: #selector(MastodonConfirmEmailViewController.resendButtonPressed(_:)), for: .touchUpInside)
// stackView
stackView.axis = .vertical
stackView.distribution = .fill
@ -60,6 +75,7 @@ extension MastodonConfirmEmailViewController {
stackView.isLayoutMarginsRelativeArrangement = true
stackView.addArrangedSubview(subtitleLabel)
stackView.addArrangedSubview(emailImageView)
stackView.addArrangedSubview(resendEmailButton)
emailImageView.setContentHuggingPriority(.defaultLow, for: .vertical)
emailImageView.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
@ -121,7 +137,42 @@ extension MastodonConfirmEmailViewController {
configureMargin()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// start timer
let nowIn60Seconds = Date().addingTimeInterval(10)
let timer = Timer(timeInterval: 1.0, repeats: true) { [weak self] in
guard Date() < nowIn60Seconds else {
// enable button
self?.resendEmailButton.isEnabled = true
var configuration = self?.resendEmailButton.configuration
let attributedTitle = try! AttributedString(markdown: "Didn't get a link? **Resend**")
configuration?.attributedTitle = attributedTitle
self?.resendEmailButton.configuration = configuration
self?.resendEmailButton.setNeedsUpdateConfiguration()
$0.invalidate()
return
}
//TODO: @zeitschlag Add localization
//TODO: @zeitschlag Add styling
var configuration = self?.resendEmailButton.configuration
let attributedTitle = try! AttributedString(markdown: "Didn't get a link? **Resend (\(Int(nowIn60Seconds.timeIntervalSinceNow) + 1))**")
configuration?.attributedTitle = attributedTitle
self?.resendEmailButton.configuration = configuration
self?.resendEmailButton.setNeedsUpdateConfiguration()
}
RunLoop.main.add(timer, forMode: .default)
// self.resendButtonTimer = timer
}
}
extension MastodonConfirmEmailViewController {

View File

@ -627,8 +627,6 @@ public enum L10n {
/// Check Your Inbox
public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.Title", fallback: "Check Your Inbox")
public enum Button {
/// Open Email App
public static let openEmailApp = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.OpenEmailApp", fallback: "Open Email App")
/// Resend
public static let resend = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.Resend", fallback: "Resend")
}