Clear cache on changing the threads FF (#4581)

* clear cache on changing the threads FF

# Conflicts:
#	PreviewTests/Sources/__Snapshots__/PreviewTests/labsScreen.iPad-pseudo-0.png
#	PreviewTests/Sources/__Snapshots__/PreviewTests/labsScreen.iPhone-16-pseudo-0.png

* fix tests
This commit is contained in:
Mauro
2025-10-07 11:38:58 +02:00
committed by GitHub
parent efef9ad335
commit 1a5ff8b012
11 changed files with 80 additions and 26 deletions
@@ -14,14 +14,35 @@ struct LabsScreenCoordinatorParameters {
let appSettings: AppSettings
}
enum LabsScreenCoordinatorAction {
case clearCache
}
final class LabsScreenCoordinator: CoordinatorProtocol {
private let viewModel: LabsScreenViewModelProtocol
private let actionsSubject: PassthroughSubject<LabsScreenCoordinatorAction, Never> = .init()
var actions: AnyPublisher<LabsScreenCoordinatorAction, Never> {
actionsSubject.eraseToAnyPublisher()
}
private var cancellables = Set<AnyCancellable>()
init(parameters: LabsScreenCoordinatorParameters) {
viewModel = LabsScreenViewModel(labsOptions: parameters.appSettings)
}
func start() { }
func start() {
viewModel
.actionsPublisher
.sink { [weak self] action in
switch action {
case .clearCache:
self?.actionsSubject.send(.clearCache)
}
}
.store(in: &cancellables)
}
func toPresentable() -> AnyView {
AnyView(LabsScreen(context: viewModel.context))
@@ -7,9 +7,13 @@
import Foundation
enum LabsScreenViewAction { }
enum LabsScreenViewAction {
case clearCache
}
enum LabsScreenViewModelAction { }
enum LabsScreenViewModelAction {
case clearCache
}
struct LabsScreenViewState: BindableState {
var bindings: LabsScreenViewStateBindings
@@ -22,4 +22,11 @@ class LabsScreenViewModel: LabsScreenViewModelType, LabsScreenViewModelProtocol
super.init(initialViewState: state)
}
override func process(viewAction: LabsScreenViewAction) {
switch viewAction {
case .clearCache:
actionsSubject.send(.clearCache)
}
}
}
@@ -14,7 +14,7 @@ struct LabsScreen: View {
var body: some View {
Form {
header
settingsSection
threadsSection
}
.compoundList()
.navigationTitle(L10n.screenLabsTitle)
@@ -39,16 +39,23 @@ struct LabsScreen: View {
.multilineTextAlignment(.center)
.foregroundColor(.compound.textSecondary)
}
.compoundListSectionHeader()
}
.frame(maxWidth: .infinity)
}
}
private var settingsSection: some View {
private var threadsSection: some View {
Section {
ListRow(label: .default(title: L10n.screenLabsEnableThreads,
icon: \.threads),
kind: .toggle($context.threadsEnabled))
} footer: {
Text(L10n.screenLabsEnableThreadsDescription)
.compoundListSectionFooter()
}
.onChange(of: context.threadsEnabled) { _, _ in
context.send(viewAction: .clearCache)
}
}
}
@@ -56,7 +63,7 @@ struct LabsScreen: View {
// MARK: - Previews
struct LabsScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = LabsScreenViewModel(labsOptions: ServiceLocator.shared.settings)
static let viewModel = LabsScreenViewModel(labsOptions: AppSettings())
static var previews: some View {
NavigationStack {