edit reply completed, just need to polish the UI a bit more.

This commit is contained in:
Mauro Romito 2022-10-11 21:04:04 +02:00
parent f76959ee40
commit 16b480d3da
4 changed files with 56 additions and 27 deletions

View file

@ -195,6 +195,7 @@ static CGSize kThreadListBarButtonItemImageSize;
@property (nonatomic, strong) RoomContextualMenuPresenter *roomContextualMenuPresenter;
@property (nonatomic, strong) MXKErrorAlertPresentation *errorPresenter;
@property (nonatomic, strong) NSAttributedString *textMessageBeforeEditing;
@property (nonatomic, strong) NSString *htmlTextBeforeEditing;
@property (nonatomic, strong) EditHistoryCoordinatorBridgePresenter *editHistoryPresenter;
@property (nonatomic, strong) MXKDocumentPickerPresenter *documentPickerPresenter;
@property (nonatomic, strong) EmojiPickerCoordinatorBridgePresenter *emojiPickerCoordinatorBridgePresenter;
@ -4614,12 +4615,11 @@ static CGSize kThreadListBarButtonItemImageSize;
{
MXEvent *event = [self.roomDataSource eventWithEventId:eventId];
if ([self inputToolbarConformsToHtmlToolbarViewProtocol]) {
// TODO: reimplemented the following line when the cancel UI button is implemented in the WYSIWYG toolbar
self.textMessageBeforeEditing = self.inputToolbarView.attributedTextMessage;
if ([self inputToolbarConformsToHtmlToolbarViewProtocol])
{
MXKRoomInputToolbarView <HtmlRoomInputToolbarViewProtocol> *htmlInputToolBarView = (MXKRoomInputToolbarView <HtmlRoomInputToolbarViewProtocol> *) self.inputToolbarView;
[htmlInputToolBarView setHtmlWithContent: [self.customizedRoomDataSource editableHtmlTextMessageFor:event]];
self.htmlTextBeforeEditing = htmlInputToolBarView.htmlContent;
htmlInputToolBarView.htmlContent = [self.customizedRoomDataSource editableHtmlTextMessageFor:event];
}
else if ([self inputToolbarConformsToToolbarViewProtocol])
{
@ -4633,12 +4633,19 @@ static CGSize kThreadListBarButtonItemImageSize;
- (void)restoreTextMessageBeforeEditing
{
if (self.textMessageBeforeEditing && [self inputToolbarConformsToToolbarViewProtocol])
if (self.htmlTextBeforeEditing && [self inputToolbarConformsToHtmlToolbarViewProtocol])
{
MXKRoomInputToolbarView <HtmlRoomInputToolbarViewProtocol> *htmlInputToolBarView = (MXKRoomInputToolbarView <HtmlRoomInputToolbarViewProtocol> *) self.inputToolbarView;
htmlInputToolBarView.htmlContent = self.htmlTextBeforeEditing;
}
else if (self.textMessageBeforeEditing && [self inputToolbarConformsToToolbarViewProtocol])
{
self.inputToolbarView.attributedTextMessage = self.textMessageBeforeEditing;
}
self.textMessageBeforeEditing = nil;
self.htmlTextBeforeEditing = nil;
}
- (BOOL)inputToolbarConformsToHtmlToolbarViewProtocol
@ -4966,7 +4973,7 @@ static CGSize kThreadListBarButtonItemImageSize;
}
}
- (void)roomInputToolbarViewDidTapCancel:(RoomInputToolbarView*)toolbarView
- (void)roomInputToolbarViewDidTapCancel:(MXKRoomInputToolbarView<RoomInputToolbarViewProtocol>*)toolbarView
{
[self cancelEventSelection];
}

View file

@ -34,19 +34,34 @@ class SelfSizingHostingController<Content>: UIHostingController<Content> where C
}
@objc protocol HtmlRoomInputToolbarViewProtocol: RoomInputToolbarViewProtocol {
@objc func setHtml(content: String)
@objc var htmlContent: String { get set }
}
class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInputToolbarViewProtocol {
var htmlContent: String {
get {
self.hostingViewController.rootView.wysiwygViewModel.content.html
}
set {
self.hostingViewController.rootView.wysiwygViewModel.setHtmlContent(newValue)
}
}
var eventSenderDisplayName: String! {
didSet {
viewModel.setEventSenderDisplayName(eventSenderDisplayName)
get {
viewModel.eventSenderDisplayName
}
set {
viewModel.eventSenderDisplayName = newValue
}
}
var sendMode: RoomInputToolbarViewSendMode = .send {
didSet {
viewModel.setSendMode(sendMode)
var sendMode: RoomInputToolbarViewSendMode {
get {
viewModel.sendMode
}
set {
viewModel.sendMode = newValue
}
}
@ -118,10 +133,6 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
self.backgroundColor = .clear
}
func setHtml(content: String) {
hostingViewController.rootView.wysiwygViewModel.setHtmlContent(content)
}
func setVoiceMessageToolbarView(_ voiceMessageToolbarView: UIView!) {
//TODO embed the voice messages UI
}

View file

@ -19,6 +19,7 @@ import SwiftUI
typealias ComposerViewModelType = StateStoreViewModel<ComposerViewState, ComposerViewAction>
class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol {
// MARK: - Properties
// MARK: Private
@ -26,14 +27,25 @@ class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol {
// MARK: Public
var callback: ((ComposerViewModelResult) -> Void)?
// MARK: - Public
func setSendMode(_ sendMode: RoomInputToolbarViewSendMode) {
state.sendMode = sendMode
var sendMode: RoomInputToolbarViewSendMode {
get {
state.sendMode
}
set {
state.sendMode = newValue
}
}
func setEventSenderDisplayName(_ eventSenderDisplayName: String?) {
state.eventSenderDisplayName = eventSenderDisplayName
var eventSenderDisplayName: String? {
get {
state.eventSenderDisplayName
}
set {
state.eventSenderDisplayName = newValue
}
}
// MARK: - Public
override func process(viewAction: ComposerViewAction) {
switch viewAction {

View file

@ -19,7 +19,6 @@ import Foundation
protocol ComposerViewModelProtocol {
var context: ComposerViewModelType.Context { get }
var callback: ((ComposerViewModelResult) -> Void)? { get set }
func setSendMode(_ sendMode: RoomInputToolbarViewSendMode)
func setEventSenderDisplayName(_ eventSenderDisplayName: String?)
var sendMode: RoomInputToolbarViewSendMode { get set }
var eventSenderDisplayName: String? { get set }
}