From 6e7f2c98cd6934d0857ffbfd6dd1ae8137b8ca4b Mon Sep 17 00:00:00 2001 From: Jamil Date: Wed, 27 Mar 2024 07:37:30 -0700 Subject: [PATCH] fix(apple): Debounce sign in button (#4334) The handler for opening the webview can sometimes take a few seconds, so this is to prevent users from accidentally double-tapping the sign in button. --- .../Sources/FirezoneKit/Features/AuthView.swift | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/swift/apple/FirezoneKit/Sources/FirezoneKit/Features/AuthView.swift b/swift/apple/FirezoneKit/Sources/FirezoneKit/Features/AuthView.swift index ee310abf6..085f982c3 100644 --- a/swift/apple/FirezoneKit/Sources/FirezoneKit/Features/AuthView.swift +++ b/swift/apple/FirezoneKit/Sources/FirezoneKit/Features/AuthView.swift @@ -35,6 +35,9 @@ final class AuthViewModel: ObservableObject { struct AuthView: View { @ObservedObject var model: AuthViewModel + // Debounce button taps + @State private var tapped = false + var body: some View { VStack( alignment: .center, @@ -47,10 +50,19 @@ struct AuthView: View { .padding(.horizontal, 10) Spacer() Button("Sign in") { - Task { - await model.signInButtonTapped() + if !tapped { + tapped = true + + DispatchQueue.main.async { + Task { await model.signInButtonTapped() } + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + tapped = false + } } } + .disabled(tapped) .buttonStyle(.borderedProminent) .controlSize(.large) Spacer()