diff options
author | Shav Kinderlehrer <[email protected]> | 2023-12-12 17:09:15 -0500 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2023-12-12 17:09:15 -0500 |
commit | fbb37567460b689f01eb8a8717b9ac8673652c28 (patch) | |
tree | b6517179cb849732efb8660edfa9899456420d3b /Jel/Views/SignIn/SignInToServerView.swift | |
parent | 02fc87fe2588cdca5188cf1a6d338ce83de65a43 (diff) | |
download | jel-fbb37567460b689f01eb8a8717b9ac8673652c28.tar.gz jel-fbb37567460b689f01eb8a8717b9ac8673652c28.zip |
Implement signIn flow
Diffstat (limited to 'Jel/Views/SignIn/SignInToServerView.swift')
-rw-r--r-- | Jel/Views/SignIn/SignInToServerView.swift | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Jel/Views/SignIn/SignInToServerView.swift b/Jel/Views/SignIn/SignInToServerView.swift new file mode 100644 index 0000000..ae8d82d --- /dev/null +++ b/Jel/Views/SignIn/SignInToServerView.swift @@ -0,0 +1,79 @@ +// +// SignInToServerView.swift +// Jel +// +// Created by zerocool on 12/12/23. +// + +import SwiftUI + +struct SignInToServerView: View { + @EnvironmentObject var jellyfinClient: JellyfinClientController + @ObservedObject var authState: AuthStateController + + @State var username: String = "" + @State var password: String = "" + + @State var isLoading: Bool = false + @State var hasError: Bool = false + + var body: some View { + VStack { + Text("Sign in") + .font(.title) + TextField(text: $username) { + Text("Username") + } + .textContentType(.username) + + SecureField(text: $password) { + Text("Password") + } + .textContentType(.password) + .onSubmit { + Task { + await logInToServer() + } + } + + if !isLoading { + Button { + Task { + await logInToServer() + } + } label: { + Text("Sign in") + } + .disabled(username.isEmpty || password.isEmpty) + } else { + ProgressView() + .progressViewStyle(.circular) + } + + if hasError { + Text("Unable to sign in") + .font(.callout) + .foregroundStyle(.red) + } + } + .padding() + .textFieldStyle(.roundedBorder) + .textInputAutocapitalization(.never) + .disabled(isLoading) + } + + func logInToServer() async { + isLoading = true + hasError = false + do { + try await jellyfinClient.signIn(username: username, pw: password) + } catch { + hasError = true + } + isLoading = false + } +} + +#Preview { + SignInToServerView(authState: AuthStateController()) +} |