Newer
Older
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
struct NicknameViewState {
var nickname: String = ""
var status: InputField.ValidationStatus = .unknown(nil)
}
final class NicknameViewModel {
// MARK: Properties
var state: AnyPublisher<NicknameViewState, Never> {
stateRelay.eraseToAnyPublisher()
}
var done: AnyPublisher<String, Never> {
doneRelay.eraseToAnyPublisher()
}
private let doneRelay = PassthroughSubject<String, Never>()
private let stateRelay = CurrentValueSubject<NicknameViewState, Never>(.init())
// MARK: Public
func didInput(_ string: String) {
stateRelay.value.nickname = string
validate()
}
func didTapSave() {
doneRelay.send(stateRelay.value.nickname.trimmingCharacters(in: .whitespacesAndNewlines))
}
// MARK: Private
private func validate() {
if stateRelay.value.nickname.trimmingCharacters(in: .whitespacesAndNewlines).count >= 1 {
stateRelay.value.status = .valid(nil)
} else {
stateRelay.value.status = .invalid(Localized.Contact.Nickname.minimum)
}
}
}