Skip to content

Commit 935856d

Browse files
authored
Merge pull request #709 from Daily-DAYO/feature/issue-704
Add confirmation dialog when deleting a post
2 parents a55e7be + ddd609a commit 935856d

5 files changed

Lines changed: 71 additions & 13 deletions

File tree

presentation/src/main/java/daily/dayo/presentation/screen/folder/FolderScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,8 @@ private fun FolderDeleteAlertDialog(
598598
title = folderDeleteDescription,
599599
description = folderDeleteExplanation,
600600
onClickConfirm = onClickConfirm,
601-
onClickCancel = { onShowChange(false) }
601+
onClickCancel = { onShowChange(false) },
602+
onClickConfirmText = stringResource(R.string.delete)
602603
)
603604
}
604605

presentation/src/main/java/daily/dayo/presentation/screen/post/PostScreen.kt

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package daily.dayo.presentation.screen.post
22

3+
import androidx.activity.compose.BackHandler
34
import androidx.compose.foundation.layout.Column
45
import androidx.compose.foundation.layout.Row
56
import androidx.compose.foundation.layout.Spacer
@@ -36,7 +37,6 @@ import androidx.compose.ui.text.input.TextFieldValue
3637
import androidx.compose.ui.tooling.preview.Preview
3738
import androidx.compose.ui.unit.dp
3839
import androidx.hilt.navigation.compose.hiltViewModel
39-
import androidx.lifecycle.compose.collectAsStateWithLifecycle
4040
import androidx.paging.PagingData
4141
import androidx.paging.compose.LazyPagingItems
4242
import androidx.paging.compose.collectAsLazyPagingItems
@@ -58,8 +58,10 @@ import daily.dayo.presentation.view.CommentReplyDescriptionView
5858
import daily.dayo.presentation.view.CommentTextField
5959
import daily.dayo.presentation.view.DEFAULT_POST
6060
import daily.dayo.presentation.view.DetailPostView
61+
import daily.dayo.presentation.view.Loading
6162
import daily.dayo.presentation.view.TopNavigation
6263
import daily.dayo.presentation.view.dialog.CommentReportDialog
64+
import daily.dayo.presentation.view.dialog.ConfirmDialog
6365
import daily.dayo.presentation.view.dialog.DEFAULT_COMMENTS
6466
import daily.dayo.presentation.viewmodel.PostViewModel
6567
import 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
386437
private fun PreviewPostScreen() {

presentation/src/main/java/daily/dayo/presentation/view/dialog/ConfirmDialog.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package daily.dayo.presentation.view.dialog
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.Row
78
import androidx.compose.foundation.layout.fillMaxWidth
@@ -41,7 +42,7 @@ fun ConfirmDialog(
4142
Dialog(
4243
onDismissRequest = onClickCancel ?: onClickConfirm,
4344
) {
44-
Surface(
45+
Box(
4546
modifier = modifier
4647
.background(
4748
DayoTheme.colorScheme.background,

presentation/src/main/java/daily/dayo/presentation/viewmodel/PostViewModel.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import daily.dayo.domain.usecase.post.RequestDeletePostUseCase
2929
import daily.dayo.domain.usecase.post.RequestPostDetailUseCase
3030
import daily.dayo.presentation.common.Event
3131
import daily.dayo.presentation.common.Resource
32+
import daily.dayo.presentation.common.Status
3233
import kotlinx.coroutines.Dispatchers
3334
import kotlinx.coroutines.flow.MutableSharedFlow
3435
import kotlinx.coroutines.flow.MutableStateFlow
@@ -62,7 +63,7 @@ class PostViewModel @Inject constructor(
6263
private val _postComments = MutableLiveData<Resource<Comments>>()
6364
val postComments: LiveData<Resource<Comments>> = _postComments
6465

65-
private val _postDeleteSuccess = MutableSharedFlow<Boolean>()
66+
private val _postDeleteSuccess = MutableSharedFlow<Status>()
6667
val postDeleteSuccess = _postDeleteSuccess.asSharedFlow()
6768

6869
private val _postCommentCreateSuccess = MutableLiveData<Event<Boolean>>()
@@ -114,10 +115,11 @@ class PostViewModel @Inject constructor(
114115

115116
fun requestDeletePost(postId: Long) {
116117
viewModelScope.launch {
118+
_postDeleteSuccess.emit(Status.LOADING)
117119
requestDeletePostUseCase(postId).let { response ->
118120
when (response) {
119-
is NetworkResponse.Success -> _postDeleteSuccess.emit(true)
120-
else -> _postDeleteSuccess.emit(false)
121+
is NetworkResponse.Success -> _postDeleteSuccess.emit(Status.SUCCESS)
122+
else -> _postDeleteSuccess.emit(Status.ERROR)
121123
}
122124
}
123125
}

presentation/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@
138138
<string name="post_comment_empty_description">이 게시글에 대해 댓글을 남겨주세요</string>
139139
<string name="post_option_mine_modify">게시물 수정</string>
140140
<string name="post_option_mine_delete">게시물 삭제</string>
141+
<string name="post_option_mine_delete_alert_description">이 게시글을 정말 삭제할까요?</string>
142+
<string name="post_option_mine_delete_alert_explanation">삭제된 게시글은 다시 되돌릴 수 없어요.</string>
143+
<string name="post_option_mine_delete_message_fail">게시글을 삭제 할 수 없어요. 다시 시도해주세요.</string>
141144

142145
<!-- Comment -->
143146
<string name="comment_button_text">남기기</string>

0 commit comments

Comments
 (0)