diff options
| author | Christian Cleberg <[email protected]> | 2026-03-24 21:48:23 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-03-24 21:48:23 -0500 |
| commit | cf587aa0573ac4f34e1effe70108a9eca82093ac (patch) | |
| tree | 833e6f4961522e35b08af01b5f012983f8e34678 /Rune/Views/Onboarding/OnboardingView.swift | |
| download | rune-cf587aa0573ac4f34e1effe70108a9eca82093ac.tar.gz rune-cf587aa0573ac4f34e1effe70108a9eca82093ac.tar.bz2 rune-cf587aa0573ac4f34e1effe70108a9eca82093ac.zip | |
v1.0v1.0.0
Diffstat (limited to 'Rune/Views/Onboarding/OnboardingView.swift')
| -rw-r--r-- | Rune/Views/Onboarding/OnboardingView.swift | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Rune/Views/Onboarding/OnboardingView.swift b/Rune/Views/Onboarding/OnboardingView.swift new file mode 100644 index 0000000..3fba6c9 --- /dev/null +++ b/Rune/Views/Onboarding/OnboardingView.swift @@ -0,0 +1,60 @@ +import SwiftUI + +struct OnboardingView: View { + @ObservedObject var viewModel: SettingsViewModel + + @State private var token = "" + @State private var isSubmitting = false + @State private var localErrorMessage: String? + + var body: some View { + NavigationStack { + Form { + Section { + SecureField("Enter Njalla API token", text: $token) + .textInputAutocapitalization(.never) + .autocorrectionDisabled() + + Button("Validate and Save") { + Task { + await submit() + } + } + .disabled(isSubmitting || token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) + } header: { + Text("API Token") + } footer: { + Text("Rune validates the token with `get-balance` before saving it to Keychain.") + } + + if let localErrorMessage { + Section { + Text(localErrorMessage) + .foregroundStyle(.red) + } + } + } + .navigationTitle("Welcome") + .overlay { + if isSubmitting { + ProgressView() + .controlSize(.large) + } + } + } + } + + private func submit() async { + isSubmitting = true + defer { + isSubmitting = false + } + + do { + try await viewModel.login(token: token) + localErrorMessage = nil + } catch { + localErrorMessage = error.localizedDescription + } + } +} |
