Improve message edit with RTE (#1742)

* Improv edit for RTE

* Refine code block style in composer

* Update matrix-wysiwyg-composer-swift to 2.13.0

* Remove workaround

* Update ElementX/Sources/Services/Timeline/TimelineItems/Items/Messages/TextRoomTimelineItemContent.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Refactor rawFormattedBody -> formattedBodyHTMLString

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
Alfonso Grillo
2023-09-21 15:45:43 +02:00
committed by GitHub
parent 4e6fe278db
commit eba3e25373
10 changed files with 30 additions and 11 deletions
@@ -149,7 +149,7 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool
}
private func set(text: String) {
wysiwygViewModel.setMarkdownContent(text)
wysiwygViewModel.setHtmlContent(text)
}
private func createLinkAlert() {
@@ -324,13 +324,13 @@ struct HomeScreen_Previews: PreviewProvider, TestablePreview {
HomeScreen(context: loadedViewModel.context)
}
.previewDisplayName("Loaded")
.snapshot(delay: 2.0)
.snapshot(delay: 4.0)
NavigationStack {
HomeScreen(context: emptyViewModel.context)
}
.previewDisplayName("Empty")
.snapshot(delay: 2.0)
.snapshot(delay: 4.0)
}
static func viewModel(_ state: MockRoomSummaryProviderState) -> HomeScreenViewModel {
@@ -141,8 +141,8 @@ private extension HTMLParserStyle {
linkColor: UIColor.link,
codeBlockStyle: BlockStyle(backgroundColor: UIColor(.compound._bgCodeBlock),
borderColor: UIColor(.compound.borderInteractiveSecondary),
borderWidth: 0.0,
cornerRadius: 0.0,
borderWidth: 1.0,
cornerRadius: 2.0,
padding: BlockStyle.Padding(horizontal: 10, vertical: 12),
type: .background),
quoteBlockStyle: BlockStyle(backgroundColor: UIColor(.compound.iconTertiary),
@@ -578,7 +578,19 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
return
}
actionsSubject.send(.composer(action: .setText(text: messageTimelineItem.body)))
let text: String
switch messageTimelineItem.contentType {
case .text(let textItem):
if ServiceLocator.shared.settings.richTextEditorEnabled, let formattedBodyHTMLString = textItem.formattedBodyHTMLString {
text = formattedBodyHTMLString
} else {
text = messageTimelineItem.body
}
default:
text = messageTimelineItem.body
}
actionsSubject.send(.composer(action: .setText(text: text)))
actionsSubject.send(.composer(action: .setMode(mode: .edit(originalItemId: messageTimelineItem.id))))
case .copyPermalink:
do {
@@ -19,4 +19,6 @@ import UIKit
struct TextRoomTimelineItemContent: Hashable {
let body: String
var formattedBody: AttributedString?
/// The original textual representation of the formatted body directly from the event (usually HTML code)
var formattedBodyHTMLString: String?
}
@@ -424,7 +424,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
let htmlBody = messageContent.formatted?.format == .html ? messageContent.formatted?.body : nil
let formattedBody = (htmlBody != nil ? attributedStringBuilder.fromHTML(htmlBody) : attributedStringBuilder.fromPlain(messageContent.body))
return .init(body: messageContent.body, formattedBody: formattedBody)
return .init(body: messageContent.body, formattedBody: formattedBody, formattedBodyHTMLString: htmlBody)
}
private func buildAudioTimelineItemContent(_ messageContent: AudioMessageContent) -> AudioRoomTimelineItemContent {