diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index ea77c053f..2efa82422 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -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 *htmlInputToolBarView = (MXKRoomInputToolbarView *) 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 *htmlInputToolBarView = (MXKRoomInputToolbarView *) 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*)toolbarView { [self cancelEventSelection]; } diff --git a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift index 938fd2bc9..30ea8f3e7 100644 --- a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift +++ b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift @@ -34,19 +34,34 @@ class SelfSizingHostingController: UIHostingController where C } @objc protocol HtmlRoomInputToolbarViewProtocol: RoomInputToolbarViewProtocol { - @objc func setHtml(content: String) + @objc var htmlContent: String { get set } } class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInputToolbarViewProtocol { - - var eventSenderDisplayName: String! { - didSet { - viewModel.setEventSenderDisplayName(eventSenderDisplayName) + var htmlContent: String { + get { + self.hostingViewController.rootView.wysiwygViewModel.content.html + } + set { + self.hostingViewController.rootView.wysiwygViewModel.setHtmlContent(newValue) } } - var sendMode: RoomInputToolbarViewSendMode = .send { - didSet { - viewModel.setSendMode(sendMode) + + var eventSenderDisplayName: String! { + 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 } - func setHtml(content: String) { - hostingViewController.rootView.wysiwygViewModel.setHtmlContent(content) - } - func setVoiceMessageToolbarView(_ voiceMessageToolbarView: UIView!) { //TODO embed the voice messages UI } diff --git a/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModel.swift b/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModel.swift index 9d8a4b7d1..811d56752 100644 --- a/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModel.swift +++ b/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModel.swift @@ -19,6 +19,7 @@ import SwiftUI typealias ComposerViewModelType = StateStoreViewModel class ComposerViewModel: ComposerViewModelType, ComposerViewModelProtocol { + // MARK: - Properties // MARK: Private @@ -26,15 +27,26 @@ 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 { case .cancel: diff --git a/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModelProtocol.swift b/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModelProtocol.swift index 59f99b742..3c1b19de1 100644 --- a/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModelProtocol.swift +++ b/RiotSwiftUI/Modules/Room/Composer/ViewModel/ComposerViewModelProtocol.swift @@ -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 } }