diff options
author | Paul Frazee <pfrazee@gmail.com> | 2024-11-23 16:20:24 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-23 16:20:24 -0800 |
commit | 32bf8122e8c8a0fbadd53b8a015cfbc9014519a2 (patch) | |
tree | 55bd24596e6fadadbf4326b26e3d14e418c5c7bb /src/screens/Profile | |
parent | 523d1f01a51c0e85e49916fb42b204f7004ffac1 (diff) | |
parent | b4d07c4112b9a62b5380948051aa4a7fd391a2d4 (diff) | |
download | voidsky-32bf8122e8c8a0fbadd53b8a015cfbc9014519a2.tar.zst |
Merge branch 'main' into main
Diffstat (limited to 'src/screens/Profile')
-rw-r--r-- | src/screens/Profile/Header/DisplayName.tsx | 1 | ||||
-rw-r--r-- | src/screens/Profile/Header/EditProfileDialog.tsx | 2 | ||||
-rw-r--r-- | src/screens/Profile/Header/GrowableAvatar.tsx | 2 | ||||
-rw-r--r-- | src/screens/Profile/Header/GrowableBanner.tsx | 15 | ||||
-rw-r--r-- | src/screens/Profile/Header/Handle.tsx | 3 | ||||
-rw-r--r-- | src/screens/Profile/Header/Metrics.tsx | 1 | ||||
-rw-r--r-- | src/screens/Profile/Header/Shell.tsx | 18 |
7 files changed, 18 insertions, 24 deletions
diff --git a/src/screens/Profile/Header/DisplayName.tsx b/src/screens/Profile/Header/DisplayName.tsx index 6d4eea2eb..b74c063d4 100644 --- a/src/screens/Profile/Header/DisplayName.tsx +++ b/src/screens/Profile/Header/DisplayName.tsx @@ -1,4 +1,3 @@ -import React from 'react' import {View} from 'react-native' import {AppBskyActorDefs, ModerationDecision} from '@atproto/api' diff --git a/src/screens/Profile/Header/EditProfileDialog.tsx b/src/screens/Profile/Header/EditProfileDialog.tsx index af4b5498a..952184816 100644 --- a/src/screens/Profile/Header/EditProfileDialog.tsx +++ b/src/screens/Profile/Header/EditProfileDialog.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect, useState} from 'react' +import {useCallback, useEffect, useState} from 'react' import {Dimensions, View} from 'react-native' import {Image as RNImage} from 'react-native-image-crop-picker' import {AppBskyActorDefs} from '@atproto/api' diff --git a/src/screens/Profile/Header/GrowableAvatar.tsx b/src/screens/Profile/Header/GrowableAvatar.tsx index 20ac14892..dab69f955 100644 --- a/src/screens/Profile/Header/GrowableAvatar.tsx +++ b/src/screens/Profile/Header/GrowableAvatar.tsx @@ -45,7 +45,7 @@ function GrowableAvatarInner({ const animatedStyle = useAnimatedStyle(() => ({ transform: [ { - scale: interpolate(scrollY.value, [-150, 0], [1.2, 1], { + scale: interpolate(scrollY.get(), [-150, 0], [1.2, 1], { extrapolateRight: Extrapolation.CLAMP, }), }, diff --git a/src/screens/Profile/Header/GrowableBanner.tsx b/src/screens/Profile/Header/GrowableBanner.tsx index 144b7cd2d..7f5a3cd6e 100644 --- a/src/screens/Profile/Header/GrowableBanner.tsx +++ b/src/screens/Profile/Header/GrowableBanner.tsx @@ -66,7 +66,7 @@ function GrowableBannerInner({ const animatedStyle = useAnimatedStyle(() => ({ transform: [ { - scale: interpolate(scrollY.value, [-150, 0], [2, 1], { + scale: interpolate(scrollY.get(), [-150, 0], [2, 1], { extrapolateRight: Extrapolation.CLAMP, }), }, @@ -76,7 +76,7 @@ function GrowableBannerInner({ const animatedBlurViewProps = useAnimatedProps(() => { return { intensity: interpolate( - scrollY.value, + scrollY.get(), [-300, -65, -15], [50, 40, 0], Extrapolation.CLAMP, @@ -85,16 +85,17 @@ function GrowableBannerInner({ }) const animatedSpinnerStyle = useAnimatedStyle(() => { + const scrollYValue = scrollY.get() return { - display: scrollY.value < 0 ? 'flex' : 'none', + display: scrollYValue < 0 ? 'flex' : 'none', opacity: interpolate( - scrollY.value, + scrollYValue, [-60, -15], [1, 0], Extrapolation.CLAMP, ), transform: [ - {translateY: interpolate(scrollY.value, [-150, 0], [-75, 0])}, + {translateY: interpolate(scrollYValue, [-150, 0], [-75, 0])}, {rotate: '90deg'}, ], } @@ -103,7 +104,7 @@ function GrowableBannerInner({ const animatedBackButtonStyle = useAnimatedStyle(() => ({ transform: [ { - translateY: interpolate(scrollY.value, [-150, 60], [-150, 60], { + translateY: interpolate(scrollY.get(), [-150, 60], [-150, 60], { extrapolateRight: Extrapolation.CLAMP, }), }, @@ -168,7 +169,7 @@ function useShouldAnimateSpinner({ const stickyIsOverscrolled = useStickyToggle(isOverscrolled, 10) useAnimatedReaction( - () => scrollY.value < -5, + () => scrollY.get() < -5, (value, prevValue) => { if (value !== prevValue) { runOnJS(setIsOverscrolled)(value) diff --git a/src/screens/Profile/Header/Handle.tsx b/src/screens/Profile/Header/Handle.tsx index acfba3fb2..27b73da70 100644 --- a/src/screens/Profile/Header/Handle.tsx +++ b/src/screens/Profile/Header/Handle.tsx @@ -1,4 +1,3 @@ -import React from 'react' import {View} from 'react-native' import {AppBskyActorDefs} from '@atproto/api' import {msg, Trans} from '@lingui/macro' @@ -24,7 +23,7 @@ export function ProfileHeaderHandle({ const blockHide = profile.viewer?.blocking || profile.viewer?.blockedBy return ( <View - style={[a.flex_row, a.gap_xs, a.align_center]} + style={[a.flex_row, a.gap_xs, a.align_center, {maxWidth: '100%'}]} pointerEvents={disableTaps ? 'none' : isIOS ? 'auto' : 'box-none'}> <NewskieDialog profile={profile} disabled={disableTaps} /> {profile.viewer?.followedBy && !blockHide ? ( diff --git a/src/screens/Profile/Header/Metrics.tsx b/src/screens/Profile/Header/Metrics.tsx index 30686ef99..bd4c4521c 100644 --- a/src/screens/Profile/Header/Metrics.tsx +++ b/src/screens/Profile/Header/Metrics.tsx @@ -1,4 +1,3 @@ -import React from 'react' import {View} from 'react-native' import {AppBskyActorDefs} from '@atproto/api' import {msg, plural} from '@lingui/macro' diff --git a/src/screens/Profile/Header/Shell.tsx b/src/screens/Profile/Header/Shell.tsx index 1a1e7d4a2..573d38145 100644 --- a/src/screens/Profile/Header/Shell.tsx +++ b/src/screens/Profile/Header/Shell.tsx @@ -1,12 +1,6 @@ import React, {memo} from 'react' import {StyleSheet, TouchableWithoutFeedback, View} from 'react-native' -import Animated, { - measure, - MeasuredDimensions, - runOnJS, - runOnUI, - useAnimatedRef, -} from 'react-native-reanimated' +import {MeasuredDimensions, runOnJS, runOnUI} from 'react-native-reanimated' import {AppBskyActorDefs, ModerationDecision} from '@atproto/api' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {msg} from '@lingui/macro' @@ -14,6 +8,7 @@ import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {BACK_HITSLOP} from '#/lib/constants' +import {measureHandle, useHandleRef} from '#/lib/hooks/useHandleRef' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {NavigationProp} from '#/lib/routes/types' import {isIOS} from '#/platform/detection' @@ -49,7 +44,7 @@ let ProfileHeaderShell = ({ const {openLightbox} = useLightboxControls() const navigation = useNavigation<NavigationProp>() const {isDesktop} = useWebMediaQueries() - const aviRef = useAnimatedRef() + const aviRef = useHandleRef() const onPressBack = React.useCallback(() => { if (navigation.canGoBack()) { @@ -86,9 +81,10 @@ let ProfileHeaderShell = ({ const modui = moderation.ui('avatar') const avatar = profile.avatar if (avatar && !(modui.blur && modui.noOverride)) { + const aviHandle = aviRef.current runOnUI(() => { 'worklet' - const rect = measure(aviRef) + const rect = measureHandle(aviHandle) runOnJS(_openLightbox)(avatar, rect) })() } @@ -170,14 +166,14 @@ let ProfileHeaderShell = ({ styles.avi, profile.associated?.labeler && styles.aviLabeler, ]}> - <Animated.View ref={aviRef} collapsable={false}> + <View ref={aviRef} collapsable={false}> <UserAvatar type={profile.associated?.labeler ? 'labeler' : 'user'} size={90} avatar={profile.avatar} moderation={moderation.ui('avatar')} /> - </Animated.View> + </View> </View> </TouchableWithoutFeedback> </GrowableAvatar> |