mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
MediaTimelinePreviewDetails can now be opened by long pressing in the media timeline (#4474)
* presenting media actions from the media timeline * implemented view in timeline and fixed an issue that made dark mode being when trying to delete the file * pr suggestions
This commit is contained in:
+33
-2
@@ -75,9 +75,12 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
|
||||
.store(in: &cancellables)
|
||||
|
||||
mediaTimelineViewModel.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .displayMediaPreview(let mediaPreviewViewModel):
|
||||
self?.displayMediaPreview(mediaPreviewViewModel)
|
||||
displayMediaPreview(mediaPreviewViewModel)
|
||||
case .displayMediaDetails(item: let item):
|
||||
displayMediaPreviewSheet(for: item)
|
||||
case .displayEmojiPicker, .displayReportContent, .displayCameraPicker, .displayMediaPicker,
|
||||
.displayDocumentPicker, .displayLocationPicker, .displayPollForm, .displayMediaUploadPreviewScreen,
|
||||
.displaySenderDetails, .displayMessageForwarding, .displayLocation, .displayResolveSendFailure,
|
||||
@@ -97,9 +100,12 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
|
||||
.store(in: &cancellables)
|
||||
|
||||
filesTimelineViewModel.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .displayMediaPreview(let mediaPreviewViewModel):
|
||||
self?.displayMediaPreview(mediaPreviewViewModel)
|
||||
displayMediaPreview(mediaPreviewViewModel)
|
||||
case .displayMediaDetails(item: let item):
|
||||
displayMediaPreviewSheet(for: item)
|
||||
case .displayEmojiPicker, .displayReportContent, .displayCameraPicker, .displayMediaPicker,
|
||||
.displayDocumentPicker, .displayLocationPicker, .displayPollForm, .displayMediaUploadPreviewScreen,
|
||||
.displaySenderDetails, .displayMessageForwarding, .displayLocation, .displayResolveSendFailure,
|
||||
@@ -127,6 +133,8 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
|
||||
isOldestItemVisible = false
|
||||
case .tappedItem(let item):
|
||||
activeTimelineViewModel.context.send(viewAction: .mediaTapped(itemID: item.identifier))
|
||||
case .longPressedItem(let item):
|
||||
activeTimelineViewModel.context.send(viewAction: .displayTimelineItemMenu(itemID: item.identifier))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,6 +145,29 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func displayMediaPreviewSheet(for item: EventBasedMessageTimelineItemProtocol) {
|
||||
let sheetModel = TimelineMediaPreviewViewModel(initialItem: item,
|
||||
timelineViewModel: activeTimelineViewModel,
|
||||
mediaProvider: mediaProvider,
|
||||
photoLibraryManager: PhotoLibraryManager(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: appMediator)
|
||||
sheetModel.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .viewInRoomTimeline(let itemID):
|
||||
actionsSubject.send(.viewInRoomTimeline(itemID))
|
||||
case .dismiss:
|
||||
state.bindings.mediaPreviewSheetViewModel = nil
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
// Triggers a download of the item so that can be shared/saved
|
||||
sheetModel.context.send(viewAction: .updateCurrentItem(sheetModel.state.currentItem))
|
||||
state.bindings.mediaPreviewSheetViewModel = sheetModel
|
||||
}
|
||||
|
||||
private func updateWithTimelineViewState(_ timelineViewState: TimelineViewState) {
|
||||
var newGroups = [MediaEventsTimelineGroup]()
|
||||
var currentItems = [RoomTimelineItemViewState]()
|
||||
|
||||
Reference in New Issue
Block a user