import React, { useEffect, useState } from 'react' import { Image, View, StyleSheet, Text } from 'react-native' import { Store, useStore } from '@app/state/store' import colors from '@app/styles/colors' import GradientBackground from '@app/components/GradientBackground' import font from '@app/styles/font' import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated' const selectHydrated = (store: Store) => store.hydrated const SplashPage: React.FC<{}> = ({ children }) => { const [ready, setReady] = useState(false) const hydrated = useStore(selectHydrated) const opacity = useSharedValue(0) const animatedStyles = useAnimatedStyle(() => { return { opacity: opacity.value, } }) const minSplashTime = new Promise(resolve => setTimeout(resolve, 1000)) const prepare = async () => { return } const promise = Promise.all([prepare(), minSplashTime]) useEffect(() => { opacity.value = withTiming(1, { duration: 200, }) promise .then(() => { setReady(true) }) .then(() => { opacity.value = withTiming(0, { duration: 500, }) }) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const splash = ( subtracks ) return ( {ready && hydrated && children} {splash} ) } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: 'transparent', }, splashContainer: { position: 'absolute', height: '100%', width: '100%', }, background: { justifyContent: 'center', alignItems: 'center', }, logoContainer: { elevation: 5, justifyContent: 'center', alignItems: 'center', }, image: { height: 140, width: 140, marginBottom: -10, tintColor: colors.accent, }, text: { fontFamily: font.bold, fontSize: 50, color: colors.text.primary, }, }) export default SplashPage