Files
NetNewsWire/iOS/Account/CloudKitAddAccountView.swift
2022-12-20 20:35:18 +08:00

75 lines
2.0 KiB
Swift

//
// CloudKitAddAccountView.swift
// NetNewsWire-iOS
//
// Created by Stuart Breckenridge on 16/12/2022.
// Copyright © 2022 Ranchero Software. All rights reserved.
//
import SwiftUI
import Account
struct CloudKitAddAccountView: View {
@Environment(\.dismiss) private var dismiss
@State private var accountError: (Error?, Bool) = (nil, false)
var body: some View {
NavigationView {
Form {
AccountSectionHeader(accountType: .cloudKit)
Section { createCloudKitAccount }
Section(footer: cloudKitExplainer) {}
}
.navigationTitle(Text("CLOUDKIT", tableName: "Account"))
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button(action: { dismiss() }, label: { Text("CANCEL_BUTTON_TITLE", tableName: "Buttons") })
}
}
.alert(Text("ERROR_TITLE", tableName: "Errors"), isPresented: $accountError.1) {
Button(action: {}, label: { Text("DISMISS_BUTTON_TITLE", tableName: "Buttons") })
} message: {
Text(accountError.0?.localizedDescription ?? "Unknown Error")
}
.dismissOnExternalContextLaunch()
.dismissOnAccountAdd()
}
}
var createCloudKitAccount: some View {
Button {
guard FileManager.default.ubiquityIdentityToken != nil else {
accountError = (LocalizedNetNewsWireError.iCloudDriveMissing, true)
return
}
let _ = AccountManager.shared.createAccount(type: .cloudKit)
} label: {
HStack {
Spacer()
Text("USE_CLOUDKIT_BUTTON_TITLE", tableName: "Buttons")
Spacer()
}
}
}
var cloudKitExplainer: some View {
VStack(spacing: 4) {
if !AccountManager.shared.accounts.contains(where: { $0.type == .cloudKit }) {
// The explainer is only shown when a CloudKit account doesn't exist.
Text("CLOUDKIT_FOOTER_EXPLAINER", tableName: "Account")
}
Text("CLOUDKIT_LIMITATIONS_TITLE", tableName: "Inspector")
}.multilineTextAlignment(.center)
}
}
struct iCloudAccountView_Previews: PreviewProvider {
static var previews: some View {
CloudKitAddAccountView()
}
}