import { ParseEmojis } from '@components/Parse' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext } from 'react' import { Dimensions, StyleSheet, Text, View } from 'react-native' import Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated' import { useSafeAreaInsets } from 'react-native-safe-area-context' import AccountContext from './utils/createContext' export interface Props { scrollY: Animated.SharedValue account: Mastodon.Account | undefined } const AccountNav: React.FC = ({ scrollY, account }) => { const { accountState } = useContext(AccountContext) const { theme } = useTheme() const headerHeight = useSafeAreaInsets().top + 44 const nameY = Dimensions.get('screen').width * accountState.headerRatio + StyleConstants.Avatar.L - StyleConstants.Spacing.Global.PagePadding * 2 + StyleConstants.Spacing.M - headerHeight const styleOpacity = useAnimatedStyle(() => { return { opacity: interpolate(scrollY.value, [0, 200], [0, 1], Extrapolate.CLAMP) } }) const styleMarginTop = useAnimatedStyle(() => { return { marginTop: interpolate( scrollY.value, [nameY, nameY + 20], [50, 0], Extrapolate.CLAMP ) } }) return ( {account ? ( ) : null} ) } const styles = StyleSheet.create({ base: { ...StyleSheet.absoluteFillObject, zIndex: 99 }, content: { flex: 1, alignItems: 'center', overflow: 'hidden' }, display_name: { flexDirection: 'row' } }) export default React.memo(AccountNav, (_, next) => next.account === undefined)