Only changing stats for the Reaction Row if the data actually changed.
This commit is contained in:
@@ -28,6 +28,7 @@ import androidx.compose.material.icons.outlined.Bolt
|
|||||||
import androidx.compose.material.ripple.rememberRipple
|
import androidx.compose.material.ripple.rememberRipple
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.livedata.observeAsState
|
import androidx.compose.runtime.livedata.observeAsState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -62,6 +63,7 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.math.RoundingMode
|
import java.math.RoundingMode
|
||||||
|
import kotlin.math.abs
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -124,6 +126,14 @@ fun ReplyReaction(
|
|||||||
val repliesState by baseNote.live().replies.observeAsState()
|
val repliesState by baseNote.live().replies.observeAsState()
|
||||||
val replies = remember(repliesState) { repliesState?.note?.replies } ?: emptySet()
|
val replies = remember(repliesState) { repliesState?.note?.replies } ?: emptySet()
|
||||||
|
|
||||||
|
val isWriteable = remember { accountViewModel.isWriteable() }
|
||||||
|
|
||||||
|
val replyCount by remember(repliesState) {
|
||||||
|
derivedStateOf {
|
||||||
|
showCount(replies.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
@@ -138,7 +148,7 @@ fun ReplyReaction(
|
|||||||
IconButton(
|
IconButton(
|
||||||
modifier = iconButtonModifier,
|
modifier = iconButtonModifier,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (accountViewModel.isWriteable()) {
|
if (isWriteable) {
|
||||||
onPress()
|
onPress()
|
||||||
} else {
|
} else {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
@@ -161,7 +171,7 @@ fun ReplyReaction(
|
|||||||
|
|
||||||
if (showCounter) {
|
if (showCounter) {
|
||||||
Text(
|
Text(
|
||||||
" ${showCount(replies.size)}",
|
" $replyCount",
|
||||||
fontSize = 14.sp,
|
fontSize = 14.sp,
|
||||||
color = grayTint
|
color = grayTint
|
||||||
)
|
)
|
||||||
@@ -179,11 +189,25 @@ fun BoostReaction(
|
|||||||
val boostsState by baseNote.live().boosts.observeAsState()
|
val boostsState by baseNote.live().boosts.observeAsState()
|
||||||
val boostedNote = remember(boostsState) { boostsState?.note } ?: return
|
val boostedNote = remember(boostsState) { boostsState?.note } ?: return
|
||||||
|
|
||||||
val hasBoosted = remember(boostsState) { accountViewModel.hasBoosted(baseNote) }
|
val hasBoosted by remember(boostsState) {
|
||||||
val wasBoostedByLoggedIn = remember(boostsState) { boostedNote.isBoostedBy(accountViewModel.userProfile()) }
|
derivedStateOf {
|
||||||
|
accountViewModel.hasBoosted(baseNote)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val wasBoostedByLoggedIn by remember(boostsState) {
|
||||||
|
derivedStateOf {
|
||||||
|
boostedNote.isBoostedBy(accountViewModel.userProfile())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val isWriteable = remember { accountViewModel.isWriteable() }
|
val isWriteable = remember { accountViewModel.isWriteable() }
|
||||||
|
|
||||||
val boostCount = remember(boostsState) { showCount(boostedNote.boosts.size) }
|
val boostCount by remember(boostsState) {
|
||||||
|
derivedStateOf {
|
||||||
|
showCount(boostedNote.boosts.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
@@ -258,11 +282,25 @@ fun LikeReaction(
|
|||||||
val reactionsState by baseNote.live().reactions.observeAsState()
|
val reactionsState by baseNote.live().reactions.observeAsState()
|
||||||
val reactedNote = remember(reactionsState) { reactionsState?.note } ?: return
|
val reactedNote = remember(reactionsState) { reactionsState?.note } ?: return
|
||||||
|
|
||||||
val hasReacted = remember(reactionsState) { accountViewModel.hasReactedTo(baseNote) }
|
val hasReacted by remember(reactionsState) {
|
||||||
val wasReactedByLoggedIn = remember(reactionsState) { reactedNote.isReactedBy(accountViewModel.userProfile()) }
|
derivedStateOf {
|
||||||
|
accountViewModel.hasReactedTo(baseNote)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val wasReactedByLoggedIn by remember(reactionsState) {
|
||||||
|
derivedStateOf {
|
||||||
|
reactedNote.isReactedBy(accountViewModel.userProfile())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val isWriteable = remember { accountViewModel.isWriteable() }
|
val isWriteable = remember { accountViewModel.isWriteable() }
|
||||||
|
|
||||||
val reactionCount = remember(reactionsState) { showCount(reactedNote.reactions.size) }
|
val reactionCount by remember(reactionsState) {
|
||||||
|
derivedStateOf {
|
||||||
|
showCount(reactedNote.reactions.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
@@ -350,13 +388,22 @@ fun ZapReaction(
|
|||||||
LaunchedEffect(key1 = zapsState) {
|
LaunchedEffect(key1 = zapsState) {
|
||||||
scope.launch(Dispatchers.IO) {
|
scope.launch(Dispatchers.IO) {
|
||||||
if (!wasZappedByLoggedInUser) {
|
if (!wasZappedByLoggedInUser) {
|
||||||
wasZappedByLoggedInUser = accountViewModel.calculateIfNoteWasZappedByAccount(zappedNote)
|
val newWasZapped = accountViewModel.calculateIfNoteWasZappedByAccount(zappedNote)
|
||||||
|
|
||||||
|
if (wasZappedByLoggedInUser != newWasZapped) {
|
||||||
|
wasZappedByLoggedInUser = newWasZapped
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zapAmountTxt = showAmount(account.calculateZappedAmount(zappedNote))
|
val newZapAmount = showAmount(account.calculateZappedAmount(zappedNote))
|
||||||
|
if (newZapAmount != zapAmountTxt) {
|
||||||
|
zapAmountTxt = newZapAmount
|
||||||
|
}
|
||||||
|
|
||||||
if (wasZappedByLoggedInUser) {
|
if (wasZappedByLoggedInUser) {
|
||||||
zappingProgress = 1f
|
if (abs(zappingProgress - 1) < 0.001) {
|
||||||
|
zappingProgress = 1f
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user