diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-06-09 13:03:25 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-06-09 13:03:25 -0500 |
commit | d6942bffab68ce80d5cb26b42710dd9276f62ded (patch) | |
tree | 309f8d64f95d526d3cae6c00611c93b04f12944e /src/App.web.tsx | |
parent | 92ca49ab9a309510a5503a4df6a0ebcfba30f918 (diff) | |
download | voidsky-d6942bffab68ce80d5cb26b42710dd9276f62ded.tar.zst |
Add state management
Diffstat (limited to 'src/App.web.tsx')
-rw-r--r-- | src/App.web.tsx | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/App.web.tsx b/src/App.web.tsx new file mode 100644 index 000000000..18b15821b --- /dev/null +++ b/src/App.web.tsx @@ -0,0 +1,80 @@ +import React, {useState, useEffect} from 'react' +import { + SafeAreaView, + ScrollView, + StatusBar, + Text, + Button, + useColorScheme, + View, +} from 'react-native' +import {NavigationContainer} from '@react-navigation/native' +import { + createNativeStackNavigator, + NativeStackScreenProps, +} from '@react-navigation/native-stack' +import {RootStore, setupState, RootStoreProvider} from './state' + +type RootStackParamList = { + Home: undefined + Profile: {name: string} +} +const Stack = createNativeStackNavigator() + +const HomeScreen = ({ + navigation, +}: NativeStackScreenProps<RootStackParamList, 'Home'>) => { + const isDarkMode = useColorScheme() === 'dark' + + return ( + <SafeAreaView> + <StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} /> + <ScrollView contentInsetAdjustmentBehavior="automatic"> + <View> + <Text>Web</Text> + <Button + title="Go to Jane's profile" + onPress={() => navigation.navigate('Profile', {name: 'Jane'})} + /> + </View> + </ScrollView> + </SafeAreaView> + ) +} + +const ProfileScreen = ({ + route, +}: NativeStackScreenProps<RootStackParamList, 'Profile'>) => { + return <Text>This is {route.params.name}'s profile</Text> +} + +function App() { + const [rootStore, setRootStore] = useState<RootStore | undefined>(undefined) + + // init + useEffect(() => { + setupState().then(setRootStore) + }, []) + + // show nothing prior to init + if (!rootStore) { + return null + } + + return ( + <RootStoreProvider value={rootStore}> + <NavigationContainer> + <Stack.Navigator> + <Stack.Screen + name="Home" + component={HomeScreen} + options={{title: 'Welcome'}} + /> + <Stack.Screen name="Profile" component={ProfileScreen} /> + </Stack.Navigator> + </NavigationContainer> + </RootStoreProvider> + ) +} + +export default App |