Ajout du responsive header

This commit is contained in:
Mathis 2025-04-11 10:36:30 +02:00
parent 6f054bc707
commit 7cc5598fbf
3 changed files with 49 additions and 24 deletions

View File

@ -8,9 +8,11 @@ function Header() {
const [isMenuOpen, setIsMenuOpen] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false);
return ( return (
<header className="bg-white shadow-md sticky"> <header className="bg-white shadow-md ">
<div className="mx-auto px-4 sm:px-6 lg:px-8 py-4 flex justify-between items-center"> <div className="mx-auto px-4 sm:px-6 lg:px-8 py-4 flex justify-between items-center">
<Link to="/" className="text-2xl font-bold text-indigo-600">VigiMétéo</Link> <Link to="/" className="text-2xl font-bold text-indigo-600">
VigiMétéo
</Link>
<button <button
className="sm:hidden text-gray-600 hover:text-indigo-600" className="sm:hidden text-gray-600 hover:text-indigo-600"
onClick={() => setIsMenuOpen(!isMenuOpen)} onClick={() => setIsMenuOpen(!isMenuOpen)}
@ -21,22 +23,31 @@ function Header() {
<nav <nav
className={`${ className={`${
isMenuOpen ? "block" : "hidden" isMenuOpen ? "block" : "hidden"
} absolute top-16 left-0 w-full bg-white shadow-md sm:static sm:w-auto sm:flex sm:gap-6 sm:shadow-none z-50`} } absolute z-[1000] top-16 left-0 w-full bg-white shadow-md sm:static sm:w-auto sm:z-auto sm:flex sm:gap-6 sm:shadow-none`}
> >
<ul className="flex flex-col sm:flex-row gap-4 sm:gap-6 text-gray-600 p-4 sm:p-0"> <ul className="flex flex-col sm:flex-row gap-4 sm:gap-6 text-gray-600 p-4 sm:p-0">
<li> <li>
<Link to="/" className="text-gray-600 hover:text-indigo-600"> <Link
to="/"
onClick={() => setIsMenuOpen(false)}
className="text-gray-600 hover:text-indigo-600"
>
Accueil Accueil
</Link> </Link>
</li> </li>
<li> <li>
<Link to="/about" className="text-gray-600 hover:text-indigo-600"> <Link
to="/about"
onClick={() => setIsMenuOpen(false)}
className="text-gray-600 hover:text-indigo-600"
>
À propos À propos
</Link> </Link>
</li> </li>
<li> <li>
<Link <Link
to="/gestion" to="/gestion"
onClick={() => setIsMenuOpen(false)}
className="text-gray-600 hover:text-indigo-600" className="text-gray-600 hover:text-indigo-600"
> >
Gestion Gestion
@ -47,6 +58,7 @@ function Header() {
<li className="sm:hidden"> <li className="sm:hidden">
<Link <Link
to="/login" to="/login"
onClick={() => setIsMenuOpen(false)}
className="hover:text-indigo-600 flex items-center gap-2" className="hover:text-indigo-600 flex items-center gap-2"
> >
<LogIn size={20} /> <LogIn size={20} />
@ -56,6 +68,7 @@ function Header() {
<li className="sm:hidden"> <li className="sm:hidden">
<Link <Link
to="/signup" to="/signup"
onClick={() => setIsMenuOpen(false)}
className="flex items-center gap-2 bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700" className="flex items-center gap-2 bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700"
> >
<UserPlus size={20} /> <UserPlus size={20} />
@ -68,6 +81,7 @@ function Header() {
<li className="sm:hidden"> <li className="sm:hidden">
<Link <Link
to="/settings" to="/settings"
onClick={()=>setIsMenuOpen(false)}
className="flex items-center gap-2 text-gray-600 hover:text-indigo-600" className="flex items-center gap-2 text-gray-600 hover:text-indigo-600"
> >
<Settings size={20} /> <Settings size={20} />
@ -92,6 +106,7 @@ function Header() {
<div className="hidden sm:flex gap-4 "> <div className="hidden sm:flex gap-4 ">
<Link <Link
to="/login" to="/login"
onClick={()=>setIsMenuOpen(false)}
className="hover:text-indigo-600 flex items-center gap-2" className="hover:text-indigo-600 flex items-center gap-2"
> >
<LogIn size={20} /> <LogIn size={20} />
@ -99,6 +114,7 @@ function Header() {
</Link> </Link>
<Link <Link
to="/signup" to="/signup"
onClick={()=>setIsMenuOpen(false)}
className="flex items-center gap-2 bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700" className="flex items-center gap-2 bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700"
> >
<UserPlus size={20} /> <UserPlus size={20} />
@ -109,6 +125,7 @@ function Header() {
<div className="hidden sm:flex gap-4"> <div className="hidden sm:flex gap-4">
<Link <Link
to="/settings" to="/settings"
onClick={()=>setIsMenuOpen(false)}
className="flex items-center gap-2 text-gray-600 hover:text-indigo-600" className="flex items-center gap-2 text-gray-600 hover:text-indigo-600"
> >
<Settings size={20} /> <Settings size={20} />

View File

@ -1,14 +1,14 @@
import React, { useState } from 'react'; import React, { useState } from "react";
import { Mail, Lock } from 'lucide-react'; import { Mail, Lock } from "lucide-react";
import { useNavigate, Link } from 'react-router-dom'; import { useNavigate, Link } from "react-router-dom";
import axios from 'axios'; // Assurez-vous d'avoir axios importé import axios from "axios"; // Assurez-vous d'avoir axios importé
import { useAuth } from '../AuthContext'; import { useAuth } from "../AuthContext";
import { API_BASE_URL } from "../config"; import { API_BASE_URL } from "../config";
function Login() { function Login() {
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
email: '', email: "",
password: '' password: "",
}); });
const { login } = useAuth(); // Utilisation du hook useAuth pour accéder à la fonction login const { login } = useAuth(); // Utilisation du hook useAuth pour accéder à la fonction login
const navigate = useNavigate(); // Initialisation de useNavigate const navigate = useNavigate(); // Initialisation de useNavigate
@ -17,7 +17,7 @@ function Login() {
const { name, value } = e.target; const { name, value } = e.target;
setFormData((prev) => ({ setFormData((prev) => ({
...prev, ...prev,
[name]: value [name]: value,
})); }));
}; };
@ -42,18 +42,20 @@ function Login() {
login(data.token); login(data.token);
// Rediriger vers la page d'accueil après la connexion // Rediriger vers la page d'accueil après la connexion
navigate('/'); navigate("/");
} else { } else {
console.error('Token manquant dans la réponse'); console.error("Token manquant dans la réponse");
} }
} catch (error) { } catch (error) {
console.error('Erreur lors de la connexion', error); console.error("Erreur lors de la connexion", error);
} }
}; };
return ( return (
<div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 py-12 px-4 sm:px-6 lg:px-8"> <div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 py-12 px-4 sm:px-6 lg:px-8">
<div className="w-96 bg-white rounded-lg shadow-md p-6 mx-auto"> <div className="md:w-96 w-full bg-white rounded-lg shadow-md p-6 mx-auto">
<h2 className="text-2xl font-bold text-gray-800 mb-6 text-center">Connexion</h2> <h2 className="text-2xl font-bold text-gray-800 mb-6 text-center">
Connexion
</h2>
<form onSubmit={handleSubmit} className="space-y-4"> <form onSubmit={handleSubmit} className="space-y-4">
{/* Email */} {/* Email */}
<div> <div>
@ -110,7 +112,13 @@ function Login() {
<div className="mt-4 text-sm text-center"> <div className="mt-4 text-sm text-center">
<p> <p>
Vous n'avez pas de compte ? Vous n'avez pas de compte ?
<Link to="/signup" className="text-indigo-600 hover:text-indigo-700 font-medium"> Inscrivez-vous ici</Link> <Link
to="/signup"
className="text-indigo-600 hover:text-indigo-700 font-medium"
>
{" "}
Inscrivez-vous ici
</Link>
</p> </p>
</div> </div>
</form> </form>

View File

@ -12,7 +12,7 @@ function Signup() {
password: '', password: '',
confirmPassword: '' confirmPassword: ''
}); });
const navigate = useNavigate(); // Initialisation de useNavigate const navigate = useNavigate();
const handleChange = (e) => { const handleChange = (e) => {
const { name, value } = e.target; const { name, value } = e.target;
@ -56,7 +56,7 @@ function Signup() {
return ( return (
<div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 py-12 px-4 sm:px-6 lg:px-8"> <div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 py-12 px-4 sm:px-6 lg:px-8">
<div className="w-96 bg-white rounded-lg shadow-md p-6 mx-auto"> <div className="w-full md:w-96 bg-white rounded-lg shadow-md p-6 mx-auto">
<h2 className="text-2xl font-bold text-gray-800 mb-6 text-center">Inscription</h2> <h2 className="text-2xl font-bold text-gray-800 mb-6 text-center">Inscription</h2>
<form onSubmit={handleSubmit} className="space-y-4"> <form onSubmit={handleSubmit} className="space-y-4">
{/* Formulaire (Nom, Prénom, Sexe, Email, Mot de passe) */} {/* Formulaire (Nom, Prénom, Sexe, Email, Mot de passe) */}