Initial integration of RTE (#1464)

* Initial integration of RTE

* Fix `clipped`, `focused` and composer view type

* Remove horizontal padding

* Add `ComposerToolbar` mock

* Restore `composerFocusedSubject`

* Allow using HTML from RTE on message sent

* Fix new message content API

* Add feature flag for Rich Text Editor
This commit is contained in:
aringenbach
2023-08-29 14:37:13 +02:00
committed by GitHub
parent 08ca969526
commit d1573ae40d
26 changed files with 334 additions and 214 deletions
@@ -146,8 +146,10 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
func process(composerAction: ComposerToolbarViewModelAction) {
switch composerAction {
case .sendMessage(let message, let mode):
Task { await sendCurrentMessage(message, mode: mode) }
case .sendMessage(let message, let html, let mode):
Task { await sendCurrentMessage(message, html: html, mode: mode) }
case .sendPlainTextMessage(let message, let mode):
Task { await sendCurrentMessage(message, html: nil, mode: mode) }
case .displayCameraPicker:
actionsSubject.send(.displayCameraPicker)
case .displayMediaPicker:
@@ -160,7 +162,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
handlePasteOrDrop(provider)
case .composerModeChanged(mode: let mode):
trackComposerMode(mode)
case .focusedChanged(isFocused: let isFocused):
case .composerFocusedChanged(isFocused: let isFocused):
composerFocusedSubject.send(isFocused)
}
}
@@ -427,8 +429,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
return eventTimelineItem.properties.reactions.isEmpty && eventTimelineItem.sender == otherEventTimelineItem.sender
}
private func sendCurrentMessage(_ currentMessage: String, mode: RoomScreenComposerMode) async {
guard !currentMessage.isEmpty else {
private func sendCurrentMessage(_ message: String, html: String?, mode: RoomScreenComposerMode) async {
guard !message.isEmpty else {
fatalError("This message should never be empty")
}
@@ -436,11 +438,11 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
switch mode {
case .reply(let itemId, _):
await timelineController.sendMessage(currentMessage, inReplyTo: itemId)
await timelineController.sendMessage(message, html: html, inReplyTo: itemId)
case .edit(let originalItemId):
await timelineController.editMessage(currentMessage, original: originalItemId)
await timelineController.editMessage(message, html: html, original: originalItemId)
default:
await timelineController.sendMessage(currentMessage)
await timelineController.sendMessage(message, html: html)
}
}