Skip to content

Commit 1986c7b

Browse files
committed
[fix] 재난상황 커뮤니티 댓글 좋아요 로직 수정
1 parent d4cc308 commit 1986c7b

File tree

6 files changed

+63
-55
lines changed

6 files changed

+63
-55
lines changed

app/src/main/java/com/daepiro/numberoneproject/presentation/view/community/CommunityTabABottomSheetAdapter.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,30 @@ class CommunityTabABottomSheetAdapter(
4949
holder.content.text = item.content
5050
subadapter.updateList(item.childs)
5151
holder.itemView.setOnClickListener{
52-
listener.onItemClickListener()//그냥 배경만 활성화되는 정도
52+
listener.onItemClickListener()
5353
}
5454

5555
if(item.isLiked) {
5656
holder.likeBtn.setColorFilter(ContextCompat.getColor(context, R.color.orange_500))
5757
} else {
5858
holder.likeBtn.setColorFilter(ContextCompat.getColor(context, R.color.secondary_300))
5959
}
60-
//api 수정되면 다시
6160
holder.likeBtn.setOnClickListener{
62-
if(item.isLiked){
63-
listener.onUnlikeClicked(item.conversationId)
64-
holder.likeBtn.setColorFilter(ContextCompat.getColor(context, R.color.secondary_300))
65-
} else {
66-
listener.onLikeClicked(item.conversationId)
67-
holder.likeBtn.setColorFilter(ContextCompat.getColor(context, R.color.orange_500))
68-
}
61+
val newIsLiked = !item.isLiked
62+
item.isLiked = newIsLiked
63+
holder.likeBtn.setColorFilter(
64+
ContextCompat.getColor(context, if (newIsLiked) R.color.orange_500 else R.color.secondary_300)
65+
)
66+
item.like += if(newIsLiked) 1 else -1
6967
holder.likeNum.text = item.like.toString()
7068
holder.likeNum.visibility = if(item.like>0) View.VISIBLE else View.GONE
69+
70+
if(newIsLiked){
71+
listener.onLikeClicked(item.conversationId)
72+
} else {
73+
listener.onUnlikeClicked(item.conversationId)
74+
}
75+
notifyItemChanged(position)
7176
}
7277

7378
holder.likeNum.text = item.like.toString()

app/src/main/java/com/daepiro/numberoneproject/presentation/view/community/CommunityTabABottomSheetFragment.kt

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
2020
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
2121
import kotlinx.coroutines.flow.collectLatest
2222

23-
//댓글 더보기 화면
2423
class CommunityTabABottomSheetFragment : BottomSheetDialogFragment() {
2524
private val viewModel: CommunityViewModel by activityViewModels()
2625
private var _binding:FragmentCommunityTabABottomSheetBinding? = null
26+
private var currentTag:String=""
2727
private val binding get() = _binding!!
2828
private lateinit var adapter:CommunityTabABottomSheetAdapter
2929
var content:String= ""
@@ -61,10 +61,12 @@ class CommunityTabABottomSheetFragment : BottomSheetDialogFragment() {
6161
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
6262
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
6363
val selectedItem = p0?.getItemAtPosition(p2).toString()
64-
if(selectedItem == "인기순"){
64+
if(selectedItem == "인기순") {
6565
viewModel.getDisasterDetail("popularity", viewModel.id)
66-
}else{
66+
currentTag = "popularity"
67+
} else {
6768
viewModel.getDisasterDetail("time", viewModel.id)
69+
currentTag = "time"
6870
}
6971
}
7072

@@ -96,6 +98,7 @@ class CommunityTabABottomSheetFragment : BottomSheetDialogFragment() {
9698

9799

98100
binding.closeBtn.setOnClickListener{
101+
viewModel.getDisasterHome()
99102
dismiss()
100103
}
101104
}
@@ -110,28 +113,24 @@ class CommunityTabABottomSheetFragment : BottomSheetDialogFragment() {
110113
override fun onItemClickListener() {
111114
}
112115
override fun onLikeClicked(conversationId: Int) {
113-
viewModel.conversationLike(conversationId)
114-
//viewModel.updateLikeState(conversationId, true)
116+
viewModel.conversationLike(conversationId,viewModel.id,currentTag)
115117
}
116118

117119
override fun onUnlikeClicked(conversationId: Int) {
118-
viewModel.conversationCancel(conversationId)
119-
//viewModel.updateLikeState(conversationId, false)
120+
viewModel.conversationCancel(conversationId,viewModel.id,currentTag)
120121
}
121122
})
122123
binding.recyclerview.adapter = adapter
123124
}
124125

125126
private fun setSpinner(){
126127
val spinnerData = listOf("최신순", "인기순")
127-
val adapter = object: ArrayAdapter<String>(requireContext(), R.layout.item_spinner,spinnerData){
128-
override fun getDropDownView(position:Int, convertView: View?, parent:ViewGroup):View{
129-
val view = super.getDropDownView(position, convertView, parent)
130-
view.setBackgroundColor(R.drawable.bg_dropdown)
131-
return view
132-
}
133-
}
128+
val adapter = ArrayAdapter(requireContext(), R.layout.item_spinner_align_style,spinnerData)
129+
adapter.setDropDownViewResource(R.layout.item_spinner)
134130
binding.spinner.adapter = adapter
131+
binding.spinner.post{
132+
binding.spinner.dropDownVerticalOffset = binding.spinner.height
133+
}
135134
}
136135

137136

@@ -153,7 +152,7 @@ class CommunityTabABottomSheetFragment : BottomSheetDialogFragment() {
153152
disasterId = disasterId,
154153
content = content
155154
)
156-
viewModel.postDisasterConversation(body).apply {
155+
viewModel.postDisasterConversation(body, currentTag).apply {
157156
commentPostListener?.onCommentPasted()
158157
}
159158
}

app/src/main/java/com/daepiro/numberoneproject/presentation/view/community/CommunityTabAFragment.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.daepiro.numberoneproject.presentation.view.community
22

3+
import android.content.DialogInterface
34
import android.os.Bundle
45
import android.util.Log
56
import android.view.View
@@ -49,7 +50,7 @@ class CommunityTabAFragment : BaseFragment<FragmentCommunityTabABinding>(R.layou
4950
repeatOnStarted {
5051
viewModel.disasterHome.collect { response ->
5152
mainAdapter.updateList(response.situations)
52-
//viewModel.getDisasterHome()
53+
viewModel.getDisasterHome()
5354
viewModel._isLoading.value = false
5455
}
5556
}
@@ -66,6 +67,4 @@ class CommunityTabAFragment : BaseFragment<FragmentCommunityTabABinding>(R.layou
6667
dialog.show(requireActivity().supportFragmentManager, "dialogTag")
6768
}
6869

69-
70-
7170
}

app/src/main/java/com/daepiro/numberoneproject/presentation/viewmodel/CommunityViewModel.kt

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ class CommunityViewModel @Inject constructor(
127127
private val _townList = MutableStateFlow(GetRegionResponse())
128128
val townList = _townList.asStateFlow()
129129

130-
131-
var isLastLoaded = false
130+
private val _commentLikeResponse = MutableStateFlow(CommentLikedResponseModel())
131+
val commentLikeResponse = _commentLikeResponse.asStateFlow()
132132

133133
fun updateAdditionalType(input:String){
134134
_additionalState.value= input
@@ -297,9 +297,6 @@ class CommunityViewModel @Inject constructor(
297297
val disasterHomeDetail = _disasterHomeDetail.asStateFlow()
298298

299299
var disasterId:Int=0
300-
//var likeStatus:Boolean = false
301-
private val _likeStatus = MutableLiveData<Boolean>()
302-
val likeStatus: LiveData<Boolean> = _likeStatus
303300

304301
//재난상황 댓글 모두
305302
fun getDisasterDetail(sort:String,disasterId:Int){
@@ -317,30 +314,54 @@ class CommunityViewModel @Inject constructor(
317314
}
318315
}
319316

320-
fun postDisasterConversation(body: ConversationRequestBody){
317+
fun postDisasterConversation(body: ConversationRequestBody, sort: String){
321318
viewModelScope.launch {
322319
val token = "Bearer ${tokenManager.accessToken.first()}"
323320
postDisasterConversationUseCase(token,body)
324321
.onSuccess {
325-
getDisasterDetail("time", body.disasterId)
322+
getDisasterDetail(sort, body.disasterId)
326323
}
327324
}
328325
}
329326

330-
fun conversationLike(conversationId: Int) {
327+
fun conversationLike(conversationId: Int, disasterId: Int, sort: String) {
331328
viewModelScope.launch {
332329
val token = "Bearer ${tokenManager.accessToken.first()}"
333330
conversationLikeUseCase(token, conversationId)
334331
.onSuccess {
332+
getDisasterDetail(sort, disasterId)
335333
}
336334
}
337335
}
338336

339-
fun conversationCancel(conversationId: Int) {
337+
fun conversationCancel(conversationId: Int, disasterId: Int, sort: String) {
340338
viewModelScope.launch {
341339
val token = "Bearer ${tokenManager.accessToken.first()}"
342340
conversationCancelUseCase(token, conversationId)
343341
.onSuccess {
342+
getDisasterDetail(sort, disasterId)
343+
}
344+
}
345+
}
346+
347+
fun commentLike(commentId: Int, articleId: Int = townDetail.value.articleId) {
348+
viewModelScope.launch {
349+
val token = "Bearer ${tokenManager.accessToken.first()}"
350+
commentLikeUsecase(token, commentId)
351+
.onSuccess {
352+
setReply(articleId)
353+
_commentLikeResponse.value = it
354+
}
355+
}
356+
}
357+
358+
fun commentUnLike(commentId: Int, articleId: Int = townDetail.value.articleId) {
359+
viewModelScope.launch {
360+
val token = "Bearer ${tokenManager.accessToken.first()}"
361+
commentLikeCancelUseCase(token, commentId)
362+
.onSuccess {
363+
setReply(articleId)
364+
_commentLikeResponse.value = it
344365
}
345366
}
346367
}
@@ -351,7 +372,6 @@ class CommunityViewModel @Inject constructor(
351372
articlelikeUseCase(token, articleId)
352373
.onSuccess {
353374
_articleLike.value = it
354-
_likeStatus.postValue(true)
355375
}
356376
}
357377
}
@@ -361,25 +381,10 @@ class CommunityViewModel @Inject constructor(
361381
articlecancelUseCase(token, articleId)
362382
.onSuccess {
363383
_articleLike.value = it
364-
_likeStatus.postValue(false)
365384
}
366385
}
367386
}
368387

369-
//좋아요를 위해 추가함
370-
fun updateLikeState(conversationId: Int, isLiked: Boolean) {
371-
val updatedConversations = _disasterHomeDetail.value.conversations.map { conversation ->
372-
if (conversation.conversationId == conversationId) {
373-
// 해당 대화의 좋아요 상태를 업데이트합니다.
374-
conversation.copy(isLiked = isLiked)
375-
} else {
376-
conversation
377-
}
378-
}
379-
val updatedDetail = _disasterHomeDetail.value.copy(conversations = updatedConversations)
380-
_disasterHomeDetail.value = updatedDetail
381-
}
382-
383388
val tagText: StateFlow<String> = townDetail
384389
.map { detail -> tagTextForDetail(detail.articleTag) }
385390
.stateIn(

app/src/main/res/layout/item_community_commentlist.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
android:layout_height="wrap_content"
6262
style="@style/body1"
6363
android:textColor="@color/orange_500"
64-
android:text="0"
65-
android:visibility="gone"/>
64+
android:text=""
65+
android:visibility="visible"/>
6666
<ImageView
6767
android:id="@+id/rereply_btn"
6868
android:layout_width="24dp"

app/src/main/res/layout/item_community_homelist.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
android:layout_width="match_parent"
77
android:layout_height="wrap_content"
88
android:orientation="vertical"
9-
android:layout_marginBottom="16dp"
9+
android:layout_marginBottom="8dp"
1010
android:background="@drawable/bg_radius_4"
1111
android:backgroundTint="@color/white"
1212
android:layout_marginLeft="16dp"

0 commit comments

Comments
 (0)