import React, { ReactNode, useState, useEffect } from 'react'; import { ViewProps, KeyboardAvoidingView, StatusBar, StyleSheet, Dimensions, ActivityIndicator, Platform, ScrollView } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import ViewAtom from '../atoms/ViewAtom'; import ScrollViewAtom from '../atoms/ScrollViewAtom'; import { useTheme } from '../../model/useThemeProvider'; type RootViewProps = ViewProps & { backgroundColor?: string; isLoader?: boolean; statusBarColor?: string; barStyle?: 'light-content' | 'dark-content'; edges?: Array<'top' | 'right' | 'bottom' | 'left'>; isScrollView?: boolean; scrollViewRef?: React.RefObject; topComponent?: ReactNode; bottomComponent?: ReactNode; showsVerticalScrollIndicator?: boolean; loadingComponent?: React.ReactNode; keyboardVerticalOffset?: number; }; const ZSContainer = ({ backgroundColor, isLoader = false, statusBarColor, barStyle, edges = ['top', 'bottom'], isScrollView = true, scrollViewRef, topComponent, bottomComponent, showsVerticalScrollIndicator = true, loadingComponent = , keyboardVerticalOffset, ...props }: RootViewProps) => { const { palette } = useTheme(); const [isDelayed, setIsDelayed] = useState(true); useEffect(() => { const timer = setTimeout(() => { setIsDelayed(false); }, 200); return () => clearTimeout(timer); }, []); return ( { !isDelayed ? ( {topComponent && topComponent} { isLoader ? (loadingComponent) : ( isScrollView ? ( {props.children} ) : ( {props.children} ) ) } {!isLoader && bottomComponent && bottomComponent} ) : null } ); }; const styles = StyleSheet.create({ flex1: { flex: 1, width: Dimensions.get('window').width }, scrollContainerStyle: { flexGrow: 1, alignItems: 'center' }, }); export default ZSContainer;