From a18e5bba61228d9edaa19f225e2fb49020c64b7b Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 29 May 2025 08:57:15 +0300 Subject: [PATCH] Setup the threaded timeline media preview action --- .../ThreadTimelineScreenCoordinator.swift | 8 ++------ .../ThreadTimelineScreenViewModel.swift | 14 ++++++++++++++ .../ThreadTimelineScreenViewModelProtocol.swift | 2 ++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift index 705eea389..7327fdc25 100644 --- a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift +++ b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift @@ -81,7 +81,7 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol { case .displayDocumentPicker: actionsSubject.send(.presentMediaUploadPicker(.documents)) case .displayMediaPreview(let mediaPreviewViewModel): - break + viewModel.displayMediaPreview(mediaPreviewViewModel) case .displayLocationPicker: actionsSubject.send(.presentLocationPicker) case .displayPollForm(let mode): @@ -96,11 +96,7 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol { actionsSubject.send(.presentLocationViewer(body: body, geoURI: geoURI, description: description)) case .displayResolveSendFailure(let failure, let sendHandle): actionsSubject.send(.presentResolveSendFailure(failure: failure, sendHandle: sendHandle)) - case .displayThread(let itemID): - break - case .composer(let action): - break - case .hasScrolled(direction: let direction): + case .displayThread, .composer, .hasScrolled: break case .viewInRoomTimeline: fatalError("The action: \(action) should not be sent to this coordinator") diff --git a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModel.swift b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModel.swift index 91ff82083..ac8dc2415 100644 --- a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModel.swift +++ b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModel.swift @@ -28,4 +28,18 @@ class ThreadTimelineScreenViewModel: ThreadTimelineScreenViewModelType, ThreadTi // Work around QLPreviewController dismissal issues, see the InteractiveQuickLookModifier. state.bindings.mediaPreviewViewModel = nil } + + func displayMediaPreview(_ mediaPreviewViewModel: TimelineMediaPreviewViewModel) { + mediaPreviewViewModel.actions.sink { [weak self] action in + switch action { + case .viewInRoomTimeline: + fatalError("viewInRoomTimeline should not be visible on a thread preview.") + case .dismiss: + self?.state.bindings.mediaPreviewViewModel = nil + } + } + .store(in: &cancellables) + + state.bindings.mediaPreviewViewModel = mediaPreviewViewModel + } } diff --git a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModelProtocol.swift b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModelProtocol.swift index be5dc5e9f..72507e069 100644 --- a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModelProtocol.swift +++ b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenViewModelProtocol.swift @@ -13,4 +13,6 @@ protocol ThreadTimelineScreenViewModelProtocol { var context: ThreadTimelineScreenViewModelType.Context { get } func stop() + + func displayMediaPreview(_ mediaPreviewViewModel: TimelineMediaPreviewViewModel) }