11package com.ninecraft.booket.feature.settings
22
33import androidx.compose.runtime.Composable
4- import androidx.compose.runtime.LaunchedEffect
54import androidx.compose.runtime.getValue
65import androidx.compose.runtime.mutableStateOf
76import androidx.compose.runtime.rememberCoroutineScope
@@ -15,6 +14,7 @@ import com.ninecraft.booket.feature.screens.OssLicensesScreen
1514import com.ninecraft.booket.feature.screens.SettingsScreen
1615import com.ninecraft.booket.feature.screens.WebViewScreen
1716import com.orhanobut.logger.Logger
17+ import com.skydoves.compose.effects.RememberedEffect
1818import com.slack.circuit.codegen.annotations.CircuitInject
1919import com.slack.circuit.retained.rememberRetained
2020import com.slack.circuit.runtime.Navigator
@@ -41,26 +41,86 @@ class SettingsPresenter @AssistedInject constructor(
4141 var latestVersion by rememberRetained { mutableStateOf(" " ) }
4242 var sideEffect by rememberRetained { mutableStateOf<SettingsSideEffect ?>(null ) }
4343
44- suspend fun getLatestVersion () {
45- try {
46- isLoading = true
47- remoteConfigRepository.getLatestVersion()
48- .onSuccess { version ->
49- latestVersion = version
50- }
51- .onFailure { exception ->
52- val handleErrorMessage = { message: String ->
53- Logger .e(message)
54- sideEffect = SettingsSideEffect .ShowToast (message)
44+ fun logout () {
45+ scope.launch {
46+ try {
47+ isLoading = true
48+ authRepository.logout()
49+ .onSuccess {
50+ navigator.resetRoot(LoginScreen )
5551 }
52+ .onFailure { exception ->
53+ val handleErrorMessage = { message: String ->
54+ Logger .e(message)
55+ sideEffect = SettingsSideEffect .ShowToast (message)
56+ }
57+
58+ handleException(
59+ exception = exception,
60+ onError = handleErrorMessage,
61+ onLoginRequired = {
62+ navigator.resetRoot(LoginScreen )
63+ },
64+ )
65+ }
66+ } finally {
67+ isLoading = false
68+ isLogoutDialogVisible = false
69+ }
70+ }
71+ }
5672
57- handleException(
58- exception = exception,
59- onError = handleErrorMessage,
60- )
61- }
62- } finally {
63- isLoading = false
73+ fun withdraw () {
74+ scope.launch {
75+ try {
76+ isLoading = true
77+ authRepository.withdraw()
78+ .onSuccess {
79+ navigator.resetRoot(LoginScreen )
80+ }
81+ .onFailure { exception ->
82+ val handleErrorMessage = { message: String ->
83+ Logger .e(message)
84+ sideEffect = SettingsSideEffect .ShowToast (message)
85+ }
86+
87+ handleException(
88+ exception = exception,
89+ onError = handleErrorMessage,
90+ onLoginRequired = {
91+ navigator.resetRoot(LoginScreen )
92+ },
93+ )
94+ }
95+ } finally {
96+ isLoading = false
97+ isWithdrawBottomSheetVisible = false
98+ }
99+ }
100+ }
101+
102+ fun getLatestVersion () {
103+ scope.launch {
104+ try {
105+ isLoading = true
106+ remoteConfigRepository.getLatestVersion()
107+ .onSuccess { version ->
108+ latestVersion = version
109+ }
110+ .onFailure { exception ->
111+ val handleErrorMessage = { message: String ->
112+ Logger .e(message)
113+ sideEffect = SettingsSideEffect .ShowToast (message)
114+ }
115+
116+ handleException(
117+ exception = exception,
118+ onError = handleErrorMessage,
119+ )
120+ }
121+ } finally {
122+ isLoading = false
123+ }
64124 }
65125 }
66126
@@ -107,66 +167,16 @@ class SettingsPresenter @AssistedInject constructor(
107167 }
108168
109169 is SettingsUiEvent .Logout -> {
110- scope.launch {
111- try {
112- isLoading = true
113- authRepository.logout()
114- .onSuccess {
115- navigator.resetRoot(LoginScreen )
116- }
117- .onFailure { exception ->
118- val handleErrorMessage = { message: String ->
119- Logger .e(message)
120- sideEffect = SettingsSideEffect .ShowToast (message)
121- }
122-
123- handleException(
124- exception = exception,
125- onError = handleErrorMessage,
126- onLoginRequired = {
127- navigator.resetRoot(LoginScreen )
128- },
129- )
130- }
131- } finally {
132- isLoading = false
133- }
134- }
135- isLogoutDialogVisible = false
170+ logout()
136171 }
137172
138173 is SettingsUiEvent .Withdraw -> {
139- scope.launch {
140- try {
141- isLoading = true
142- authRepository.withdraw()
143- .onSuccess {
144- navigator.resetRoot(LoginScreen )
145- }
146- .onFailure { exception ->
147- val handleErrorMessage = { message: String ->
148- Logger .e(message)
149- sideEffect = SettingsSideEffect .ShowToast (message)
150- }
151-
152- handleException(
153- exception = exception,
154- onError = handleErrorMessage,
155- onLoginRequired = {
156- navigator.resetRoot(LoginScreen )
157- },
158- )
159- }
160- } finally {
161- isLoading = false
162- }
163- }
164- isWithdrawBottomSheetVisible = false
174+ withdraw()
165175 }
166176 }
167177 }
168178
169- LaunchedEffect (Unit ) {
179+ RememberedEffect (Unit ) {
170180 getLatestVersion()
171181 }
172182
0 commit comments