mirror of
https://github.com/writeas/writefreely-swiftui-multiplatform.git
synced 2024-11-15 01:11:02 +00:00
Merge branch 'main' into show-progressview-during-network-request
This commit is contained in:
commit
0365874ed1
@ -43,22 +43,13 @@ struct AccountLogoutView: View {
|
||||
Text("Log Out")
|
||||
})
|
||||
}
|
||||
.sheet(isPresented: $isPresentingLogoutConfirmation) {
|
||||
VStack {
|
||||
Text("Log Out?")
|
||||
.font(.title)
|
||||
Text("\(editedPostsWarningString)You won't lose any local posts. Are you sure?")
|
||||
HStack {
|
||||
Button(action: model.logout, label: {
|
||||
Text("Log Out")
|
||||
})
|
||||
Button(action: {
|
||||
self.isPresentingLogoutConfirmation = false
|
||||
}, label: {
|
||||
Text("Cancel")
|
||||
}).keyboardShortcut(.cancelAction)
|
||||
}
|
||||
}
|
||||
.alert(isPresented: $isPresentingLogoutConfirmation) {
|
||||
Alert(
|
||||
title: Text("Log Out?"),
|
||||
message: Text("\(editedPostsWarningString)You won't lose any local posts. Are you sure?"),
|
||||
primaryButton: .cancel(Text("Cancel"), action: { self.isPresentingLogoutConfirmation = false }),
|
||||
secondaryButton: .destructive(Text("Log Out"), action: model.logout )
|
||||
)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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>(
|
||||
@ -75,7 +87,16 @@ struct PostListFilteredView: View {
|
||||
tag: post,
|
||||
selection: $model.selectedPost
|
||||
) {
|
||||
PostCellView(post: post)
|
||||
if showAllPosts {
|
||||
if let collection = collections.filter { $0.alias == post.collectionAlias }.first {
|
||||
PostCellView(post: post, collectionName: collection.title)
|
||||
} else {
|
||||
let collectionName = model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
|
||||
PostCellView(post: post, collectionName: collectionName)
|
||||
}
|
||||
} else {
|
||||
PostCellView(post: post)
|
||||
}
|
||||
}
|
||||
.deleteDisabled(post.status != PostStatus.local.rawValue)
|
||||
}
|
||||
@ -105,12 +126,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 +149,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)
|
||||
.navigationTitle(
|
||||
showAllPosts ? "All Posts" : selectedCollection?.title ?? (
|
||||
model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
|
||||
)
|
||||
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 {
|
||||
self.model.selectedCollection = nil
|
||||
self.model.showAllPosts = true
|
||||
self.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
|
||||
}
|
||||
}
|
||||
|
@ -54,9 +54,16 @@ struct WriteFreely_MultiPlatformApp: App {
|
||||
.disabled(!model.account.isLoggedIn)
|
||||
.keyboardShortcut("r", modifiers: [.command])
|
||||
}
|
||||
#if os(macOS)
|
||||
SidebarCommands()
|
||||
#endif
|
||||
CommandGroup(after: .help) {
|
||||
Button("Visit Support Forum") {
|
||||
#if os(macOS)
|
||||
NSWorkspace().open(model.helpURL)
|
||||
#else
|
||||
UIApplication.shared.open(model.helpURL)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
|
@ -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