mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Forward current composer text to the media upload preview screen as captions
This commit is contained in:
+2
@@ -11,6 +11,7 @@ import SwiftUI
|
||||
|
||||
struct MediaUploadPreviewScreenCoordinatorParameters {
|
||||
let mediaURLs: [URL]
|
||||
let caption: NSAttributedString?
|
||||
let title: String?
|
||||
let isRoomEncrypted: Bool
|
||||
let shouldShowCaptionWarning: Bool
|
||||
@@ -35,6 +36,7 @@ final class MediaUploadPreviewScreenCoordinator: CoordinatorProtocol {
|
||||
|
||||
init(parameters: MediaUploadPreviewScreenCoordinatorParameters) {
|
||||
viewModel = MediaUploadPreviewScreenViewModel(mediaURLs: parameters.mediaURLs,
|
||||
caption: parameters.caption,
|
||||
title: parameters.title,
|
||||
isRoomEncrypted: parameters.isRoomEncrypted,
|
||||
shouldShowCaptionWarning: parameters.shouldShowCaptionWarning,
|
||||
|
||||
+2
-2
@@ -22,11 +22,11 @@ struct MediaUploadPreviewScreenViewState: BindableState {
|
||||
|
||||
var mediaEditVersion = 0
|
||||
|
||||
var bindings = MediaUploadPreviewScreenBindings()
|
||||
var bindings: MediaUploadPreviewScreenBindings
|
||||
}
|
||||
|
||||
struct MediaUploadPreviewScreenBindings: BindableState {
|
||||
var caption = NSAttributedString()
|
||||
var caption: NSAttributedString
|
||||
var presendCallback: (() -> Void)?
|
||||
var selectedRange = NSRange(location: 0, length: 0)
|
||||
|
||||
|
||||
+3
-1
@@ -30,6 +30,7 @@ class MediaUploadPreviewScreenViewModel: MediaUploadPreviewScreenViewModelType,
|
||||
}
|
||||
|
||||
init(mediaURLs: [URL],
|
||||
caption: NSAttributedString?,
|
||||
title: String?,
|
||||
isRoomEncrypted: Bool,
|
||||
shouldShowCaptionWarning: Bool,
|
||||
@@ -49,7 +50,8 @@ class MediaUploadPreviewScreenViewModel: MediaUploadPreviewScreenViewModelType,
|
||||
super.init(initialViewState: MediaUploadPreviewScreenViewState(mediaURLs: mediaURLs,
|
||||
title: title,
|
||||
shouldShowCaptionWarning: shouldShowCaptionWarning,
|
||||
isRoomEncrypted: isRoomEncrypted))
|
||||
isRoomEncrypted: isRoomEncrypted,
|
||||
bindings: .init(caption: caption ?? NSAttributedString())))
|
||||
}
|
||||
|
||||
override func process(viewAction: MediaUploadPreviewScreenViewAction) {
|
||||
|
||||
@@ -367,6 +367,7 @@ struct MediaUploadPreviewScreen_Previews: PreviewProvider, TestablePreview {
|
||||
static let testURL = Bundle.main.url(forResource: "AppIcon60x60@2x", withExtension: "png")
|
||||
|
||||
static let viewModel = MediaUploadPreviewScreenViewModel(mediaURLs: [snapshotURL],
|
||||
caption: nil,
|
||||
title: "App Icon.png",
|
||||
isRoomEncrypted: true,
|
||||
shouldShowCaptionWarning: true,
|
||||
|
||||
@@ -34,8 +34,8 @@ struct RoomScreenCoordinatorParameters {
|
||||
|
||||
enum RoomScreenCoordinatorAction {
|
||||
case presentReportContent(itemID: TimelineItemIdentifier, senderID: String)
|
||||
case presentMediaUploadPicker(mode: MediaPickerScreenMode)
|
||||
case presentMediaUploadPreviewScreen(mediaURLs: [URL])
|
||||
case presentMediaUploadPicker(mode: MediaPickerScreenMode, caption: NSAttributedString)
|
||||
case presentMediaUploadPreviewScreen(mediaURLs: [URL], caption: NSAttributedString)
|
||||
case presentRoomDetails
|
||||
case presentLocationPicker
|
||||
case presentPollForm(mode: PollFormMode)
|
||||
@@ -122,11 +122,14 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
case .displayReportContent(let itemID, let senderID):
|
||||
actionsSubject.send(.presentReportContent(itemID: itemID, senderID: senderID))
|
||||
case .displayCameraPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .camera, selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .camera, selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayMediaPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .photoLibrary, selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .photoLibrary, selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayDocumentPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .documents(), selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .documents(), selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayMediaPreview(let mediaPreviewViewModel):
|
||||
roomViewModel.displayMediaPreview(mediaPreviewViewModel)
|
||||
case .displayLocationPicker:
|
||||
@@ -134,7 +137,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
case .displayPollForm(let mode):
|
||||
actionsSubject.send(.presentPollForm(mode: mode))
|
||||
case .displayMediaUploadPreviewScreen(let mediaURLs):
|
||||
actionsSubject.send(.presentMediaUploadPreviewScreen(mediaURLs: mediaURLs))
|
||||
actionsSubject.send(.presentMediaUploadPreviewScreen(mediaURLs: mediaURLs,
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displaySenderDetails(userID: let userID):
|
||||
actionsSubject.send(.presentRoomMemberDetails(userID: userID))
|
||||
case .displayMessageForwarding(let forwardingItem):
|
||||
|
||||
+11
-7
@@ -30,8 +30,8 @@ struct ThreadTimelineScreenCoordinatorParameters {
|
||||
|
||||
enum ThreadTimelineScreenCoordinatorAction {
|
||||
case presentReportContent(itemID: TimelineItemIdentifier, senderID: String)
|
||||
case presentMediaUploadPicker(mode: MediaPickerScreenMode)
|
||||
case presentMediaUploadPreviewScreen(mediaURLs: [URL])
|
||||
case presentMediaUploadPicker(mode: MediaPickerScreenMode, caption: NSAttributedString)
|
||||
case presentMediaUploadPreviewScreen(mediaURLs: [URL], caption: NSAttributedString)
|
||||
case presentLocationPicker
|
||||
case presentLocationViewer(StaticLocationData)
|
||||
case presentLiveLocationViewer(sender: TimelineItemSender, initialLiveLocationShare: LiveLocationShare)
|
||||
@@ -103,18 +103,21 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol {
|
||||
timelineViewModel.actions
|
||||
.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
|
||||
|
||||
switch action {
|
||||
case .displayEmojiPicker(let itemID, let selectedEmojis):
|
||||
actionsSubject.send(.presentEmojiPicker(itemID: itemID, selectedEmojis: selectedEmojis))
|
||||
case .displayReportContent(let itemID, let senderID):
|
||||
actionsSubject.send(.presentReportContent(itemID: itemID, senderID: senderID))
|
||||
case .displayCameraPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .camera, selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .camera, selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayMediaPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .photoLibrary, selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .photoLibrary, selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayDocumentPicker:
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .documents(), selectionType: .multiple)))
|
||||
actionsSubject.send(.presentMediaUploadPicker(mode: .init(source: .documents(), selectionType: .multiple),
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displayMediaPreview(let mediaPreviewViewModel):
|
||||
viewModel.displayMediaPreview(mediaPreviewViewModel)
|
||||
case .displayLocationPicker:
|
||||
@@ -126,7 +129,8 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol {
|
||||
case .displayPollForm(let mode):
|
||||
actionsSubject.send(.presentPollForm(mode: mode))
|
||||
case .displayMediaUploadPreviewScreen(let mediaURLs):
|
||||
actionsSubject.send(.presentMediaUploadPreviewScreen(mediaURLs: mediaURLs))
|
||||
actionsSubject.send(.presentMediaUploadPreviewScreen(mediaURLs: mediaURLs,
|
||||
caption: composerViewModel.context.plainComposerText))
|
||||
case .displaySenderDetails(userID: let userID):
|
||||
actionsSubject.send(.presentRoomMemberDetails(userID: userID))
|
||||
case .displayMessageForwarding(let forwardingItem):
|
||||
|
||||
Reference in New Issue
Block a user