Skip to content

Commit 9b7010d

Browse files
author
Alex
committed
Merge remote-tracking branch 'origin/master'
2 parents eae1a38 + d5f820d commit 9b7010d

File tree

1 file changed

+48
-39
lines changed

1 file changed

+48
-39
lines changed

README.md

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,43 +29,53 @@ class EnterSmsCodeViewModel(
2929
private val requestSmsCode: RequestSmsCode,
3030
private val registerOrSignIn: RegisterOrSignIn
3131
): ReactiveViewModel() {
32-
val isProgress = state(false)
33-
34-
val inputSmsCode = inputControl()
35-
36-
val actionSendSmsCodeAgain = actionEmpty()
37-
38-
val eventError = event<Throwable>()
39-
val eventDone = eventEmpty()
40-
val eventShowSmsCode = event<String>()
32+
33+
private val eventCancelTimer = eventNone()
34+
35+
val progressVisibility = state(initValue, PROGRESS_DEBOUNCE_INTERVAL)
36+
val timerVisibility = state(false)
37+
val timerValue = state<Long>()
38+
val blocked = state(false)
39+
40+
val inputCode = inputControl()
41+
42+
val eventWrongSmsCode = eventNone()
43+
val eventGoToTripStart = eventNone()
44+
val eventGoToAcceptPolicy = eventNone()
45+
val eventCodeExpired = eventNone()
46+
47+
val actionSendCodeAgainClick = debouncedActionNone()
4148

4249
init {
43-
inputSmsCode.value
44-
.observable
45-
.debounce(250, TimeUnit.MILLISECONDS)
46-
.filter { it.length == SMS_CODE_LENGTH }
47-
.switchMapSingle {
48-
registerOrSignIn
49-
.asSingle(RegisterOrSignIn.Params(fullPhoneNumber, it))
50-
.bindProgress(isProgress.consumer)
51-
.doOnError(eventError.consumer)
52-
}
53-
.retry()
54-
.subscribe { eventDone.call() }
55-
.disposeOnCleared()
56-
57-
actionSendSmsCodeAgain
58-
.observable
59-
.filter { isProgress.value == false }
60-
.switchMap {
61-
requestSmsCode
62-
.asSingle(fullPhoneNumber)
63-
.bindProgress(isProgress.consumer)
64-
.doOnError(eventError.consumer)
50+
inputCode.value.observable
51+
.filter { blocked.value == false && progressVisibility.value == false }
52+
.debounce()
53+
.filter { it.length == SMS_CODE_LENGTH }
54+
.doOnNext { analyticsManager.trackEvent(AppAnalyticEvents.ConfirmPhone) }
55+
.switchMapSingle { register(it) }
56+
.doOnError { inputCode.actionChangeValue.call("") }
57+
.retry()
58+
.subscribe {
59+
when {
60+
it -> eventGoToTripStart.call()
61+
else -> eventGoToAcceptPolicy.call()
62+
}
6563
}
64+
.disposeOnCleared()
65+
66+
actionSendCodeAgainClick.observable
67+
.filter { blocked.value == false && timerVisibility.value == false && progressVisibility.value == false }
68+
.switchMapSingle { requestCode() }
69+
.switchMap { getTimerObservable(it) }
6670
.retry()
67-
.subscribe(eventShowSmsCode.consumer)
71+
.subscribe()
6872
.disposeOnCleared()
73+
74+
getRequestSmsTimerValue.execute(Unit)
75+
.takeIf { it > 0 }
76+
?.let { getTimerObservable(it) }
77+
?.subscribe()
78+
?.disposeOnCleared()
6979
}
7080
}
7181
```
@@ -88,16 +98,15 @@ class EnterSmsCodeFragment : ReactiveFragment() {
8898
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8999
super.onViewCreated(view, savedInstanceState)
90100

91-
viewModel.isProgress.observe { if (it) showProgress() else hideProgress() }
101+
viewModel.progressVisibility.observe { if (it) showProgress() else hideProgress() }
102+
viewModel.timerValue.observe { tvTimer.text = formatTimer(it) }
103+
viewModel.timerVisibility.observe { tvTimer.isVisible = it }
92104

93105
viewModel.eventError.observe { showError(it) }
94-
viewModel.eventDone.observe { router.newRootScreen(Screens.Main.TripSetupFlowScreen()) }
106+
viewModel.eventGoToTripStart.observe { router.newRootScreen(Screens.Main.TripSetupFlowScreen()) }
95107

96-
viewModel.inputSmsCode
97-
.bindTo(etSmsCode)
98-
.disposeOnDestroyView("inputSmsCode")
99-
100-
viewModel.actionSendSmsCodeAgain.bindOnClick(btnSendSmsAgain)
108+
viewModel.inputCode.bindTo(etSmsCode)
109+
viewModel.actionSendCodeAgainClick.bindOnClick(btnSendAgain)
101110
}
102111

103112
}

0 commit comments

Comments
 (0)