Skip to content

Commit 4cfbb60

Browse files
committed
Fix state change commented by mistake and simplify snapshot test setup (+ a couple of warnings)
1 parent 61ad718 commit 4cfbb60

File tree

7 files changed

+72
-41
lines changed

7 files changed

+72
-41
lines changed

ElementX/Sources/Screens/KnockRequestsListScreen/View/KnockRequestsListScreen.swift

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,40 @@ struct KnockRequestsListScreen_Previews: PreviewProvider, TestablePreview {
8888

8989
static let emptyViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([]))
9090

91-
static let singleRequestViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", avatarURL: nil, timestamp: "Now", reason: "Hello"))]))
91+
static let singleRequestViewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1",
92+
userID: "@alice:matrix.org",
93+
displayName: "Alice",
94+
avatarURL: nil,
95+
timestamp: "Now",
96+
reason: "Hello"))]))
9297

93-
static let viewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", avatarURL: nil, timestamp: "Now", reason: "Hello")),
94-
// swiftlint:disable:next line_length
95-
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")),
96-
KnockRequestProxyMock(.init(eventID: "3", userID: "@charlie:matrix.org", displayName: "Charlie", avatarURL: nil, timestamp: "Now", reason: nil)),
97-
KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org", displayName: "Dan", avatarURL: nil, timestamp: "Now", reason: "Hello! It's a me! Dan!"))]))
98+
static let viewModel = KnockRequestsListScreenViewModel.mockWithRequestsState(.loaded([
99+
KnockRequestProxyMock(.init(eventID: "1",
100+
userID: "@alice:matrix.org",
101+
displayName: "Alice",
102+
avatarURL: nil,
103+
timestamp: "Now",
104+
reason: "Hello")),
105+
KnockRequestProxyMock(.init(eventID: "2",
106+
userID: "@bob:matrix.org",
107+
displayName: "Bob",
108+
avatarURL: nil,
109+
timestamp: "Now",
110+
// swiftlint:disable:next line_length
111+
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")),
112+
KnockRequestProxyMock(.init(eventID: "3",
113+
userID: "@charlie:matrix.org",
114+
displayName: "Charlie",
115+
avatarURL: nil,
116+
timestamp: "Now",
117+
reason: nil)),
118+
KnockRequestProxyMock(.init(eventID: "4",
119+
userID: "@dan:matrix.org",
120+
displayName: "Dan",
121+
avatarURL: nil,
122+
timestamp: "Now",
123+
reason: "Hello! It's a me! Dan!"))
124+
]))
98125

99126
static var previews: some View {
100127
NavigationStack {

ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenModels.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,16 @@ struct MediaEventsTimelineGroup: Identifiable {
2323
}
2424

2525
struct MediaEventsTimelineScreenViewState: BindableState {
26-
var hasReachedTimelineStart = false
2726
var isBackPaginating = false
27+
var shouldShowEmptyState = false
28+
2829
var groups = [MediaEventsTimelineGroup]()
2930

3031
var activeTimelineContextProvider: (() -> TimelineViewModel.Context)!
3132

3233
var bindings: MediaEventsTimelineScreenViewStateBindings
3334

3435
var currentPreviewItemID: TimelineItemIdentifier?
35-
36-
var shouldShowEmptyState: Bool {
37-
groups.isEmpty && hasReachedTimelineStart
38-
}
3936
}
4037

4138
struct MediaEventsTimelineScreenViewStateBindings {

ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenViewModel.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
3535

3636
init(mediaTimelineViewModel: TimelineViewModelProtocol,
3737
filesTimelineViewModel: TimelineViewModelProtocol,
38-
mediaProvider: MediaProviderProtocol,
3938
initialViewState: MediaEventsTimelineScreenViewState = .init(bindings: .init(screenMode: .media)),
39+
mediaProvider: MediaProviderProtocol,
4040
userIndicatorController: UserIndicatorControllerProtocol) {
4141
self.mediaTimelineViewModel = mediaTimelineViewModel
4242
self.filesTimelineViewModel = filesTimelineViewModel
@@ -130,8 +130,8 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
130130

131131
state.groups = newGroups
132132

133-
state.isBackPaginating = (timelineViewState.timelineState.paginationState.backward == .paginating)
134-
// state.hasReachedTimelineStart = (timelineViewState.timelineState.paginationState.backward == .timelineEndReached)
133+
state.isBackPaginating = timelineViewState.timelineState.paginationState.backward == .paginating
134+
state.shouldShowEmptyState = newGroups.isEmpty && timelineViewState.timelineState.paginationState.backward == .timelineEndReached
135135
backPaginateIfNecessary(paginationStatus: timelineViewState.timelineState.paginationState.backward)
136136
}
137137

@@ -157,10 +157,9 @@ class MediaEventsTimelineScreenViewModel: MediaEventsTimelineScreenViewModelType
157157

158158
actionsSubject.send(.viewItem(.init(item: item,
159159
viewModel: activeTimelineViewModel,
160-
namespace: namespace,
161-
completion: { [weak self] in
162-
self?.state.currentPreviewItemID = nil
163-
})))
160+
namespace: namespace) { [weak self] in
161+
self?.state.currentPreviewItemID = nil
162+
}))
164163

165164
// Set the current item in the next run loop so that (hopefully) the presentation will be ready before we flip the thumbnail.
166165
Task { state.currentPreviewItemID = item.id }

ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ struct MediaEventsTimelineScreen: View {
225225
struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
226226
static let mediaViewModel = makeViewModel(screenMode: .media)
227227
static let filesViewModel = makeViewModel(screenMode: .files)
228-
static let emptyMediaViewModel = makeViewModel(timelineKind: .detached, screenMode: .media)
229-
static let emptyFilesViewModel = makeViewModel(timelineKind: .detached, screenMode: .files)
228+
static let emptyMediaViewModel = makeViewModel(empty: true, screenMode: .media)
229+
static let emptyFilesViewModel = makeViewModel(empty: true, screenMode: .files)
230230

231231
static var previews: some View {
232232
NavigationStack {
@@ -250,18 +250,22 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
250250
.previewDisplayName("Empty Files")
251251
}
252252

253-
private static func makeViewModel(timelineKind: TimelineKind = .media(.mediaFilesScreen),
253+
private static func makeViewModel(empty: Bool = false,
254254
screenMode: MediaEventsTimelineScreenMode) -> MediaEventsTimelineScreenViewModel {
255-
MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: makeTimelineViewModel(timelineKind: timelineKind),
256-
filesTimelineViewModel: makeTimelineViewModel(timelineKind: timelineKind),
255+
MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: makeTimelineViewModel(empty: empty),
256+
filesTimelineViewModel: makeTimelineViewModel(empty: empty),
257+
initialViewState: .init(bindings: .init(screenMode: screenMode)),
257258
mediaProvider: MediaProviderMock(configuration: .init()),
258-
initialViewState: .init(hasReachedTimelineStart: true,
259-
bindings: .init(screenMode: screenMode)),
260259
userIndicatorController: UserIndicatorControllerMock())
261260
}
262261

263-
private static func makeTimelineViewModel(timelineKind: TimelineKind) -> TimelineViewModel {
264-
let timelineController = MockRoomTimelineController(timelineKind: timelineKind)
262+
private static func makeTimelineViewModel(empty: Bool) -> TimelineViewModel {
263+
let timelineController = if empty {
264+
MockRoomTimelineController.emptyMediaGallery
265+
} else {
266+
MockRoomTimelineController.mediaGallery
267+
}
268+
265269
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
266270
timelineController: timelineController,
267271
mediaProvider: MediaProviderMock(configuration: .init()),

ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
3737
state.bindings.alertInfo = .init(id: .enableEncryption,
3838
title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertTitle,
3939
message: L10n.screenSecurityAndPrivacyEnableEncryptionAlertDescription,
40-
primaryButton: .init(title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertConfirmButtonTitle,
41-
action: { [weak self] in self?.state.bindings.desiredSettings.isEncryptionEnabled = true }),
40+
primaryButton: .init(title: L10n.screenSecurityAndPrivacyEnableEncryptionAlertConfirmButtonTitle) { [weak self] in
41+
self?.state.bindings.desiredSettings.isEncryptionEnabled = true
42+
},
4243
secondaryButton: .init(title: L10n.actionCancel, role: .cancel, action: nil))
4344
} else {
4445
state.bindings.desiredSettings.isEncryptionEnabled = false

ElementX/Sources/Screens/Timeline/View/TimelineItemViews/FileRoomTimelineView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ struct MediaFileRoomTimelineContent: View {
3636
let additionalWhitespaces: Int
3737
var isAudioFile = false
3838

39-
var onMediaTap: (() -> Void)? = nil
39+
var onMediaTap: (() -> Void)?
4040

4141
private var icon: KeyPath<CompoundIcons, Image> {
4242
isAudioFile ? \.audio : \.attachment

ElementX/Sources/Services/Timeline/TimelineController/MockRoomTimelineController.swift

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,21 @@ class MockRoomTimelineController: RoomTimelineControllerProtocol {
3434

3535
private var client: UITestsSignalling.Client?
3636

37-
init(timelineKind: TimelineKind = .live, listenForSignals: Bool = false) {
37+
static var mediaGallery: MockRoomTimelineController {
38+
MockRoomTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: (0..<5).reduce([]) { partialResult, _ in
39+
partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk
40+
})
41+
}
42+
43+
static var emptyMediaGallery: MockRoomTimelineController {
44+
let mock = MockRoomTimelineController(timelineKind: .media(.mediaFilesScreen))
45+
mock.paginationState = PaginationState(backward: .timelineEndReached, forward: .timelineEndReached)
46+
return mock
47+
}
48+
49+
init(timelineKind: TimelineKind = .live, listenForSignals: Bool = false, timelineItems: [RoomTimelineItemProtocol] = []) {
3850
self.timelineKind = timelineKind
39-
40-
switch timelineKind {
41-
case .media:
42-
paginationState = PaginationState(backward: .timelineEndReached, forward: .timelineEndReached)
43-
timelineItems = (0..<5).reduce([]) { partialResult, _ in
44-
partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk
45-
}
46-
default:
47-
paginationState = PaginationState(backward: .idle, forward: .timelineEndReached)
48-
}
51+
self.timelineItems = timelineItems
4952

5053
callbacks.send(.paginationState(paginationState))
5154
callbacks.send(.isLive(true))

0 commit comments

Comments
 (0)