-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add a user context provider to the app #24
Changes from 4 commits
21419cb
2bf2125
b566ef5
cefb51e
640851d
f3ee13c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Basically cleanup, but also adding context and paper provider so everywhere has access to RNP and our group and user context |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,57 +1,14 @@ | ||
import * as React from 'react'; | ||
import { Text } from 'react-native'; | ||
import { createNativeStackNavigator } from '@react-navigation/native-stack'; | ||
import { NavigationContainer, NavigationProp } from '@react-navigation/native'; | ||
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; | ||
import LoginPage from './screens/Login'; | ||
import MedList from './screens/Medication'; | ||
import Home from './assets/home.svg'; | ||
import DocPickerButton from './components/DocPickerButton'; | ||
import { SafeAreaView } from 'react-native-safe-area-context'; | ||
import Router from './navigation/Router'; | ||
import UserContext from './contexts/userContext'; | ||
|
||
export type ScreenNames = ['BottomNav', 'Landing', 'TEMP-FileUpload', 'Login']; | ||
export type RootStackParamList = Record<ScreenNames[number], any>; | ||
export type StackNavigation = NavigationProp<RootStackParamList>; | ||
|
||
const Stack = createNativeStackNavigator<RootStackParamList>(); | ||
const Tab = createBottomTabNavigator(); | ||
|
||
// TODO: figure out a way to do this better, I didnt enjoy this way of doing it in SaluTemp there HAS to be a better way | ||
export default function App() { | ||
return ( | ||
<NavigationContainer> | ||
<Stack.Navigator> | ||
<Stack.Screen | ||
name="Login" | ||
options={{ headerShown: true }} | ||
component={LoginPage} | ||
/> | ||
<Stack.Screen | ||
name="BottomNav" | ||
options={{ headerShown: false }} | ||
component={Tabs} | ||
/> | ||
<Stack.Screen | ||
name="TEMP-FileUpload" | ||
options={{ headerShown: true }} | ||
component={DocPickerButton} | ||
/> | ||
</Stack.Navigator> | ||
</NavigationContainer> | ||
); | ||
} | ||
|
||
function Tabs() { | ||
return ( | ||
<Tab.Navigator> | ||
<Tab.Screen | ||
name="Landing" | ||
options={{ | ||
headerShown: true, | ||
tabBarIcon: () => <Home color={'gray'} />, | ||
tabBarLabel: () => <Text>Landing</Text> | ||
}} | ||
component={MedList} | ||
/> | ||
</Tab.Navigator> | ||
<UserContext> | ||
<SafeAreaView className="flex-1"> | ||
<Router /> | ||
</SafeAreaView> | ||
</UserContext> | ||
); | ||
} |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. figured out how to get tailwind to work in RNP lol |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. figured out how to get tailwind to work in RNP lol |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import React, { createContext, useContext, useEffect, useState } from 'react'; | ||
import { getAuth, onAuthStateChanged } from 'firebase/auth'; | ||
import { User } from '../types/user'; | ||
|
||
type UserContextData = { | ||
user: User; | ||
}; | ||
|
||
const UserContext = createContext({} as UserContextData); | ||
|
||
// TODO: Add Group ID, and User Role to this. | ||
// TODO: Should maybe be a group prop and not inside user. | ||
// TODO: make name more generic | ||
export default function UserProvider({ children }: { children: any }) { | ||
const [user, setUser] = useState({} as User); | ||
const auth = getAuth(); | ||
|
||
useEffect(() => { | ||
onAuthStateChanged(auth, (user) => { | ||
const signedInUser: User = { | ||
userID: user?.uid ?? '', | ||
userEmail: user?.email ?? '' | ||
}; | ||
setUser(signedInUser); | ||
}); | ||
}, []); | ||
|
||
const UserStore: UserContextData = { | ||
user: user | ||
}; | ||
|
||
return ( | ||
<UserContext.Provider value={UserStore}>{children}</UserContext.Provider> | ||
); | ||
} | ||
|
||
export const useUser = (): UserContextData => { | ||
const context = useContext(UserContext); | ||
|
||
if (!context) { | ||
throw new Error('useUser must be used within a UserProvider'); | ||
} | ||
|
||
return context; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import React from 'react'; | ||
import { NavigationProp } from '@react-navigation/native'; | ||
import { createNativeStackNavigator } from '@react-navigation/native-stack'; | ||
import LoginPage from '../screens/Login'; | ||
import AppStackBottomTabNavigator from './BottomTabNavigator'; | ||
|
||
export type AppScreenNames = ['BottomNavScreens', 'Landing', 'Login']; | ||
type AppStackParamList = Record<AppScreenNames[number], any>; | ||
|
||
export type AppStackNavigation = NavigationProp<AppStackParamList>; | ||
const AppStack = createNativeStackNavigator<AppStackParamList>(); | ||
|
||
export default function AppNavigation() { | ||
return ( | ||
<AppStack.Navigator> | ||
<AppStack.Screen | ||
name="Login" | ||
options={{ headerShown: true }} | ||
component={LoginPage} | ||
/> | ||
<AppStack.Screen | ||
name="BottomNavScreens" | ||
options={{ headerShown: false }} | ||
component={AppStackBottomTabNavigator} | ||
/> | ||
</AppStack.Navigator> | ||
); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; | ||
import React from 'react'; | ||
import MedList from '../screens/Medication'; | ||
import { Text } from 'react-native'; | ||
import Home from '../assets/home.svg'; | ||
|
||
const AppStackBottomTab = createBottomTabNavigator(); | ||
|
||
export default function AppStackBottomTabNavigator() { | ||
return ( | ||
<AppStackBottomTab.Navigator> | ||
<AppStackBottomTab.Screen | ||
name="Landing" | ||
options={{ | ||
headerShown: true, | ||
tabBarIcon: () => <Home color={'gray'} />, | ||
tabBarLabel: () => <Text>Landing</Text> | ||
}} | ||
component={MedList} | ||
/> | ||
</AppStackBottomTab.Navigator> | ||
); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import React from 'react'; | ||
import { NavigationContainer } from '@react-navigation/native'; | ||
import AppNavigation from './AppNavigation'; | ||
|
||
export default function Router() { | ||
return ( | ||
<NavigationContainer> | ||
<AppNavigation /> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Im thinking if onboarding ever gets added it can be its own nav stack. Or if we ever want to have another nav stack can also be separated here |
||
</NavigationContainer> | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just adding a file input into swagger for file upload