mirror of
https://github.com/writeas/writefreely-swiftui-multiplatform.git
synced 2024-11-15 01:11:02 +00:00
Use model.selectedPost for ActivePostToolbarView
This commit is contained in:
parent
9bc4532193
commit
12785d733c
@ -112,21 +112,19 @@ struct PostListView: View {
|
||||
)
|
||||
.toolbar {
|
||||
ToolbarItemGroup(placement: .primaryAction) {
|
||||
if let selectedPost = model.selectedPost {
|
||||
ActivePostToolbarView(activePost: selectedPost)
|
||||
.alert(isPresented: $model.isPresentingNetworkErrorAlert, content: {
|
||||
Alert(
|
||||
title: Text("Connection Error"),
|
||||
message: Text("""
|
||||
ActivePostToolbarView()
|
||||
.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
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
dismissButton: .default(Text("OK"), action: {
|
||||
model.isPresentingNetworkErrorAlert = false
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
.navigationTitle(
|
||||
|
@ -2,9 +2,7 @@ import SwiftUI
|
||||
|
||||
struct ActivePostToolbarView: View {
|
||||
@EnvironmentObject var model: WriteFreelyModel
|
||||
@ObservedObject var activePost: WFAPost
|
||||
@State private var isPresentingSharingServicePicker: Bool = false
|
||||
|
||||
@State private var selectedCollection: WFACollection?
|
||||
|
||||
@FetchRequest(
|
||||
@ -13,102 +11,106 @@ struct ActivePostToolbarView: View {
|
||||
) var collections: FetchedResults<WFACollection>
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
if model.account.isLoggedIn &&
|
||||
activePost.status != PostStatus.local.rawValue &&
|
||||
!(activePost.wasDeletedFromServer || activePost.hasNewerRemoteCopy) {
|
||||
Section(header: Text("Move To:")) {
|
||||
Picker(selection: $selectedCollection, label: Text("Move To…"), content: {
|
||||
Text("\(model.account.server == "https://write.as" ? "Anonymous" : "Drafts")")
|
||||
.tag(nil as WFACollection?)
|
||||
Divider()
|
||||
ForEach(collections) { collection in
|
||||
Text("\(collection.title)").tag(collection as WFACollection?)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
PostEditorStatusToolbarView(post: activePost)
|
||||
.frame(minWidth: 50, alignment: .center)
|
||||
.layoutPriority(1)
|
||||
.padding(.horizontal)
|
||||
if activePost.status == PostStatus.local.rawValue {
|
||||
Menu(content: {
|
||||
Label("Publish To:", systemImage: "paperplane")
|
||||
Divider()
|
||||
Button(action: {
|
||||
if model.account.isLoggedIn {
|
||||
withAnimation {
|
||||
activePost.collectionAlias = nil
|
||||
publishPost(activePost)
|
||||
if let activePost = model.selectedPost {
|
||||
HStack {
|
||||
if model.account.isLoggedIn &&
|
||||
activePost.status != PostStatus.local.rawValue &&
|
||||
!(activePost.wasDeletedFromServer || activePost.hasNewerRemoteCopy) {
|
||||
Section(header: Text("Move To:")) {
|
||||
Picker(selection: $selectedCollection, label: Text("Move To…"), content: {
|
||||
Text("\(model.account.server == "https://write.as" ? "Anonymous" : "Drafts")")
|
||||
.tag(nil as WFACollection?)
|
||||
Divider()
|
||||
ForEach(collections) { collection in
|
||||
Text("\(collection.title)").tag(collection as WFACollection?)
|
||||
}
|
||||
} else {
|
||||
openSettingsWindow()
|
||||
}
|
||||
}, label: {
|
||||
Text("\(model.account.server == "https://write.as" ? "Anonymous" : "Drafts")")
|
||||
})
|
||||
ForEach(collections) { collection in
|
||||
})
|
||||
}
|
||||
}
|
||||
PostEditorStatusToolbarView(post: activePost)
|
||||
.frame(minWidth: 50, alignment: .center)
|
||||
.layoutPriority(1)
|
||||
.padding(.horizontal)
|
||||
if activePost.status == PostStatus.local.rawValue {
|
||||
Menu(content: {
|
||||
Label("Publish To:", systemImage: "paperplane")
|
||||
Divider()
|
||||
Button(action: {
|
||||
if model.account.isLoggedIn {
|
||||
withAnimation {
|
||||
activePost.collectionAlias = collection.alias
|
||||
activePost.collectionAlias = nil
|
||||
publishPost(activePost)
|
||||
}
|
||||
} else {
|
||||
openSettingsWindow()
|
||||
}
|
||||
}, label: {
|
||||
Text("\(collection.title)")
|
||||
Text("\(model.account.server == "https://write.as" ? "Anonymous" : "Drafts")")
|
||||
})
|
||||
}
|
||||
}, label: {
|
||||
Label("Publish…", systemImage: "paperplane")
|
||||
})
|
||||
.disabled(activePost.body.isEmpty)
|
||||
.help("Publish the post to the web.\(model.account.isLoggedIn ? "" : " You must be logged in to do this.")") // swiftlint:disable:this line_length
|
||||
} else {
|
||||
HStack(spacing: 4) {
|
||||
Button(
|
||||
action: {
|
||||
self.isPresentingSharingServicePicker = true
|
||||
},
|
||||
label: { Image(systemName: "square.and.arrow.up") }
|
||||
)
|
||||
.disabled(activePost.status == PostStatus.local.rawValue)
|
||||
.help("Copy the post's URL to your Mac's pasteboard.")
|
||||
.popover(isPresented: $isPresentingSharingServicePicker) {
|
||||
PostEditorSharingPicker(
|
||||
isPresented: $isPresentingSharingServicePicker,
|
||||
sharingItems: createPostUrl()
|
||||
ForEach(collections) { collection in
|
||||
Button(action: {
|
||||
if model.account.isLoggedIn {
|
||||
withAnimation {
|
||||
activePost.collectionAlias = collection.alias
|
||||
publishPost(activePost)
|
||||
}
|
||||
} else {
|
||||
openSettingsWindow()
|
||||
}
|
||||
}, label: {
|
||||
Text("\(collection.title)")
|
||||
})
|
||||
}
|
||||
}, label: {
|
||||
Label("Publish…", systemImage: "paperplane")
|
||||
})
|
||||
.disabled(activePost.body.isEmpty)
|
||||
.help("Publish the post to the web.\(model.account.isLoggedIn ? "" : " You must be logged in to do this.")") // swiftlint:disable:this line_length
|
||||
} else {
|
||||
HStack(spacing: 4) {
|
||||
Button(
|
||||
action: {
|
||||
self.isPresentingSharingServicePicker = true
|
||||
},
|
||||
label: { Image(systemName: "square.and.arrow.up") }
|
||||
)
|
||||
.frame(width: .zero, height: .zero)
|
||||
.disabled(activePost.status == PostStatus.local.rawValue)
|
||||
.help("Copy the post's URL to your Mac's pasteboard.")
|
||||
.popover(isPresented: $isPresentingSharingServicePicker) {
|
||||
PostEditorSharingPicker(
|
||||
isPresented: $isPresentingSharingServicePicker,
|
||||
sharingItems: createPostUrl()
|
||||
)
|
||||
.frame(width: .zero, height: .zero)
|
||||
}
|
||||
Button(action: { publishPost(activePost) }, label: { Image(systemName: "paperplane") })
|
||||
.disabled(activePost.body.isEmpty || activePost.status == PostStatus.published.rawValue)
|
||||
.help("Publish the post to the web.\(model.account.isLoggedIn ? "" : " You must be logged in to do this.")") // swiftlint:disable:this line_length
|
||||
}
|
||||
Button(action: { publishPost(activePost) }, label: { Image(systemName: "paperplane") })
|
||||
.disabled(activePost.body.isEmpty || activePost.status == PostStatus.published.rawValue)
|
||||
.help("Publish the post to the web.\(model.account.isLoggedIn ? "" : " You must be logged in to do this.")") // swiftlint:disable:this line_length
|
||||
}
|
||||
}
|
||||
.onAppear(perform: {
|
||||
self.selectedCollection = collections.first { $0.alias == activePost.collectionAlias }
|
||||
})
|
||||
.onChange(of: selectedCollection, perform: { [selectedCollection] newCollection in
|
||||
if activePost.collectionAlias == newCollection?.alias {
|
||||
return
|
||||
} else {
|
||||
withAnimation {
|
||||
activePost.collectionAlias = newCollection?.alias
|
||||
model.move(post: activePost, from: selectedCollection, to: newCollection)
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
.onAppear(perform: {
|
||||
self.selectedCollection = collections.first { $0.alias == activePost.collectionAlias }
|
||||
})
|
||||
.onChange(of: selectedCollection, perform: { [selectedCollection] newCollection in
|
||||
if activePost.collectionAlias == newCollection?.alias {
|
||||
return
|
||||
} else {
|
||||
withAnimation {
|
||||
activePost.collectionAlias = newCollection?.alias
|
||||
model.move(post: activePost, from: selectedCollection, to: newCollection)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private func createPostUrl() -> [Any] {
|
||||
guard let postId = activePost.postId else { return [] }
|
||||
guard let urlString = activePost.slug != nil ?
|
||||
"\(model.account.server)/\((activePost.collectionAlias)!)/\((activePost.slug)!)" :
|
||||
guard let postId = model.selectedPost?.postId else { return [] }
|
||||
guard let urlString = model.selectedPost?.slug != nil ?
|
||||
"\(model.account.server)/\((model.selectedPost?.collectionAlias)!)/\((model.selectedPost?.slug)!)" :
|
||||
"\(model.account.server)/\((postId))" else { return [] }
|
||||
guard let data = URL(string: urlString) else { return [] }
|
||||
return [data as NSURL]
|
||||
|
Loading…
Reference in New Issue
Block a user