40. 仂亟仂亞亠仆亠舒亳 2
丼仂?
. . .
extension SignUpEmailViewModel.Model {
static func mock(
result result: Action<SignUpStepResult<SignUp.Email>, SignUp.Email, NoError> = Action { _ in .empty },
stringsService: StringsService = Strings.mockedLocalized,
analytics: AnalyticsService = { _ in }
) -> SignUpEmailViewModel.Model {
return SignUpEmailViewModel.Model(
result: result,
stringsService: stringsService,
analytics: analytics
)
}
}
extension SignUpEmailViewModel {
final class TestView: TestViewType {
let navigationTitle = ValueTestView<String>()
let emailDescription = ValueTestView<String>()
let emailPlaceholder = ValueTestView<String>()
let emailClearButtonMode = ValueTestView<UITextFieldViewMode>()
let status = ValueTestView<String>()
let statusStyle = ValueTestView<StatusStyle>()
let stepsLabel = ValueTestView<String>()
let originalEmail = ValueTestView<String>()
let emailSink = ValueTestView<String -> ()>()
let nextActive = ValueTestView<Bool>()
let next = ValueTestView<Action<Void, Void, NoError>>()
let nextTitle = ValueTestView<String>()
let keyboardFocus = ValueTestView<FocusType>()
let keyboardType = ValueTestView<UIKeyboardType>()
let keyboardReturnKeyType = ValueTestView<UIReturnKeyType>()
let touchOutsideSink = ValueTestView<SimpleAction>()
let back = ValueTestView<Action<Void, Void, NoError>>()
let willDisappear = ValueTestView<AppearanceAction>()
let disposable: ScopedDisposable?
init(_ viewModel: SignUpEmailViewModel) { }
}
}
. . .
struct SignUpEmailViewModel: ViewModelType {
struct Model {
let result: Action<SignUpStepResult<SignUp.Email>, SignUp.Email, NoError>
let stringsService: StringsService
let analytics: AnalyticsService
}
struct Presenters {
let navigationTitle: Presenter<String>
let emailDescription: Presenter<String>
let emailPlaceholder: Presenter<String>
let emailClearButtonMode: Presenter<UITextFieldViewMode>
let status: SerialPresenter<String>
let statusStyle: SerialPresenter<StatusStyle>
let stepsLabel: Presenter<String>
let originalEmail: Presenter<String>
let emailSink: Presenter<String -> ()>
let nextActive: SerialPresenter<Bool>
let next: Presenter<Action<Void, Void, NoError>>
let nextTitle: Presenter<String>
let keyboardFocus: SerialPresenter<FocusType>
let keyboardType: Presenter<UIKeyboardType>
let keyboardReturnKeyType: Presenter<UIReturnKeyType>
let touchOutsideSink: Presenter<SimpleAction>
let back: Presenter<Action<Void, Void, NoError>>
let willDisappear: Presenter<AppearanceAction>
}
. . .
}