iOS, Add Folder: Make sure Account Name field is in sync with selected account in picker

This commit is contained in:
austinate 2019-12-23 17:20:52 +02:00
parent df642c128a
commit f43e7880f7
1 changed files with 32 additions and 15 deletions

View File

@ -20,7 +20,22 @@ class AddFolderViewController: UITableViewController, AddContainerViewController
return accounts.count > 1 return accounts.count > 1
} }
private var accounts: [Account]! private var accounts: [Account]! {
didSet {
if let predefinedAccount = accounts.first(where: { $0.accountID == AppDefaults.addFolderAccountID }) {
selectedAccount = predefinedAccount
} else {
selectedAccount = accounts[0]
}
}
}
private var selectedAccount: Account! {
didSet {
guard selectedAccount != oldValue else { return }
accountLabel.text = selectedAccount.flatMap { ($0 as DisplayNameProvider).nameForDisplay }
}
}
weak var delegate: AddContainerViewControllerChildDelegate? weak var delegate: AddContainerViewControllerChildDelegate?
@ -32,13 +47,11 @@ class AddFolderViewController: UITableViewController, AddContainerViewController
nameTextField.delegate = self nameTextField.delegate = self
accountLabel.text = (accounts[0] as DisplayNameProvider).nameForDisplay
if shouldDisplayPicker { if shouldDisplayPicker {
accountPickerView.dataSource = self accountPickerView.dataSource = self
accountPickerView.delegate = self accountPickerView.delegate = self
if let index = accounts.firstIndex(where: { $0.accountID == AppDefaults.addFolderAccountID }) { if let index = accounts.firstIndex(of: selectedAccount) {
accountPickerView.selectRow(index, inComponent: 0, animated: false) accountPickerView.selectRow(index, inComponent: 0, animated: false)
} }
@ -52,21 +65,26 @@ class AddFolderViewController: UITableViewController, AddContainerViewController
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange(_:)), name: UITextField.textDidChangeNotification, object: nameTextField) NotificationCenter.default.addObserver(self, selector: #selector(textDidChange(_:)), name: UITextField.textDidChangeNotification, object: nameTextField)
} }
private func didSelect(_ account: Account) {
AppDefaults.addFolderAccountID = account.accountID
selectedAccount = account
}
func cancel() { func cancel() {
delegate?.processingDidEnd() delegate?.processingDidEnd()
} }
func add() { func add() {
let account = accounts[accountPickerView.selectedRow(inComponent: 0)] guard let folderName = nameTextField.text else {
if let folderName = nameTextField.text { return
account.addFolder(folderName) { result in }
switch result { selectedAccount.addFolder(folderName) { result in
case .success: switch result {
self.delegate?.processingDidEnd() case .success:
case .failure(let error): self.delegate?.processingDidEnd()
self.presentError(error) case .failure(let error):
} self.presentError(error)
} }
} }
} }
@ -100,8 +118,7 @@ extension AddFolderViewController: UIPickerViewDataSource, UIPickerViewDelegate
} }
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
accountLabel.text = (accounts[row] as DisplayNameProvider).nameForDisplay didSelect(accounts[row])
AppDefaults.addFolderAccountID = accounts[row].accountID
} }
} }