Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

88 rivejä
3.2 KiB

  1. import SwiftUI
  2. struct ContentView: View {
  3. @EnvironmentObject var model: WriteFreelyModel
  4. @EnvironmentObject var errorHandling: ErrorHandling
  5. var body: some View {
  6. NavigationView {
  7. #if os(macOS)
  8. CollectionListView()
  9. .withErrorHandling()
  10. .toolbar {
  11. Button(
  12. action: {
  13. NSApp.keyWindow?.contentViewController?.tryToPerform(
  14. #selector(NSSplitViewController.toggleSidebar(_:)), with: nil
  15. )
  16. },
  17. label: { Image(systemName: "sidebar.left") }
  18. )
  19. .help("Toggle the sidebar's visibility.")
  20. Spacer()
  21. Button(action: {
  22. withAnimation {
  23. // Un-set the currently selected post
  24. self.model.selectedPost = nil
  25. }
  26. // Create the new-post managed object
  27. let managedPost = model.editor.generateNewLocalPost(withFont: model.preferences.font)
  28. withAnimation {
  29. DispatchQueue.main.async {
  30. // Load the new post in the editor
  31. self.model.selectedPost = managedPost
  32. }
  33. }
  34. }, label: { Image(systemName: "square.and.pencil") })
  35. .help("Create a new local draft.")
  36. }
  37. .frame(width: 200)
  38. #else
  39. CollectionListView()
  40. .withErrorHandling()
  41. #endif
  42. #if os(macOS)
  43. ZStack {
  44. PostListView(selectedCollection: model.selectedCollection, showAllPosts: model.showAllPosts)
  45. .withErrorHandling()
  46. .frame(width: 300)
  47. if model.isProcessingRequest {
  48. ZStack {
  49. Color(NSColor.controlBackgroundColor).opacity(0.75)
  50. ProgressView()
  51. }
  52. }
  53. }
  54. #else
  55. PostListView(selectedCollection: model.selectedCollection, showAllPosts: model.showAllPosts)
  56. .withErrorHandling()
  57. #endif
  58. NoSelectedPostView(isConnected: $model.hasNetworkConnection)
  59. }
  60. .environmentObject(model)
  61. .onChange(of: model.hasError) { value in
  62. if value {
  63. if let error = model.currentError {
  64. self.errorHandling.handle(error: error)
  65. } else {
  66. self.errorHandling.handle(error: AppError.genericError())
  67. }
  68. model.hasError = false
  69. }
  70. }
  71. }
  72. }
  73. struct ContentView_Previews: PreviewProvider {
  74. static var previews: some View {
  75. let context = LocalStorageManager.standard.container.viewContext
  76. let model = WriteFreelyModel()
  77. return ContentView()
  78. .environment(\.managedObjectContext, context)
  79. .environmentObject(model)
  80. }
  81. }