Fix state change commented by mistake and simplify snapshot test setup (+ a couple of warnings)

This commit is contained in:
Stefan Ceriu
2024-12-17 09:31:00 +02:00
committed by Stefan Ceriu
parent 52463cdf8f
commit 598e604851
7 changed files with 72 additions and 41 deletions
@@ -23,8 +23,9 @@ struct MediaEventsTimelineGroup: Identifiable {
}
struct MediaEventsTimelineScreenViewState: BindableState {
var hasReachedTimelineStart = false
var isBackPaginating = false
var shouldShowEmptyState = false
var groups = [MediaEventsTimelineGroup]()
var activeTimelineContextProvider: (() -> TimelineViewModel.Context)!
@@ -32,10 +33,6 @@ struct MediaEventsTimelineScreenViewState: BindableState {
var bindings: MediaEventsTimelineScreenViewStateBindings
var currentPreviewItemID: TimelineItemIdentifier?
var shouldShowEmptyState: Bool {
groups.isEmpty && hasReachedTimelineStart
}
}
struct MediaEventsTimelineScreenViewStateBindings {
@@ -35,8 +35,8 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
init(mediaTimelineViewModel: TimelineViewModelProtocol,
filesTimelineViewModel: TimelineViewModelProtocol,
mediaProvider: MediaProviderProtocol,
initialViewState: MediaEventsTimelineScreenViewState = .init(bindings: .init(screenMode: .media)),
mediaProvider: MediaProviderProtocol,
userIndicatorController: UserIndicatorControllerProtocol) {
self.mediaTimelineViewModel = mediaTimelineViewModel
self.filesTimelineViewModel = filesTimelineViewModel
@@ -130,8 +130,8 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
state.groups = newGroups
state.isBackPaginating = (timelineViewState.timelineState.paginationState.backward == .paginating)
// state.hasReachedTimelineStart = (timelineViewState.timelineState.paginationState.backward == .timelineEndReached)
state.isBackPaginating = timelineViewState.timelineState.paginationState.backward == .paginating
state.shouldShowEmptyState = newGroups.isEmpty && timelineViewState.timelineState.paginationState.backward == .timelineEndReached
backPaginateIfNecessary(paginationStatus: timelineViewState.timelineState.paginationState.backward)
}
@@ -157,10 +157,9 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
actionsSubject.send(.viewItem(.init(item: item,
viewModel: activeTimelineViewModel,
namespace: namespace,
completion: { [weak self] in
self?.state.currentPreviewItemID = nil
})))
namespace: namespace) { [weak self] in
self?.state.currentPreviewItemID = nil
}))
// Set the current item in the next run loop so that (hopefully) the presentation will be ready before we flip the thumbnail.
Task { state.currentPreviewItemID = item.id }
@@ -225,8 +225,8 @@ struct MediaEventsTimelineScreen: View {
struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
static let mediaViewModel = makeViewModel(screenMode: .media)
static let filesViewModel = makeViewModel(screenMode: .files)
static let emptyMediaViewModel = makeViewModel(timelineKind: .detached, screenMode: .media)
static let emptyFilesViewModel = makeViewModel(timelineKind: .detached, screenMode: .files)
static let emptyMediaViewModel = makeViewModel(empty: true, screenMode: .media)
static let emptyFilesViewModel = makeViewModel(empty: true, screenMode: .files)
static var previews: some View {
NavigationStack {
@@ -250,18 +250,22 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
.previewDisplayName("Empty Files")
}
private static func makeViewModel(timelineKind: TimelineKind = .media(.mediaFilesScreen),
private static func makeViewModel(empty: Bool = false,
screenMode: MediaEventsTimelineScreenMode) -> MediaEventsTimelineScreenViewModel {
MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: makeTimelineViewModel(timelineKind: timelineKind),
filesTimelineViewModel: makeTimelineViewModel(timelineKind: timelineKind),
MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: makeTimelineViewModel(empty: empty),
filesTimelineViewModel: makeTimelineViewModel(empty: empty),
initialViewState: .init(bindings: .init(screenMode: screenMode)),
mediaProvider: MediaProviderMock(configuration: .init()),
initialViewState: .init(hasReachedTimelineStart: true,
bindings: .init(screenMode: screenMode)),
userIndicatorController: UserIndicatorControllerMock())
}
private static func makeTimelineViewModel(timelineKind: TimelineKind) -> TimelineViewModel {
let timelineController = MockRoomTimelineController(timelineKind: timelineKind)
private static func makeTimelineViewModel(empty: Bool) -> TimelineViewModel {
let timelineController = if empty {
MockRoomTimelineController.emptyMediaGallery
} else {
MockRoomTimelineController.mediaGallery
}
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
timelineController: timelineController,
mediaProvider: MediaProviderMock(configuration: .init()),