121 lines
2.8 KiB
TypeScript
121 lines
2.8 KiB
TypeScript
/**
|
|
* Sample React Native App
|
|
* https://github.com/facebook/react-native
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
import React from 'react';
|
|
import type {PropsWithChildren} from 'react';
|
|
import {
|
|
ScrollView,
|
|
StatusBar,
|
|
StyleSheet,
|
|
Text,
|
|
useColorScheme,
|
|
View,
|
|
} from 'react-native';
|
|
import { Provider } from 'react-redux'; // Redux Provider
|
|
import {store,persistor} from './app/redux/store'; // Redux store
|
|
import {
|
|
Colors,
|
|
} from 'react-native/Libraries/NewAppScreen';
|
|
import TabNavigator from './app/navigation/TabNavigator';
|
|
import AppNavigator from './app/navigation/AppNavigator';
|
|
import Toast from 'react-native-toast-message'; // Import Toast
|
|
import { PersistGate } from 'redux-persist/integration/react';
|
|
|
|
type SectionProps = PropsWithChildren<{
|
|
title: string;
|
|
}>;
|
|
|
|
function Section({children, title}: SectionProps): React.JSX.Element {
|
|
const isDarkMode = useColorScheme() === 'dark';
|
|
return (
|
|
<View style={styles.sectionContainer}>
|
|
<Text
|
|
style={[
|
|
styles.sectionTitle,
|
|
{
|
|
color: isDarkMode ? Colors.white : Colors.black,
|
|
},
|
|
]}>
|
|
{title}
|
|
</Text>
|
|
<Text
|
|
style={[
|
|
styles.sectionDescription,
|
|
{
|
|
color: isDarkMode ? Colors.light : Colors.dark,
|
|
},
|
|
]}>
|
|
{children}
|
|
</Text>
|
|
</View>
|
|
);
|
|
}
|
|
|
|
function App(): React.JSX.Element {
|
|
const isDarkMode = useColorScheme() === 'dark';
|
|
|
|
const backgroundStyle = {
|
|
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
|
|
flex:1,
|
|
justifyContent:'center'
|
|
};
|
|
|
|
/*
|
|
* To keep the template simple and small we're adding padding to prevent view
|
|
* from rendering under the System UI.
|
|
* For bigger apps the recommendation is to use `react-native-safe-area-context`:
|
|
* https://github.com/AppAndFlow/react-native-safe-area-context
|
|
*
|
|
* You can read more about it here:
|
|
* https://github.com/react-native-community/discussions-and-proposals/discussions/827
|
|
*/
|
|
const safePadding = '5%';
|
|
|
|
// Wrap the app with Redux Provider to enable global state management
|
|
return (
|
|
<Provider store={store}>
|
|
<PersistGate loading={null} persistor={persistor}>
|
|
<View style={styles.container}>
|
|
<StatusBar
|
|
barStyle={isDarkMode ? 'light-content' : 'dark-content'}
|
|
backgroundColor={backgroundStyle.backgroundColor}
|
|
/>
|
|
<AppNavigator />
|
|
</View>
|
|
<Toast
|
|
position='bottom'
|
|
bottomOffset={20}
|
|
/>
|
|
</PersistGate>
|
|
</Provider>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
},
|
|
sectionContainer: {
|
|
marginTop: 32,
|
|
paddingHorizontal: 24,
|
|
},
|
|
sectionTitle: {
|
|
fontSize: 24,
|
|
fontWeight: '600',
|
|
},
|
|
sectionDescription: {
|
|
marginTop: 8,
|
|
fontSize: 18,
|
|
fontWeight: '400',
|
|
},
|
|
highlight: {
|
|
fontWeight: '700',
|
|
},
|
|
});
|
|
|
|
export default App;
|