Page MenuHomeMusing Studio

No OneTemporary

diff --git a/Shared/PostEditor/PostEditorView.swift b/Shared/PostEditor/PostEditorView.swift
index d7f9079..c41df03 100644
--- a/Shared/PostEditor/PostEditorView.swift
+++ b/Shared/PostEditor/PostEditorView.swift
@@ -1,118 +1,160 @@
import SwiftUI
struct PostEditorView: View {
@EnvironmentObject var model: WriteFreelyModel
@ObservedObject var post: WFAPost
var body: some View {
VStack {
switch post.appearance {
case "sans":
- TextField("", text: $post.title)
+ TextField("Title (optional)", text: $post.title)
.font(.custom("OpenSans-Regular", size: 26, relativeTo: Font.TextStyle.largeTitle))
.onChange(of: post.title) { _ in
if post.status == PostStatus.published.rawValue {
post.status = PostStatus.edited.rawValue
}
}
- TextEditor(text: $post.body)
- .font(.custom("OpenSans-Regular", size: 17, relativeTo: Font.TextStyle.body))
- .onChange(of: post.body) { _ in
- if post.status == PostStatus.published.rawValue {
- post.status = PostStatus.edited.rawValue
- }
+ ZStack(alignment: .topLeading) {
+ if post.body.count == 0 {
+ Text("Write...")
+ .foregroundColor(Color(UIColor.placeholderText))
+ .padding(.horizontal, 4)
+ .padding(.vertical, 8)
+ .font(.custom("OpenSans-Regular", size: 17, relativeTo: Font.TextStyle.body))
+ }
+ TextEditor(text: $post.body)
+ .font(.custom("OpenSans-Regular", size: 17, relativeTo: Font.TextStyle.body))
+ .onChange(of: post.body) { _ in
+ if post.status == PostStatus.published.rawValue {
+ post.status = PostStatus.edited.rawValue
+ }
}
+ }
case "wrap", "mono", "code":
- TextField("", text: $post.title)
+ TextField("Title (optional)", text: $post.title)
.font(.custom("Hack", size: 26, relativeTo: Font.TextStyle.largeTitle))
.onChange(of: post.title) { _ in
if post.status == PostStatus.published.rawValue {
post.status = PostStatus.edited.rawValue
}
}
- TextEditor(text: $post.body)
- .font(.custom("Hack", size: 17, relativeTo: Font.TextStyle.body))
- .onChange(of: post.body) { _ in
- if post.status == PostStatus.published.rawValue {
- post.status = PostStatus.edited.rawValue
- }
+ ZStack(alignment: .topLeading) {
+ if post.body.count == 0 {
+ Text("Write...")
+ .foregroundColor(Color(UIColor.placeholderText))
+ .padding(.horizontal, 4)
+ .padding(.vertical, 8)
+ .font(.custom("Hack", size: 17, relativeTo: Font.TextStyle.body))
+ }
+ TextEditor(text: $post.body)
+ .font(.custom("Hack", size: 17, relativeTo: Font.TextStyle.body))
+ .onChange(of: post.body) { _ in
+ if post.status == PostStatus.published.rawValue {
+ post.status = PostStatus.edited.rawValue
+ }
}
+ }
default:
- TextField("", text: $post.title)
+ TextField("Title (optional)", text: $post.title)
.font(.custom("Lora", size: 26, relativeTo: Font.TextStyle.largeTitle))
.onChange(of: post.title) { _ in
if post.status == PostStatus.published.rawValue {
post.status = PostStatus.edited.rawValue
}
}
- TextEditor(text: $post.body)
- .font(.custom("Lora", size: 17, relativeTo: Font.TextStyle.body))
- .onChange(of: post.body) { _ in
- if post.status == PostStatus.published.rawValue {
- post.status = PostStatus.edited.rawValue
- }
+ ZStack(alignment: .topLeading) {
+ if post.body.count == 0 {
+ Text("Write...")
+ .foregroundColor(Color(UIColor.placeholderText))
+ .padding(.horizontal, 4)
+ .padding(.vertical, 8)
+ .font(.custom("Lora", size: 17, relativeTo: Font.TextStyle.body))
+ }
+ TextEditor(text: $post.body)
+ .font(.custom("Lora", size: 17, relativeTo: Font.TextStyle.body))
+ .onChange(of: post.body) { _ in
+ if post.status == PostStatus.published.rawValue {
+ post.status = PostStatus.edited.rawValue
+ }
}
+ }
}
}
.navigationBarTitleDisplayMode(.inline)
.padding()
.toolbar {
ToolbarItem(placement: .principal) {
PostEditorStatusToolbarView(post: post)
}
ToolbarItem(placement: .primaryAction) {
Button(action: {
publishPost()
}, label: {
Image(systemName: "paperplane")
})
.disabled(
post.status == PostStatus.published.rawValue ||
!model.account.isLoggedIn ||
!model.hasNetworkConnection
)
}
}
.onChange(of: post.hasNewerRemoteCopy, perform: { _ in
if post.status == PostStatus.edited.rawValue && !post.hasNewerRemoteCopy {
post.status = PostStatus.published.rawValue
}
})
.onDisappear(perform: {
if post.status < PostStatus.published.rawValue {
DispatchQueue.main.async {
LocalStorageManager().saveContext()
}
}
})
}
private func publishPost() {
DispatchQueue.main.async {
LocalStorageManager().saveContext()
model.posts.loadCachedPosts()
model.publish(post: post)
}
#if os(iOS)
self.hideKeyboard()
#endif
}
}
-struct PostEditorView_Previews: PreviewProvider {
+struct PostEditorView_EmptyPostPreviews: PreviewProvider {
+ static var previews: some View {
+ let context = LocalStorageManager.persistentContainer.viewContext
+ let testPost = WFAPost(context: context)
+ testPost.createdDate = Date()
+ testPost.appearance = "norm"
+
+ let model = WriteFreelyModel()
+
+ return PostEditorView(post: testPost)
+ .environment(\.managedObjectContext, context)
+ .environmentObject(model)
+ }
+}
+
+struct PostEditorView_ExistingPostPreviews: PreviewProvider {
static var previews: some View {
let context = LocalStorageManager.persistentContainer.viewContext
let testPost = WFAPost(context: context)
testPost.title = "Test Post Title"
testPost.body = "Here's some cool sample body text."
testPost.createdDate = Date()
testPost.appearance = "code"
let model = WriteFreelyModel()
return PostEditorView(post: testPost)
.environment(\.managedObjectContext, context)
.environmentObject(model)
}
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Jan 29, 9:01 PM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3609861

Event Timeline