Add Feed Folder Picker

Fixes #2193:

• Containers with indentation are supported
• Small icon provider is used
• AssetCatalog updated with SF Symbol images for desktop, iPad, iPhone.
• Title page doesn’t work at the current time.
This commit is contained in:
Stuart Breckenridge 2020-07-05 09:06:53 +08:00
parent 4081aa0168
commit ad4aaf9a19
11 changed files with 40 additions and 28 deletions

View File

@ -134,6 +134,11 @@ class AddWebFeedModel: ObservableObject {
}
}
func smallIconImage(for container: Container) -> RSImage? {
if let smallIconProvider = container as? SmallIconProvider {
return smallIconProvider.smallIcon?.image
}
return nil
}
}

View File

@ -56,7 +56,7 @@ struct AddWebFeedView: View {
Text("Add a Web Feed")
.font(.title)
Spacer()
}
}.padding()
LazyVGrid(columns: [GridItem(.fixed(75), spacing: 10, alignment: .trailing),GridItem(.fixed(400), spacing: 0, alignment: .leading) ], alignment: .leading, spacing: 10, pinnedViews: [], content:{
@ -82,7 +82,7 @@ struct AddWebFeedView: View {
#if os(iOS)
@ViewBuilder var iosForm: some View {
NavigationView {
Form {
List {
urlTextField
providedNameTextField
folderPicker
@ -111,38 +111,40 @@ struct AddWebFeedView: View {
}
#endif
var urlTextField: some View {
HStack {
#if os(iOS)
Text("Feed:")
TextField("URL", text: $viewModel.providedURL)
.disableAutocorrection(true)
.autocapitalization(UITextAutocapitalizationType.none)
#else
TextField("URL", text: $viewModel.providedURL)
.disableAutocorrection(true)
#endif
}
@ViewBuilder var urlTextField: some View {
#if os(iOS)
TextField("URL", text: $viewModel.providedURL)
.disableAutocorrection(true)
.autocapitalization(UITextAutocapitalizationType.none)
#else
TextField("URL", text: $viewModel.providedURL)
.disableAutocorrection(true)
#endif
}
var providedNameTextField: some View {
HStack(alignment: .lastTextBaseline) {
#if os(iOS)
Text("Name:")
#endif
TextField("Optional", text: $viewModel.providedName)
}
TextField("Optional", text: $viewModel.providedName)
}
@ViewBuilder var folderPicker: some View {
#if os(iOS)
Picker("Folder:", selection: $viewModel.selectedFolderIndex, content: {
Picker("Folder", selection: $viewModel.selectedFolderIndex, content: {
ForEach(0..<viewModel.containers.count, id: \.self, content: { index in
if let containerName = (viewModel.containers[index] as? DisplayNameProvider)?.nameForDisplay {
if viewModel.containers[index] is Folder {
Text("\(viewModel.containers[index].account?.nameForDisplay ?? "") / \(containerName)").tag(index)
HStack(alignment: .top) {
if let image = viewModel.smallIconImage(for: viewModel.containers[index]) {
Image(rsImage: image)
}
Text("\(containerName)").tag(index)
}.padding(.leading, 16)
} else {
Text(containerName).tag(index)
HStack(alignment: .top) {
if let image = viewModel.smallIconImage(for: viewModel.containers[index]) {
Image(rsImage: image)
}
Text(containerName).tag(index)
}
}
}
})
@ -152,7 +154,12 @@ struct AddWebFeedView: View {
ForEach(0..<viewModel.containers.count, id: \.self, content: { index in
if let containerName = (viewModel.containers[index] as? DisplayNameProvider)?.nameForDisplay {
if viewModel.containers[index] is Folder {
Text("\(viewModel.containers[index].account?.nameForDisplay ?? "") / \(containerName)").padding(.leading, 2).tag(index)
HStack {
if let image = viewModel.smallIconImage(for: viewModel.containers[index]) {
Image(rsImage: image)
}
Text("\(containerName)")
}.padding(.leading, 2).tag(index)
} else {
Text(containerName).padding(.leading, 2).tag(index)
}

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "localAccountMac.pdf",
"filename" : "mac.pdf",
"idiom" : "universal"
}
],

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "localAccountPad.pdf",
"filename" : "ipad.pdf",
"idiom" : "universal"
}
],

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "localAccountPhone.pdf",
"filename" : "phone.pdf",
"idiom" : "universal"
}
],