Introduce flow parameters to simplify dependencies for child flows. (#4448)

This commit is contained in:
Doug
2025-08-27 13:56:06 +01:00
committed by GitHub
parent c140209e0c
commit dfb2425240
22 changed files with 456 additions and 586 deletions
@@ -12,7 +12,6 @@ struct NotificationSettingsEditScreenCoordinatorParameters {
weak var navigationStackCoordinator: NavigationStackCoordinator?
let chatType: NotificationSettingsChatType
let userSession: UserSessionProtocol
let notificationSettings: NotificationSettingsProxyProtocol
}
final class NotificationSettingsEditScreenCoordinator: CoordinatorProtocol {
@@ -24,8 +23,7 @@ final class NotificationSettingsEditScreenCoordinator: CoordinatorProtocol {
self.parameters = parameters
viewModel = NotificationSettingsEditScreenViewModel(chatType: parameters.chatType,
userSession: parameters.userSession,
notificationSettingsProxy: parameters.notificationSettings)
userSession: parameters.userSession)
}
func start() {
@@ -51,7 +49,7 @@ final class NotificationSettingsEditScreenCoordinator: CoordinatorProtocol {
guard case let .joined(roomProxy) = await parameters.userSession.clientProxy.roomForIdentifier(roomID) else { return }
let roomNotificationSettingsParameters = RoomNotificationSettingsScreenCoordinatorParameters(navigationStackCoordinator: parameters.navigationStackCoordinator,
notificationSettingsProxy: parameters.notificationSettings,
notificationSettingsProxy: parameters.userSession.clientProxy.notificationSettings,
roomProxy: roomProxy,
displayAsUserDefinedRoomSettings: true)
let roomNotificationSettingsCoordinator = RoomNotificationSettingsScreenCoordinator(parameters: roomNotificationSettingsParameters)
@@ -26,11 +26,11 @@ class NotificationSettingsEditScreenViewModel: NotificationSettingsEditScreenVie
actionsSubject.eraseToAnyPublisher()
}
init(chatType: NotificationSettingsChatType, userSession: UserSessionProtocol, notificationSettingsProxy: NotificationSettingsProxyProtocol) {
init(chatType: NotificationSettingsChatType, userSession: UserSessionProtocol) {
let bindings = NotificationSettingsEditScreenViewStateBindings()
self.chatType = chatType
self.userSession = userSession
self.notificationSettingsProxy = notificationSettingsProxy
notificationSettingsProxy = userSession.clientProxy.notificationSettings
roomSummaryProvider = userSession.clientProxy.roomSummaryProvider
super.init(initialViewState: NotificationSettingsEditScreenViewState(bindings: bindings,
@@ -65,10 +65,10 @@ struct NotificationSettingsEditScreen_Previews: PreviewProvider, TestablePreview
notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = [RoomSummary].mockRooms.map(\.id)
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@alice:example.com",
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))))
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
notificationSettings: notificationSettingsProxy))))
var viewModel = NotificationSettingsEditScreenViewModel(chatType: .groupChat,
userSession: userSession,
notificationSettingsProxy: notificationSettingsProxy)
userSession: userSession)
viewModel.fetchInitialContent()
return viewModel
}()
@@ -78,10 +78,10 @@ struct NotificationSettingsEditScreen_Previews: PreviewProvider, TestablePreview
notificationSettingsProxy.getDefaultRoomNotificationModeIsEncryptedIsOneToOneReturnValue = .mentionsAndKeywordsOnly
notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = []
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@alice:example.com",
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))))
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
notificationSettings: notificationSettingsProxy))))
var viewModel = NotificationSettingsEditScreenViewModel(chatType: .oneToOneChat,
userSession: userSession,
notificationSettingsProxy: notificationSettingsProxy)
userSession: userSession)
viewModel.fetchInitialContent()
return viewModel
}()
@@ -90,11 +90,11 @@ struct NotificationSettingsEditScreen_Previews: PreviewProvider, TestablePreview
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
notificationSettingsProxy.getDefaultRoomNotificationModeIsEncryptedIsOneToOneReturnValue = .mentionsAndKeywordsOnly
notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = []
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "John Doe"))))
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "John Doe",
notificationSettings: notificationSettingsProxy))))
var viewModel = NotificationSettingsEditScreenViewModel(chatType: .oneToOneChat,
userSession: userSession,
notificationSettingsProxy: notificationSettingsProxy)
userSession: userSession)
viewModel.state.pendingMode = .mentionsAndKeywordsOnly
viewModel.fetchInitialContent()
return viewModel
@@ -106,10 +106,10 @@ struct NotificationSettingsEditScreen_Previews: PreviewProvider, TestablePreview
notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = [RoomSummary].mockRooms.map(\.id)
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@alice:example.com",
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))))
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
notificationSettings: notificationSettingsProxy))))
var viewModel = NotificationSettingsEditScreenViewModel(chatType: .groupChat,
userSession: userSession,
notificationSettingsProxy: notificationSettingsProxy)
userSession: userSession)
viewModel.fetchInitialContent()
return viewModel
}()
@@ -50,13 +50,14 @@ struct NotificationSettingsEditScreenRoomCell_Previews: PreviewProvider, Testabl
static var previews: some View {
let summaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "John Doe", roomSummaryProvider: summaryProvider))))
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = []
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "John Doe",
roomSummaryProvider: summaryProvider,
notificationSettings: notificationSettingsProxy))))
let viewModel = NotificationSettingsEditScreenViewModel(chatType: .groupChat,
userSession: userSession,
notificationSettingsProxy: notificationSettingsProxy)
userSession: userSession)
let rooms: [NotificationSettingsEditScreenRoom] = summaryProvider.roomListPublisher.value.compactMap { summary -> NotificationSettingsEditScreenRoom? in
NotificationSettingsEditScreenRoom(id: UUID().uuidString,