import React, {useEffect, useMemo} from 'react' import { Animated, StyleSheet, StyleProp, useWindowDimensions, View, ViewStyle, } from 'react-native' import LinearGradient from 'react-native-linear-gradient' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {UpIcon} from '../../lib/icons' import {s, colors} from '../../lib/styles' export function LoadingPlaceholder({ width, height, style, }: { width: string | number height: string | number style?: StyleProp }) { const dim = useWindowDimensions() const elWidth = typeof width === 'string' ? dim.width : width const offset = useMemo(() => new Animated.Value(elWidth * -1), []) useEffect(() => { const anim = Animated.loop( Animated.sequence([ Animated.timing(offset, { toValue: elWidth, duration: 1e3, useNativeDriver: true, isInteraction: false, }), Animated.timing(offset, { toValue: elWidth * -1, duration: 0, delay: 500, useNativeDriver: true, isInteraction: false, }), ]), ) anim.start() return () => anim.stop() }, []) return ( ) } export function PostLoadingPlaceholder({ style, }: { style?: StyleProp }) { return ( ) } export function PostFeedLoadingPlaceholder() { return ( <> ) } export function NotificationLoadingPlaceholder({ style, }: { style?: StyleProp }) { return ( ) } export function NotificationFeedLoadingPlaceholder() { return ( <> ) } const styles = StyleSheet.create({ post: { flexDirection: 'row', backgroundColor: colors.white, borderRadius: 6, padding: 10, margin: 1, }, avatar: { borderRadius: 25, marginRight: 10, }, notification: { backgroundColor: colors.white, borderRadius: 6, padding: 10, paddingLeft: 46, margin: 1, }, smallAvatar: { borderRadius: 15, marginRight: 10, }, })