Add template to xcodegen, fix build and tests
This commit is contained in:
committed by
Stefan Ceriu
parent
b74f6c41a2
commit
abca946a23
@@ -15,7 +15,6 @@
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import CommonKit
|
||||
|
||||
struct TemplateSimpleScreenCoordinatorParameters {
|
||||
let promptType: TemplateSimpleScreenPromptType
|
||||
@@ -42,14 +41,13 @@ final class TemplateSimpleScreenCoordinator: Coordinator, Presentable {
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
init(parameters: TemplateSimpleScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
let viewModel = TemplateSimpleScreenViewModel(promptType: parameters.promptType)
|
||||
let view = TemplateSimpleScreen(viewModel: viewModel.context)
|
||||
let view = TemplateSimpleScreen(context: viewModel.context)
|
||||
templateSimpleScreenViewModel = viewModel
|
||||
templateSimpleScreenHostingController = VectorHostingController(rootView: view)
|
||||
templateSimpleScreenHostingController = UIHostingController(rootView: view)
|
||||
|
||||
indicatorPresenter = UserIndicatorTypePresenter(presentingViewController: templateSimpleScreenHostingController)
|
||||
}
|
||||
@@ -75,7 +73,7 @@ final class TemplateSimpleScreenCoordinator: Coordinator, Presentable {
|
||||
/// - Parameters:
|
||||
/// - label: The label to show on the indicator.
|
||||
/// - isInteractionBlocking: Whether the indicator should block any user interaction.
|
||||
private func startLoading(label: String = VectorL10n.loading, isInteractionBlocking: Bool = true) {
|
||||
private func startLoading(label: String = ElementL10n.loading, isInteractionBlocking: Bool = true) {
|
||||
loadingIndicator = indicatorPresenter.present(.loading(label: label, isInteractionBlocking: isInteractionBlocking))
|
||||
}
|
||||
|
||||
|
||||
@@ -29,18 +29,18 @@ extension TemplateSimpleScreenPromptType: Identifiable, CaseIterable {
|
||||
var title: String {
|
||||
switch self {
|
||||
case .regular:
|
||||
return VectorL10n.roomCreationMakePublicPromptTitle
|
||||
return "Make this chat public?"
|
||||
case .upgrade:
|
||||
return VectorL10n.roomDetailsHistorySectionPromptTitle
|
||||
return "Privacy warning"
|
||||
}
|
||||
}
|
||||
|
||||
var image: ImageAsset {
|
||||
var imageSystemName: String {
|
||||
switch self {
|
||||
case .regular:
|
||||
return Asset.Images.appSymbol
|
||||
return "app.gift"
|
||||
case .upgrade:
|
||||
return Asset.Images.keyVerificationSuccessShield
|
||||
return "shield"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,14 +16,10 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
struct TemplateSimpleScreen: View {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
// MARK: Private
|
||||
|
||||
@Environment(\.theme) private var theme
|
||||
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
|
||||
|
||||
private var horizontalPadding: CGFloat {
|
||||
@@ -32,7 +28,7 @@ struct TemplateSimpleScreen: View {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@ObservedObject var viewModel: TemplateSimpleScreenViewModel.Context
|
||||
@ObservedObject var context: TemplateSimpleScreenViewModel.Context
|
||||
|
||||
// MARK: Views
|
||||
|
||||
@@ -50,52 +46,43 @@ struct TemplateSimpleScreen: View {
|
||||
.padding(.bottom, geometry.safeAreaInsets.bottom > 0 ? 0 : 16)
|
||||
}
|
||||
}
|
||||
.background(theme.colors.background.ignoresSafeArea())
|
||||
.accentColor(theme.colors.accent)
|
||||
}
|
||||
|
||||
/// The main content of the view to be shown in a scroll view.
|
||||
var mainContent: some View {
|
||||
VStack(spacing: 36) {
|
||||
Text(viewModel.viewState.promptType.title)
|
||||
.font(theme.fonts.title1B)
|
||||
.foregroundColor(theme.colors.primaryContent)
|
||||
Text(context.viewState.promptType.title)
|
||||
.accessibilityIdentifier("title")
|
||||
|
||||
Image(viewModel.viewState.promptType.image.name)
|
||||
Image(systemName: context.viewState.promptType.imageSystemName)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width:100)
|
||||
.foregroundColor(theme.colors.accent)
|
||||
|
||||
HStack{
|
||||
Text("Counter: \(viewModel.viewState.count)")
|
||||
.foregroundColor(theme.colors.primaryContent)
|
||||
Text("Counter: \(context.viewState.count)")
|
||||
|
||||
Button("-") {
|
||||
viewModel.send(viewAction: .decrementCount)
|
||||
context.send(viewAction: .decrementCount)
|
||||
}
|
||||
|
||||
Button("+") {
|
||||
viewModel.send(viewAction: .incrementCount)
|
||||
context.send(viewAction: .incrementCount)
|
||||
}
|
||||
}
|
||||
.font(theme.fonts.title3)
|
||||
}
|
||||
}
|
||||
|
||||
/// The action buttons shown at the bottom of the view.
|
||||
var buttons: some View {
|
||||
VStack {
|
||||
Button { viewModel.send(viewAction: .accept) } label: {
|
||||
Button { context.send(viewAction: .accept) } label: {
|
||||
Text("Accept")
|
||||
.font(theme.fonts.bodySB)
|
||||
}
|
||||
.buttonStyle(PrimaryActionButtonStyle())
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
Button { viewModel.send(viewAction: .cancel) } label: {
|
||||
Button { context.send(viewAction: .cancel) } label: {
|
||||
Text("Cancel")
|
||||
.font(theme.fonts.body)
|
||||
.padding(.vertical, 12)
|
||||
}
|
||||
}
|
||||
@@ -104,10 +91,15 @@ struct TemplateSimpleScreen: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
struct TemplateSimpleScreen_Previews: PreviewProvider {
|
||||
static let stateRenderer = MockTemplateSimpleScreenScreenState.stateRenderer
|
||||
static var previews: some View {
|
||||
stateRenderer.screenGroup()
|
||||
Group {
|
||||
let viewModel = TemplateSimpleScreenViewModel(promptType: .regular)
|
||||
TemplateSimpleScreen(context: viewModel.context)
|
||||
}
|
||||
Group {
|
||||
let viewModel = TemplateSimpleScreenViewModel(promptType: .upgrade)
|
||||
TemplateSimpleScreen(context: viewModel.context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,31 +15,26 @@
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import RiotSwiftUI
|
||||
import ElementX
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
class TemplateSimpleScreenUITests: MockScreenTest {
|
||||
|
||||
override class var screenType: MockScreenState.Type {
|
||||
return MockTemplateSimpleScreenScreenState.self
|
||||
}
|
||||
|
||||
override class func createTest() -> MockScreenTest {
|
||||
return TemplateSimpleScreenUITests(selector: #selector(verifyTemplateSimpleScreenScreen))
|
||||
}
|
||||
|
||||
func verifyTemplateSimpleScreenScreen() throws {
|
||||
guard let screenState = screenState as? MockTemplateSimpleScreenScreenState else { fatalError("no screen") }
|
||||
switch screenState {
|
||||
case .promptType(let promptType):
|
||||
verifyTemplateSimpleScreenPromptType(promptType: promptType)
|
||||
}
|
||||
}
|
||||
|
||||
func verifyTemplateSimpleScreenPromptType(promptType: TemplateSimpleScreenPromptType) {
|
||||
class TemplateSimpleScreenUITests: XCTestCase {
|
||||
func testRegularScreen() {
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier("Simple Screen - Regular")
|
||||
|
||||
let title = app.staticTexts["title"]
|
||||
XCTAssert(title.exists)
|
||||
XCTAssertEqual(title.label, promptType.title)
|
||||
|
||||
XCTAssertEqual(title.label, "Make this chat public?")
|
||||
}
|
||||
|
||||
func testUpgradeScreen() {
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier("Simple Screen - Upgrade")
|
||||
|
||||
let title = app.staticTexts["title"]
|
||||
XCTAssert(title.exists)
|
||||
|
||||
XCTAssertEqual(title.label, "Privacy warning")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,9 +16,8 @@
|
||||
|
||||
import XCTest
|
||||
|
||||
@testable import RiotSwiftUI
|
||||
@testable import ElementX
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
class TemplateSimpleScreenViewModelTests: XCTestCase {
|
||||
private enum Constants {
|
||||
static let counterInitialValue = 0
|
||||
|
||||
Reference in New Issue
Block a user