Page MenuHomeMusing Studio

No OneTemporary

diff --git a/Shared/PostCollection/CollectionListView.swift b/Shared/PostCollection/CollectionListView.swift
index abe1f8b..aebe15f 100644
--- a/Shared/PostCollection/CollectionListView.swift
+++ b/Shared/PostCollection/CollectionListView.swift
@@ -1,98 +1,112 @@
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<WFACollection>
var body: some View {
List(selection: $model.selectedCollection) {
if model.account.isLoggedIn {
NavigationLink(
destination: PostListView(),
isActive: Binding<Bool>(
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<Bool>(
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<Bool>(
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()
+ if collection != fetchSelectedCollectionFromAppStorage() {
+ self.selectedCollectionURL = collection?.objectID.uriRepresentation()
+ }
}
.onChange(of: model.showAllPosts) { value in
- self.showAllPostsFlag = model.showAllPosts
+ if value != showAllPostsFlag {
+ self.showAllPostsFlag = model.showAllPosts
+ }
}
}
+
+ private func fetchSelectedCollectionFromAppStorage() -> WFACollection? {
+ guard let objectURL = selectedCollectionURL else { return nil }
+ let coordinator = LocalStorageManager.persistentContainer.persistentStoreCoordinator
+ guard let managedObjectID = coordinator.managedObjectID(forURIRepresentation: objectURL) else { return nil }
+ guard let object = LocalStorageManager.persistentContainer.viewContext.object(
+ with: managedObjectID
+ ) as? WFACollection else { return nil }
+ return object
+ }
}
struct CollectionListView_LoggedOutPreviews: PreviewProvider {
static var previews: some View {
let context = LocalStorageManager.persistentContainer.viewContext
let model = WriteFreelyModel()
return CollectionListView()
.environment(\.managedObjectContext, context)
.environmentObject(model)
}
}

File Metadata

Mime Type
text/x-diff
Expires
Fri, Jan 31, 9:41 PM (13 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3145995

Event Timeline