From 39a71077b4100606a5c39e38fa0cd430952936f1 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Tue, 14 Jul 2020 10:44:59 +0800 Subject: [PATCH] WiP on Edit Account --- .../Accounts/AccountsPreferencesModel.swift | 36 ++++++++- .../Accounts/AccountsPreferencesView.swift | 9 +-- .../Accounts/EditAccountView.swift | 79 +++++++++++++++++++ NetNewsWire.xcodeproj/project.pbxproj | 4 + 4 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 Multiplatform/macOS/Preferences/Preference Panes/Accounts/EditAccountView.swift diff --git a/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesModel.swift b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesModel.swift index e680d476b..8fdf7ecbb 100644 --- a/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesModel.swift +++ b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesModel.swift @@ -12,10 +12,32 @@ import Combine class AccountsPreferencesModel: ObservableObject { + // Configured Accounts @Published var sortedAccounts: [Account] = [] - @Published var selectedConfiguredAccountID: String? = nil + @Published var selectedConfiguredAccountID: String? = AccountManager.shared.defaultAccount.accountID { + didSet { + if let accountID = selectedConfiguredAccountID { + account = sortedAccounts.first(where: { $0.accountID == accountID }) + accountIsActive = account?.isActive ?? false + accountName = account?.name ?? "" + } + } + } @Published var showAddAccountView: Bool = false + // Edit Account + public private(set) var account: Account? + @Published var accountIsActive: Bool = false { + didSet { + account?.isActive = accountIsActive + } + } + @Published var accountName: String = "" { + didSet { + account?.name = accountName + } + } + var selectedAccountIsDefault: Bool { guard let selected = selectedConfiguredAccountID else { return true @@ -39,6 +61,18 @@ class AccountsPreferencesModel: ObservableObject { NotificationCenter.default.publisher(for: .UserDidDeleteAccount).sink(receiveValue: { _ in self.selectedConfiguredAccountID = nil self.sortedAccounts = AccountManager.shared.sortedAccounts + self.selectedConfiguredAccountID = AccountManager.shared.defaultAccount.accountID + }).store(in: ¬ificationSubscriptions) + + NotificationCenter.default.publisher(for: .AccountStateDidChange).sink(receiveValue: { notification in + guard let account = notification.object as? Account else { + return + } + if account.accountID == self.account?.accountID { + self.account = account + self.accountIsActive = account.isActive + self.accountName = account.name ?? "" + } }).store(in: ¬ificationSubscriptions) } diff --git a/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesView.swift b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesView.swift index 19eeca92a..858efc679 100644 --- a/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesView.swift +++ b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/AccountsPreferencesView.swift @@ -27,12 +27,11 @@ struct AccountsPreferencesView: View { bottomButtonStack }, alignment: .bottom) } - .frame(width: 225, height: 300, alignment: .leading) + .frame(width: 160, height: 300, alignment: .leading) .border(Color.gray, width: 1) - VStack(alignment: .leading) { - EmptyView() - Spacer() - }.frame(width: 225, height: 300, alignment: .leading) + + EditAccountView(viewModel: viewModel) + .frame(height: 300, alignment: .leading) } Spacer() }.sheet(isPresented: $viewModel.showAddAccountView, diff --git a/Multiplatform/macOS/Preferences/Preference Panes/Accounts/EditAccountView.swift b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/EditAccountView.swift new file mode 100644 index 000000000..e45650de0 --- /dev/null +++ b/Multiplatform/macOS/Preferences/Preference Panes/Accounts/EditAccountView.swift @@ -0,0 +1,79 @@ +// +// EditAccountView.swift +// Multiplatform macOS +// +// Created by Stuart Breckenridge on 14/7/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import SwiftUI +import Account +import Combine + +struct EditAccountView: View { + + @ObservedObject var viewModel: AccountsPreferencesModel + + var body: some View { + + ZStack { + RoundedRectangle(cornerRadius: 8, style: .circular) + .foregroundColor(Color.secondary.opacity(0.1)) + + VStack { + HStack { + Spacer() + Button("Account Information", action: {}) + Spacer() + }.padding(4) + + if viewModel.account != nil { + Form(content: { + HStack(alignment: .top) { + Text("Type: ") + .frame(width: 50) + VStack(alignment: .leading) { + Text(viewModel.account!.defaultName) + Toggle("Active", isOn: $viewModel.accountIsActive) + } + } + + HStack(alignment: .top) { + Text("Name: ") + .frame(width: 50) + VStack(alignment: .leading) { + TextField(viewModel.account!.name ?? "", text: $viewModel.accountName) + .textFieldStyle(RoundedBorderTextFieldStyle()) + Text("The name appears in the sidebar. It can be anything you want. You can even use emoji. 🎸") + .foregroundColor(.secondary) + } + } + Spacer() + if viewModel.account?.type != .onMyMac { + HStack { + Spacer() + Button("Credentials", action: { + + }) + Spacer() + } + } + + + + }).padding() + } + + Spacer() + } + } + } + + +} + +struct EditAccountView_Previews: PreviewProvider { + static var previews: some View { + EditAccountView(viewModel: AccountsPreferencesModel()) + } +} diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 8499a03f0..86e7de53d 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 1769E32724BC5B6C000E1E8E /* AddAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E32624BC5B6C000E1E8E /* AddAccountModel.swift */; }; 1769E32924BCAFC7000E1E8E /* AddAccountPickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E32824BCAFC7000E1E8E /* AddAccountPickerRow.swift */; }; 1769E32B24BCB030000E1E8E /* ConfiguredAccountRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E32A24BCB030000E1E8E /* ConfiguredAccountRow.swift */; }; + 1769E32D24BD20A0000E1E8E /* EditAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E32C24BD20A0000E1E8E /* EditAccountView.swift */; }; 1776E88E24AC5F8A00E78166 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1776E88D24AC5F8A00E78166 /* AppDefaults.swift */; }; 1776E88F24AC5F8A00E78166 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1776E88D24AC5F8A00E78166 /* AppDefaults.swift */; }; 17930ED424AF10EE00A9BA52 /* AddWebFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17930ED324AF10EE00A9BA52 /* AddWebFeedView.swift */; }; @@ -1798,6 +1799,7 @@ 1769E32624BC5B6C000E1E8E /* AddAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountModel.swift; sourceTree = ""; }; 1769E32824BCAFC7000E1E8E /* AddAccountPickerRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountPickerRow.swift; sourceTree = ""; }; 1769E32A24BCB030000E1E8E /* ConfiguredAccountRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfiguredAccountRow.swift; sourceTree = ""; }; + 1769E32C24BD20A0000E1E8E /* EditAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccountView.swift; sourceTree = ""; }; 1776E88D24AC5F8A00E78166 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDefaults.swift; sourceTree = ""; }; 17930ED324AF10EE00A9BA52 /* AddWebFeedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedView.swift; sourceTree = ""; }; 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsNewsBlurWindowController.swift; sourceTree = ""; }; @@ -2546,6 +2548,7 @@ 1769E32124BC5925000E1E8E /* AccountsPreferencesModel.swift */, 1729529024AA1CAA00D65E66 /* AccountsPreferencesView.swift */, 1769E32A24BCB030000E1E8E /* ConfiguredAccountRow.swift */, + 1769E32C24BD20A0000E1E8E /* EditAccountView.swift */, 1769E32324BC5A50000E1E8E /* Add Account */, ); path = Accounts; @@ -5219,6 +5222,7 @@ 1729529724AA1CD000D65E66 /* MacPreferencesView.swift in Sources */, 51E4994C24A8734C00B667CB /* RedditFeedProvider-Extensions.swift in Sources */, 1729529324AA1CAA00D65E66 /* AccountsPreferencesView.swift in Sources */, + 1769E32D24BD20A0000E1E8E /* EditAccountView.swift in Sources */, 51919FAD24AA8CCA00541E64 /* UnreadCountView.swift in Sources */, 51E498C924A8085D00B667CB /* PseudoFeed.swift in Sources */, 51E498FC24A808BA00B667CB /* FaviconURLFinder.swift in Sources */,