From d8914510f72a7c0bd6030acd19d36afb4bf46588 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Fri, 3 Jul 2020 23:43:20 +0800 Subject: [PATCH] AddWebFeed Fixes #2184 Adding Web Feeds is working for macOS and iOS. There are some alignment is. --- ...AddFeedView.swift => AddWebFeedView.swift} | 60 +++++++++++++------ Multiplatform/Shared/MainApp.swift | 2 +- .../Shared/Sidebar/SidebarToolbar.swift | 31 +++++++--- NetNewsWire.xcodeproj/project.pbxproj | 12 ++-- 4 files changed, 73 insertions(+), 32 deletions(-) rename Multiplatform/Shared/Add/{AddFeedView.swift => AddWebFeedView.swift} (82%) diff --git a/Multiplatform/Shared/Add/AddFeedView.swift b/Multiplatform/Shared/Add/AddWebFeedView.swift similarity index 82% rename from Multiplatform/Shared/Add/AddFeedView.swift rename to Multiplatform/Shared/Add/AddWebFeedView.swift index 698dd7d14..d7ec81f2c 100644 --- a/Multiplatform/Shared/Add/AddFeedView.swift +++ b/Multiplatform/Shared/Add/AddWebFeedView.swift @@ -1,5 +1,5 @@ // -// AddFeedView.swift +// AddWebFeedView.swift // NetNewsWire // // Created by Stuart Breckenridge on 3/7/20. @@ -10,7 +10,7 @@ import SwiftUI import Account import RSCore -fileprivate enum AddFeedError: LocalizedError { +fileprivate enum AddWebFeedError: LocalizedError { case none, alreadySubscribed, initialDownload, noFeeds @@ -29,12 +29,12 @@ fileprivate enum AddFeedError: LocalizedError { } -fileprivate class AddFeedViewModel: ObservableObject { +fileprivate class AddWebFeedViewModel: ObservableObject { @Published var providedURL: String = "" @Published var providedName: String = "" @Published var selectedFolderIndex: Int = 0 - @Published var addFeedError: AddFeedError? { + @Published var addFeedError: AddWebFeedError? { didSet { addFeedError != .none ? (showError = true) : (showError = false) } @@ -54,10 +54,10 @@ fileprivate class AddFeedViewModel: ObservableObject { } -struct AddFeedView: View { +struct AddWebFeedView: View { @Environment(\.presentationMode) private var presentationMode - @ObservedObject private var viewModel = AddFeedViewModel() + @ObservedObject private var viewModel = AddWebFeedViewModel() @ViewBuilder var body: some View { #if os(iOS) @@ -100,31 +100,48 @@ struct AddFeedView: View { #endif #if os(iOS) - var iosForm: some View { - NavigationLink { - List { - Text("PLACEHOLDER") - }.listStyle(InsetGroupedListStyle()) + @ViewBuilder var iosForm: some View { + NavigationView { + Form { + urlTextField + providedNameTextField + folderPicker + } + .listStyle(InsetGroupedListStyle()) + .navigationTitle("Add Web Feed") + .navigationBarTitleDisplayMode(.inline) + .navigationBarItems(leading: + Button("Cancel", action: { + presentationMode.wrappedValue.dismiss() + }) + .help("Cancel Add Feed") + , trailing: + Button("Add", action: { + addWebFeed() + }) + .disabled(!viewModel.providedURL.isValidURL) + .help("Add Feed") + ) } } #endif var urlTextField: some View { HStack { - Text("Feed: ").font(.system(.body, design: .monospaced)) + Text("Feed:") TextField("URL", text: $viewModel.providedURL) } } var providedNameTextField: some View { HStack(alignment: .lastTextBaseline) { - Text("Name: ").font(.system(.body, design: .monospaced)) + Text("Name:") TextField("Optional", text: $viewModel.providedName) } } var folderPicker: some View { - Picker(" ", selection: $viewModel.selectedFolderIndex, content: { + Picker("Folder:", selection: $viewModel.selectedFolderIndex, content: { ForEach(0..