// // SettingsCredentialsAccountView.swift // Multiplatform iOS // // Created by Rizwan on 21/07/20. // Copyright © 2020 Ranchero Software. All rights reserved. // import SwiftUI import Account struct SettingsCredentialsAccountView: View { @Environment(\.presentationMode) var presentationMode @ObservedObject var settingsModel: SettingsCredentialsAccountModel init(account: Account) { self.settingsModel = SettingsCredentialsAccountModel(account: account) } init(accountType: AccountType) { self.settingsModel = SettingsCredentialsAccountModel(accountType: accountType) } var body: some View { NavigationView { List { Section(header: AccountHeaderImageView(image: AppAssets.image(for: settingsModel.accountType)!)) { TextField(settingsModel.emailText, text: $settingsModel.email).textContentType(.emailAddress) HStack { if settingsModel.showPassword { TextField("Password", text:$settingsModel.password) } else { SecureField("Password", text: $settingsModel.password) } Button(action: { settingsModel.showPassword.toggle() }) { Text(settingsModel.showPassword ? "Hide" : "Show") } } if settingsModel.apiUrlEnabled { TextField("API URL", text: $settingsModel.apiUrl) } } Section(footer: errorFooter) { HStack { Spacer() Button(action: { settingsModel.addAccount() }) { if settingsModel.isUpdate { Text("Update Account") } else { Text("Add Account") } } .disabled(!settingsModel.isValid) Spacer() if settingsModel.busy { ProgressView() } } } } .listStyle(InsetGroupedListStyle()) .disabled(settingsModel.busy) .onReceive(settingsModel.$shouldDismiss, perform: { dismiss in if dismiss == true { presentationMode.wrappedValue.dismiss() } }) .navigationBarTitle(Text(verbatim: settingsModel.accountName), displayMode: .inline) .navigationBarItems(leading: Button(action: { self.dismiss() }) { Text("Cancel") } ) } } var errorFooter: some View { HStack { Spacer() if settingsModel.showError { Text(verbatim: settingsModel.accountCredentialsError!.description).foregroundColor(.red) } Spacer() } } private func dismiss() { presentationMode.wrappedValue.dismiss() } } struct SettingsCredentialsAccountView_Previews: PreviewProvider { static var previews: some View { SettingsCredentialsAccountView(accountType: .feedbin) } }