130 lines
2.9 KiB
Swift
130 lines
2.9 KiB
Swift
//
|
|
// SettingsDetailAccountView.swift
|
|
// NetNewsWire
|
|
//
|
|
// Created by Maurice Parker on 6/13/19.
|
|
// Copyright © 2019 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import Combine
|
|
import Account
|
|
import RSWeb
|
|
|
|
struct SettingsDetailAccountView : View {
|
|
@ObjectBinding var viewModel: ViewModel
|
|
@State private var verifyDelete = false
|
|
@State private var showFeedbinCredentials = false
|
|
|
|
var body: some View {
|
|
Form {
|
|
Section {
|
|
HStack {
|
|
Text("Name")
|
|
Divider()
|
|
TextField($viewModel.name, placeholder: Text("(Optional)"))
|
|
}
|
|
Toggle(isOn: $viewModel.isActive) {
|
|
Text("Active")
|
|
}
|
|
}
|
|
if viewModel.isCreditialsAvailable {
|
|
Section {
|
|
HStack {
|
|
Spacer()
|
|
Button(action: {
|
|
self.showFeedbinCredentials = true
|
|
}) {
|
|
Text("Credentials")
|
|
}
|
|
.presentation(showFeedbinCredentials ? feedbinCredentialsModal : nil)
|
|
.onDisappear() { self.showFeedbinCredentials = false }
|
|
Spacer()
|
|
}
|
|
}
|
|
}
|
|
if viewModel.isDeletable {
|
|
Section {
|
|
HStack {
|
|
Spacer()
|
|
Button(action: {
|
|
self.verifyDelete = true
|
|
}) {
|
|
Text("Delete Account")
|
|
.foregroundColor(.red)
|
|
}
|
|
.presentation($verifyDelete) {
|
|
Alert(title: Text("Are you sure you want to delete \"\(viewModel.nameForDisplay)\"?"),
|
|
primaryButton: Alert.Button.default(Text("Delete"), onTrigger: { self.viewModel.delete() }),
|
|
secondaryButton: Alert.Button.cancel())
|
|
}
|
|
Spacer()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.navigationBarTitle(Text(verbatim: viewModel.nameForDisplay), displayMode: .inline)
|
|
|
|
}
|
|
|
|
var feedbinCredentialsModal: Modal {
|
|
let feedbinViewModel = SettingsFeedbinAccountView.ViewModel(account: viewModel.account)
|
|
return Modal(SettingsFeedbinAccountView(viewModel: feedbinViewModel))
|
|
}
|
|
|
|
class ViewModel: BindableObject {
|
|
let didChange = PassthroughSubject<ViewModel, Never>()
|
|
let account: Account
|
|
|
|
init(_ account: Account) {
|
|
self.account = account
|
|
}
|
|
|
|
var nameForDisplay: String {
|
|
account.nameForDisplay
|
|
}
|
|
|
|
var name: String {
|
|
get {
|
|
account.name ?? ""
|
|
}
|
|
set {
|
|
account.name = newValue.isEmpty ? nil : newValue
|
|
didChange.send(self)
|
|
}
|
|
}
|
|
|
|
var isActive: Bool {
|
|
get {
|
|
account.isActive
|
|
}
|
|
set {
|
|
account.isActive = newValue
|
|
didChange.send(self)
|
|
}
|
|
}
|
|
|
|
var isCreditialsAvailable: Bool {
|
|
return account.type != .onMyMac
|
|
}
|
|
|
|
var isDeletable: Bool {
|
|
return AccountManager.shared.defaultAccount != account
|
|
}
|
|
|
|
func delete() {
|
|
AccountManager.shared.deleteAccount(account)
|
|
ActivityManager.shared.cleanUp(account)
|
|
}
|
|
}
|
|
}
|
|
|
|
#if DEBUG
|
|
struct SettingsDetailAccountView_Previews : PreviewProvider {
|
|
static var previews: some View {
|
|
let viewModel = SettingsDetailAccountView.ViewModel(AccountManager.shared.defaultAccount)
|
|
return SettingsDetailAccountView(viewModel: viewModel)
|
|
}
|
|
}
|
|
#endif
|