Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -598,7 +598,8 @@ private fun FolderDeleteAlertDialog(
title = folderDeleteDescription,
description = folderDeleteExplanation,
onClickConfirm = onClickConfirm,
onClickCancel = { onShowChange(false) }
onClickCancel = { onShowChange(false) },
onClickConfirmText = stringResource(R.string.delete)
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package daily.dayo.presentation.screen.post

import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
Expand Down Expand Up @@ -36,7 +37,6 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
Expand All @@ -58,8 +58,10 @@ import daily.dayo.presentation.view.CommentReplyDescriptionView
import daily.dayo.presentation.view.CommentTextField
import daily.dayo.presentation.view.DEFAULT_POST
import daily.dayo.presentation.view.DetailPostView
import daily.dayo.presentation.view.Loading
import daily.dayo.presentation.view.TopNavigation
import daily.dayo.presentation.view.dialog.CommentReportDialog
import daily.dayo.presentation.view.dialog.ConfirmDialog
import daily.dayo.presentation.view.dialog.DEFAULT_COMMENTS
import daily.dayo.presentation.viewmodel.PostViewModel
import daily.dayo.presentation.viewmodel.ReportViewModel
Expand All @@ -86,11 +88,12 @@ fun PostScreen(
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
val keyboardController = LocalSoftwareKeyboardController.current
var loadingVisible by remember { mutableStateOf(false) }

// post option
val onPostModifyClick: (Long) -> Unit = { onPostEditClick(postId) }
val onPostDeleteClick: (Long) -> Unit = { postViewModel.requestDeletePost(postId) }
val postDeleteSuccess by postViewModel.postDeleteSuccess.collectAsStateWithLifecycle(false)
var showPostDeleteAlertDialog by remember { mutableStateOf(false) }
val onPostDeleteClick: (Long) -> Unit = { showPostDeleteAlertDialog = true }

// comment
val commentState = postViewModel.postComments.observeAsState()
Expand Down Expand Up @@ -184,9 +187,35 @@ fun PostScreen(
postViewModel.requestPostComment(postId)
}

BackHandler(enabled = loadingVisible) {}

LaunchedEffect(Unit) {
postViewModel.requestPostDetail(postId)
postViewModel.requestPostComment(postId)

launch {
postViewModel.postDeleteSuccess.collect { status ->
when (status) {
Status.LOADING -> {
loadingVisible = true
}

Status.SUCCESS -> {
loadingVisible = false
onBackClick()
}

Status.ERROR -> {
loadingVisible = false
coroutineScope.launch {
snackBarHostState.showSnackbar(
context.getString(R.string.post_option_mine_delete_message_fail)
)
}
}
}
}
}
}

LaunchedEffect(postState.value) {
Expand All @@ -196,11 +225,7 @@ fun PostScreen(
}
}

LaunchedEffect(postDeleteSuccess) {
if (postDeleteSuccess) {
onBackClick()
}
}
Loading(isVisible = loadingVisible)

PostScreen(
postId = postId,
Expand Down Expand Up @@ -256,6 +281,18 @@ fun PostScreen(
)
}
}

if (showPostDeleteAlertDialog) {
PostDeleteAlertDialog(
onClickConfirm = {
showPostDeleteAlertDialog = false
postViewModel.requestDeletePost(postId)
},
onClickCancel = {
showPostDeleteAlertDialog = false
}
)
}
}

@Composable
Expand Down Expand Up @@ -381,6 +418,20 @@ private fun PostScreen(
}
}

@Composable
private fun PostDeleteAlertDialog(
onClickConfirm: () -> Unit,
onClickCancel: () -> Unit
) {
ConfirmDialog(
title = stringResource(R.string.post_option_mine_delete_alert_description),
description = stringResource(R.string.post_option_mine_delete_alert_explanation),
onClickConfirm = onClickConfirm,
onClickConfirmText = stringResource(R.string.delete),
onClickCancel = onClickCancel
)
}

@Preview
@Composable
private fun PreviewPostScreen() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package daily.dayo.presentation.view.dialog

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
Expand Down Expand Up @@ -41,7 +42,7 @@ fun ConfirmDialog(
Dialog(
onDismissRequest = onClickCancel ?: onClickConfirm,
) {
Surface(
Box(
modifier = modifier
.background(
DayoTheme.colorScheme.background,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import daily.dayo.domain.usecase.post.RequestDeletePostUseCase
import daily.dayo.domain.usecase.post.RequestPostDetailUseCase
import daily.dayo.presentation.common.Event
import daily.dayo.presentation.common.Resource
import daily.dayo.presentation.common.Status
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down Expand Up @@ -62,7 +63,7 @@ class PostViewModel @Inject constructor(
private val _postComments = MutableLiveData<Resource<Comments>>()
val postComments: LiveData<Resource<Comments>> = _postComments

private val _postDeleteSuccess = MutableSharedFlow<Boolean>()
private val _postDeleteSuccess = MutableSharedFlow<Status>()
val postDeleteSuccess = _postDeleteSuccess.asSharedFlow()

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

fun requestDeletePost(postId: Long) {
viewModelScope.launch {
_postDeleteSuccess.emit(Status.LOADING)
requestDeletePostUseCase(postId).let { response ->
when (response) {
is NetworkResponse.Success -> _postDeleteSuccess.emit(true)
else -> _postDeleteSuccess.emit(false)
is NetworkResponse.Success -> _postDeleteSuccess.emit(Status.SUCCESS)
else -> _postDeleteSuccess.emit(Status.ERROR)
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions presentation/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@
<string name="post_comment_empty_description">이 게시글에 대해 댓글을 남겨주세요</string>
<string name="post_option_mine_modify">게시물 수정</string>
<string name="post_option_mine_delete">게시물 삭제</string>
<string name="post_option_mine_delete_alert_description">이 게시글을 정말 삭제할까요?</string>
<string name="post_option_mine_delete_alert_explanation">삭제된 게시글은 다시 되돌릴 수 없어요.</string>
<string name="post_option_mine_delete_message_fail">게시글을 삭제 할 수 없어요. 다시 시도해주세요.</string>

<!-- Comment -->
<string name="comment_button_text">남기기</string>
Expand Down