Files
letro-ios/ElementX/Sources/Screens/LabsScreen/View/LabsScreen.swift
Mauro 56eec826df Fix A11y tests (#5104)
* replace NavigationStack with ElementNavigationStack to allow the content to be rendered without a NavigationStack in a11y tests

* fix a11y tests

* update xcodeproject

* swiftformat fix

* use iOS 26.1 for CI

* use a wrapper to solve the issue for a11y tests

* ElementNavigationStack only uses the trick in DEBUG mode, and added a swiftlint rule to prevent the usage of NavigationStack
2026-02-13 16:45:58 +01:00

78 lines
2.3 KiB
Swift

//
// Copyright 2025 Element Creations Ltd.
// Copyright 2022-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import Compound
import SwiftUI
struct LabsScreen: View {
@Bindable var context: LabsScreenViewModel.Context
var body: some View {
Form {
header
threadsSection
}
.compoundList()
.navigationTitle(L10n.screenLabsTitle)
.navigationBarTitleDisplayMode(.inline)
}
private var header: some View {
Section {
EmptyView()
} header: {
VStack(spacing: 16) {
BigIcon(icon: \.labs, style: .default)
VStack(spacing: 8) {
Text(L10n.screenLabsHeaderTitle)
.foregroundColor(.compound.textPrimary)
.font(.compound.headingMDBold)
.multilineTextAlignment(.center)
Text(L10n.screenLabsHeaderDescription)
.font(.compound.bodyMD)
.multilineTextAlignment(.center)
.foregroundColor(.compound.textSecondary)
}
.compoundListSectionHeader()
}
.frame(maxWidth: .infinity)
}
}
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)
}
}
}
// MARK: - Previews
struct LabsScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = {
AppSettings.resetAllSettings()
return LabsScreenViewModel(labsOptions: AppSettings())
}()
static var previews: some View {
ElementNavigationStack {
LabsScreen(context: viewModel.context)
}
}
}