Skip to content

Commit

Permalink
Simplify adapter change payloads
Browse files Browse the repository at this point in the history
  • Loading branch information
StrixG committed Jan 11, 2024
1 parent 6b4dd14 commit 7d30b80
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,12 @@ class CartItemAdapter(
}

override fun onBindViewHolder(
holder: CartItemViewHolder,
position: Int,
payloads: List<Any>
holder: CartItemViewHolder, position: Int, payloads: List<Any>
) {
val item = getItem(position)

if (payloads.isEmpty()) {
holder.bind(item)
} else {
val payloadList = payloads.map { it as CartItemPayload }
holder.bind(item, payloadList)
}
val payloadList = payloads.map { it as CartItemPayload }
holder.bind(item, payloadList)
}

class DiffCallback : DiffUtil.ItemCallback<CartMenuItem>() {
Expand All @@ -49,11 +43,10 @@ class CartItemAdapter(
override fun getChangePayload(
oldItem: CartMenuItem,
newItem: CartMenuItem
): CartItemPayload? {
val payload = CartItemPayload(
count = newItem.count.takeIf { it != oldItem.count }
): CartItemPayload {
return CartItemPayload(
countChanged = newItem.count != oldItem.count
)
return payload.takeIf { it != CartItemPayload.EMPTY }
}
}
}
Expand All @@ -80,34 +73,21 @@ class CartItemViewHolder(
}
}

fun bind(cartMenuItem: CartMenuItem) {
fun bind(cartMenuItem: CartMenuItem, payloads: List<CartItemPayload>) {
item = cartMenuItem

with(binding) {
name.text = cartMenuItem.name
price.text = itemView.context.getString(R.string.price, cartMenuItem.price)
updateCount(cartMenuItem.count)
}
}

fun bind(cartMenuItem: CartMenuItem, payloads: List<CartItemPayload>) {
bind(cartMenuItem)

payloads.forEach { payload ->
payload.count?.let(::updateCount)
if (payloads.isEmpty() || payloads.any { it.countChanged }) {
count.text = cartMenuItem.count.toString()
buttonRemove.isEnabled = cartMenuItem.count > 0
}
}
}

private fun updateCount(count: Int) {
binding.count.text = count.toString()
binding.buttonRemove.isEnabled = count > 0
}
}

data class CartItemPayload(
val count: Int? = null
) {
companion object {
val EMPTY = CartItemPayload()
}
}
val countChanged: Boolean = false
)
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,12 @@ class MenuItemAdapter(
}

override fun onBindViewHolder(
holder: CartMenuItemViewHolder,
position: Int,
payloads: List<Any>
holder: CartMenuItemViewHolder, position: Int, payloads: List<Any>
) {
val item = getItem(position)

if (payloads.isEmpty()) {
holder.bind(item)
} else {
val payloadList = payloads.map { it as CartMenuItemPayload }
holder.bind(item, payloadList)
}
val payloadList = payloads.map { it as CartMenuItemPayload }
holder.bind(item, payloadList)
}

class DiffCallback : DiffUtil.ItemCallback<CartMenuItem>() {
Expand All @@ -50,11 +44,10 @@ class MenuItemAdapter(
override fun getChangePayload(
oldItem: CartMenuItem,
newItem: CartMenuItem
): CartMenuItemPayload? {
val payload = CartMenuItemPayload(
count = newItem.count.takeIf { it != oldItem.count }
): CartMenuItemPayload {
return CartMenuItemPayload(
countChanged = newItem.count != oldItem.count
)
return payload.takeIf { it != CartMenuItemPayload.EMPTY }
}
}
}
Expand Down Expand Up @@ -86,7 +79,7 @@ class CartMenuItemViewHolder(
}
}

fun bind(cartMenuItem: CartMenuItem) {
fun bind(cartMenuItem: CartMenuItem, payloads: List<CartMenuItemPayload>) {
item = cartMenuItem

with(binding) {
Expand All @@ -96,28 +89,15 @@ class CartMenuItemViewHolder(

name.text = cartMenuItem.name
price.text = itemView.context.getString(R.string.price, cartMenuItem.price)
updateCount(cartMenuItem.count)
}
}

fun bind(cartMenuItem: CartMenuItem, payloads: List<CartMenuItemPayload>) {
bind(cartMenuItem)

payloads.forEach { payload ->
payload.count?.let(::updateCount)
if (payloads.isEmpty() || payloads.any { it.countChanged }) {
count.text = cartMenuItem.count.toString()
buttonRemove.isEnabled = cartMenuItem.count > 0
}
}
}

private fun updateCount(count: Int) {
binding.count.text = count.toString()
binding.buttonRemove.isEnabled = count > 0
}
}

data class CartMenuItemPayload(
val count: Int? = null
) {
companion object {
val EMPTY = CartMenuItemPayload()
}
}
val countChanged: Boolean = false
)

0 comments on commit 7d30b80

Please sign in to comment.