* docs(react-native): create the basic expo project * docs(react-native): cross-platform Apple social sign-in * docs(react-native): cross-platform Google social sign-in * docs(react-native): fix typos * docs(react-native): remove wrong entry in the `Connection` component * Correct typos * Prettier * Draft * Draft * docs(react-native): use kebab-case file naming convention in Expo guide - use kebab-case file naming convention in Expo guide - add trailing semicolon to align with the standard Expo template conventions * docs(react-native): use kebab-case file naming convention in Expo social auth example * docs(react-native): update the packages of the Expo social auth example * Fix * Draft * Changes * Correct log message --------- Co-authored-by: Chris Chinchilla <chris.ward@supabase.io> Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com>
41 lines
940 B
TypeScript
41 lines
940 B
TypeScript
import { useEffect } from 'react';
|
|
import { StyleSheet } from 'react-native';
|
|
import Animated, {
|
|
useAnimatedStyle,
|
|
useSharedValue,
|
|
withRepeat,
|
|
withSequence,
|
|
withTiming,
|
|
} from 'react-native-reanimated';
|
|
|
|
import { ThemedText } from '@/components/themed-text';
|
|
|
|
export function HelloWave() {
|
|
const rotationAnimation = useSharedValue(0);
|
|
|
|
useEffect(() => {
|
|
rotationAnimation.value = withRepeat(
|
|
withSequence(withTiming(25, { duration: 150 }), withTiming(0, { duration: 150 })),
|
|
4 // Run the animation 4 times
|
|
);
|
|
}, [rotationAnimation]);
|
|
|
|
const animatedStyle = useAnimatedStyle(() => ({
|
|
transform: [{ rotate: `${rotationAnimation.value}deg` }],
|
|
}));
|
|
|
|
return (
|
|
<Animated.View style={animatedStyle}>
|
|
<ThemedText style={styles.text}>👋</ThemedText>
|
|
</Animated.View>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
text: {
|
|
fontSize: 28,
|
|
lineHeight: 32,
|
|
marginTop: -6,
|
|
},
|
|
});
|