From 4ae6fbd3c8e8be9d47d0bd959aeac380f7bf67ce Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 15 Nov 2022 12:07:41 -0600 Subject: Better loading screens --- src/view/com/util/LoadingPlaceholder.tsx | 73 ++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/view/com/util/LoadingPlaceholder.tsx (limited to 'src/view/com/util/LoadingPlaceholder.tsx') diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx new file mode 100644 index 000000000..55b6ad1b3 --- /dev/null +++ b/src/view/com/util/LoadingPlaceholder.tsx @@ -0,0 +1,73 @@ +import React, {useEffect, useMemo} from 'react' +import { + Animated, + StyleProp, + useWindowDimensions, + View, + ViewStyle, +} from 'react-native' +import LinearGradient from 'react-native-linear-gradient' +import {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 ( + + + + + + ) +} -- cgit 1.4.1