mirror of
https://github.com/writeas/writefreely-swiftui-multiplatform.git
synced 2024-11-15 01:11:02 +00:00
Merge pull request #149 from writeas/fix-crash-on-collection-change
Use published properties for selectedCollection and showAllPosts
This commit is contained in:
commit
d9b885e3f4
@ -14,6 +14,8 @@ class WriteFreelyModel: ObservableObject {
|
||||
@Published var isProcessingRequest: Bool = false
|
||||
@Published var hasNetworkConnection: Bool = true
|
||||
@Published var selectedPost: WFAPost?
|
||||
@Published var selectedCollection: WFACollection?
|
||||
@Published var showAllPosts: Bool = true
|
||||
@Published var isPresentingDeleteAlert: Bool = false
|
||||
@Published var isPresentingLoginErrorAlert: Bool = false
|
||||
@Published var isPresentingNetworkErrorAlert: Bool = false
|
||||
|
@ -51,25 +51,7 @@ struct ContentView: View {
|
||||
#endif
|
||||
|
||||
#if os(macOS)
|
||||
PostListView(selectedCollection: nil, showAllPosts: model.account.isLoggedIn)
|
||||
.toolbar {
|
||||
ToolbarItemGroup(placement: .primaryAction) {
|
||||
if let selectedPost = model.selectedPost {
|
||||
ActivePostToolbarView(activePost: selectedPost)
|
||||
.alert(isPresented: $model.isPresentingNetworkErrorAlert, content: {
|
||||
Alert(
|
||||
title: Text("Connection Error"),
|
||||
message: Text("""
|
||||
There is no internet connection at the moment. Please reconnect or try again later.
|
||||
"""),
|
||||
dismissButton: .default(Text("OK"), action: {
|
||||
model.isPresentingNetworkErrorAlert = false
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
PostListView(selectedCollection: model.selectedCollection, showAllPosts: model.showAllPosts)
|
||||
#else
|
||||
PostListView(selectedCollection: nil, showAllPosts: model.account.isLoggedIn)
|
||||
#endif
|
||||
|
@ -5,21 +5,33 @@ struct PostListFilteredView: View {
|
||||
@Binding var postCount: Int
|
||||
@FetchRequest(entity: WFACollection.entity(), sortDescriptors: []) var collections: FetchedResults<WFACollection>
|
||||
var fetchRequest: FetchRequest<WFAPost>
|
||||
var showAllPosts: Bool
|
||||
|
||||
init(filter: String?, showAllPosts: Bool, postCount: Binding<Int>) {
|
||||
var showAllPosts: Bool {
|
||||
didSet {
|
||||
model.showAllPosts = showAllPosts
|
||||
}
|
||||
}
|
||||
|
||||
var selectedCollection: WFACollection? {
|
||||
didSet {
|
||||
model.selectedCollection = selectedCollection
|
||||
}
|
||||
}
|
||||
|
||||
init(collection: WFACollection?, showAllPosts: Bool, postCount: Binding<Int>) {
|
||||
self.showAllPosts = showAllPosts
|
||||
self.selectedCollection = collection
|
||||
if showAllPosts {
|
||||
fetchRequest = FetchRequest<WFAPost>(
|
||||
entity: WFAPost.entity(),
|
||||
sortDescriptors: [NSSortDescriptor(key: "createdDate", ascending: false)]
|
||||
)
|
||||
} else {
|
||||
if let filter = filter {
|
||||
if let collectionAlias = collection?.alias {
|
||||
fetchRequest = FetchRequest<WFAPost>(
|
||||
entity: WFAPost.entity(),
|
||||
sortDescriptors: [NSSortDescriptor(key: "createdDate", ascending: false)],
|
||||
predicate: NSPredicate(format: "collectionAlias == %@", filter)
|
||||
predicate: NSPredicate(format: "collectionAlias == %@", collectionAlias)
|
||||
)
|
||||
} else {
|
||||
fetchRequest = FetchRequest<WFAPost>(
|
||||
@ -105,12 +117,6 @@ struct PostListFilteredView: View {
|
||||
})
|
||||
)
|
||||
}
|
||||
.onAppear(perform: {
|
||||
self.postCount = fetchRequest.wrappedValue.count
|
||||
})
|
||||
.onChange(of: fetchRequest.wrappedValue.count, perform: { value in
|
||||
self.postCount = value
|
||||
})
|
||||
.onDeleteCommand(perform: {
|
||||
guard let selectedPost = model.selectedPost else { return }
|
||||
if selectedPost.status == PostStatus.local.rawValue {
|
||||
@ -134,6 +140,6 @@ struct PostListFilteredView: View {
|
||||
|
||||
struct PostListFilteredView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
return PostListFilteredView(filter: nil, showAllPosts: false, postCount: .constant(999))
|
||||
return PostListFilteredView(collection: nil, showAllPosts: false, postCount: .constant(999))
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ struct PostListView: View {
|
||||
var body: some View {
|
||||
#if os(iOS)
|
||||
GeometryReader { geometry in
|
||||
PostListFilteredView(filter: selectedCollection?.alias, showAllPosts: showAllPosts, postCount: $postCount)
|
||||
PostListFilteredView(collection: selectedCollection, showAllPosts: showAllPosts, postCount: $postCount)
|
||||
.navigationTitle(
|
||||
showAllPosts ? "All Posts" : selectedCollection?.title ?? (
|
||||
model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
|
||||
@ -79,13 +79,41 @@ struct PostListView: View {
|
||||
}
|
||||
}
|
||||
#else //if os(macOS)
|
||||
PostListFilteredView(filter: selectedCollection?.alias, showAllPosts: showAllPosts, postCount: $postCount)
|
||||
PostListFilteredView(
|
||||
collection: selectedCollection,
|
||||
showAllPosts: showAllPosts,
|
||||
postCount: $postCount
|
||||
)
|
||||
.toolbar {
|
||||
ToolbarItemGroup(placement: .primaryAction) {
|
||||
if let selectedPost = model.selectedPost {
|
||||
ActivePostToolbarView(activePost: selectedPost)
|
||||
.alert(isPresented: $model.isPresentingNetworkErrorAlert, content: {
|
||||
Alert(
|
||||
title: Text("Connection Error"),
|
||||
message: Text("""
|
||||
There is no internet connection at the moment. Please reconnect or try again later.
|
||||
"""),
|
||||
dismissButton: .default(Text("OK"), action: {
|
||||
model.isPresentingNetworkErrorAlert = false
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
.onDisappear {
|
||||
DispatchQueue.main.async {
|
||||
model.selectedCollection = nil
|
||||
model.showAllPosts = true
|
||||
model.selectedPost = nil
|
||||
}
|
||||
}
|
||||
.navigationTitle(
|
||||
showAllPosts ? "All Posts" : selectedCollection?.title ?? (
|
||||
model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
|
||||
)
|
||||
)
|
||||
.navigationSubtitle(postCount == 1 ? "\(postCount) post" : "\(postCount) posts")
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -7,12 +7,12 @@
|
||||
<key>WriteFreely-MultiPlatform (iOS).xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>WriteFreely-MultiPlatform (macOS).xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
Loading…
Reference in New Issue
Block a user