mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-09 00:28:53 +01:00
If a single sync failure is encountered a sheet is presented which allows the user to update their credentials. If multiple sync failures are encountered an alert is shown listing the accounts which encountered errors. On iOS, this alert can take the user into Settings, but there is no obvious way to programatically pesent macOS preferences.
95 lines
2.6 KiB
Swift
95 lines
2.6 KiB
Swift
//
|
|
// EditAccountCredentialsView.swift
|
|
// Multiplatform macOS
|
|
//
|
|
// Created by Stuart Breckenridge on 14/7/20.
|
|
// Copyright © 2020 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import Secrets
|
|
|
|
struct EditAccountCredentialsView: View {
|
|
|
|
@Environment(\.presentationMode) var presentationMode
|
|
@StateObject private var editModel = EditAccountCredentialsModel()
|
|
@ObservedObject var viewModel: AccountsPreferencesModel
|
|
|
|
var body: some View {
|
|
Form {
|
|
HStack {
|
|
Spacer()
|
|
Image(rsImage: viewModel.account!.smallIcon!.image)
|
|
.resizable()
|
|
.frame(width: 30, height: 30)
|
|
Text(viewModel.account?.nameForDisplay ?? "")
|
|
Spacer()
|
|
}.padding()
|
|
|
|
HStack(alignment: .center) {
|
|
VStack(alignment: .trailing, spacing: 12) {
|
|
Text("Username: ")
|
|
Text("Password: ")
|
|
if viewModel.account?.type == .freshRSS {
|
|
Text("API URL: ")
|
|
}
|
|
}.frame(width: 75)
|
|
|
|
VStack(alignment: .leading, spacing: 12) {
|
|
TextField("Username", text: $editModel.userName)
|
|
SecureField("Password", text: $editModel.password)
|
|
if viewModel.account?.type == .freshRSS {
|
|
TextField("API URL", text: $editModel.apiUrl)
|
|
}
|
|
}
|
|
}.textFieldStyle(RoundedBorderTextFieldStyle())
|
|
|
|
Spacer()
|
|
HStack{
|
|
if editModel.accountIsUpdatingCredentials {
|
|
ProgressView("Updating")
|
|
}
|
|
Spacer()
|
|
Button("Cancel", action: {
|
|
presentationMode.wrappedValue.dismiss()
|
|
})
|
|
if viewModel.account?.type != .freshRSS {
|
|
Button("Update", action: {
|
|
editModel.updateAccountCredentials(viewModel.account!)
|
|
}).disabled(editModel.userName.count == 0 || editModel.password.count == 0)
|
|
} else {
|
|
Button("Update", action: {
|
|
editModel.updateAccountCredentials(viewModel.account!)
|
|
}).disabled(editModel.userName.count == 0 || editModel.password.count == 0 || editModel.apiUrl.count == 0)
|
|
}
|
|
|
|
}
|
|
}.onAppear {
|
|
editModel.retrieveCredentials(viewModel.account!)
|
|
}
|
|
.onChange(of: editModel.accountCredentialsWereUpdated) { value in
|
|
if value == true {
|
|
viewModel.sheetToShow = .none
|
|
presentationMode.wrappedValue.dismiss()
|
|
}
|
|
}
|
|
.alert(isPresented: $editModel.showError) {
|
|
Alert(title: Text("Error Adding Account"),
|
|
message: Text(editModel.error.description),
|
|
dismissButton: .default(Text("Dismiss"),
|
|
action: {
|
|
editModel.error = .none
|
|
}))
|
|
}
|
|
.frame(idealWidth: 300, idealHeight: 200, alignment: .top)
|
|
.padding()
|
|
}
|
|
}
|
|
|
|
struct EditAccountCredentials_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
EditAccountCredentialsView(viewModel: AccountsPreferencesModel())
|
|
}
|
|
}
|
|
|