Reapply "V1_Fonctionnel_GTAV1_GTA"

This reverts commit 244db6bfb6.
This commit is contained in:
2025-12-02 18:04:52 +01:00
parent 6f75a66906
commit 89d74363f8
55 changed files with 7567 additions and 5819 deletions

View File

@@ -1,43 +1,18 @@
import React, { useState } from 'react';
import { useAuth } from '../context/AuthContext';
import { useNavigate } from 'react-router-dom';
import { Building2, AlertTriangle } from 'lucide-react';
import { AlertTriangle } from 'lucide-react';
const Login = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState('');
const [authMethod, setAuthMethod] = useState('');
const navigate = useNavigate();
const { login, loginWithO365 } = useAuth();
const handleSubmit = async (e) => {
e.preventDefault();
setIsLoading(true);
setError('');
setAuthMethod('local');
try {
const success = await login(email, password);
if (success) {
navigate('/dashboard');
} else {
setError('Identifiants incorrects. Veuillez réessayer.');
}
} catch (error) {
setError(error.message || 'Erreur lors de la connexion');
}
setIsLoading(false);
};
const { loginWithO365 } = useAuth();
const handleO365Login = async () => {
setIsLoading(true);
setError('');
setAuthMethod('o365');
try {
const success = await loginWithO365();
@@ -48,7 +23,6 @@ const Login = () => {
return;
}
// Redirection vers le dashboard
navigate('/dashboard');
} catch (error) {
@@ -67,7 +41,6 @@ const Login = () => {
};
return (
<div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 flex flex-col lg:flex-row">
{/* Image côté gauche */}
<div className="h-32 lg:h-auto lg:flex lg:w-1/2 bg-cover bg-center"
@@ -81,7 +54,7 @@ const Login = () => {
<div className="max-w-md w-full">
<div className="bg-white rounded-2xl shadow-xl p-6 lg:p-8">
{/* Logo */}
<div className="text-center mb-4">
<div className="text-center mb-6">
<img
src="/assets/GA.svg"
alt="GTA Logo"
@@ -91,17 +64,18 @@ const Login = () => {
GESTION DES TEMPS ET DES ACTIVITÉS
</p>
</div>
{/* Bouton Office 365 */}
<div>
<div className="mb-4">
<button
data-testid="o365-login-btn"
onClick={handleO365Login}
disabled={isLoading}
type="button"
className="w-full bg-cyan-600 text-white py-3 rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center space-x-2"
className="w-full bg-cyan-600 text-white py-3 rounded-lg font-medium hover:bg-cyan-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center space-x-2"
>
{isLoading && authMethod === 'o365' ? (
<span>Connexion Office 365...</span>
{isLoading ? (
<span>Connexion en cours...</span>
) : (
<>
<svg className="w-5 h-5" viewBox="0 0 21 21" fill="currentColor">
@@ -113,6 +87,13 @@ const Login = () => {
</button>
</div>
{/* Message d'information */}
<div className="bg-blue-50 border border-blue-200 rounded-lg p-3 text-center">
<p className="text-blue-800 text-sm">
Connectez-vous avec votre compte professionnel ENSUP
</p>
</div>
{/* Message d'erreur */}
{error && (
<div className="p-3 bg-red-50 border border-red-200 rounded-lg mt-4">
@@ -135,8 +116,8 @@ const Login = () => {
</div>
</div>
</div>
</div>
</div>
);
};
export default Login;
export default Login;