Skip to content

Commit 41bfdb3

Browse files
committed
[BOOK-112] refactor: derivedStateOf로 전체 동의 및 시작 버튼 상태 계산 로직 변경
1 parent 7a30f4a commit 41bfdb3

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/TermsAgreementPresenter.kt

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.ninecraft.booket.feature.login
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.derivedStateOf
45
import androidx.compose.runtime.getValue
56
import androidx.compose.runtime.mutableStateListOf
6-
import androidx.compose.runtime.mutableStateOf
7-
import androidx.compose.runtime.setValue
7+
import androidx.compose.runtime.remember
88
import com.ninecraft.booket.feature.home.HomeScreen
99
import com.slack.circuit.codegen.annotations.CircuitInject
1010
import com.slack.circuit.retained.rememberRetained
@@ -21,39 +21,41 @@ class TermsAgreementPresenter @AssistedInject constructor(
2121

2222
@Composable
2323
override fun present(): TermsAgreementScreen.State {
24-
var isAllAgreed by rememberRetained { mutableStateOf(false) }
2524
val agreedTerms = rememberRetained { mutableStateListOf(false, false, false) }
26-
var isStartButtonEnabled by rememberRetained { mutableStateOf(false) }
25+
26+
val isAllAgreed by remember {
27+
derivedStateOf {
28+
agreedTerms.all { it }
29+
}
30+
}
31+
32+
val isStartButtonEnabled by remember {
33+
derivedStateOf {
34+
isAllAgreed
35+
}
36+
}
2737

2838
fun handleEvent(event: TermsAgreementScreen.Event) {
2939
when (event) {
3040
is TermsAgreementScreen.Event.OnAllTermsAgreedClick -> {
31-
isAllAgreed = !isAllAgreed
32-
isStartButtonEnabled = isAllAgreed
33-
41+
val toggleAgreed = !isAllAgreed
3442
for (i in agreedTerms.indices) {
35-
agreedTerms[i] = isAllAgreed
43+
agreedTerms[i] = toggleAgreed
3644
}
3745
}
46+
3847
is TermsAgreementScreen.Event.OnTermItemClick -> {
3948
agreedTerms[event.index] = !agreedTerms[event.index]
40-
41-
val allIndividualAgreed = agreedTerms.all { it }
42-
43-
if (allIndividualAgreed) {
44-
isAllAgreed = true
45-
isStartButtonEnabled = true
46-
} else {
47-
isAllAgreed = false
48-
isStartButtonEnabled = false
49-
}
5049
}
50+
5151
is TermsAgreementScreen.Event.OnBackClick -> {
5252
navigator.pop()
5353
}
54+
5455
is TermsAgreementScreen.Event.OnTermDetailClick -> {
5556
// TODO: 웹뷰 화면으로 이동
5657
}
58+
5759
is TermsAgreementScreen.Event.OnStartButtonClick -> {
5860
navigator.resetRoot(HomeScreen)
5961
}

0 commit comments

Comments
 (0)