Merging branch 'userrole' to implement role management
This commit is contained in:
@@ -8,25 +8,31 @@ import { StyleSheet, View,Text } from 'react-native';
|
||||
import { useChantier } from '../ContextChantier';
|
||||
import Anomaly from '@/components/anomaly';
|
||||
|
||||
import { useUser } from '../ContextUser';
|
||||
|
||||
|
||||
|
||||
export default function Home() {
|
||||
const { chantier, setChantier } = useChantier();
|
||||
const { role } = useUser();
|
||||
|
||||
|
||||
return(
|
||||
<ThemedView lvl={3} style={styles.back}>
|
||||
<View style={styles.container}>
|
||||
|
||||
<View style={{width:"100%", position: 'absolute',marginLeft:"50%"}}>
|
||||
<SetStatus></SetStatus>
|
||||
</View>
|
||||
<ChantierSummary style={styles.summary} data={{ chantier }} />
|
||||
<View style={{width:"100%", position: 'absolute'}}>
|
||||
<SelectChantier></SelectChantier>
|
||||
</View>
|
||||
<ChantierSummary style={styles.summary} data={{chantier}}/>
|
||||
<Anomaly style={styles.anomaly} data={{chantier}}/>
|
||||
{role === "chef" && (
|
||||
<View style={{width:"100%", position: 'absolute',marginLeft:"50%"}}>
|
||||
<SetStatus></SetStatus>
|
||||
</View>
|
||||
)}
|
||||
{role === "resp"}
|
||||
|
||||
</View>
|
||||
</ThemedView>
|
||||
)
|
||||
|
||||
@@ -42,12 +42,15 @@ const region = {
|
||||
style={styles.map}
|
||||
region={region}
|
||||
>
|
||||
{chantiers.map(chantier => (
|
||||
<Marker
|
||||
key={chantier.id}
|
||||
coordinate={{ latitude: chantier.latitude, longitude: chantier.longitude }}
|
||||
/>
|
||||
))}
|
||||
{Array.isArray(chantiers) &&
|
||||
chantiers.map(chantier => (
|
||||
<Marker
|
||||
key = {chantier.id}
|
||||
coordinate={{ latitude: chantier.latitude, longitude: chantier.longitude }}
|
||||
title={chantier.adresse}
|
||||
description={chantier.etat}
|
||||
/>
|
||||
))}
|
||||
</ThemedMapView>
|
||||
</View>
|
||||
);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { User } from "@/class/class";
|
||||
import { User as FirebaseUser } from "firebase/auth";
|
||||
import { createContext, ReactNode, useContext, useMemo, useState } from "react";
|
||||
|
||||
type UserContextType = {
|
||||
user: User[];
|
||||
setUser: (list: User[]) => void;
|
||||
user: FirebaseUser | null;
|
||||
role: string | null;
|
||||
setUser: (user: FirebaseUser | null) => void;
|
||||
setRole: (role: string | null) => void;
|
||||
};
|
||||
|
||||
const UserContext = createContext<UserContextType | null>(null);
|
||||
@@ -13,19 +15,20 @@ type UserProviderProps = {
|
||||
};
|
||||
|
||||
export const UserProvider = ({ children }: UserProviderProps) => {
|
||||
const [user, setUser] = useState<User[]>([]);
|
||||
const [user, setUser] = useState<FirebaseUser | null>(null);
|
||||
const [role, setRole] = useState<string | null>(null);
|
||||
|
||||
const value = useMemo(() => ({ user, setUser }), [user]);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={value}>
|
||||
{children}
|
||||
</UserContext.Provider>
|
||||
const value = useMemo(
|
||||
() => ({ user, role, setUser, setRole }),
|
||||
[user, role]
|
||||
);
|
||||
|
||||
return <UserContext.Provider value={value}>{children}</UserContext.Provider>;
|
||||
};
|
||||
|
||||
export const useUser = () => {
|
||||
const context = useContext(UserContext);
|
||||
|
||||
if (!context) {
|
||||
throw new Error("useUser doit être utilisé dans <UserProvider>");
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import { auth, db } from "../firebase_config";
|
||||
|
||||
import { Platform, UIManager } from 'react-native';
|
||||
import { ChantierProvider } from "./ContextChantier";
|
||||
import { UserProvider } from "./ContextUser";
|
||||
|
||||
|
||||
export const unstable_settings = {
|
||||
@@ -29,8 +30,9 @@ export default function RootLayout() {
|
||||
useEffect(() => {
|
||||
const unsubscribe = onAuthStateChanged(auth, async (currentUser) => {
|
||||
if (!currentUser) {
|
||||
router.replace("/login/login");
|
||||
setUser(null);
|
||||
setUserRole(null);
|
||||
router.replace("/login/login");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -40,40 +42,34 @@ export default function RootLayout() {
|
||||
if (!userDoc.exists()) {
|
||||
router.replace("/login/login");
|
||||
setUser(null);
|
||||
setUserRole(null);
|
||||
return;
|
||||
}
|
||||
|
||||
const { role } = userDoc.data();
|
||||
setUser(currentUser);
|
||||
setUserRole(role);
|
||||
|
||||
if (role === "chef") {
|
||||
router.replace("/(tabs)");
|
||||
} else if (role === "resp") {
|
||||
router.replace("/(tabs)");
|
||||
} else if (role === "ouvrier") {
|
||||
router.replace("/(tabs)");
|
||||
} else {
|
||||
router.replace("/login/login");
|
||||
}
|
||||
router.replace("/(tabs)/home");
|
||||
});
|
||||
return unsubscribe;
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ChantierProvider>
|
||||
<ThemeProvider value={colorScheme === "dark" ? DarkTheme : DefaultTheme}>
|
||||
<Stack>
|
||||
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
||||
<Stack.Screen name="selectChantier" options={{ headerShown: false }}/>
|
||||
<Stack.Screen
|
||||
name="modal"
|
||||
options={{ presentation: "modal", title: "Modal" }}
|
||||
/>
|
||||
<Stack.Screen name="login" options={{ headerShown: false }} />
|
||||
</Stack>
|
||||
<StatusBar style="auto" />
|
||||
</ThemeProvider>
|
||||
</ChantierProvider>
|
||||
<UserProvider>
|
||||
<ChantierProvider>
|
||||
<ThemeProvider value={colorScheme === "dark" ? DarkTheme : DefaultTheme}>
|
||||
<Stack>
|
||||
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
||||
<Stack.Screen name="selectChantier" options={{ headerShown: false }}/>
|
||||
<Stack.Screen
|
||||
name="modal"
|
||||
options={{ presentation: "modal", title: "Modal" }}
|
||||
/>
|
||||
<Stack.Screen name="login" options={{ headerShown: false }} />
|
||||
</Stack>
|
||||
<StatusBar style="auto" />
|
||||
</ThemeProvider>
|
||||
</ChantierProvider>
|
||||
</UserProvider>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user