Fix state change commented by mistake and simplify snapshot test setup (+ a couple of warnings)
This commit is contained in:
committed by
Stefan Ceriu
parent
03931004e3
commit
265eaba3ae
@@ -88,13 +88,40 @@ struct KnockRequestsListScreen_Previews: PreviewProvider, TestablePreview {
|
||||
|
||||
static let emptyViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([]))
|
||||
|
||||
static let singleRequestViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", avatarURL: nil, timestamp: "Now", reason: "Hello"))]))
|
||||
static let singleRequestViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1",
|
||||
userID: "@alice:matrix.org",
|
||||
displayName: "Alice",
|
||||
avatarURL: nil,
|
||||
timestamp: "Now",
|
||||
reason: "Hello"))]))
|
||||
|
||||
static let viewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", avatarURL: nil, timestamp: "Now", reason: "Hello")),
|
||||
// swiftlint:disable:next line_length
|
||||
KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org", displayName: "Bob", avatarURL: nil, timestamp: "Now", reason: "Hello this one is a very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long reason")),
|
||||
KnockRequestProxyMock(.init(eventID: "3", userID: "@charlie:matrix.org", displayName: "Charlie", avatarURL: nil, timestamp: "Now", reason: nil)),
|
||||
KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org", displayName: "Dan", avatarURL: nil, timestamp: "Now", reason: "Hello! It's a me! Dan!"))]))
|
||||
static let viewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([
|
||||
KnockRequestProxyMock(.init(eventID: "1",
|
||||
userID: "@alice:matrix.org",
|
||||
displayName: "Alice",
|
||||
avatarURL: nil,
|
||||
timestamp: "Now",
|
||||
reason: "Hello")),
|
||||
KnockRequestProxyMock(.init(eventID: "2",
|
||||
userID: "@bob:matrix.org",
|
||||
displayName: "Bob",
|
||||
avatarURL: nil,
|
||||
timestamp: "Now",
|
||||
// swiftlint:disable:next line_length
|
||||
reason: "Hello this one is a very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long reason")),
|
||||
KnockRequestProxyMock(.init(eventID: "3",
|
||||
userID: "@charlie:matrix.org",
|
||||
displayName: "Charlie",
|
||||
avatarURL: nil,
|
||||
timestamp: "Now",
|
||||
reason: nil)),
|
||||
KnockRequestProxyMock(.init(eventID: "4",
|
||||
userID: "@dan:matrix.org",
|
||||
displayName: "Dan",
|
||||
avatarURL: nil,
|
||||
timestamp: "Now",
|
||||
reason: "Hello! It's a me! Dan!"))
|
||||
]))
|
||||
|
||||
static var previews: some View {
|
||||
NavigationStack {
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -37,8 +37,9 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
|
||||
state.bindings.alertInfo = .init(id: .enableEncryption,
|
||||
title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertTitle,
|
||||
message: L10n.screenSecurityAndPrivacyEnableEncryptionAlertDescription,
|
||||
primaryButton: .init(title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertConfirmButtonTitle,
|
||||
action: { [weak self] in self?.state.bindings.desiredSettings.isEncryptionEnabled = true }),
|
||||
primaryButton: .init(title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertConfirmButtonTitle) { [weak self] in
|
||||
self?.state.bindings.desiredSettings.isEncryptionEnabled = true
|
||||
},
|
||||
secondaryButton: .init(title: L10n.actionCancel, role: .cancel, action: nil))
|
||||
} else {
|
||||
state.bindings.desiredSettings.isEncryptionEnabled = false
|
||||
|
||||
@@ -36,7 +36,7 @@ struct MediaFileRoomTimelineContent: View {
|
||||
let additionalWhitespaces: Int
|
||||
var isAudioFile = false
|
||||
|
||||
var onMediaTap: (() -> Void)? = nil
|
||||
var onMediaTap: (() -> Void)?
|
||||
|
||||
private var icon: KeyPath<CompoundIcons, Image> {
|
||||
isAudioFile ? \.audio : \.attachment
|
||||
|
||||
@@ -34,18 +34,21 @@ class MockRoomTimelineController: RoomTimelineControllerProtocol {
|
||||
|
||||
private var client: UITestsSignalling.Client?
|
||||
|
||||
init(timelineKind: TimelineKind = .live, listenForSignals: Bool = false) {
|
||||
static var mediaGallery: MockRoomTimelineController {
|
||||
MockRoomTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: (0..<5).reduce([]) { partialResult, _ in
|
||||
partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk
|
||||
})
|
||||
}
|
||||
|
||||
static var emptyMediaGallery: MockRoomTimelineController {
|
||||
let mock = MockRoomTimelineController(timelineKind: .media(.mediaFilesScreen))
|
||||
mock.paginationState = PaginationState(backward: .timelineEndReached, forward: .timelineEndReached)
|
||||
return mock
|
||||
}
|
||||
|
||||
init(timelineKind: TimelineKind = .live, listenForSignals: Bool = false, timelineItems: [RoomTimelineItemProtocol] = RoomTimelineItemFixtures.default) {
|
||||
self.timelineKind = timelineKind
|
||||
|
||||
switch timelineKind {
|
||||
case .media:
|
||||
paginationState = PaginationState(backward: .timelineEndReached, forward: .timelineEndReached)
|
||||
timelineItems = (0..<5).reduce([]) { partialResult, _ in
|
||||
partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk
|
||||
}
|
||||
default:
|
||||
paginationState = PaginationState(backward: .idle, forward: .timelineEndReached)
|
||||
}
|
||||
self.timelineItems = timelineItems
|
||||
|
||||
callbacks.send(.paginationState(paginationState))
|
||||
callbacks.send(.isLive(true))
|
||||
|
||||
Reference in New Issue
Block a user