diff options
Diffstat (limited to 'src/view/com/util/load-latest/LoadLatestBtn.tsx')
-rw-r--r-- | src/view/com/util/load-latest/LoadLatestBtn.tsx | 64 |
1 files changed, 36 insertions, 28 deletions
diff --git a/src/view/com/util/load-latest/LoadLatestBtn.tsx b/src/view/com/util/load-latest/LoadLatestBtn.tsx index b502f0b68..89e5784b7 100644 --- a/src/view/com/util/load-latest/LoadLatestBtn.tsx +++ b/src/view/com/util/load-latest/LoadLatestBtn.tsx @@ -1,10 +1,11 @@ -import {StyleSheet, TouchableOpacity, View} from 'react-native' +import {StyleSheet, View} from 'react-native' import Animated from 'react-native-reanimated' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {useMediaQuery} from 'react-responsive' import {HITSLOP_20} from '#/lib/constants' +import {PressableScale} from '#/lib/custom-animations/PressableScale' import {useMinimalShellFabTransform} from '#/lib/hooks/useMinimalShellTransform' import {usePalette} from '#/lib/hooks/usePalette' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' @@ -13,9 +14,7 @@ import {useGate} from '#/lib/statsig/statsig' import {colors} from '#/lib/styles' import {isWeb} from '#/platform/detection' import {useSession} from '#/state/session' - -const AnimatedTouchableOpacity = - Animated.createAnimatedComponent(TouchableOpacity) +import {useLayoutBreakpoints} from '#/alf' export function LoadLatestBtn({ onPress, @@ -29,6 +28,7 @@ export function LoadLatestBtn({ const pal = usePalette('default') const {hasSession} = useSession() const {isDesktop, isTablet, isMobile, isTabletOrMobile} = useWebMediaQueries() + const {centerColumnOffset} = useLayoutBreakpoints() const fabMinimalShellTransform = useMinimalShellFabTransform() const insets = useSafeAreaInsets() @@ -49,33 +49,37 @@ export function LoadLatestBtn({ : {bottom: clamp(insets.bottom, 15, 60) + 15} return ( - <AnimatedTouchableOpacity - style={[ - styles.loadLatest, - isDesktop && - (isTallViewport - ? styles.loadLatestOutOfLine - : styles.loadLatestInline), - isTablet && styles.loadLatestInline, - pal.borderDark, - pal.view, - bottomPosition, - showBottomBar && fabMinimalShellTransform, - ]} - onPress={onPress} - hitSlop={HITSLOP_20} - accessibilityRole="button" - accessibilityLabel={label} - accessibilityHint=""> - <FontAwesomeIcon icon="angle-up" color={pal.colors.text} size={19} /> - {showIndicator && <View style={[styles.indicator, pal.borderDark]} />} - </AnimatedTouchableOpacity> + <Animated.View style={[showBottomBar && fabMinimalShellTransform]}> + <PressableScale + style={[ + styles.loadLatest, + isDesktop && + (isTallViewport + ? styles.loadLatestOutOfLine + : styles.loadLatestInline), + isTablet && + (centerColumnOffset + ? styles.loadLatestInlineOffset + : styles.loadLatestInline), + pal.borderDark, + pal.view, + bottomPosition, + ]} + onPress={onPress} + hitSlop={HITSLOP_20} + accessibilityLabel={label} + accessibilityHint="" + targetScale={0.9}> + <FontAwesomeIcon icon="angle-up" color={pal.colors.text} size={19} /> + {showIndicator && <View style={[styles.indicator, pal.borderDark]} />} + </PressableScale> + </Animated.View> ) } const styles = StyleSheet.create({ loadLatest: { - // @ts-ignore 'fixed' is web only -prf + zIndex: 20, position: isWeb ? 'fixed' : 'absolute', left: 18, borderWidth: StyleSheet.hairlineWidth, @@ -87,11 +91,15 @@ const styles = StyleSheet.create({ justifyContent: 'center', }, loadLatestInline: { - // @ts-ignore web only + // @ts-expect-error web only left: 'calc(50vw - 282px)', }, + loadLatestInlineOffset: { + // @ts-expect-error web only + left: 'calc(50vw - 432px)', + }, loadLatestOutOfLine: { - // @ts-ignore web only + // @ts-expect-error web only left: 'calc(50vw - 382px)', }, indicator: { |