+ );
+}
+
+export default BatForm;
diff --git a/Dashboard.js b/Dashboard.js
new file mode 100644
index 0000000..00dcfa6
--- /dev/null
+++ b/Dashboard.js
@@ -0,0 +1,52 @@
+import React from 'react';
+import BatList from './BatList';
+
+function Dashboard({ user, onLogout }) {
+ if (!user) {
+ return
Utilisateur non trouvé, veuillez vous connecter.
;
+ }
+
+ const { email, role } = user;
+
+ // Fonction pour rendre le contenu en fonction du rôle
+ const renderContent = () => {
+ switch (role) {
+ case 'admin':
+ return (
+
+
Vous pouvez gérer les utilisateurs, consulter les statistiques globales et exporter les BAT.
+ {/* Ajouter plus de composants ou actions pour l'admin ici */}
+
+ );
+ case 'qualite':
+ return (
+
+
Vous pouvez valider les fiches BAT, effectuer des contrôles et suivre les non-conformités.
+ {/* Ajouter des actions spécifiques à la qualité ici */}
+
+ );
+ case 'operateur':
+ return (
+
+
Vous pouvez consulter les ordres de fabrication et suivre les étapes de production.
+ {/* Ajouter des actions spécifiques à l'opérateur ici */}
+
+ );
+ default:
+ return
Rôle non défini.
;
+ }
+ };
+
+ return (
+
+
+
Bienvenue, {email.split('@')[0]}
+
Rôle : {role}
+ {renderContent()}
+
+
+
+ );
+}
+
+export default Dashboard;
diff --git a/OperateurDashboard.js b/OperateurDashboard.js
new file mode 100644
index 0000000..c1967f7
--- /dev/null
+++ b/OperateurDashboard.js
@@ -0,0 +1,39 @@
+import React, { useState } from 'react';
+import logo from './assets/logo-tecpap.png';
+import BatForm from './BatForm';
+import './App.css';
+
+function OperateurDashboard({ onLogout }) {
+ const [message, setMessage] = useState(''); // Gère les messages dynamiques
+
+ const handleLogout = () => {
+ setMessage('Vous avez été déconnecté avec succès.');
+ onLogout(); // Appel à la fonction de déconnexion
+ };
+
+ return (
+
+
+
+
+
+
+
+
🛠️ Espace Opérateur
+
Bienvenue, merci de compléter le formulaire BAT.
+
+ {message &&
{message}
} {/* Affiche un message si nécessaire */}
+
+ {/* Formulaire pour l'opérateur */}
+
+
+ );
+}
+
+export default OperateurDashboard;
diff --git a/QualiteDashboard.js b/QualiteDashboard.js
new file mode 100644
index 0000000..59787a0
--- /dev/null
+++ b/QualiteDashboard.js
@@ -0,0 +1,15 @@
+import React from 'react';
+import logo from './assets/logo-tecpap.png';
+
+function QualiteDashboard({ onLogout }) {
+ return (
+
+
+
📋 Espace Qualité
+
Bienvenue dans l’espace qualité. Accédez au contrôle BAT, check-lists de conformité, suivi des défauts, et validation finale.
+
+
+ );
+}
+
+export default QualiteDashboard;
diff --git a/firebase-config.js b/firebase-config.js
new file mode 100644
index 0000000..a69f27f
--- /dev/null
+++ b/firebase-config.js
@@ -0,0 +1,19 @@
+// src/firebase-config.js
+import { initializeApp } from "firebase/app";
+import { getAuth } from "firebase/auth";
+import { getFirestore } from "firebase/firestore";
+
+const firebaseConfig = {
+ apiKey: "AIzaSyDkpEKKs9GR8SNxZxTy3wgOsdu7Ywlouu4",
+ authDomain: "tecpap-digital.firebaseapp.com",
+ projectId: "tecpap-digital",
+ storageBucket: "tecpap-digital.firebasestorage.app",
+ messagingSenderId: "1085503988391",
+ appId: "1:1085503988391:web:819f7cdfe0dffcc128b182"
+};
+// Initialiser Firebase
+const app = initializeApp(firebaseConfig);
+
+// Exporter les services
+export const auth = getAuth(app);
+export const db = getFirestore(app);
diff --git a/index.css b/index.css
new file mode 100644
index 0000000..224d436
--- /dev/null
+++ b/index.css
@@ -0,0 +1,20 @@
+/* Reset and global styles */
+*,
+*::before,
+*::after {
+ box-sizing: border-box; /* Simplifie le calcul des tailles */
+ margin: 0; /* Supprime la marge par défaut */
+}
+
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
+ -webkit-font-smoothing: antialiased; /* Améliore la lisibilité des polices sur MacOS */
+ -moz-osx-font-smoothing: grayscale; /* Idem pour Firefox sur MacOS */
+}
+
+code {
+ font-family: 'Source Code Pro', Menlo, Monaco, Consolas, 'Courier New', monospace;
+ white-space: pre; /* Assurez-vous que l'espace blanc est respecté */
+}
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..aaa9e53
--- /dev/null
+++ b/index.js
@@ -0,0 +1,14 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import './index.css'; // Votre CSS global
+import App from './App'; // Composant principal de l'application
+
+// Récupération de l'élément root dans le fichier HTML
+const root = ReactDOM.createRoot(document.getElementById('root'));
+
+// Rendu de l'application dans l'élément root
+root.render(
+
+
+
+);
diff --git a/login.js b/login.js
new file mode 100644
index 0000000..e0f3c56
--- /dev/null
+++ b/login.js
@@ -0,0 +1,70 @@
+import React, { useState } from 'react';
+import './App.css';
+import logo from './assets/logo-tecpap.png'; // Ajoutez cet import
+import { signInWithEmailAndPassword } from 'firebase/auth';
+import { doc, getDoc } from 'firebase/firestore';
+import { auth, db } from './firebase-config';
+
+function Login({ onLogin }) {
+ const [email, setEmail] = useState('');
+ const [password, setPassword] = useState('');
+ const [loading, setLoading] = useState(false);
+ const [error, setError] = useState(null);
+
+ const handleLogin = async (e) => {
+ e.preventDefault();
+ setLoading(true);
+ setError(null);
+
+ try {
+ const userCredential = await signInWithEmailAndPassword(auth, email, password);
+ const user = userCredential.user;
+ const userDoc = await getDoc(doc(db, 'users', user.uid));
+ const role = userDoc.exists() ? userDoc.data().role : null;
+
+ if (!role) {
+ setError("Aucun rôle défini pour cet utilisateur.");
+ setLoading(false);
+ return;
+ }
+
+ onLogin(user, role);
+ } catch (error) {
+ setError("Erreur de connexion : " + error.message);
+ setLoading(false);
+ }
+ };
+
+ return (
+
+
+
+
Connexion sécurisée
+ {error &&
{error}
}
+
+
+
+ );
+}
+
+export default Login;
\ No newline at end of file
diff --git a/logo.svg b/logo.svg
new file mode 100644
index 0000000..9dfc1c0
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file