feat(creator): 후원 empty 아이템을 추가한다
This commit is contained in:
+38
-2
@@ -5,11 +5,13 @@ import android.graphics.Rect
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.transform.CircleCropTransformation
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationBinding
|
||||
import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationEmptyBinding
|
||||
import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationRankingBinding
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
@@ -17,7 +19,8 @@ import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannel
|
||||
import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannelDonationUiModel
|
||||
|
||||
class CreatorChannelDonationAdapter(
|
||||
private val onRankingAllClick: () -> Unit = { }
|
||||
private val onRankingAllClick: () -> Unit = { },
|
||||
private val onEmptyDonationClick: () -> Unit = { }
|
||||
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
private var items: List<CreatorChannelDonationListItem> = emptyList()
|
||||
@@ -33,8 +36,20 @@ class CreatorChannelDonationAdapter(
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun submitEmpty(
|
||||
rankings: List<CreatorChannelDonationRankingUiModel>,
|
||||
isOwner: Boolean
|
||||
) {
|
||||
items = buildList {
|
||||
if (rankings.isNotEmpty()) add(CreatorChannelDonationListItem.Ranking(rankings))
|
||||
add(CreatorChannelDonationListItem.Empty(isOwner))
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int = when (items[position]) {
|
||||
is CreatorChannelDonationListItem.Ranking -> VIEW_TYPE_RANKING
|
||||
is CreatorChannelDonationListItem.Empty -> VIEW_TYPE_EMPTY
|
||||
is CreatorChannelDonationListItem.Donation -> VIEW_TYPE_DONATION
|
||||
}
|
||||
|
||||
@@ -44,6 +59,10 @@ class CreatorChannelDonationAdapter(
|
||||
ItemCreatorChannelDonationRankingBinding.inflate(LayoutInflater.from(parent.context), parent, false),
|
||||
onRankingAllClick
|
||||
)
|
||||
VIEW_TYPE_EMPTY -> EmptyViewHolder(
|
||||
ItemCreatorChannelDonationEmptyBinding.inflate(LayoutInflater.from(parent.context), parent, false),
|
||||
onEmptyDonationClick
|
||||
)
|
||||
else -> DonationViewHolder(
|
||||
ItemCreatorChannelDonationBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
)
|
||||
@@ -53,6 +72,7 @@ class CreatorChannelDonationAdapter(
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
when (val item = items[position]) {
|
||||
is CreatorChannelDonationListItem.Ranking -> (holder as RankingViewHolder).bind(item.rankings)
|
||||
is CreatorChannelDonationListItem.Empty -> (holder as EmptyViewHolder).bind(item.isOwner)
|
||||
is CreatorChannelDonationListItem.Donation -> (holder as DonationViewHolder).bind(item.donation)
|
||||
}
|
||||
}
|
||||
@@ -80,6 +100,20 @@ class CreatorChannelDonationAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
class EmptyViewHolder(
|
||||
private val binding: ItemCreatorChannelDonationEmptyBinding,
|
||||
private val onEmptyDonationClick: () -> Unit
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
|
||||
init {
|
||||
binding.btnCreatorChannelDonationEmptyWrite.setOnClickListener { onEmptyDonationClick() }
|
||||
}
|
||||
|
||||
fun bind(isOwner: Boolean) = with(binding) {
|
||||
btnCreatorChannelDonationEmptyWrite.isVisible = !isOwner
|
||||
}
|
||||
}
|
||||
|
||||
class DonationViewHolder(
|
||||
private val binding: ItemCreatorChannelDonationBinding
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
@@ -104,12 +138,14 @@ class CreatorChannelDonationAdapter(
|
||||
|
||||
companion object {
|
||||
private const val VIEW_TYPE_RANKING = 0
|
||||
private const val VIEW_TYPE_DONATION = 1
|
||||
private const val VIEW_TYPE_EMPTY = 1
|
||||
private const val VIEW_TYPE_DONATION = 2
|
||||
}
|
||||
}
|
||||
|
||||
private sealed interface CreatorChannelDonationListItem {
|
||||
data class Ranking(val rankings: List<CreatorChannelDonationRankingUiModel>) : CreatorChannelDonationListItem
|
||||
data class Empty(val isOwner: Boolean) : CreatorChannelDonationListItem
|
||||
data class Donation(val donation: CreatorChannelDonationUiModel) : CreatorChannelDonationListItem
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user