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

View file

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

View file

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

View file

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