11package com.texthip.thip.ui.mypage.screen
22
3+ import android.widget.Toast
34import androidx.compose.foundation.background
45import androidx.compose.foundation.clickable
56import androidx.compose.foundation.layout.Arrangement
@@ -12,15 +13,18 @@ import androidx.compose.foundation.layout.fillMaxWidth
1213import androidx.compose.foundation.layout.height
1314import androidx.compose.foundation.layout.padding
1415import androidx.compose.foundation.shape.RoundedCornerShape
16+ import androidx.compose.material3.CircularProgressIndicator
1517import androidx.compose.material3.Icon
1618import androidx.compose.material3.Text
1719import androidx.compose.runtime.Composable
20+ import androidx.compose.runtime.LaunchedEffect
1821import androidx.compose.runtime.getValue
1922import androidx.compose.runtime.mutableStateOf
2023import androidx.compose.runtime.saveable.rememberSaveable
2124import androidx.compose.runtime.setValue
2225import androidx.compose.ui.Alignment
2326import androidx.compose.ui.Modifier
27+ import androidx.compose.ui.platform.LocalContext
2428import androidx.compose.ui.res.painterResource
2529import androidx.compose.ui.res.stringResource
2630import androidx.compose.ui.text.SpanStyle
@@ -29,22 +33,44 @@ import androidx.compose.ui.text.withStyle
2933import androidx.compose.ui.tooling.preview.Preview
3034import androidx.compose.ui.unit.dp
3135import androidx.compose.ui.window.Dialog
36+ import androidx.hilt.navigation.compose.hiltViewModel
37+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
3238import com.texthip.thip.R
3339import com.texthip.thip.ui.common.buttons.CheckboxButton
3440import com.texthip.thip.ui.common.modal.DialogPopup
3541import com.texthip.thip.ui.common.topappbar.DefaultTopAppBar
42+ import com.texthip.thip.ui.mypage.viewmodel.DeleteAccountViewModel
3643import com.texthip.thip.ui.theme.DarkGrey02
3744import com.texthip.thip.ui.theme.Red
3845import com.texthip.thip.ui.theme.ThipTheme.colors
3946import com.texthip.thip.ui.theme.ThipTheme.typography
4047
4148@Composable
4249fun DeleteAccountScreen (
43- onNavigateBack : () -> Unit
50+ onNavigateBack : () -> Unit ,
51+ onNavigateToLogin : () -> Unit ,
52+ viewModel : DeleteAccountViewModel = hiltViewModel()
4453) {
54+ val context = LocalContext .current
55+ val uiState = viewModel.uiState.collectAsStateWithLifecycle().value
56+
4557 var isChecked by rememberSaveable { mutableStateOf(false ) }
4658 val backgroundColor = if (isChecked) colors.Purple else colors.Grey02
4759 var isDialogVisible by rememberSaveable { mutableStateOf(false ) }
60+
61+ // 회원탈퇴 완료 시 로그인 화면으로 이동
62+ LaunchedEffect (uiState.isDeleteCompleted) {
63+ if (uiState.isDeleteCompleted) {
64+ onNavigateToLogin()
65+ }
66+ }
67+
68+ // 에러 메시지 표시
69+ LaunchedEffect (uiState.errorMessage) {
70+ uiState.errorMessage?.let { message ->
71+ Toast .makeText(context, message, Toast .LENGTH_SHORT ).show()
72+ }
73+ }
4874
4975 Column (
5076 Modifier
@@ -159,19 +185,30 @@ fun DeleteAccountScreen(
159185 onCancel = { isDialogVisible = false },
160186 onConfirm = {
161187 isDialogVisible = false
162- // TODO: 회원탈퇴 로직
188+ viewModel.deleteAccount(context)
163189 }
164190 )
165191 }
166192 }
167193 }
194+
195+ // 로딩 중일 때 전체 화면에 로딩 인디케이터 표시
196+ if (uiState.isLoading) {
197+ Box (
198+ modifier = Modifier .fillMaxSize(),
199+ contentAlignment = Alignment .Center
200+ ) {
201+ CircularProgressIndicator ()
202+ }
203+ }
168204 }
169205}
170206
171207@Preview
172208@Composable
173209private fun DeleteAccountScreenPrev () {
174210 DeleteAccountScreen (
175- onNavigateBack = {}
211+ onNavigateBack = {},
212+ onNavigateToLogin = {}
176213 )
177214}
0 commit comments