diff --git a/iOS/PostEditor/PostTextEditingView.swift b/iOS/PostEditor/PostTextEditingView.swift index 0482f7d..3bf07b9 100644 --- a/iOS/PostEditor/PostTextEditingView.swift +++ b/iOS/PostEditor/PostTextEditingView.swift @@ -1,87 +1,94 @@ import SwiftUI struct PostTextEditingView: View { @Environment(\.horizontalSizeClass) var horizontalSizeClass + @EnvironmentObject var model: WriteFreelyModel @ObservedObject var post: WFAPost @Binding var updatingTitleFromServer: Bool @Binding var updatingBodyFromServer: Bool @State private var appearance: PostAppearance = .serif @State private var titleTextStyle: UIFont = UIFont(name: "Lora-Regular", size: 26)! @State private var titleIsFirstResponder: Bool = true @State private var bodyTextStyle: UIFont = UIFont(name: "Lora-Regular", size: 17)! @State private var bodyIsFirstResponder: Bool = false private let lineSpacingMultiplier: CGFloat = 0.5 private let textEditorHeight: CGFloat = 50 init( post: ObservedObject, updatingTitleFromServer: Binding, updatingBodyFromServer: Binding ) { self._post = post self._updatingTitleFromServer = updatingTitleFromServer self._updatingBodyFromServer = updatingBodyFromServer UITextView.appearance().backgroundColor = .clear } var body: some View { ScrollView(.vertical) { MultilineTextField( "Title (optional)", text: $post.title, font: titleTextStyle, isFirstResponder: $titleIsFirstResponder, onCommit: didFinishEditingTitle ) .accessibilityLabel(Text("Title (optional)")) .accessibilityHint(Text("Add or edit the title for your post; use the Return key to skip to the body")) - .onChange(of: post.title) { _ in + .onChange(of: post.title) { value in if post.status == PostStatus.published.rawValue && !updatingTitleFromServer { post.status = PostStatus.edited.rawValue } if updatingTitleFromServer { updatingTitleFromServer = false } + if post.status == PostStatus.edited.rawValue && value == model.editor.initialPostTitle { + post.status = PostStatus.published.rawValue + } } MultilineTextField( "Write...", text: $post.body, font: bodyTextStyle, isFirstResponder: $bodyIsFirstResponder ) .accessibilityLabel(Text("Body")) .accessibilityHint(Text("Add or edit the body of your post")) - .onChange(of: post.body) { _ in + .onChange(of: post.body) { value in if post.status == PostStatus.published.rawValue && !updatingBodyFromServer { post.status = PostStatus.edited.rawValue } if updatingBodyFromServer { updatingBodyFromServer = false } + if post.status == PostStatus.edited.rawValue && value == model.editor.initialPostBody { + post.status = PostStatus.published.rawValue + } } } .onChange(of: titleIsFirstResponder, perform: { value in self.bodyIsFirstResponder = !value }) .onAppear(perform: { switch post.appearance { case "sans": self.appearance = .sans case "wrap", "mono", "code": self.appearance = .mono default: self.appearance = .serif } self.titleTextStyle = UIFont(name: appearance.rawValue, size: 26)! self.bodyTextStyle = UIFont(name: appearance.rawValue, size: 17)! }) .onDisappear { hideKeyboard() } } private func didFinishEditingTitle() { self.titleIsFirstResponder = false self.bodyIsFirstResponder = true } }