mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
edit reply completed, just need to polish the UI a bit more.
This commit is contained in:
parent
f76959ee40
commit
16b480d3da
4 changed files with 56 additions and 27 deletions
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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?)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue