Add Account Sheet
The web accounts are now chunked into two columns of upto 4 accounts. Fixes #2955.
This commit is contained in:
parent
b8aca6b89a
commit
2e5e4dceea
@ -53,11 +53,11 @@ enum AddAccountSections: Int, CaseIterable {
|
||||
case .icloud:
|
||||
return [.cloudKit]
|
||||
case .web:
|
||||
#if DEBUG
|
||||
return [.bazQux, .feedbin, .feedly, .feedWrangler, .inoreader, .newsBlur, .theOldReader]
|
||||
#else
|
||||
return [.bazQux, .feedbin, .feedly, .inoreader, .newsBlur, .theOldReader]
|
||||
#endif
|
||||
if AppDefaults.shared.isDeveloperBuild {
|
||||
return [.bazQux, .feedbin, .feedly, .feedWrangler, .inoreader, .newsBlur, .theOldReader].filter({ $0.isDeveloperRestricted == false })
|
||||
} else {
|
||||
return [.bazQux, .feedbin, .feedly, .feedWrangler, .inoreader, .newsBlur, .theOldReader]
|
||||
}
|
||||
case .selfhosted:
|
||||
return [.freshRSS]
|
||||
case .allOrdered:
|
||||
@ -67,12 +67,17 @@ enum AddAccountSections: Int, CaseIterable {
|
||||
AddAccountSections.selfhosted.sectionContent
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
struct AddAccountsView: View {
|
||||
|
||||
weak var parent: NSHostingController<AddAccountsView>? // required because presentationMode.dismiss() doesn't work
|
||||
var addAccountDelegate: AccountsPreferencesAddAccountDelegate?
|
||||
private let chunkLimit = 4 // use this to control number of accounts in each web account column
|
||||
@State private var selectedAccount: AccountType = .onMyMac
|
||||
|
||||
init(delegate: AccountsPreferencesAddAccountDelegate?) {
|
||||
@ -207,6 +212,7 @@ struct AddAccountsView: View {
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
var webAccounts: some View {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Web")
|
||||
@ -214,22 +220,28 @@ struct AddAccountsView: View {
|
||||
.padding(.horizontal)
|
||||
.padding(.top, 8)
|
||||
|
||||
Picker(selection: $selectedAccount, label: Text(""), content: {
|
||||
ForEach(AddAccountSections.web.sectionContent.filter({ isRestricted($0) != true }), id: \.self, content: { account in
|
||||
|
||||
HStack(alignment: .center) {
|
||||
account.image()
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.frame(width: 25, height: 25, alignment: .center)
|
||||
.padding(.leading, 4)
|
||||
|
||||
Text(account.localizedAccountName())
|
||||
HStack {
|
||||
ForEach(0..<chunkedWebAccounts().count, content: { chunk in
|
||||
VStack {
|
||||
Picker(selection: $selectedAccount, label: Text(""), content: {
|
||||
ForEach(chunkedWebAccounts()[chunk], id: \.self, content: { account in
|
||||
|
||||
HStack(alignment: .center) {
|
||||
account.image()
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.frame(width: 25, height: 25, alignment: .center)
|
||||
.padding(.leading, 4)
|
||||
Text(account.localizedAccountName())
|
||||
}
|
||||
.tag(account)
|
||||
|
||||
})
|
||||
})
|
||||
Spacer()
|
||||
}
|
||||
.tag(account)
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
.offset(x: 7.5, y: 0)
|
||||
|
||||
Text(AddAccountSections.web.sectionFooter).foregroundColor(.gray)
|
||||
@ -272,12 +284,10 @@ struct AddAccountsView: View {
|
||||
AccountManager.shared.accounts.contains(where: { $0.type == .cloudKit })
|
||||
}
|
||||
|
||||
private func isRestricted(_ accountType: AccountType) -> Bool {
|
||||
if AppDefaults.shared.isDeveloperBuild && accountType.isDeveloperRestricted {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
private func chunkedWebAccounts() -> [[AccountType]] {
|
||||
AddAccountSections.web.sectionContent.chunked(into: chunkLimit)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -99,6 +99,11 @@
|
||||
1769E33024BD6271000E1E8E /* EditAccountCredentialsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E32F24BD6271000E1E8E /* EditAccountCredentialsView.swift */; };
|
||||
1769E33624BD9621000E1E8E /* EditAccountCredentialsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E33524BD9621000E1E8E /* EditAccountCredentialsModel.swift */; };
|
||||
1769E33824BD97CB000E1E8E /* AccountUpdateErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1769E33724BD97CB000E1E8E /* AccountUpdateErrors.swift */; };
|
||||
176F8CEE26154347005978CE /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176F8CED26154347005978CE /* Array-Extensions.swift */; };
|
||||
176F8CEF26154347005978CE /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176F8CED26154347005978CE /* Array-Extensions.swift */; };
|
||||
176F8CF026154347005978CE /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176F8CED26154347005978CE /* Array-Extensions.swift */; };
|
||||
176F8CF126154347005978CE /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176F8CED26154347005978CE /* Array-Extensions.swift */; };
|
||||
176F8CF226154347005978CE /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176F8CED26154347005978CE /* Array-Extensions.swift */; };
|
||||
1776E88E24AC5F8A00E78166 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1776E88D24AC5F8A00E78166 /* AppDefaults.swift */; };
|
||||
1776E88F24AC5F8A00E78166 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1776E88D24AC5F8A00E78166 /* AppDefaults.swift */; };
|
||||
177A0C2D25454AAB00D7EAF6 /* ReaderAPIAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 177A0C2C25454AAB00D7EAF6 /* ReaderAPIAccountViewController.swift */; };
|
||||
@ -1508,6 +1513,7 @@
|
||||
1769E32F24BD6271000E1E8E /* EditAccountCredentialsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccountCredentialsView.swift; sourceTree = "<group>"; };
|
||||
1769E33524BD9621000E1E8E /* EditAccountCredentialsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccountCredentialsModel.swift; sourceTree = "<group>"; };
|
||||
1769E33724BD97CB000E1E8E /* AccountUpdateErrors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountUpdateErrors.swift; sourceTree = "<group>"; };
|
||||
176F8CED26154347005978CE /* Array-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array-Extensions.swift"; sourceTree = "<group>"; };
|
||||
1776E88D24AC5F8A00E78166 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDefaults.swift; sourceTree = "<group>"; };
|
||||
177A0C2C25454AAB00D7EAF6 /* ReaderAPIAccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderAPIAccountViewController.swift; sourceTree = "<group>"; };
|
||||
17897AC924C281A40014BA03 /* InspectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorView.swift; sourceTree = "<group>"; };
|
||||
@ -3258,6 +3264,7 @@
|
||||
51126DA3225FDE2F00722696 /* RSImage-Extensions.swift */,
|
||||
84411E701FE5FBFA004B527F /* SmallIconProvider.swift */,
|
||||
51BC4ADD247277DF000A6ED8 /* URL-Extensions.swift */,
|
||||
176F8CED26154347005978CE /* Array-Extensions.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@ -4699,6 +4706,7 @@
|
||||
51E4992F24A8676400B667CB /* ArticleArray.swift in Sources */,
|
||||
5177471C24B387AC00EB0F74 /* ImageScrollView.swift in Sources */,
|
||||
51E498F824A8085D00B667CB /* UnreadFeed.swift in Sources */,
|
||||
176F8CF126154347005978CE /* Array-Extensions.swift in Sources */,
|
||||
6591723124B5C35400B638E8 /* AccountHeaderImageView.swift in Sources */,
|
||||
51B8104524C0E6D200C6C32D /* TimelineTextSizer.swift in Sources */,
|
||||
FF64D0E724AF53EE0084080A /* RefreshProgressModel.swift in Sources */,
|
||||
@ -4862,6 +4870,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
17930ED524AF10EE00A9BA52 /* AddWebFeedView.swift in Sources */,
|
||||
176F8CF226154347005978CE /* Array-Extensions.swift in Sources */,
|
||||
51E4993A24A8708800B667CB /* AppDelegate.swift in Sources */,
|
||||
51E498CE24A8085D00B667CB /* UnreadFeed.swift in Sources */,
|
||||
51B8BCC324C25C3E00360B00 /* SidebarContextMenu.swift in Sources */,
|
||||
@ -5054,6 +5063,7 @@
|
||||
65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */,
|
||||
515A5149243E64BA0089E588 /* ExtensionPointEnableWindowController.swift in Sources */,
|
||||
65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */,
|
||||
176F8CEF26154347005978CE /* Array-Extensions.swift in Sources */,
|
||||
515A5178243E90200089E588 /* ExtensionPointIdentifer.swift in Sources */,
|
||||
65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */,
|
||||
51BC4B00247277E0000A6ED8 /* URL-Extensions.swift in Sources */,
|
||||
@ -5255,6 +5265,7 @@
|
||||
176813D02564BA5900D98635 /* WidgetData.swift in Sources */,
|
||||
510289CD24519A1D00426DDF /* SelectComboTableViewCell.swift in Sources */,
|
||||
514B7C8323205EFB00BAC947 /* RootSplitViewController.swift in Sources */,
|
||||
176F8CF026154347005978CE /* Array-Extensions.swift in Sources */,
|
||||
51FA73A52332BE110090D516 /* ArticleExtractor.swift in Sources */,
|
||||
51314704235C41FC00387FDC /* Intents.intentdefinition in Sources */,
|
||||
FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */,
|
||||
@ -5494,6 +5505,7 @@
|
||||
849EE72120391F560082A1EA /* SharingServicePickerDelegate.swift in Sources */,
|
||||
1710B9132552354E00679C0D /* AddAccountHelpView.swift in Sources */,
|
||||
5108F6B62375E612001ABC45 /* CacheCleaner.swift in Sources */,
|
||||
176F8CEE26154347005978CE /* Array-Extensions.swift in Sources */,
|
||||
849A97981ED9EFAA007D329B /* Node-Extensions.swift in Sources */,
|
||||
849EE70F203919360082A1EA /* AppAssets.swift in Sources */,
|
||||
849A97531ED9EAC0007D329B /* AddFeedController.swift in Sources */,
|
||||
|
22
Shared/Extensions/Array-Extensions.swift
Normal file
22
Shared/Extensions/Array-Extensions.swift
Normal file
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Array-Extensions.swift
|
||||
// NetNewsWire
|
||||
//
|
||||
// Created by Stuart Breckenridge on 01/04/2021.
|
||||
// Copyright © 2021 Ranchero Software. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Array {
|
||||
|
||||
/// Splits an array in to chunks of size `size`.
|
||||
/// - Note: Code from [Hacking with Swift](https://www.hackingwithswift.com/example-code/language/how-to-split-an-array-into-chunks).
|
||||
/// - Parameter size: The size of the chunk.
|
||||
/// - Returns: An array of `[Element]`s.
|
||||
func chunked(into size: Int) -> [[Element]] {
|
||||
return stride(from: 0, to: count, by: size).map {
|
||||
Array(self[$0 ..< Swift.min($0 + size, count)])
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user