import SwiftUI @MainActor public struct NativeAccountsView: View { @ObservedObject private var connection: NativeConnection private let name: String private let symbol: String private let addAccount: (() -> Void)? @State private var adding = false public init(_ name: String, systemImage: String, connection: NativeConnection, addAccount: (() -> Void)? = nil) { self.addAccount = addAccount self.name = name self.symbol = systemImage self.connection = connection } public var body: some View { NavigationStack { List { ForEach(connection.accounts) { account in Button { connection.selectAccount(account) } label: { Label { VStack(alignment: .leading) { Text(verbatim: account.name).foregroundStyle(.primary) Text(verbatim: account.origin.host ?? account.origin.absoluteString) .font(.caption).foregroundStyle(.secondary) } } icon: { Image(systemName: "person.crop.circle") } } } Button("Add account", systemImage: "plus") { connection.accountName = "" connection.error = "" if let addAccount { addAccount() } else { adding = true } } if !connection.error.isEmpty { Text(connection.error).foregroundStyle(.red) } } .navigationTitle("Accounts") .sheet(isPresented: $adding, onDismiss: { connection.cancel() }) { NavigationStack { NativeSignInView(name, systemImage: symbol, connection: connection) .toolbar { ToolbarItem(placement: .cancellationAction) { Button("Cancel", role: .cancel) { adding = false } } } } } } } }