diff --git a/.gitignore b/.gitignore index e364f4b..47a5649 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ #Vscode .vscode - +.idea # dependencies node_modules/ diff --git a/app/_layout.tsx b/app/_layout.tsx index 3d651a3..e4f5bf0 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -1,27 +1,73 @@ -import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native'; -import { Stack } from 'expo-router'; -import { StatusBar } from 'expo-status-bar'; -import 'react-native-reanimated'; - -import { useColorScheme } from '@/hooks/use-color-scheme'; +import { + DarkTheme, + DefaultTheme, + ThemeProvider, +} from "@react-navigation/native"; +import { Stack } from "expo-router"; +import { StatusBar } from "expo-status-bar"; +import "react-native-reanimated"; +import { useEffect, useState } from "react"; +import { onAuthStateChanged, User } from "firebase/auth"; +import { auth, db } from "../firebase_config"; +import { useRouter } from "expo-router"; +import { useColorScheme } from "@/hooks/use-color-scheme"; +import { doc, getDoc } from "firebase/firestore"; export const unstable_settings = { - anchor: '(tabs)', + anchor: "(tabs)", }; export default function RootLayout() { const colorScheme = useColorScheme(); + const router = useRouter(); + const [user, setUser] = useState(null); + const [userRole, setUserRole] = useState(null); + + useEffect(() => { + const unsubscribe = onAuthStateChanged(auth, async (currentUser) => { + setUser(currentUser); + if (!currentUser) { + router.replace("/login/login"); + return; + } + + const userDocRef = doc(db, "user", currentUser.uid); + const userDoc = await getDoc(userDocRef); + + if (!userDoc.exists()) { + router.replace("/login/login"); + return; + } + + const { role } = userDoc.data(); + setUser(currentUser); + setUserRole(role); + + if (role === "chef") { + router.replace("/(tabs)"); + } else if (role === "responsable") { + router.replace("/login/login"); + } else { + router.replace("/login/login"); + } + }); + + return unsubscribe; + }, []); return ( - + - + + - ); } diff --git a/app/login/login.tsx b/app/login/login.tsx new file mode 100644 index 0000000..29efb06 --- /dev/null +++ b/app/login/login.tsx @@ -0,0 +1,76 @@ +import React, { useState } from "react"; +import { View, Text, TextInput, Button, StyleSheet } from "react-native"; +import { + signInWithEmailAndPassword, + createUserWithEmailAndPassword, +} from "firebase/auth"; +import { doc, setDoc } from "firebase/firestore"; +import { auth, db } from "../../firebase_config"; +import { router } from "expo-router"; + +const DEFAULT_ROLE = "resp"; + +const LoginScreen: React.FC = () => { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + + const handleLogin = async () => { + try { + await signInWithEmailAndPassword(auth, email, password); + router.replace("/(tabs)"); + } catch (error: any) { + alert(error.message); + } + }; + + const handleRegister = async () => { + try { + await createUserWithEmailAndPassword(auth, email, password); + router.replace("/(tabs)"); + } catch (error: any) { + alert(error.message); + } + }; + + return ( + + Se connecter / S'incrire + + +