mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 21:39:12 +00:00
parent
e81d515f7d
commit
50f674a111
@ -100,9 +100,9 @@ class MockScreen: Identifiable {
|
||||
credentials: credentials,
|
||||
keyBackupNeeded: false))
|
||||
case .simpleRegular:
|
||||
return TemplateCoordinator(parameters: .init(promptType: .regular))
|
||||
return TemplateScreenCoordinator(parameters: .init(promptType: .regular))
|
||||
case .simpleUpgrade:
|
||||
return TemplateCoordinator(parameters: .init(promptType: .upgrade))
|
||||
return TemplateScreenCoordinator(parameters: .init(promptType: .upgrade))
|
||||
case .home:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let session = MockUserSession(clientProxy: MockClientProxy(userID: "@mock:matrix.org"),
|
||||
|
@ -17,31 +17,31 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
struct TemplateCoordinatorParameters {
|
||||
let promptType: TemplatePromptType
|
||||
struct TemplateScreenCoordinatorParameters {
|
||||
let promptType: TemplateScreenPromptType
|
||||
}
|
||||
|
||||
enum TemplateCoordinatorAction {
|
||||
enum TemplateScreenCoordinatorAction {
|
||||
case accept
|
||||
case cancel
|
||||
|
||||
// Consider adding CustomStringConvertible conformance if the actions contain PII
|
||||
}
|
||||
|
||||
final class TemplateCoordinator: CoordinatorProtocol {
|
||||
private let parameters: TemplateCoordinatorParameters
|
||||
private var viewModel: TemplateViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<TemplateCoordinatorAction, Never> = .init()
|
||||
final class TemplateScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: TemplateScreenCoordinatorParameters
|
||||
private var viewModel: TemplateScreenViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<TemplateScreenCoordinatorAction, Never> = .init()
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
|
||||
var actions: AnyPublisher<TemplateCoordinatorAction, Never> {
|
||||
var actions: AnyPublisher<TemplateScreenCoordinatorAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(parameters: TemplateCoordinatorParameters) {
|
||||
init(parameters: TemplateScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = TemplateViewModel(promptType: parameters.promptType)
|
||||
viewModel = TemplateScreenViewModel(promptType: parameters.promptType)
|
||||
}
|
||||
|
||||
func start() {
|
@ -16,12 +16,12 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum TemplatePromptType {
|
||||
enum TemplateScreenPromptType {
|
||||
case regular
|
||||
case upgrade
|
||||
}
|
||||
|
||||
extension TemplatePromptType: Identifiable, CaseIterable {
|
||||
extension TemplateScreenPromptType: Identifiable, CaseIterable {
|
||||
var id: Self { self }
|
||||
|
||||
var title: String {
|
||||
@ -43,19 +43,19 @@ extension TemplatePromptType: Identifiable, CaseIterable {
|
||||
}
|
||||
}
|
||||
|
||||
enum TemplateViewModelAction {
|
||||
enum TemplateScreenViewModelAction {
|
||||
case accept
|
||||
case cancel
|
||||
|
||||
// Consider adding CustomStringConvertible conformance if the actions contain PII
|
||||
}
|
||||
|
||||
struct TemplateViewState: BindableState {
|
||||
var promptType: TemplatePromptType
|
||||
struct TemplateScreenViewState: BindableState {
|
||||
var promptType: TemplateScreenPromptType
|
||||
var count: Int
|
||||
}
|
||||
|
||||
enum TemplateViewAction {
|
||||
enum TemplateScreenViewAction {
|
||||
case incrementCount
|
||||
case decrementCount
|
||||
case accept
|
@ -17,22 +17,22 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias TemplateViewModelType = StateStoreViewModel<TemplateViewState, TemplateViewAction>
|
||||
typealias TemplateScreenViewModelType = StateStoreViewModel<TemplateScreenViewState, TemplateScreenViewAction>
|
||||
|
||||
class TemplateViewModel: TemplateViewModelType, TemplateViewModelProtocol {
|
||||
private var actionsSubject: PassthroughSubject<TemplateViewModelAction, Never> = .init()
|
||||
class TemplateScreenViewModel: TemplateScreenViewModelType, TemplateScreenViewModelProtocol {
|
||||
private var actionsSubject: PassthroughSubject<TemplateScreenViewModelAction, Never> = .init()
|
||||
|
||||
var actions: AnyPublisher<TemplateViewModelAction, Never> {
|
||||
var actions: AnyPublisher<TemplateScreenViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(promptType: TemplatePromptType, initialCount: Int = 0) {
|
||||
super.init(initialViewState: TemplateViewState(promptType: promptType, count: 0))
|
||||
init(promptType: TemplateScreenPromptType, initialCount: Int = 0) {
|
||||
super.init(initialViewState: TemplateScreenViewState(promptType: promptType, count: 0))
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: TemplateViewAction) {
|
||||
override func process(viewAction: TemplateScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .accept:
|
||||
actionsSubject.send(.accept)
|
@ -17,7 +17,7 @@
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
protocol TemplateViewModelProtocol {
|
||||
var actions: AnyPublisher<TemplateViewModelAction, Never> { get }
|
||||
var context: TemplateViewModelType.Context { get }
|
||||
protocol TemplateScreenViewModelProtocol {
|
||||
var actions: AnyPublisher<TemplateScreenViewModelAction, Never> { get }
|
||||
var context: TemplateScreenViewModelType.Context { get }
|
||||
}
|
@ -23,7 +23,7 @@ struct TemplateScreen: View {
|
||||
colorScheme == .light ? .element.secondaryContent : .element.tertiaryContent
|
||||
}
|
||||
|
||||
@ObservedObject var context: TemplateViewModel.Context
|
||||
@ObservedObject var context: TemplateScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
@ -92,9 +92,9 @@ struct TemplateScreen: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct Template_Previews: PreviewProvider {
|
||||
static let regularViewModel = TemplateViewModel(promptType: .regular)
|
||||
static let upgradeViewModel = TemplateViewModel(promptType: .upgrade)
|
||||
struct TemplateScreen_Previews: PreviewProvider {
|
||||
static let regularViewModel = TemplateScreenViewModel(promptType: .regular)
|
||||
static let upgradeViewModel = TemplateScreenViewModel(promptType: .upgrade)
|
||||
static var previews: some View {
|
||||
TemplateScreen(context: regularViewModel.context)
|
||||
.previewDisplayName("Regular")
|
||||
|
@ -24,14 +24,14 @@ class TemplateScreenViewModelTests: XCTestCase {
|
||||
static let counterInitialValue = 0
|
||||
}
|
||||
|
||||
var viewModel: TemplateViewModelProtocol!
|
||||
var viewModel: TemplateScreenViewModelProtocol!
|
||||
|
||||
var context: TemplateViewModelType.Context {
|
||||
var context: TemplateScreenViewModelType.Context {
|
||||
viewModel.context
|
||||
}
|
||||
|
||||
override func setUpWithError() throws {
|
||||
viewModel = TemplateViewModel(promptType: .regular, initialCount: Constants.counterInitialValue)
|
||||
viewModel = TemplateScreenViewModel(promptType: .regular, initialCount: Constants.counterInitialValue)
|
||||
}
|
||||
|
||||
func testInitialState() {
|
@ -1,11 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ ! $# -eq 2 ]; then
|
||||
echo "Usage: ./createScreen.sh Folder MyScreenName"
|
||||
GREEN='\033[0;32m'
|
||||
NOCOLOR='\033[0m'
|
||||
|
||||
if [ ! $# -eq 1 ]; then
|
||||
echo -e "Usage: ${GREEN}./createScreen.sh Name${NOCOLOR}"
|
||||
echo -e "For example ${GREEN}./createScreen.sh Home${NOCOLOR} will create ${GREEN}HomeScreen${NOCOLOR}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCREENS_DIR="../../ElementX/Sources/Screens"/$1
|
||||
SCREENS_DIR="../../ElementX/Sources/Screens"/$1Screen
|
||||
UI_TESTS_DIR="../../UITests/Sources"
|
||||
UNIT_TESTS_DIR="../../UnitTests/Sources"
|
||||
|
||||
@ -28,7 +32,7 @@ cp -R "Templates/SimpleScreenExample/Tests/UI/" $UI_TESTS_DIR/
|
||||
|
||||
cp -R "Templates/SimpleScreenExample/Tests/Unit/" $UNIT_TESTS_DIR/
|
||||
|
||||
SCREEN_NAME=$2
|
||||
SCREEN_NAME=$1
|
||||
SCREEN_VAR_NAME=`echo $SCREEN_NAME | awk '{ print tolower(substr($0, 1, 1)) substr($0, 2) }'`
|
||||
|
||||
function rename_files {
|
||||
|
Loading…
x
Reference in New Issue
Block a user