import { StyleSheet, Dimensions, Pressable, View } from 'react-native';
import Animated, {
useAnimatedStyle,
useSharedValue,
withTiming,
FadeIn,
} from 'react-native-reanimated';
import { getPathXCenterByIndex } from './TabBar';
const { width: SCREEN_WIDTH } = Dimensions.get('window');
export type TabItemsProps = {
label: string;
activeIcon: JSX.Element;
inactiveIcon: JSX.Element;
index: number;
activeIndex: number;
onTabPress: () => void;
containerWidth: number;
curvedPaths: any;
currentIndex: number;
transitionSpeed?: number;
};
const ICON_SIZE = 30;
const LABEL_WIDTH = SCREEN_WIDTH / 4;
const TRANSITION_SPEED = 400;
export const TabItem = (props: TabItemsProps) => {
const {
curvedPaths,
index,
activeIndex = 1,
label,
onTabPress,
activeIcon,
currentIndex,
inactiveIcon,
transitionSpeed,
} = props;
const animatedActiveIndex = useSharedValue(activeIndex);
const iconPosition = getPathXCenterByIndex(curvedPaths, index);
const tabStyle = useAnimatedStyle(() => {
const translateY = animatedActiveIndex.value - 1 === index ? 20 : 20;
const iconPositionX = iconPosition - index * ICON_SIZE;
return {
width: ICON_SIZE,
height: ICON_SIZE,
transform: [
{
translateY: withTiming(translateY),
},
{ translateX: iconPositionX - ICON_SIZE / 2 },
],
};
});
// const iconColor = useSharedValue(
// activeIndex === index + 1 ? 'white' : 'rgba(128,128,128,0.8)'
// );
// //Adjust Icon color for this first render
// useEffect(() => {
// animatedActiveIndex.value = activeIndex;
// if (activeIndex === index + 1) {
// iconColor.value = withTiming('white', {
// duration: transitionSpeed ? transitionSpeed : TRANSITION_SPEED,
// });
// } else {
// iconColor.value = withTiming('rgba(128,128,128,0.8)', {
// duration: transitionSpeed ? transitionSpeed : TRANSITION_SPEED,
// });
// }
// }, [activeIndex, animatedActiveIndex, iconColor, index, transitionSpeed]);
return (
<>
{currentIndex === index ? (
{/* */}
{activeIcon}
) : (
{inactiveIcon}
)}
>
);
};
const styles = StyleSheet.create({
labelContainer: {
position: 'absolute',
alignItems: 'center',
width: LABEL_WIDTH,
},
label: {
color: 'rgba(128,128,128,0.8)',
fontSize: 17,
},
tabItem: {},
activeTabItem: {
bottom: 25,
},
});