mirror of
https://github.com/writeas/writefreely-swiftui-multiplatform.git
synced 2024-11-15 01:11:02 +00:00
Replace WFModel nav state published vars with model.navState
This commit is contained in:
parent
62e781c52e
commit
64dfdd63eb
@ -150,7 +150,7 @@ extension WriteFreelyModel {
|
||||
// We're starting the network request.
|
||||
DispatchQueue.main.async {
|
||||
#if os(iOS)
|
||||
self.selectedPost = post
|
||||
self.navState.selectedPost = post
|
||||
#endif
|
||||
self.isProcessingRequest = true
|
||||
}
|
||||
@ -175,7 +175,7 @@ extension WriteFreelyModel {
|
||||
self.isProcessingRequest = true
|
||||
}
|
||||
|
||||
selectedPost = post
|
||||
navState.selectedPost = post
|
||||
post.collectionAlias = newCollection?.alias
|
||||
loggedInClient.movePost(postId: postId, to: newCollection?.alias, completion: movePostHandler)
|
||||
}
|
||||
|
@ -140,8 +140,8 @@ extension WriteFreelyModel {
|
||||
if managedPost.collectionAlias != fetchedPost.collectionAlias {
|
||||
// The post has been moved so we update the managed post's collectionAlias property.
|
||||
DispatchQueue.main.async {
|
||||
if self.selectedPost == managedPost {
|
||||
self.selectedPost = nil
|
||||
if self.navState.selectedPost == managedPost {
|
||||
self.navState.selectedPost = nil
|
||||
}
|
||||
managedPost.collectionAlias = fetchedPost.collectionAlias
|
||||
}
|
||||
@ -233,7 +233,7 @@ extension WriteFreelyModel {
|
||||
do {
|
||||
let fetchedPost = try result.get()
|
||||
#if os(iOS)
|
||||
guard let cachedPost = self.selectedPost else { return }
|
||||
guard let cachedPost = self.navState.selectedPost else { return }
|
||||
#else
|
||||
guard let cachedPost = self.editor.postToUpdate else { return }
|
||||
#endif
|
||||
@ -259,7 +259,7 @@ extension WriteFreelyModel {
|
||||
do {
|
||||
let succeeded = try result.get()
|
||||
if succeeded {
|
||||
if let post = selectedPost {
|
||||
if let post = navState.selectedPost {
|
||||
updateFromServer(post: post)
|
||||
} else {
|
||||
return
|
||||
|
@ -78,7 +78,10 @@ struct ContentView: View {
|
||||
.withErrorHandling()
|
||||
},
|
||||
postList: {
|
||||
PostListView(selectedCollection: model.selectedCollection, showAllPosts: model.showAllPosts)
|
||||
PostListView(
|
||||
selectedCollection: model.navState.selectedCollection,
|
||||
showAllPosts: model.navState.showAllPosts
|
||||
)
|
||||
.withErrorHandling()
|
||||
},
|
||||
postDetail: {
|
||||
|
@ -32,16 +32,16 @@ struct CollectionListView: View {
|
||||
model.account.isLoggedIn ? "\(URL(string: model.account.server)?.host ?? "WriteFreely")" : "WriteFreely"
|
||||
)
|
||||
.listStyle(SidebarListStyle())
|
||||
.onChange(of: model.selectedCollection) { collection in
|
||||
model.selectedPost = nil
|
||||
.onChange(of: model.navState.selectedCollection) { collection in
|
||||
model.navState.selectedPost = nil
|
||||
if collection != model.editor.fetchSelectedCollectionFromAppStorage() {
|
||||
self.model.editor.selectedCollectionURL = collection?.objectID.uriRepresentation()
|
||||
}
|
||||
}
|
||||
.onChange(of: model.showAllPosts) { value in
|
||||
model.selectedPost = nil
|
||||
.onChange(of: model.navState.showAllPosts) { value in
|
||||
model.navState.selectedPost = nil
|
||||
if value != model.editor.showAllPostsFlag {
|
||||
self.model.editor.showAllPostsFlag = model.showAllPosts
|
||||
self.model.editor.showAllPostsFlag = model.navState.showAllPosts
|
||||
}
|
||||
}
|
||||
.onChange(of: model.hasError) { value in
|
||||
|
@ -39,7 +39,7 @@ struct PostEditorModel {
|
||||
managedPost.title = ""
|
||||
managedPost.body = ""
|
||||
managedPost.status = PostStatus.local.rawValue
|
||||
managedPost.collectionAlias = WriteFreelyModel.shared.selectedCollection?.alias
|
||||
managedPost.collectionAlias = WriteFreelyModel.shared.navState.selectedCollection?.alias
|
||||
switch appearance {
|
||||
case 1:
|
||||
managedPost.appearance = "sans"
|
||||
|
@ -10,7 +10,7 @@ struct DeprecatedListView: View {
|
||||
var onDelete: (WFAPost) -> Void
|
||||
|
||||
var body: some View {
|
||||
List(selection: $model.selectedPost) {
|
||||
List(selection: $model.navState.selectedPost) {
|
||||
ForEach(fetchRequest.wrappedValue, id: \.self) { post in
|
||||
if !searchString.isEmpty &&
|
||||
!post.title.localizedCaseInsensitiveContains(searchString) &&
|
||||
@ -20,9 +20,9 @@ struct DeprecatedListView: View {
|
||||
NavigationLink(
|
||||
destination: PostEditorView(post: post),
|
||||
tag: post,
|
||||
selection: $model.selectedPost,
|
||||
selection: $model.navState.selectedPost,
|
||||
label: {
|
||||
if model.showAllPosts {
|
||||
if model.navState.showAllPosts {
|
||||
if let collection = collections.filter({ $0.alias == post.collectionAlias }).first {
|
||||
PostCellView(post: post, collectionName: collection.title)
|
||||
} else {
|
||||
|
@ -52,8 +52,8 @@ struct PostCellView: View {
|
||||
|
||||
private func didTapDeleteContextMenuItem() {
|
||||
guard post.status == PostStatus.local.rawValue else { return }
|
||||
if post === model.selectedPost {
|
||||
model.selectedPost = nil
|
||||
if post === model.navState.selectedPost {
|
||||
model.navState.selectedPost = nil
|
||||
model.editor.clearLastDraft()
|
||||
}
|
||||
|
||||
|
@ -48,14 +48,14 @@ struct PostListFilteredView: View {
|
||||
self.postCount = value
|
||||
})
|
||||
} else {
|
||||
List(selection: $model.selectedPost) {
|
||||
List(selection: $model.navState.selectedPost) {
|
||||
ForEach(fetchRequest.wrappedValue, id: \.self) { post in
|
||||
NavigationLink(
|
||||
destination: PostEditorView(post: post),
|
||||
tag: post,
|
||||
selection: $model.selectedPost,
|
||||
selection: $model.navState.selectedPost,
|
||||
label: {
|
||||
if model.showAllPosts {
|
||||
if model.navState.showAllPosts {
|
||||
if let collection = collections.filter({ $0.alias == post.collectionAlias }).first {
|
||||
PostCellView(post: post, collectionName: collection.title)
|
||||
} else {
|
||||
@ -122,8 +122,8 @@ struct PostListFilteredView: View {
|
||||
|
||||
func delete(_ post: WFAPost) {
|
||||
DispatchQueue.main.async {
|
||||
if post == model.selectedPost {
|
||||
model.selectedPost = nil
|
||||
if post == model.navState.selectedPost {
|
||||
model.navState.selectedPost = nil
|
||||
model.editor.clearLastDraft()
|
||||
}
|
||||
model.posts.remove(post)
|
||||
|
@ -46,9 +46,9 @@ struct PostListView: View {
|
||||
Button(action: {
|
||||
let managedPost = model.editor.generateNewLocalPost(withFont: model.preferences.font)
|
||||
withAnimation {
|
||||
self.model.showAllPosts = false
|
||||
self.model.navState.showAllPosts = false
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||
self.model.selectedPost = managedPost
|
||||
self.model.navState.selectedPost = managedPost
|
||||
}
|
||||
}
|
||||
}, label: {
|
||||
@ -130,8 +130,8 @@ struct PostListView: View {
|
||||
.ignoresSafeArea(.all, edges: .bottom)
|
||||
.onAppear {
|
||||
// Set the selected collection and whether or not we want to show all posts
|
||||
model.selectedCollection = selectedCollection
|
||||
model.showAllPosts = showAllPosts
|
||||
model.navState.selectedCollection = selectedCollection
|
||||
model.navState.showAllPosts = showAllPosts
|
||||
|
||||
// We use this to invalidate and refresh the view, so that new posts created outside of the app (e.g.,
|
||||
// in the action extension) show up.
|
||||
|
@ -16,7 +16,7 @@ struct SearchablePostListFilteredView: View {
|
||||
var body: some View {
|
||||
if #available(iOS 16, macOS 13, *) {
|
||||
NavigationStack {
|
||||
List(fetchRequest.wrappedValue, id: \.self, selection: $model.selectedPost) { post in
|
||||
List(fetchRequest.wrappedValue, id: \.self, selection: $model.navState.selectedPost) { post in
|
||||
NavigationLink(
|
||||
"\(post.title.isEmpty ? "UNTITLED" : post.title)",
|
||||
destination: PostEditorView(post: post)
|
||||
|
@ -40,14 +40,15 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
.onAppear(perform: {
|
||||
if model.editor.showAllPostsFlag {
|
||||
DispatchQueue.main.async {
|
||||
self.model.selectedCollection = nil
|
||||
self.model.showAllPosts = true
|
||||
self.model.navState.selectedCollection = nil
|
||||
self.model.navState.showAllPosts = true
|
||||
showLastDraftOrCreateNewLocalPost()
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.model.selectedCollection = model.editor.fetchSelectedCollectionFromAppStorage()
|
||||
self.model.showAllPosts = false
|
||||
self.model.navState.selectedCollection =
|
||||
model.editor.fetchSelectedCollectionFromAppStorage()
|
||||
self.model.navState.showAllPosts = false
|
||||
showLastDraftOrCreateNewLocalPost()
|
||||
}
|
||||
}
|
||||
@ -146,7 +147,7 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
private func showLastDraftOrCreateNewLocalPost() {
|
||||
if model.editor.lastDraftURL != nil {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
|
||||
self.model.selectedPost = model.editor.fetchLastDraftFromAppStorage()
|
||||
self.model.navState.selectedPost = model.editor.fetchLastDraftFromAppStorage()
|
||||
}
|
||||
} else {
|
||||
createNewLocalPost()
|
||||
@ -156,14 +157,14 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
private func createNewLocalPost() {
|
||||
withAnimation {
|
||||
// Un-set the currently selected post
|
||||
self.model.selectedPost = nil
|
||||
self.model.navState.selectedPost = nil
|
||||
}
|
||||
// Create the new-post managed object
|
||||
let managedPost = model.editor.generateNewLocalPost(withFont: model.preferences.font)
|
||||
withAnimation {
|
||||
// Set it as the selectedPost
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
|
||||
self.model.selectedPost = managedPost
|
||||
self.model.navState.selectedPost = managedPost
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -174,9 +175,9 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()) {
|
||||
// Unset selected post and collection and navigate to local drafts.
|
||||
self.model.selectedPost = nil
|
||||
self.model.selectedCollection = nil
|
||||
self.model.showAllPosts = false
|
||||
self.model.navState.selectedPost = nil
|
||||
self.model.navState.selectedCollection = nil
|
||||
self.model.navState.showAllPosts = false
|
||||
|
||||
// Create the new log post.
|
||||
let newLogPost = model.editor.generateNewLocalPost(withFont: 2)
|
||||
@ -189,7 +190,7 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
postBody.append(contentsOf: logger.fetchLogs())
|
||||
newLogPost.body = postBody.joined(separator: "\n")
|
||||
|
||||
self.model.selectedPost = newLogPost
|
||||
self.model.navState.selectedPost = newLogPost
|
||||
}
|
||||
|
||||
logger.log("Generated local log post.")
|
||||
|
@ -75,9 +75,9 @@ struct SettingsView: View {
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()) {
|
||||
// Unset selected post and collection and navigate to local drafts.
|
||||
self.model.selectedPost = nil
|
||||
self.model.selectedCollection = nil
|
||||
self.model.showAllPosts = false
|
||||
self.model.navState.selectedPost = nil
|
||||
self.model.navState.selectedCollection = nil
|
||||
self.model.navState.showAllPosts = false
|
||||
|
||||
// Create the new log post.
|
||||
let newLogPost = model.editor.generateNewLocalPost(withFont: 2)
|
||||
|
Loading…
Reference in New Issue
Block a user