diff --git a/Shared/PostCollection/CollectionListView.swift b/Shared/PostCollection/CollectionListView.swift index 933ba96..abe1f8b 100644 --- a/Shared/PostCollection/CollectionListView.swift +++ b/Shared/PostCollection/CollectionListView.swift @@ -1,95 +1,98 @@ import SwiftUI struct CollectionListView: View { @EnvironmentObject var model: WriteFreelyModel @AppStorage("showAllPostsFlag") var showAllPostsFlag: Bool = false @AppStorage("selectedCollectionURL") var selectedCollectionURL: URL? @FetchRequest( entity: WFACollection.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \WFACollection.title, ascending: true)] ) var collections: FetchedResults var body: some View { List(selection: $model.selectedCollection) { if model.account.isLoggedIn { NavigationLink( destination: PostListView(), isActive: Binding( get: { () -> Bool in model.selectedCollection == nil && model.showAllPosts }, set: { newValue in if newValue { self.model.showAllPosts = true self.model.selectedCollection = nil } else { // No-op } } ), label: { Text("All Posts") }) NavigationLink( destination: PostListView(), isActive: Binding( get: { () -> Bool in model.selectedCollection == nil && !model.showAllPosts }, set: { newValue in if newValue { self.model.showAllPosts = false self.model.selectedCollection = nil } else { // No-op } } ), label: { Text(model.account.server == "https://write.as" ? "Anonymous" : "Drafts") }) Section(header: Text("Your Blogs")) { ForEach(collections, id: \.alias) { collection in NavigationLink( destination: PostListView(), isActive: Binding( get: { () -> Bool in model.selectedCollection == collection && !model.showAllPosts }, set: { newValue in if newValue { self.model.showAllPosts = false self.model.selectedCollection = collection } else { // No-op } } ), label: { Text(collection.title) } ) } } } else { NavigationLink(destination: PostListView()) { Text("Drafts") } } } .navigationTitle( model.account.isLoggedIn ? "\(URL(string: model.account.server)?.host ?? "WriteFreely")" : "WriteFreely" ) .listStyle(SidebarListStyle()) .onChange(of: model.selectedCollection) { collection in self.selectedCollectionURL = collection?.objectID.uriRepresentation() } + .onChange(of: model.showAllPosts) { value in + self.showAllPostsFlag = model.showAllPosts + } } } struct CollectionListView_LoggedOutPreviews: PreviewProvider { static var previews: some View { let context = LocalStorageManager.persistentContainer.viewContext let model = WriteFreelyModel() return CollectionListView() .environment(\.managedObjectContext, context) .environmentObject(model) } }