From b71e667e731d1c7ec4bc98414b24993fe56dd1a5 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 11 Dec 2025 13:47:36 +0200 Subject: [PATCH] Fix #4837 - Make sure changing the screen mode in the bindings also updates the `activeTimelineContext` The original viewState mapping just stopped working properly for some reason. Updating it to `observe()` on `StateStoreViewModelV2` worked properly but I liked the viewAction based solution better, felt more streamlined. --- .../MediaEventsTimelineScreenViewModel.swift | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenViewModel.swift b/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenViewModel.swift index 681b7517a..e576700bd 100644 --- a/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenViewModel.swift +++ b/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenViewModel.swift @@ -54,18 +54,7 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType } super.init(initialViewState: .init(activeTimelineContext: activeTimelineContext, bindings: .init(screenMode: initialScreenMode)), mediaProvider: mediaProvider) - - context.$viewState.map(\.bindings.screenMode) - .removeDuplicates() - .map { - switch $0 { - case .media: mediaTimelineViewModel.context - case .files: filesTimelineViewModel.context - } - } - .weakAssign(to: \.state.activeTimelineContext, on: self) - .store(in: &cancellables) - + mediaTimelineViewModel.context.$viewState.sink { [weak self] timelineViewState in guard let self, state.bindings.screenMode == .media else { return @@ -126,6 +115,11 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType switch viewAction { case .changedScreenMode: + switch state.bindings.screenMode { + case .media: state.activeTimelineContext = mediaTimelineViewModel.context + case .files: state.activeTimelineContext = filesTimelineViewModel.context + } + updateWithTimelineViewState(activeTimelineViewModel.context.viewState) case .oldestItemDidAppear: isOldestItemVisible = true