Fix thin red circle around Like button on iOS (#6123)
* remove animation UI from DOM tree when not animated * improve naming of vars * more var changes --------- Co-authored-by: Hailey <me@haileyok.com>
This commit is contained in:
@@ -91,15 +91,15 @@ export function CountWheel({
|
||||
likeCount,
|
||||
big,
|
||||
isLiked,
|
||||
isToggle,
|
||||
hasBeenToggled,
|
||||
}: {
|
||||
likeCount: number
|
||||
big?: boolean
|
||||
isLiked: boolean
|
||||
isToggle: boolean
|
||||
hasBeenToggled: boolean
|
||||
}) {
|
||||
const t = useTheme()
|
||||
const shouldAnimate = !useReducedMotion() && isToggle
|
||||
const shouldAnimate = !useReducedMotion() && hasBeenToggled
|
||||
const shouldRoll = decideShouldRoll(isLiked, likeCount)
|
||||
|
||||
// Incrementing the key will cause the `Animated.View` to re-render, with the newly selected entering/exiting
|
||||
|
||||
@@ -71,15 +71,15 @@ const circle2Keyframe = new Keyframe({
|
||||
export function AnimatedLikeIcon({
|
||||
isLiked,
|
||||
big,
|
||||
isToggle,
|
||||
hasBeenToggled,
|
||||
}: {
|
||||
isLiked: boolean
|
||||
big?: boolean
|
||||
isToggle: boolean
|
||||
hasBeenToggled: boolean
|
||||
}) {
|
||||
const t = useTheme()
|
||||
const size = big ? 22 : 18
|
||||
const shouldAnimate = !useReducedMotion() && isToggle
|
||||
const shouldAnimate = !useReducedMotion() && hasBeenToggled
|
||||
|
||||
return (
|
||||
<View>
|
||||
@@ -95,12 +95,10 @@ export function AnimatedLikeIcon({
|
||||
width={size}
|
||||
/>
|
||||
)}
|
||||
{isLiked ? (
|
||||
{isLiked && shouldAnimate ? (
|
||||
<>
|
||||
<Animated.View
|
||||
entering={
|
||||
shouldAnimate ? circle1Keyframe.duration(300) : undefined
|
||||
}
|
||||
entering={circle1Keyframe.duration(300)}
|
||||
style={{
|
||||
position: 'absolute',
|
||||
backgroundColor: s.likeColor.color,
|
||||
@@ -114,9 +112,7 @@ export function AnimatedLikeIcon({
|
||||
}}
|
||||
/>
|
||||
<Animated.View
|
||||
entering={
|
||||
shouldAnimate ? circle2Keyframe.duration(300) : undefined
|
||||
}
|
||||
entering={circle2Keyframe.duration(300)}
|
||||
style={{
|
||||
position: 'absolute',
|
||||
backgroundColor: t.atoms.bg.backgroundColor,
|
||||
|
||||
@@ -107,7 +107,8 @@ let PostCtrls = ({
|
||||
[t],
|
||||
) as StyleProp<ViewStyle>
|
||||
|
||||
const [isToggleLikeIcon, setIsToggleLikeIcon] = React.useState(false)
|
||||
const [hasLikeIconBeenToggled, setHasLikeIconBeenToggled] =
|
||||
React.useState(false)
|
||||
|
||||
const onPressToggleLike = React.useCallback(async () => {
|
||||
if (isBlocked) {
|
||||
@@ -119,7 +120,7 @@ let PostCtrls = ({
|
||||
}
|
||||
|
||||
try {
|
||||
setIsToggleLikeIcon(true)
|
||||
setHasLikeIconBeenToggled(true)
|
||||
if (!post.viewer?.like) {
|
||||
playHaptic('Light')
|
||||
sendInteraction({
|
||||
@@ -311,13 +312,13 @@ let PostCtrls = ({
|
||||
<AnimatedLikeIcon
|
||||
isLiked={Boolean(post.viewer?.like)}
|
||||
big={big}
|
||||
isToggle={isToggleLikeIcon}
|
||||
hasBeenToggled={hasLikeIconBeenToggled}
|
||||
/>
|
||||
<CountWheel
|
||||
likeCount={post.likeCount ?? 0}
|
||||
big={big}
|
||||
isLiked={Boolean(post.viewer?.like)}
|
||||
isToggle={isToggleLikeIcon}
|
||||
hasBeenToggled={hasLikeIconBeenToggled}
|
||||
/>
|
||||
</Pressable>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user