11package daily.dayo.presentation.screen.post
22
3+ import androidx.activity.compose.BackHandler
34import androidx.compose.foundation.layout.Column
45import androidx.compose.foundation.layout.Row
56import androidx.compose.foundation.layout.Spacer
@@ -36,7 +37,6 @@ import androidx.compose.ui.text.input.TextFieldValue
3637import androidx.compose.ui.tooling.preview.Preview
3738import androidx.compose.ui.unit.dp
3839import androidx.hilt.navigation.compose.hiltViewModel
39- import androidx.lifecycle.compose.collectAsStateWithLifecycle
4040import androidx.paging.PagingData
4141import androidx.paging.compose.LazyPagingItems
4242import androidx.paging.compose.collectAsLazyPagingItems
@@ -58,8 +58,10 @@ import daily.dayo.presentation.view.CommentReplyDescriptionView
5858import daily.dayo.presentation.view.CommentTextField
5959import daily.dayo.presentation.view.DEFAULT_POST
6060import daily.dayo.presentation.view.DetailPostView
61+ import daily.dayo.presentation.view.Loading
6162import daily.dayo.presentation.view.TopNavigation
6263import daily.dayo.presentation.view.dialog.CommentReportDialog
64+ import daily.dayo.presentation.view.dialog.ConfirmDialog
6365import daily.dayo.presentation.view.dialog.DEFAULT_COMMENTS
6466import daily.dayo.presentation.viewmodel.PostViewModel
6567import daily.dayo.presentation.viewmodel.ReportViewModel
@@ -86,11 +88,12 @@ fun PostScreen(
8688 val context = LocalContext .current
8789 val coroutineScope = rememberCoroutineScope()
8890 val keyboardController = LocalSoftwareKeyboardController .current
91+ var loadingVisible by remember { mutableStateOf(false ) }
8992
9093 // post option
9194 val onPostModifyClick: (Long ) -> Unit = { onPostEditClick(postId) }
92- val onPostDeleteClick : ( Long ) -> Unit = { postViewModel.requestDeletePost(postId ) }
93- val postDeleteSuccess by postViewModel.postDeleteSuccess.collectAsStateWithLifecycle( false )
95+ var showPostDeleteAlertDialog by remember { mutableStateOf( false ) }
96+ val onPostDeleteClick : ( Long ) -> Unit = { showPostDeleteAlertDialog = true }
9497
9598 // comment
9699 val commentState = postViewModel.postComments.observeAsState()
@@ -184,9 +187,35 @@ fun PostScreen(
184187 postViewModel.requestPostComment(postId)
185188 }
186189
190+ BackHandler (enabled = loadingVisible) {}
191+
187192 LaunchedEffect (Unit ) {
188193 postViewModel.requestPostDetail(postId)
189194 postViewModel.requestPostComment(postId)
195+
196+ launch {
197+ postViewModel.postDeleteSuccess.collect { status ->
198+ when (status) {
199+ Status .LOADING -> {
200+ loadingVisible = true
201+ }
202+
203+ Status .SUCCESS -> {
204+ loadingVisible = false
205+ onBackClick()
206+ }
207+
208+ Status .ERROR -> {
209+ loadingVisible = false
210+ coroutineScope.launch {
211+ snackBarHostState.showSnackbar(
212+ context.getString(R .string.post_option_mine_delete_message_fail)
213+ )
214+ }
215+ }
216+ }
217+ }
218+ }
190219 }
191220
192221 LaunchedEffect (postState.value) {
@@ -196,11 +225,7 @@ fun PostScreen(
196225 }
197226 }
198227
199- LaunchedEffect (postDeleteSuccess) {
200- if (postDeleteSuccess) {
201- onBackClick()
202- }
203- }
228+ Loading (isVisible = loadingVisible)
204229
205230 PostScreen (
206231 postId = postId,
@@ -256,6 +281,18 @@ fun PostScreen(
256281 )
257282 }
258283 }
284+
285+ if (showPostDeleteAlertDialog) {
286+ PostDeleteAlertDialog (
287+ onClickConfirm = {
288+ showPostDeleteAlertDialog = false
289+ postViewModel.requestDeletePost(postId)
290+ },
291+ onClickCancel = {
292+ showPostDeleteAlertDialog = false
293+ }
294+ )
295+ }
259296}
260297
261298@Composable
@@ -381,6 +418,20 @@ private fun PostScreen(
381418 }
382419}
383420
421+ @Composable
422+ private fun PostDeleteAlertDialog (
423+ onClickConfirm : () -> Unit ,
424+ onClickCancel : () -> Unit
425+ ) {
426+ ConfirmDialog (
427+ title = stringResource(R .string.post_option_mine_delete_alert_description),
428+ description = stringResource(R .string.post_option_mine_delete_alert_explanation),
429+ onClickConfirm = onClickConfirm,
430+ onClickConfirmText = stringResource(R .string.delete),
431+ onClickCancel = onClickCancel
432+ )
433+ }
434+
384435@Preview
385436@Composable
386437private fun PreviewPostScreen () {
0 commit comments