Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10669487
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
View Options
diff --git a/Shared/PostList/PostListView.swift b/Shared/PostList/PostListView.swift
index e20651a..9885a6e 100644
--- a/Shared/PostList/PostListView.swift
+++ b/Shared/PostList/PostListView.swift
@@ -1,131 +1,144 @@
import SwiftUI
import Combine
struct PostListView: View {
@EnvironmentObject var model: WriteFreelyModel
@Environment(\.managedObjectContext) var managedObjectContext
@State var selectedCollection: WFACollection?
@State var showAllPosts: Bool = false
@State private var postCount: Int = 0
+ #if os(iOS)
+ private var frameHeight: CGFloat {
+ var height: CGFloat = 50
+ let bottom = UIApplication.shared.windows.first?.safeAreaInsets.bottom ?? 0
+ height += bottom
+ return height
+ }
+ #endif
+
var body: some View {
#if os(iOS)
- GeometryReader { geometry in
+ ZStack(alignment: .bottom) {
PostListFilteredView(collection: selectedCollection, showAllPosts: showAllPosts, postCount: $postCount)
- .navigationTitle(
- showAllPosts ? "All Posts" : selectedCollection?.title ?? (
- model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
+ .navigationTitle(
+ showAllPosts ? "All Posts" : selectedCollection?.title ?? (
+ model.account.server == "https://write.as" ? "Anonymous" : "Drafts"
+ )
)
- )
- .toolbar {
- ToolbarItem(placement: .primaryAction) {
+ .toolbar {
+ ToolbarItem(placement: .primaryAction) {
+ Button(action: {
+ let managedPost = WFAPost(context: self.managedObjectContext)
+ managedPost.createdDate = Date()
+ managedPost.title = ""
+ managedPost.body = ""
+ managedPost.status = PostStatus.local.rawValue
+ managedPost.collectionAlias = nil
+ switch model.preferences.font {
+ case 1:
+ managedPost.appearance = "sans"
+ case 2:
+ managedPost.appearance = "wrap"
+ default:
+ managedPost.appearance = "serif"
+ }
+ if let languageCode = Locale.current.languageCode {
+ managedPost.language = languageCode
+ managedPost.rtl = Locale.characterDirection(forLanguage: languageCode) == .rightToLeft
+ }
+ withAnimation {
+ self.selectedCollection = nil
+ self.showAllPosts = false
+ self.model.selectedPost = managedPost
+ }
+ }, label: {
+ Image(systemName: "square.and.pencil")
+ })
+ }
+ }
+ VStack {
+ HStack(spacing: 0) {
Button(action: {
- let managedPost = WFAPost(context: self.managedObjectContext)
- managedPost.createdDate = Date()
- managedPost.title = ""
- managedPost.body = ""
- managedPost.status = PostStatus.local.rawValue
- managedPost.collectionAlias = nil
- switch model.preferences.font {
- case 1:
- managedPost.appearance = "sans"
- case 2:
- managedPost.appearance = "wrap"
- default:
- managedPost.appearance = "serif"
- }
- if let languageCode = Locale.current.languageCode {
- managedPost.language = languageCode
- managedPost.rtl = Locale.characterDirection(forLanguage: languageCode) == .rightToLeft
- }
- withAnimation {
- self.selectedCollection = nil
- self.showAllPosts = false
- self.model.selectedPost = managedPost
- }
+ model.isPresentingSettingsView = true
}, label: {
- Image(systemName: "square.and.pencil")
+ Image(systemName: "gear")
})
- }
- ToolbarItem(placement: .bottomBar) {
- HStack {
+ Spacer()
+ Text(postCount == 1 ? "\(postCount) post" : "\(postCount) posts")
+ .foregroundColor(.secondary)
+ Spacer()
+ if model.isProcessingRequest {
+ ProgressView()
+ } else {
Button(action: {
- model.isPresentingSettingsView = true
+ DispatchQueue.main.async {
+ model.fetchUserCollections()
+ model.fetchUserPosts()
+ }
}, label: {
- Image(systemName: "gear")
+ Image(systemName: "arrow.clockwise")
})
- Spacer()
- Text(postCount == 1 ? "\(postCount) post" : "\(postCount) posts")
- .foregroundColor(.secondary)
- Spacer()
- if model.isProcessingRequest {
- ProgressView()
- } else {
- Button(action: {
- DispatchQueue.main.async {
- model.fetchUserCollections()
- model.fetchUserPosts()
- }
- }, label: {
- Image(systemName: "arrow.clockwise")
- })
- .disabled(!model.account.isLoggedIn)
- }
+ .disabled(!model.account.isLoggedIn)
}
- .padding()
- .frame(width: geometry.size.width)
}
+ .padding()
+ Spacer()
}
+ .frame(height: frameHeight)
+ .background(Color(UIColor.systemGray5))
+ .overlay(Divider(), alignment: .top)
}
+ .ignoresSafeArea()
#else //if os(macOS)
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"
)
)
#endif
}
}
struct PostListView_Previews: PreviewProvider {
static var previews: some View {
let context = LocalStorageManager.persistentContainer.viewContext
let model = WriteFreelyModel()
return PostListView()
.environment(\.managedObjectContext, context)
.environmentObject(model)
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Fri, May 16, 10:47 AM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3240048
Attached To
rWFSUI WriteFreely SwiftUI
Event Timeline
Log In to Comment