// PreferencesView.swift // Tusker // // Created by Shadowfacts on 6/13/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import SwiftUI struct PreferencesView: View { @ObservedObject var localData = LocalData.shared @State private var showingLogoutConfirmation = false var body: some View { // workaround: the navigation view is provided by MyProfileTableViewController so that it can inject the Done button // NavigationView { List { Section(header: Text("Accounts")) { ForEach(localData.accounts, id: \.accessToken) { (account) in Button(action: { NotificationCenter.default.post(name: .activateAccount, object: nil, userInfo: ["account": account]) }) { HStack { LocalAccountAvatarView(localAccountInfo: account) VStack(alignment: .leading) { Text(verbatim: account.username) .foregroundColor(.primary) Text(verbatim: account.instanceURL.host!) .font(.caption) .foregroundColor(.primary) } Spacer() if account == self.localData.getMostRecentAccount() { Image(systemName: "checkmark") .renderingMode(.template) .foregroundColor(.secondary) } } } }.onDelete { (indices: IndexSet) in var indices = indices var logoutFromCurrent = false if let index = indices.first(where: { localData.accounts[$0] == localData.getMostRecentAccount() }) { logoutFromCurrent = true indices.remove(index) } localData.accounts.remove(atOffsets: indices) if logoutFromCurrent { self.logoutPressed() } } Button(action: { NotificationCenter.default.post(name: .addAccount, object: nil) }) { Text("Add Account...") } if localData.getMostRecentAccount() != nil { Button(action: { self.showingLogoutConfirmation = true }) { Text("Logout from current") }.alert(isPresented: $showingLogoutConfirmation) { Alert(title: Text("Are you sure you want to logout?"), message: nil, primaryButton: .destructive(Text("Logout"), action: self.logoutPressed), secondaryButton: .cancel()) } } } Section { NavigationLink(destination: AppearancePrefsView()) { Text("Appearance") } NavigationLink(destination: ComposingPrefsView()) { Text("Composing") } NavigationLink(destination: MediaPrefsView()) { Text("Media") } NavigationLink(destination: BehaviorPrefsView()) { Text("Behavior") } NavigationLink(destination: WellnessPrefsView()) { Text("Digital Wellness") } NavigationLink(destination: AdvancedPrefsView()) { Text("Advanced") } } } .listStyle(InsetGroupedListStyle()) .navigationBarTitle(Text("Preferences"), displayMode: .inline) // } } func logoutPressed() { NotificationCenter.default.post(name: .userLoggedOut, object: nil) } } #if DEBUG struct PreferencesView_Previews : PreviewProvider { static var previews: some View { return PreferencesView() } } #endif