Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10455808
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
View Options
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
Details
Attached
Mime Type
text/x-diff
Expires
Fri, Jan 31, 9:41 PM (16 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3145995
Attached To
rWFSUI WriteFreely SwiftUI
Event Timeline
Log In to Comment